Gibt es eine Lücke in der GPL, durch die proprietäre Software mit GPL-Bibliotheken verknüpft werden kann?

15

Lassen Sie uns ein hypothetisches Szenario untersuchen:

Firma X schreibt ein proprietäres Programm (A), das dynamisch mit einer proprietären Bibliothek (B) verknüpft wird. Unternehmen Y möchte eine Ersatzbibliothek (C) verwenden, die unter der GPL lizenziert ist, und schreibt daher eine Wrapperbibliothek (D), die dynamisch mit A und C verknüpft und die von A verwendeten API-Aufrufe in die von C verwendeten API-Aufrufe übersetzt.

Da D für C vorgesehen ist und die API-Aufrufe von C verwendet, ist es eine abgeleitete Arbeit von C und muss daher unter den Bedingungen der GPL * verteilt werden. Infolgedessen muss die kombinierte Arbeit von A und D auch unter den Bedingungen der GPL verteilt werden, was unmöglich ist, da Firma Y nicht den Quellcode für A besitzt. Das heißt, solange Firma Y D selbst verteilt , Es gibt kein Problem. Unabhängig von den Aktionen von Unternehmen Y verstößt Unternehmen X jedoch nicht gegen die GPL, indem es A verteilt, auch nicht ohne B. Die bloße Existenz von D bedeutet nicht, dass A plötzlich ein Derivat von C (bis D) ist, das unter dem lizenziert werden muss GPL auch.

Dies ist die Lücke: Es gibt nichts, was Unternehmen X daran hindert, eine eigene Version von D zu schreiben, diese getrennt von A zu verteilen und den Endbenutzern anzuweisen, D anstelle von B zu verwenden, wenn A ausgeführt wird. Es scheint, dass ein Unternehmen dazu in der Lage ist Entwerfen eines proprietären Programms zur Verwendung einer GPL-Bibliothek ohne Verletzung der GPL, sofern ein Wrapper-Modul verwendet wird, um das proprietäre Programm von der GPL-Bibliothek zu isolieren, und dieses Modul separat verteilt wird.

Bin ich richtig in meiner Argumentation? Ist das eine echte Lücke in der GPL?

* D ist ebenfalls ein abgeleitetes Werk von A, aber für die Zwecke dieses Szenarios hat Unternehmen X die Erstellung von D ausdrücklich genehmigt und die Lizenzierung unter der GPL zugelassen.

Michael Kourlas
quelle
1
Kurze Antwort: nein.
Whatsisname
2
Ich bin alles andere als ein Anwalt, aber es ist mein Verständnis, dass eine dynamische Verknüpfung mit einer Bibliothek Ihren Code nicht zu einer abgeleiteten Arbeit macht. Andernfalls wäre es unmöglich, irgendetwas unter einer BSD-Lizenz zu verbreiten, das dynamisch mit etwas verknüpft wird, das möglicherweise unter einer GPL-Lizenz steht. Statisches Verknüpfen ist jedoch eine andere Geschichte, und natürlich können Sie die dynamisch verknüpfte Bibliothek selbst nur unter der GPL weitergeben.
tdammers
4
@tdammers: Eine dynamische AFAIK-Verknüpfung macht Code zu einer abgeleiteten Arbeit, und Sie haben Recht , es ist wahrscheinlich nicht möglich, Software unter BSD-Lizenz zu verbreiten, wenn sie GPL-Bibliotheken verwendet. Aus diesem Grund bieten viele Open-Source-Bibliotheksautoren ihre Bibliotheken unter LGPL anstelle von GPL an.
Doc Brown
2
@tdammers: In diesem Szenario verfolge ich Stallmans Ansatz für die Verknüpfung: Sowohl die dynamische als auch die statische Verknüpfung verstoßen gegen die GPL.
Michael Kourlas
3
@mouviciel Es liegen Gerichtsentscheidungen vor, die darauf hinweisen, dass die Replikation einer API zum Zwecke der Interoperabilität legal ist. Ich glaube, dass dies von hochrangigen Gerichten sowohl in den USA als auch in der EU unabhängig festgestellt wurde, sodass der rechtliche Status ziemlich solide ist (es sei denn, jemand ändert aktiv das Gesetz).
Donal Fellows

