Co w praktyce oznacza „GPL z wyjątkiem ścieżki klas”?

69

Wydaje się, że Oracle licencjonuje cały związany z Javą kod open source na licencji GPL z wyjątkiem ścieżki klas . Z tego, co rozumiem, wydaje się, że pozwala to łączyć biblioteki z własnym kodem w produkty, które nie muszą być objęte GPL.

  1. Jak to działa?
  2. Jakie są przykłady tego, jak mogę i nie mogę korzystać z tych klas?
  3. Dlaczego zastosowano tę nową licencję w przeciwieństwie do licencji LGPL, która wydaje się pozwalać na prawie takie same rzeczy, ale jest lepiej ustalona i zrozumiana?
  4. Jakie są różnice w stosunku do LGPL?
Thilo
źródło
1
Znalazłem to na wikipedii: en.wikipedia.org/wiki/…, co trochę to wyjaśnia, ale nadal nie rozumiem, dlaczego ktoś używałby tego na LGPL. Dobre pytanie!
1
Że strony Wikipedii nie wspominają o takich rzeczach jak „użytkownik musi mieć możliwość wymiany biblioteki z własną wersją”, które są postanowieniami LGPL. Więc może wyjątek GPL + tego nie wymaga?
Thilo,
1
Czytając dalej, wydaje się, że tak jest: „LGPL formułuje więcej wymagań dotyczących wyjątku linkowania: musisz zezwolić na modyfikację części używanej biblioteki i inżynierii wstecznej (swojego programu i biblioteki) w celu debugowania takich modyfikacji”
Thilo,
W takim przypadku czego nie wolno mi robić na podstawie tej licencji? Czy mogę skopiować licencjonowany kod (wybrać + wybrać klasy) do własnej bazy kodu (oczywiście niemodyfikowanej)? Czy mogę używać automatycznych narzędzi do budowania wynikowego pliku binarnego? Obfuskatory, minimalizatory, produkty do usuwania martwych kodów?
Thilo,
Możesz skopiować kod z tego i używać go we własnym kodzie TYLKO, jeśli twój własny kod został również wydany na podstawie licencji „GPL z wyjątkiem ścieżki klasy” . Jeśli Twój kod jest zastrzeżony lub jest objęty większością innych licencji typu open source, takich jak MIT, nie możesz go używać.
Abhi Beckert

Odpowiedzi:

69

Po pierwsze, nie jestem prawnikiem. Ale przestudiowałem wiele licencji i rozumiem związane z nimi problemy.

Po drugie, wiem, że to stare pytanie, ale myślę, że wciąż jest to zamieszanie i troska. Jeśli nie jest to problem, powinien być. Wybór licencji to wielka sprawa, której nie można w prosty sposób zmienić na późniejszym etapie, szczególnie jeśli w grę wchodzi wielu współpracowników.

(L) GPL zostało napisane z myślą o C / C ++, niestety. Mówi o „kodzie źródłowym”, „kodzie obiektowym”, „łączeniu dynamicznym”, „łączeniu statycznym”, „kompilatorach” i „tłumaczu kodów obiektowych”. Przetłumaczenie tego na inne języki, które nie stosują tych samych technik kompilacji (takich jak kod bajtowy Javy, kompilacja w czasie Pythona lub interpretowana natura Javascript) wymaga pewnych domysłów i założeń. Kiedy mówisz o prawie - tj. Myślisz o ewentualnych sprawach sądowych, w których spierają się dwie strony - brak wyraźnego rozróżnienia to ZŁA RZECZ.

Standardowy kawałek kodu na licencji GPL jest dość prosty. Oczekuje się, że każdy, kto użyje tego kodu, udostępni swój kod wszystkim użytkownikom podczas jego dystrybucji lub sprzedaży. To jest wirus GPL, który Richard Stallman chciał stworzyć i zrobił to jasno i czysto.

