Czy istnieje zmodyfikowana licencja LGPL, która umożliwia statyczne łączenie?

21

LGPL wymaga, aby, jeśli program korzysta z biblioteki LGPL, użytkownicy muszą mieć możliwość ponownego połączenia programu z inną wersją biblioteki:

...

d) Wykonaj jedną z następujących czynności:

0) Prześlij Minimalne odpowiednie źródło zgodnie z warunkami niniejszej Licencji i odpowiedniego kodu aplikacji w formie odpowiedniej dla i na warunkach, które pozwalają użytkownikowi zrekombinować lub ponownie połączyć Aplikację ze zmodyfikowaną wersją Wersji połączonej, aby utworzyć zmodyfikowana praca łączona, w sposób określony w sekcji 6 GNU GPL do przekazywania odpowiedniego źródła.

1) Użyj odpowiedniego mechanizmu biblioteki współdzielonej do łączenia się z biblioteką. Odpowiednim mechanizmem jest taki, który (a) używa w czasie wykonywania kopii Biblioteki już obecnej w systemie komputerowym użytkownika, i (b) działa poprawnie ze zmodyfikowaną wersją Biblioteki, która jest kompatybilna z interfejsem z Połączoną wersją.

...

Jednak w niektórych przypadkach może to powodować znaczne trudności. W szczególności programy Haskell są prawie zawsze kompilowane statycznie. Co więcej, kompilator dokonuje optymalizacji między modułami, więc nie jest możliwe wyjęcie części kodu i zastąpienie go innym. Tak więc bardzo trudno jest spełnić ten warunek. (Zobacz ten link na Wiki Haskell.)

Łączenie dynamiczne byłoby rozwiązaniem, ale w wielu przypadkach nie jest to możliwe. Na przykład:

  • Niektóre platformy mogą w ogóle nie mieć dynamicznego linkowania.
  • Niektóre języki nie mają możliwości dynamicznego łączenia. Lub nie można tworzyć modułów wieloplatformowych.
  • W niektórych przypadkach dynamiczne łączenie uniemożliwiłoby ważne optymalizacje. Chociaż powiedziałbym, że rzadko stanowi to poważny problem, w językach takich jak Haskell utrata wydajności może być znaczna.

Dlatego szukam standardowej licencji podobnej do LGPL, która nie wymagałaby możliwości ponownego połączenia (i rozumiem, że to usuwa trochę swobody przyznanej użytkownikom). Niektóre projekty używają własnych modyfikacji LGPL, na przykład wxWidgets . Wolałbym jednak użyć standardowej licencji, która jest nieco bardziej oficjalna, być może sprawdzona przez niektórych ekspertów prawnych i (L) zgodna z GPL. Czy jest coś takiego?

(Chciałbym również wiedzieć, czy są jakieś nieprzewidziane konsekwencje takiej modyfikacji LGPL.)

Petr Pudlák
źródło
Nie możesz dynamicznie łączyć zewnętrznych bibliotek w Haskell? To musi być cholernie niewygodne.
Robert Harvey,
2
Jeśli cały projekt to FOSS, może to nie być problemem. Wskaż je na źródła i pozwól im to rozwiązać! :-)
Peter Rowell,
2
Co odróżniałoby tę licencję od licencji innych niż copyleft?
2
@delnan Istnieje wiele innych rzeczy w LGPL, które są często pożądane. Na przykład, wymaga jakiejkolwiek modyfikacji, aby być (L) GPL, lub zabrania tivoizacji .
Petr Pudlák,
Licencja wxWindows jest tak oficjalna, jak to tylko możliwe, biorąc pod uwagę, że została zatwierdzona przez OSI .
Joachim Sauer,

Odpowiedzi:

12

wxwidgets jest licencjonowany na zasadzie = LGPL + statyczne łączenie

