Was bedeutet "GPL mit Klassenpfad-Ausnahme" in der Praxis?

70

Oracle scheint den gesamten Java-bezogenen Open-Source-Code unter der GPL mit einer Klassenpfad-Ausnahme zu lizenzieren . Soweit ich weiß, scheint dies die Kombination dieser Bibliotheken mit Ihrem eigenen Code zu Produkten zu ermöglichen, die nicht von der GPL abgedeckt werden müssen.

  1. Wie funktioniert das?
  2. Was sind Beispiele dafür, wie ich diese Klassen verwenden kann und was nicht?
  3. Warum wurde diese neue Lizenz im Gegensatz zur LGPL verwendet, die anscheinend fast das Gleiche erlaubt, aber besser etabliert und verstanden ist?
  4. Was sind die Unterschiede zur LGPL?
Thilo
quelle
1
Ich habe dies auf Wikipedia gefunden: en.wikipedia.org/wiki/…, was die Dinge ein wenig aufklärt, aber ich verstehe immer noch nicht, warum jemand dies über LGPL verwenden würde. Gute Frage!
1
Diese Wikipedia-Seiten erwähnen keine Dinge wie "Benutzer müssen in der Lage sein, die Bibliothek mit seiner eigenen Version auszutauschen", die Bestimmungen der LGPL sind. Vielleicht erfordert GPL + Exception das nicht?
Thilo
1
Lese auf, dass der Fall zu sein scheint: „LGPL mehr Anforderungen an die Verknüpfungs Ausnahme formuliert: Sie Änderung der Teile der Bibliothek Du Engineering verwenden und umgekehrt ermöglichen muss (Ihr Programm und die Bibliothek) für das Debuggen von solchen Modifikationen“
Thilo
Was darf ich in diesem Fall unter dieser Lizenz nicht tun? Ich kann lizenzierten Code (Pick + Choose-Klassen) in meine eigene Codebasis kopieren (natürlich unverändert). Kann ich automatisierte Build-Tools verwenden, um die resultierende Binärdatei zu ändern? Obfuscators, Minimizer, Dead-Code-Stripper?
Thilo
Sie können Code davon kopieren und NUR in Ihrem eigenen Code verwenden, wenn Ihr eigener Code auch unter der Lizenz "GPL with classpath exception" veröffentlicht ist . Wenn Ihr Code proprietär ist oder unter den meisten anderen Open-Source-Lizenzen wie MIT steht, dürfen Sie ihn nicht verwenden.
Abhi Beckert

Antworten:

69

Zunächst einmal bin ich kein Anwalt. Aber ich habe viele Lizenzen studiert und Probleme in Bezug auf sie verstanden.

Zweitens weiß ich, dass dies eine alte Frage ist, aber ich denke, es ist immer noch ein Punkt der Verwirrung und Sorge. Wenn es keinen Anlass zur Sorge gibt, sollte es sein. Die Wahl einer Lizenz ist eine große Sache, die Sie nicht ohne Weiteres ändern können, insbesondere wenn mehrere Mitwirkende beteiligt sind.

(L) GPL wurde leider unter Berücksichtigung von C / C ++ geschrieben. Es spricht von "Source Code", "Object Code", "Dynamic Linking", "Static Linking", "Compilers" und "Object Code Interpreter". Um dies für andere Sprachen zu übersetzen, die nicht denselben Kompilierungstechniken folgen (wie Javas Bytecode, Pythons Just-in-Time-Kompilierung oder die Interpretation von Javascript), sind einige Vermutungen und Annahmen erforderlich. Wenn Sie über das Gesetz sprechen - dh über mögliche Gerichtsverfahren, in denen sich zwei Parteien streiten -, ist es eine SCHLECHTE Sache, keine eindeutige Unterscheidung zu treffen.

Ein Standard-GPL-lizenzierter Code ist in seiner Absicht ziemlich einfach. Von jedem, der diesen Code verwendet, wird erwartet, dass er seinen Code an alle Benutzer weitergibt, wenn diese ihn vertreiben oder verkaufen. Das ist der GPL-Virus, den Richard Stallman erstellen wollte und der eindeutig und sauber war.