Antworten:

10

IANAL, aber hier ist meine Meinung dazu, was innerhalb der Grenzen der GPL erlaubt ist:

  • das kombinierte Werk "A - B" öffentlich zu verbreiten: gut, kann unter jeder proprietären Lizenz erfolgen

  • Erstellen Sie eine Wrapper-Bibliothek D für C von Y: Gut, dies bedeutet nicht, dass A unter GPL gestellt werden muss

  • Verwenden Sie das kombinierte Produkt "A - D - C" intern von Y: Auch in Ordnung, GPL erfordert kein Open Source A, solange die Kombination nicht an die Öffentlichkeit verteilt wird

  • Verteilen Sie das kombinierte Werk "A - D - C" in der Öffentlichkeit: Dies setzt voraus, dass A Open Source ist und unter die GPL gestellt wird (und es spielt keine Rolle, ob X oder Y diese Kombination verteilt haben; darüber hinaus, ob Y dies tun möchte Dazu benötigen sie natürlich eine Vertriebslizenz für A von X)

Die interessante Frage ist nun: Kann D & C separat als Open Source unter GPL vertrieben werden, A & B (oder nur A ohne B) kann unter einer proprietären Lizenz vertrieben werden, und der Endbenutzer ersetzt B durch D & C selbst?

Hier wird die letzte Änderung an "AB", die A von libs D & C abhängig macht, vom Endbenutzer vorgenommen - nach der Verteilung . Man könnte also argumentieren, dass die endgültige Änderung nur intern vom Endbenutzer vorgenommen wird. Und es scheint, dass dies tatsächlich möglich ist, ohne die GPL zu verletzen - und Sie erhalten eine funktionierende Kombination aus "AC & D", wobei A unter proprietärer Lizenz und C & D unter GPL steht.

Natürlich kann ein Anwalt oder ein Richter eine andere Meinung dazu haben. Um eine endgültige Antwort zu erhalten, müssen Sie warten, bis jemand es ausprobiert und ein zweiter ihn verklagt.

Ich denke, für die meisten Systeme wird es schwierig sein, eine solche Konstellation zu erstellen, ohne "A" von Anfang an so zu entwerfen, dass sie nahtlos mit B oder C zusammenarbeitet. In diesem Fall könnte der Verdacht auf A aufkommen wurde irgendwie von C. abgeleitet

EDIT: Nach einer Weile kam mir eine ähnliche Situation in den Sinn: das Schreiben und Verteilen von GPL-lizenzierten Plugins für Closed-Source-Anwendungen. Nehmen wir zum Beispiel Photoshop. Ich glaube nicht, dass jemand ernsthaft versuchen würde, Adobe für Open-Source-Photoshop durchzusetzen, nur weil es einige GPL-Plugins von Drittanbietern gibt. Hier wird nicht einmal eine "wrapper lib" benötigt, da es eine genau definierte Schnittstelle gibt. Würde sich die Situation jedoch ändern, wenn Photoshop einige seiner zentralen Funktionen von einem Plug-in eines GPL-Drittanbieters übernehmen würde? Ich denke, in einem solchen Fall kann es sehr schwierig werden, zu entscheiden, wo die Grenze gezogen werden soll. An diesem Punkt ist das Closed-Source-Produkt eine Arbeit, die auf der GPL-Bibliothek "basiert".