... zasadniczo L-GPL (Library General Public Licence Library), z wyjątkiem tego, że dzieła pochodne w formie binarnej mogą być rozpowszechniane na własnych warunkach użytkownika. Jest to rozwiązanie, które zadowoli zarówno tych, którzy chcą produkować oprogramowanie GPL przy użyciu wxWidgets, jak i tych, którzy produkują oprogramowanie zastrzeżone.

wxWidgets jest certyfikowanym uczestnikiem oprogramowania Open Source. Dyskusje, które doprowadziły do ​​tej decyzji, obejmują ludzi z Abisource , Roberta Roeblinga, Juliana Smarta, Markusa Flecka, Karstena Balluedera oraz porady Richarda Stallmana. Richard potwierdził, że nowa licencja jest kompatybilna z aplikacjami GPL. Nie ma jednak znaczących ograniczeń dotyczących zastrzeżonych aplikacji.

Licencja wxWindows została zatwierdzona przez Open Source Initiative , a licencję można znaleźć na ich stronie tutaj ...

Martin Beckett
źródło
0mq jest również licencjonowany na licencji LGPL z wyraźnym wyjątkiem statycznego łączenia.
Trevor Powell,
4

IANAL, ale doprowadzono mnie do przekonania, że ​​jednym rozwiązaniem jest zapewnienie plików obiektowych dla części innych niż LGPL. W ten sposób użytkownik może ponownie połączyć program, dzięki czemu może swobodnie zmieniać część LGPL, spełniając wymagania LGPL.

Innymi słowy, musisz mieć pakiet źródłowy ze źródłami LGPL i skompilowanymi plikami obiektowymi o kodzie innym niż LGPL. Oczywiście musisz dostarczyć pliki obiektowe dla każdej innej architektury, dla której wypuszczasz pliki binarne, ale nie sądzę, żeby to był duży problem.

Z punktu widzenia programowania najprostszym rozwiązaniem może być po prostu zbudowanie przez system kompilacji pakietu źródłowego w tym samym czasie podczas budowania pliku binarnego do dystrybucji.

hyde
źródło
czy masz jakiś prawdziwy scenariusz, w którym zostało to zrobione?
knocte
3

Znalazłem jeden z licencją Google: OpenScales

OpenScales jest wydany w wersji 3 GNU Lesser Public License (LGPL, dostępny tutaj ), z wyjątkiem związanym z wyjątkiem statycznego linkowania (patrz poniżej) ...

Oprócz tekstu licencji LGPL wyjątek od warunków LGPL dotyczy OpenScales:

Jako specjalny wyjątek od GNU Lesser General Public License w wersji 3, można przekazać osobie trzeciej plik wykonywalny z Nomenklatury Work że linki, statycznie lub dynamicznie, porcje tej biblioteki w pliku wykonywalnego, Przenośnik Minimal odpowiednie źródło, ale bez potrzeby przekazywania odpowiedniego kodu aplikacji zgodnie z sekcją 4d0 mniejszej ogólnej licencji publicznej GNU, o ile korzystasz z niezmodyfikowanej, publicznie rozpowszechnianej wersji biblioteki. Ten wyjątek nie unieważnia żadnych innych powodów, dla których plik wykonywalny może być objęty mniejszą ogólną licencją publiczną GNU lub ogólną licencją publiczną GNU.

Nie jest to jednak standard i nie wiem, czy taki istnieje.

Minthos
źródło
1

Jak w dalszym ciągu gwarantowałbyś użytkownikom swobodę? Uważam, że „poprawną” odpowiedzią jest statyczne połączenie podkładki dystansowej, która dynamicznie ładuje bibliotekę.

kamieniste
źródło
Tak, to najlepsze rozwiązanie. Ale w niektórych przypadkach dynamiczne łączenie nie jest możliwe. Niektóre języki nie mają takiej możliwości. Lub niektóre platformy nie mają takiej możliwości.
Petr Pudlák 12.12.12
W rzeczywistości linkery robią dokładnie to, gdy dynamicznie łączysz się z biblioteką.
Calmarius