Die Antwort von DougM und VRE macht einen fairen Punkt. MPLv2 und LGPLv3 sind mit statischen Ausnahmen in Bezug auf die Ereignisse, die den Copyleft auslösen würden, identisch. Ich denke jedoch, dass wir einen weiteren sehr wichtigen Unterschied zwischen LGPL und MPL vermissen. Wenn der Copyleft ausgelöst wird, gilt der Copyleft für:
- für MPL: zu genau den gleichen Dateien Ihrer ursprünglichen Bibliothek
- für LGPL: auf die "Arbeit, die auf der Bibliothek basiert" im Gegensatz zu der "Arbeit, die die Bibliothek verwendet". So kann die LGPL sein Copyleft möglicherweise auf neue Dateien ausweiten.
Edge-Case: Mithilfe von MPL können Benutzer ihre Verbesserungen nicht freigeben
MPL ist eine Copyleft-Lizenz auf Dateiebene. Wenn jemand es in ein größeres Projekt einbettet (statisch oder dynamisch) und eine Änderung an Ihrer Datei vornimmt, muss er nur die an dieser bestimmten Datei vorgenommenen Änderungen freigeben.
Wenn Sie Bedenken haben, die Integrität Ihrer Codebasis offen zu halten, gibt es Randfälle, in denen der Copyleft-Effekt von MPL möglicherweise nicht ausreicht.
Beispielsweise könnte jemand eine der Hauptdateien Ihres Projekts nehmen, "import my_private_new_file" hinzufügen und Ihre Hauptmethode ändern, indem er beispielsweise "my_private_new_file.newAwesomeFeature.run ()" hinzufügt .
Auf diese Weise kann er Ihrem Projekt neue Funktionen hinzufügen, während er nur die geänderte Hauptdatei freigibt und die tatsächliche Logik der neuen Funktion in "my_private_new_file" geschlossen hält .
Wenn Sie die Hauptdatei wieder in der Community haben, erhalten Sie lediglich die Information, dass Sie eine neue Funktion hinzugefügt haben. Sie können diese neue Funktion jedoch nicht offen einbinden -Bezogen auf das Problem, das Ihre Bibliothek zu lösen versucht.
Natürlich ist das ein Randfall und es ist ziemlich unwahrscheinlich, dass jemand dies tun möchte, aber es ist ein Risiko, das Sie bei der Verwendung von MPLv2 berücksichtigen müssen.
Die LGPL wurde geschrieben, um solche Verhaltensweisen zu verbieten. Sehen:
Ich zitiere die ursprüngliche LGPL-Lizenz:
Achten Sie genau auf den Unterschied zwischen einer "auf der Bibliothek basierenden Arbeit" und einer "Arbeit, die die Bibliothek verwendet". Ersterer enthält Code, der aus der Bibliothek stammt, während letzterer mit der Bibliothek kombiniert werden muss, um ausgeführt werden zu können.
Das Copyleft gilt nur für die "bibliotheksbasierte Arbeit". Was ist nun eine "bibliotheksbasierte Arbeit" in der Praxis? Es lässt Raum für Interpretationen. Das ist nicht nur eine nette Sache, denn es bedeutet, dass die Einhaltung Ihrer Lizenz komplizierter und daher unheimlich wird. Es könnte dazu führen, dass manche Leute Ihre Bibliothek einfach nicht benutzen.
In diesem Sinne ist LGPL restriktiver als MPL, schützt aber auch die Integrität des Projekts.
MPL erleichtert Benutzern aus der proprietären Welt das Reparieren und Verwenden Ihrer Bibliothek, während das Fix weiterhin freigegeben werden muss
Ein Vorteil für MPL besteht darin, dass ein Benutzer, der einen Fehler in Ihrer Bibliothek findet, diesen direkt in der Datei beheben kann, ohne seinen gesamten Code preisgeben zu müssen, sondern nur den Fehler zu beheben. Wenn er seine Arbeit an einen Kunden verteilt, kann er praktisch nur einen Link zu einem Zweig Ihres Projekts bereitstellen, der den Fix enthält, und er ist gut.
Durch die Verwendung von LGPL werden die Dinge komplizierter. Wenn jemand Ihr Projekt fragt, einen Fehler behebt und es statisch in seine proprietäre Software einbettet, muss er die "auf der Bibliothek basierende Arbeit" unter der LGPL an seine Benutzer verteilen. Dies ist eine eher obskure Vorstellung, insbesondere wenn die Bibliothek statisch eingebettet ist ... In dieser Hinsicht glaube ich, war es der ursprüngliche Grund, warum es in der ursprünglichen LGPL keine "statische" Ausnahme gibt. Es macht die Identifizierung der "Arbeit auf der Grundlage der Bibliothek" trivial: Es ist die dynamische Bibliothek, die Sie in Ihrer proprietären Software aufrufen.
Infolgedessen macht es MPL proprietären Anbietern interessanterweise leichter, Fixes zu verwenden UND an Ihre Bibliothek zu senden als LGPL.
Gleichzeitig haben proprietäre Anbieter in den meisten Fällen weder die Ressourcen noch die Zeit, in Ihre komplizierte Bibliothek einzutauchen, und würden dies höchstwahrscheinlich nicht selbst beheben. Sie würden lieber ein Problem in Ihrem GitHub-Repo eröffnen oder eine E-Mail in der Mailingliste senden und auf Ihre Korrektur warten.
In dieser Hinsicht erzwingt die LGPL mehr diese Art von Verhalten. Aber ist die Durchsetzung wirklich notwendig?
Fazit
Die Wahl zwischen LGPL und MPL ist eine schwierige Frage und hängt, wie bei Softwarelizenzen üblich, von Ihrem Ziel ab. Beide Lizenzen sind sehr ähnlich, aber gleichzeitig sehr unterschiedlich. Sie wurden für sehr unterschiedliche Ziele und Philosophien entwickelt.
Die LGPL wurde von der Free Software Foundation entwickelt, um die weit verbreitete Nutzung von Bibliotheken für freie Software in der proprietären Welt zu ermöglichen. Dabei wurde jedoch stets die Idee berücksichtigt, für freie Software zu werben und gegen proprietäre Software zu kämpfen. Es ist alles Teil einer Strategie gegenüber ihrer Ideologie. Siehe:
https://www.gnu.org/licenses/why-not-lgpl.html
MPL ist eine praktische Lizenz, die von Mozilla entwickelt wurde, um eine Art Share-Alike für die Originalbibliothek zu erzwingen und gleichzeitig die Leute zu ermutigen, proprietäre Software und Add-Ons (einschließlich Mozilla selbst) zu erstellen. Diese Vorgehensweise wird vom FSF autorisiert LGPL hält aber trotzdem für schädlich.
Im Wesentlichen wird MPLv2 von vielen als zulässige Lizenz angesehen, während LGPLv3, einschließlich mit statischen Ausnahmen, selten so bezeichnet wird.
BEARBEITEN
Ich habe vergessen, etwas Wichtiges zu erwähnen. LGPLv3 (mit oder ohne statische Ausnahme) verbietet die Aktivierung . Sie mögen denken, es ist ein "Detail", aber es ist tatsächlich nicht, abhängig von Ihrem Ziel. Interessieren Sie sich für Benutzer Freiheit? Dann ist es kein Detail. Interessiert es Sie, dass Ihre Bibliothek auf dem Apple-Gerät verwendet werden kann? VLC kümmert sich mehr um die Verwendung, deshalb haben sie sich für LGPLv2 entschieden, das keine solche Einschränkung enthält. Ebenso ist dies einer der Gründe, warum Linux weiterhin GPLv2 verwendet . MPLv2 unterliegt ebenfalls keiner Einschränkung hinsichtlich der Unterteilung, da es sich offensichtlich um eine Lizenz handelt, die unter Berücksichtigung der eher "praktischen" Open Source-Philosophie und nicht der FSF-Ideologie erstellt wurde.
Es könnte andere "kleinere" Dinge geben, die ich verpasst habe.