EDIT2: Es sind Doppellizenz-Bibliotheken verfügbar , z. B. mit einer GPL-Lizenz für nichtkommerzielle Zwecke und einer proprietären Lizenz für kommerzielle Zwecke wie diese. Ihre "Lücke" würde also bedeuten, ein auf einer solchen Bibliothek basierendes Produkt zu entwickeln (unter Verwendung der kommerziellen Version, damit die GPL nicht für Ihr Produkt gilt), Ihr Produkt als geschlossene Quelle ohne die Bibliothek an die Öffentlichkeit zu liefern und die Endbenutzer zuzulassen. Der Benutzer erhält und installiert die GPLed-Version selbst. In einem solchen Fall hat der Anbieter der Bibliothek eine gute Chance, Sie erfolgreich wegen Lizenzverletzung zu verklagen (wenn Sie nicht für seine Bibliothek bezahlen, natürlich). Lohnt sich der Aufwand? Wahrscheinlich nicht. Insbesondere in dem Beispiel, auf das ich verlinkt habe, müssten Sie auch die lib kaufen, da die Preisgestaltung nicht davon abhängt, wie oft Sie Ihr Produkt verkaufen, sondern nur davon, wie viele Entwickler die lib während der Entwicklung verwenden.

Aufgrund dieser rechtlichen Risiken würde ich, wenn ich Open-Source-Bibliotheken in einem Closed-Source-Produkt verwenden möchte, GPL-Bibliotheken nach Möglichkeit vermeiden und nicht versuchen, diese "Lücke" auszunutzen. LGPL oder GPL mit Verbindungsausnahme ist viel sicherer oder jede Art von nicht-viraler OS-Lizenz.

Doc Brown
quelle
2
Mein Bauchgefühl sagt mir, dass Anwälte härter stochern werden, wenn das Unternehmen, das das macht, Aauch Werbung für die A - C&DCombo macht.
Bart van Ingen Schenau
1
@BartvanIngenSchenau: da stimme ich zu. Aber ich kann mir ein anderes Szenario vorstellen: X verteilt AB und Y verteilt (und bewirbt) nur ein "Add-On" C & D mit einem Installationsprogramm, das B im Installationsordner von AB ersetzt?
Doc Brown
Ich kann mir auch dieses alternative Szenario vorstellen, und es wird den Anwälten viel schwerer fallen, ein Loch in die Frage zu werfen, ob Aund C&Dvon welchen juristischen Personen sie stammen.
Bart van Ingen Schenau
1
@ DocBrown: Ist es überhaupt wichtig, dass es eine gleichwertige proprietäre Bibliothek B gibt? Konnte Unternehmen X A nicht unter der Annahme verkaufen, dass der Endbenutzer eine funktionierende Bibliothek finden müsste, um es zu verwenden, und sie dann "bequem" mit D versorgen?
Michael Kourlas
1
@MichaelKourlas: Die Existenz von lib B würde es dem Verkäufer von C viel schwerer machen, X zu verklagen, da es für X einfacher ist, zu beweisen, dass A kein "abgeleitetes Werk" von C. ist.
Doc Brown
3

Ein praktisches Beispiel sind proprietäre Grafiktreiber für Linux, die der Endbenutzer selbst installieren muss. Wichtig für den Schöpfer des proprietären Fahrers: Wenn der Endbenutzer das kombinierte Werk verteilt, entsteht eine rechtliche Verpflichtung für den Endbenutzer (die er möglicherweise nicht erfüllen kann), jedoch nicht für den Schöpfer des Fahrers.

Eine andere Antwort lautet: "Da das Programm von der Bibliothek abhängt, ist es immer noch eine abgeleitete Arbeit." - Wenn das Programm jedoch nicht funktioniert, weil die Bibliothek nicht vorhanden ist, ist es keine abgeleitete Arbeit.

Wenn Sie sich jedoch letztendlich auf "Lücken" verlassen, sollten Sie berücksichtigen, dass Ihr Ansatz möglicherweise nicht der richtige ist.

gnasher729
quelle
Ob der Endbenutzer die GPL-Komponente installieren muss oder nicht, ist unerheblich. Proprietäre Kernelmodule, die GPL-Wrapper enthalten, verteilen die GPL-Komponente normalerweise nur im Quellcode und müssen vom Benutzer kompiliert werden. Die DKMS automatisiert dies. Dies nutzt eine andere "Lücke" der GPL aus, dh, Sie können mit einer lokalen Kopie eines GPL-Programms alles Mögliche tun, solange Sie es nicht in Form von Objektcode weitergeben. Da Endbenutzer den Linux-Kernel in der Regel nicht zusammen mit proprietären Kernelmodulen und kompilierten GPL-Wrappern weitergeben, sind sie im Allgemeinen sicher.
Clement Cherlin
1

