Odpowiedź DougM i AER ma rację. MPLv2 i LGPLv3 z wyjątkiem statycznym są takie same w odniesieniu do zdarzeń, które wyzwalałyby copyleft. Myślę jednak, że brakuje nam kolejnej bardzo ważnej różnicy między LGPL i MPL. Po uruchomieniu copyleft, copyleft dotyczy:
- dla MPL: do dokładnie takich samych plików w oryginalnej bibliotece
- w przypadku LGPL: do „pracy opartej na bibliotece” w przeciwieństwie do „pracy korzystającej z biblioteki”. Więc LGPL może potencjalnie rozszerzyć swoje copyleft na nowe pliki.
Edge-case: Korzystanie z MPL pozwala użytkownikom nie udostępniać swoich ulepszeń
MPL jest licencją typu copyleft na poziomie plików. Oznacza to, że jeśli ktoś osadzi go w większym projekcie (statycznie lub dynamicznie) i dokona zmiany w pliku, musi jedynie zwolnić zmianę dokonaną w tym konkretnym pliku.
Jeśli obawiasz się, aby integralność bazy kodu była otwarta, istnieją przypadki skrajne, w których ten efekt MPL copyleft może nie być wystarczający.
Na przykład ktoś może wziąć jeden z głównych plików projektu, dodać „import my_private_new_file” i zmodyfikować główną metodę, na przykład dodając „my_private_new_file.newAwesomeFeature.run ()” .
I w ten sposób mógł dodać nowe funkcje do twojego projektu, jednocześnie zwalniając jedynie zmodyfikowany plik główny i zachowując logikę nowej funkcji jako zamknięte źródło w „my_private_new_file” .
Ponowne przesłanie głównego pliku do społeczności daje po prostu informację, że „hej, dodałeś nową funkcję”, ale nie pozwala ci to włączyć tej nowej funkcji do otwartej ... Może to być denerwujące, jeśli nowa funkcja jest blisko związane z problemem, który stara się rozwiązać twoja biblioteka.
Oczywiście jest to przypadek skrajny i jest mało prawdopodobne, aby ktoś chciał to zrobić, ale jest to ryzyko, o którym należy pamiętać podczas korzystania z MPLv2.
LGPL jest napisane, aby zabraniać takich zachowań. Widzieć:
Cytuję oryginalną licencję LGPL:
Zwróć szczególną uwagę na różnicę między „dziełem opartym na bibliotece” a „dziełem korzystającym z biblioteki”. Pierwszy zawiera kod pochodzący z biblioteki, podczas gdy drugi musi być połączony z biblioteką, aby uruchomić.
Copyleft dotyczy tylko „pracy opartej na bibliotece”. Czym w praktyce jest „dzieło oparte na bibliotece”? Pozostawia przestrzeń do interpretacji. Co jest nie tylko miłe, ponieważ oznacza, że przestrzeganie licencji staje się bardziej skomplikowane, a przez to przerażające. Może to spowodować, że niektórzy ludzie po prostu nie będą korzystali z Twojej biblioteki.
W tym sensie LGPL jest bardziej restrykcyjne niż MPL, ale także bardziej chroni integralność projektu.
MPL ułatwia użytkownikom z zastrzeżonego świata naprawianie biblioteki i korzystanie z niej, przy jednoczesnym udostępnianiu poprawki
Zaletą MPL jest to, że jeśli użytkownik znajdzie błąd w bibliotece, może go naprawić bezpośrednio w pliku, bez konieczności rozdawania całego kodu, ale tylko dostarczając poprawki. Praktycznie rzecz biorąc, przekazując swoją pracę klientowi, może on po prostu podać link do widelca twojego projektu zawierającego poprawkę i jest dobry.
Dzięki zastosowaniu LGPL sprawy są bardziej skomplikowane. Jeśli ktoś rozwiąże twój projekt, naprawi błąd i osadzi go statycznie w swoim zastrzeżonym oprogramowaniu, musi rozpowszechnić wśród swoich użytkowników „pracę opartą na bibliotece” na licencji LGPL. Co jest dość niejasnym pojęciem, szczególnie gdy biblioteka jest osadzona statycznie ... Pod tym względem uważam, że był to pierwotny powód, dla którego nie ma czegoś takiego jak „statyczny” wyjątek w oryginalnej wersji LGPL. Ułatwia identyfikację „dzieła opartego na bibliotece”: jest to biblioteka dynamiczna, którą wywołujesz w swoim oprogramowaniu.
W rezultacie MPL sprawia, że interesujący dostawcy mogą łatwiej używać ORAZ wysłać poprawkę do Twojej biblioteki niż LGPL.
Jednocześnie większość sprzedawców będących własnością firmy nie ma zasobów ani czasu, aby zanurzyć się w skomplikowanej bibliotece i najprawdopodobniej nie naprawiliby tego samodzielnie. Wolą otworzyć problem w repozytorium GitHub lub wysłać wiadomość e-mail z listy mailingowej i poczekać na naprawę.
Pod tym względem LGPL wymusza bardziej tego rodzaju zachowanie. Ale czy egzekwowanie jest naprawdę potrzebne?
Wniosek
Wybór między LGPL i MPL jest trudnym pytaniem i, jak zwykle w przypadku licencji na oprogramowanie, zależy od celu. Obie licencje są bardzo podobne, ale jednocześnie bardzo różne. Zostały zaprojektowane z myślą o bardzo różnych celach i filozofii.
LGPL została opracowana przez Fundację Wolnego Oprogramowania, aby umożliwić powszechne korzystanie z bibliotek Wolnego Oprogramowania w świecie zastrzeżonym, ale zawsze mając na uwadze ideę promowania Wolnego Oprogramowania i walki z zastrzeżonym oprogramowaniem. Wszystko to jest częścią strategii wobec ich ideologii. Zobacz:
https://www.gnu.org/licenses/why-not-lgpl.html
MPL to praktyczna licencja opracowana przez Mozillę w celu wymuszania pewnego rodzaju udostępniania w stosunku do oryginalnej biblioteki, przy jednoczesnym zachęcaniu ludzi do tworzenia zastrzeżonego oprogramowania i dodatków (w tym samej Mozilli), co jest praktyką, którą FSF autoryzuje za pośrednictwem LGPL, ale nadal uważa się za szkodliwy.
W gruncie rzeczy MPLv2 jest uważany przez wielu za licencję poboczną, podczas gdy LGPLv3 z wyjątkiem statycznym jest rzadko nazywany w ten sposób.
EDYTOWAĆ
Zapomniałem wspomnieć o czymś ważnym. LGPLv3 (z wyjątkiem statycznym lub bez) zabrania tivoizacji . Możesz myśleć, że jest to „szczegół”, ale tak naprawdę nie jest, w zależności od twojego celu. Czy zależy Ci na wolności użytkowników? To nie jest szczegół. Czy zależy Ci na tym, aby Twoja biblioteka mogła być używana na urządzeniu Apple? VLC bardziej dba o to, aby go używać, dlatego zdecydowali się na LGPLv2, który nie zawiera takich ograniczeń. Podobnie jest to jeden z powodów, dla których Linux nadal korzysta z GPLv2 . MPLv2 również nie ma żadnych ograniczeń tiviozacji, oczywiście, ponieważ jest to licencja stworzona z myślą o bardziej „praktycznej” filozofii Open Source, a nie ideologii FSF.
Mogłyby istnieć inne „drobne” rzeczy, które tęskniłem.