Die LGPL war ursprünglich ein Versuch, eine "Bibliothek" zuzulassen, die nicht viral wäre. Sie wollten jedoch, dass der Endbenutzer die Bibliothek selbstständig austauschen kann, daher die Unterscheidung zwischen "statischer" und "dynamischer" Verknüpfung - der Benutzer könnte zu einer anderen dynamisch verknüpften Bibliothek wechseln, sodass dies nicht erforderlich ist als GPL lizenziert sein. Für eine statische Verknüpfung musste der Benutzer GPL sein. Die Lizenz spricht tatsächlich von "Header-Dateien", die in C / C ++ klar sind, aber offensichtlich nicht klar sind, wenn Sie sich in der Java-, Python-, Javascript- usw. Welt befinden. Also ist das L ("Bibliothek") von LGPL-Sachen bestenfalls matschig.

Das bringt die Sache auf den Punkt. Alles, was unklar ist, ist in der Welt der Gesetze SCHLECHT. Wenn ich etwas mit GPL- oder LGPL-Komponenten bauen möchte, möchte ich sicher sein, wie meine rechtliche Stellung in Zukunft ist, wenn ich vor Gericht lande. Aber bis heute bin ich mir nicht sicher, weil es wirklich keine guten Gerichtsverfahren gibt, die einen Präzedenzfall schaffen, sondern nur intellektuelle Argumente in solchen Foren.

Hier ist die Klassenpfad-Ausnahme von unschätzbarem Wert. Es stellt klar , dass der Code unter der Lizenz ist (L) GPL, aber alles , was mit diesem Code können folgen , was Lizenz sie möchten. Kein Wenn und Aber. Wenn Sie den Kerncode ändern (z. B. um Fehler zu beheben), müssen Sie diese Änderungen dennoch als Teil der GPL freigeben. Die Verwendung von infiziert Sie jedoch NICHT.

Aus geschäftlicher Sicht verstehe ich, warum manche GPL-Code nicht mit einem 10-Fuß-Pol anfassen wollen. Die rechtliche Stellung ist unklar und das Geschäft könnte ein Jahrzehnt später ins Wanken geraten, wenn endlich ein Präzedenzfall geschaffen wird. Oder sie bleiben jahrelang vor Gericht und kämpfen um den rechtlichen Präzedenzfall. Unabhängig davon wollen sie einfach nicht die Kosten dieses Kampfes riskieren. Durch Hinzufügen der Classpath-Ausnahmeklausel werden die rechtlichen Fragen beseitigt und (schwerwiegende) potenzielle Gerichtsverfahren vermieden.

Für mich ist die Klassenpfad-Ausnahme eine ganz andere als die LGPL. Dies ist eine rechtlich saubere Methode, um eine klare Linie zu ziehen, die die Verwendung von GPL- oder LGPL-Quellcode oder -Bibliotheken ohne GPL ermöglicht.

Steve
quelle
21
IANAL, aber ich bin einer der Schöpfer der Klassenpfad-Ausnahme, und das ist die richtige Antwort. Die Ausnahme wurde erstellt, um AOT-kompilierte eingebettete Anwendungsfälle zu unterstützen, bei denen Entwickler Binärdateien statisch verknüpfen (in unserem Fall mit gcj). Wir brauchten so etwas wie die libgcc-Lizenz, also habe ich die erste Version der Classpath Exception darauf basierend geschrieben. Es ist gereift, aber der Geist ist der gleiche.
Anthony Green
6

GPL mit Klassenpfad-Ausnahme verhält sich für die meisten Verwendungszwecke wie LGPL.

Dies bedeutet, dass Sie die Quelle für die Bibliothek auf Anfrage versenden können müssen. Dies bedeutet nicht, dass Sie in der Lage sein müssen, Ihre eigene Quelle zu versenden. Dies bedeutet, dass Sie keine Möglichkeit zum Ersetzen der Bibliothek bereitstellen müssen, wenn Sie eine statische Verknüpfung herstellen. Sie können jedoch keinen öffentlichen Schlüssel verwenden, um das Ersetzen zu verhindern.

Joshua
quelle
-3

Es sieht so aus, als ob die Lizenzen im Stil "GPL mit Klassenpfad-Ausnahme" älter als die LGPL sein könnten.

Vielleicht ist der einzige Grund, warum es immer noch jemand benutzt, der GPL-Code kann nicht ohne schriftliche Genehmigung von jedem, der jemals Code beigesteuert hat, auf LGPL-Code migriert werden.

Abhi Beckert
quelle
7
Die erste Version der LGPL wurde 1991 veröffentlicht, also vor Java. en.wikipedia.org/wiki/LGPL
Thilo
Es ist älter als Java, aber älter als der gesamte Code in Java? Möglicherweise enthielt die erste Java-Version Code aus einem älteren "GPL with classpath" -Projekt.