Linking definiert eine Ableitung durch die GPL. Für diese spezielle Situation wurde die LGPL entwickelt: Sie möchten die Bibliothek als GPL freigeben, die Verknüpfung jedoch als explizites Limit der angewendeten Lizenz definieren, oder Sie möchten eine Verknüpfung mit einem bestimmten GPL-Code herstellen, benötigen jedoch Ihren eigenen Code Arbeit unter einer Nicht-GPL-Lizenz selbst veröffentlicht werden.

In dem Fall, in dem der Endbenutzer die Verknüpfung durchführen wird (eigenen Code aus Nicht-GPL-Quellen erstellen, der möglicherweise mit einer GPL-Bibliothek verknüpft ist), hat der Endbenutzer keine effektive GPL-Version des Endprodukts erstellt. Es ist ihm nicht gestattet, die Lizenz des Nicht-GPL-Teils des Projekts zu ändern, da er nicht der Eigentümer des Projekts ist. Dies schließt im Allgemeinen eine Verbreitung durch den Endverbraucher in irgendeiner Form aus, würde jedoch die Verwendung nicht verbieten.

Das heißt, wenn ein Projekt erfordert, dass es aus dem Quellcode erstellt und nur auf diese Weise verteilt wird, spielt es keine Rolle, unter welcher Lizenz sich die verknüpfte Bibliothek befindet, da dies vollständig außerhalb der Hände der Nicht-GPL-Entwickler liegt. Wie können Sie also wissen, dass Ihre reine Quelldistribution auf gcc gegen glibc VS basiert, das auf einem IBM-Compiler gegen dessen libc erstellt wurde, sofern Sie dies nicht unter Ihren eigenen Lizenzbedingungen angeben? Dies führt schnell zu fairem Gebrauch und Verboten nicht durchsetzbarer rechtlicher Bedingungen (nicht, dass Fantasie in letzter Zeit schon einige Male nicht mehr gesetzlich verankert wurde).

zxq9
quelle
0

Ich bin kein Anwalt, aber soweit ich das beurteilen kann, stimmt das nicht, da das Programm von der Bibliothek abhängt - es ist immer noch eine Ableitung. Genauso wie ein Sequal eine Ableitungsarbeit ist. Zumindest basiert es auf den in der Bibliothek definierten APIs.

Ofir
quelle
Konnte das API-Problem nicht behoben werden, indem ein Wrapper-Modul hinzugefügt wurde, für das Sie das Urheberrecht besitzen? (siehe windyroad.com.au/2006/04/20/... für ein Beispiel von dem, was ich rede)
Michael Kourlas
Ich habe die Frage aktualisiert, um die Wrapper-Komponente hinzuzufügen.
Michael Kourlas
@ user92103 Behandelt diese FAQ Ihre Frage? gnu.org/licenses/gpl-faq.html Oder diese P.SE-Frage: programmers.stackexchange.com/questions/50118/…
apsillers
1
@apsillers: Die P.SE-Frage befasst sich mit der Client-Server-Kommunikation über ein Netzwerk. Das ist sicherlich eine Möglichkeit, die GPL zu umgehen, aber ich spreche hier von (dynamischer Verknüpfung). Ich habe mir die GPL-FAQ angesehen, und sie haben eine Frage zu einem Wrapper-Modul. Diese Frage geht jedoch davon aus, dass der Distributor die GPL-Bibliothek mit der proprietären Anwendung zum Zeitpunkt der Verteilung bündelt. In diesem Fall führt der Endbenutzer die Bündelung durch, wodurch sich die Dinge dramatisch ändern.
Michael Kourlas