Frage

Ich entwickle eine GPL-lizenzierte Anwendung in Python und muss wissen, ob die GPL meinem Programm die Verwendung proprietärer Plug-Ins erlaubt.Das ist was die FSF zu sagen hat zum Thema:

Wenn ein unter der GPL veröffentlichtes Programm Plug-Ins verwendet, welche Anforderungen gelten für die Lizenzen eines Plug-Ins?

Es hängt davon ab, wie das Programm seine Plug-Ins aufruft.Wenn das Programm fork und exec verwendet, um Plug-ins aufzurufen, handelt es sich bei den Plug-ins um separate Programme, sodass die Lizenz für das Hauptprogramm keine Anforderungen an sie stellt.

Wenn das Programm Plug-Ins dynamisch verknüpft und sie sich gegenseitig Funktionsaufrufe unterziehen und Datenstrukturen gemeinsam nutzen, bilden sie unseres Erachtens ein einziges Programm, das als Erweiterung sowohl des Hauptprogramms als auch der Plug-Ins behandelt werden muss.Das bedeutet, dass die Plug-Ins unter der GPL oder einer GPL-kompatiblen Lizenz für freie Software veröffentlicht werden müssen und dass die Bedingungen der GPL befolgt werden müssen, wenn diese Plug-Ins verteilt werden.

Wenn das Programm Plug-Ins dynamisch verknüpft, sich die Kommunikation zwischen ihnen jedoch darauf beschränkt, die „Haupt“-Funktion des Plug-Ins mit einigen Optionen aufzurufen und auf deren Rückkehr zu warten, handelt es sich um einen Grenzfall.

Die Unterscheidung zwischen fork/exec und dynamischer Verknüpfung ist nicht nur irgendwie künstlich, sondern lässt sich auch nicht auf interpretierte Sprachen übertragen:Wie wäre es mit einem Python/Perl/Ruby-Plugin, das über geladen wird? import oder execfile?

(bearbeiten:Ich verstehe, warum zwischen Fork/Exec und dynamischer Verknüpfung unterschieden wird, aber es scheint, als ob jemand, der die GPL einhalten, aber gegen den „Geist“ verstoßen wollte – das tue ich nicht –, einfach Fork/Exec und Interprozesskommunikation verwenden könnte so ziemlich alles machen).

Die beste Lösung wäre, meiner Lizenz eine Ausnahme hinzuzufügen, um die Verwendung proprietärer Plugins ausdrücklich zu erlauben, aber ich kann dies nicht tun, da ich sie verwende Qt/PyQt Das ist GPL.

War es hilfreich?

Lösung

Die Unterscheidung zwischen Fork/Exec und dynamischer Verknüpfung ist nicht nur irgendwie künstlich, sondern

Ich denke nicht, dass es überhaupt künstlich ist.Im Grunde nehmen sie die Aufteilung nur auf der Grundlage des Integrationsgrads vor.Wenn das Programm über „Plugins“ verfügt, bei denen es sich im Wesentlichen um Fire-and-Forget-Plugins ohne Integration auf API-Ebene handelt, ist es unwahrscheinlich, dass die resultierende Arbeit als abgeleitete Arbeit betrachtet wird.Im Allgemeinen würde ein Plugin, das lediglich geforkt/ausgeführt wird, diese Kriterien erfüllen, obwohl es Fälle geben kann, in denen dies nicht der Fall ist.Dies gilt insbesondere dann, wenn der „Plugin“-Code auch unabhängig von Ihrem Code funktionieren würde.

Wenn der Code andererseits stark von der Arbeit der GPL abhängig ist, wie z. B. umfangreiche API-Aufrufe oder eine enge Datenstrukturintegration, dann werden die Dinge eher als abgeleitete Arbeit betrachtet.Das heißt, das „Plugin“ kann ohne das GPL-Produkt nicht eigenständig existieren, und ein Produkt, auf dem dieses Plugin installiert ist, ist im Wesentlichen ein abgeleitetes Werk des GPL-Produkts.

Um es etwas klarer zu machen: Die gleichen Prinzipien könnten auch für Ihren interpretierten Code gelten.Wenn der interpretierte Code stark von Ihren APIs abhängt (oder umgekehrt), wird er als abgeleitetes Werk betrachtet.Wenn es sich nur um ein Skript handelt, das eigenständig mit äußerst geringer Integration ausgeführt wird, ist dies möglicherweise nicht der Fall.

Ist das sinnvoller?

Andere Tipps

@Daniel

Die Unterscheidung zwischen fork/exec und dynamischer Verknüpfung ist nicht nur irgendwie künstlich, sondern lässt sich auch nicht auf interpretierte Sprachen übertragen:Wie wäre es mit einem Python/Perl/Ruby-Plugin, das über Import oder Execfile geladen wird?

Ich bin mir nicht sicher, ob der Unterschied besteht Ist künstlich.Nach einem dynamischen Ladevorgang teilt sich der Plugin-Code einen Ausführungskontext mit dem GPL-Code.Nach einem Fork/Exec ist dies nicht der Fall.

Auf jeden Fall würde ich das vermuten importing bewirkt, dass der neue Code im gleichen Ausführungskontext wie das GPLed-Bit ausgeführt wird, und Sie sollten es wie den Fall einer dynamischen Verknüpfung behandeln.NEIN?

Wie viele Informationen teilen Sie zwischen den Plugins und dem Hauptprogramm?Wenn Sie mehr tun, als sie nur auszuführen und auf die Ergebnisse zu warten (wobei dabei keine Daten zwischen dem Programm und dem Plugin ausgetauscht werden), könnten Sie höchstwahrscheinlich damit durchkommen, dass sie proprietär sind, andernfalls müssten sie wahrscheinlich der GPL unterliegen. D.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top