LGPL była pierwotnie próbą dopuszczenia „biblioteki”, która nie byłaby wirusowa. Ale nadal chcieli, aby użytkownik końcowy mógł samodzielnie zastąpić bibliotekę, stąd różnica między łączeniem „statycznym” i „dynamicznym” - użytkownik mógł zamienić się na inną bibliotekę dynamicznie połączoną, więc nie musiałaby mieć licencję GPL. Link statyczny wymagał od użytkownika posiadania licencji GPL. Licencja faktycznie mówi o „plikach nagłówkowych”, które są jasne w C / C ++, ale oczywiście nie są jasne, gdy jesteś w świecie Java, Python, Javascript itp. Więc L („biblioteka”) rzeczy LGPL jest co najwyżej zabłocona.

To prowadzi do sedna sprawy. Wszystko niejasne jest ZŁE w świecie praw. Jeśli zastanawiam się nad budowaniem czegoś przy użyciu komponentu GPL lub LGPL, chcę mieć pewność, jaka będzie moja sytuacja prawna w przyszłości, jeśli wyląduję w sądzie. Ale na dzień dzisiejszy nie jestem pewien, ponieważ tak naprawdę nie było dobrych spraw sądowych ustanawiających precedens prawny, tylko intelektualne argumenty na takich forach.

Tutaj wyjątek Classpath jest nieoceniony. Wyraźnie stwierdza, że ​​kodem licencji jest (L) GPL, ale wszystko, co korzysta z tego kodu, może być zgodne z dowolną licencją. Żadnych jeśli, i albo ale. Jeśli zmienisz kod podstawowy (np. Naprawiając błędy), nadal musisz opublikować te zmiany w ramach GPL. Ale używanie NIE zaraża cię.

Z perspektywy biznesowej rozumiem, dlaczego niektórzy nie chcą dotykać kodu GPL 10-biegunowym biegunem. Sytuacja prawna jest niejasna, a firma może zostać ukąszona dekadą w dół, gdy ostatecznie ustanowi się precedens prawny. Lub mogą utknąć w sądzie przez lata walcząc o ustanowienie prawnego precedensu. Niezależnie od tego, po prostu nie chcą ryzykować kosztu tej bitwy. Dodanie klauzuli wyjątku Classpath eliminuje pytania prawne i pozwala uniknąć (poważnych) potencjalnych spraw sądowych.

Dla mnie wyjątek Classpath różni się znacznie od LGPL. Jest to prawnie czysty sposób na narysowanie jasnej linii, umożliwiający korzystanie z kodu źródłowego lub bibliotek GPL lub LGPL bez licencji GPL.

Steve
źródło
20
IANAL, ale jestem jednym z twórców wyjątku Classpath i to jest właściwa odpowiedź. Wyjątek został stworzony w celu obsługi osadzonych przypadków użycia skompilowanych przez AOT, w których programiści statycznie łączą pliki binarne (w naszym przypadku z gcj). Potrzebowaliśmy czegoś takiego jak licencja libgcc, więc na tej podstawie napisałem pierwszą wersję wyjątku Classpath. Od tego czasu dojrzał, ale duch jest taki sam.
Anthony Green,
6

GPL z wyjątkiem ścieżki klasy w większości przypadków zachowuje się jak LGPL.

Oznacza to, że musisz mieć możliwość dostarczenia źródła dla biblioteki na żądanie. Nie oznacza to, że musisz mieć możliwość wysyłki własnego źródła. Zdarza się, że nie musisz wysyłać sposobu zastąpienia biblioteki, jeśli łączysz się z nią statycznie, ale nie możesz użyć klucza publicznego, aby zapobiec zamianie.

Jozuego
źródło
-3

Wygląda na to, że licencje w stylu „GPL z wyjątkiem klasy” mogą być starsze niż LGPL.

Być może jedynym powodem, dla którego ktokolwiek nadal go używa, jest to, że kodu GPL nie można migrować do kodu LGPL bez pisemnej zgody wszystkich, którzy kiedykolwiek wnieśli kod.

Abhi Beckert
źródło
7
Pierwsza wersja LGPL została wydana w 1991 roku, więc poprzedza Javę. en.wikipedia.org/wiki/LGPL
Thilo
Jest wcześniejsze niż Java, ale czy poprzedza cały kod w Javie? Być może pierwsze wydanie Java zawierało kod z jakiegoś starszego projektu „GPL with classpath”.