Question

Je développe une application sous licence GPL en Python et j'ai besoin de savoir si la GPL autorise mon programme à utiliser des plug-ins propriétaires.C'est ce que la FSF a à dire sur la question :

Si un programme publié sous GPL utilise des plug-ins, quelles sont les conditions requises pour les licences d'un plug-in ?

Cela dépend de la manière dont le programme appelle ses plug-ins.Si le programme utilise fork et exec pour appeler des plug-ins, alors les plug-ins sont des programmes distincts, donc la licence du programme principal n'impose aucune exigence à leur égard.

Si le programme relie dynamiquement les plug-ins, et qu'ils effectuent des appels de fonctions les uns aux autres et partagent des structures de données, nous pensons qu'ils forment un seul programme, qui doit être traité comme une extension à la fois du programme principal et des plug-ins.Cela signifie que les plug-ins doivent être publiés sous GPL ou sous une licence de logiciel libre compatible GPL, et que les termes de la GPL doivent être respectés lorsque ces plug-ins sont distribués.

Si le programme lie dynamiquement les plug-ins, mais que la communication entre eux se limite à appeler la fonction « principale » du plug-in avec certaines options et à attendre son retour, c'est un cas limite.

La distinction entre fork/exec et liaison dynamique, en plus d'être assez artificielle, ne s'applique pas aux langages interprétés :qu'en est-il d'un plugin Python/Perl/Ruby, qui est chargé via import ou execfile?

(modifier:Je comprends pourquoi la distinction entre fork/exec et liaison dynamique, mais il semble que quelqu'un qui voulait se conformer à la GPL mais aller à l'encontre de « l'esprit » -- je ne le fais pas -- pourrait simplement utiliser fork/exec et la communication interprocessus pour faire à peu près n'importe quoi).

La meilleure solution serait d'ajouter une exception à ma licence pour autoriser explicitement l'utilisation de plugins propriétaires, mais je n'y parviens pas puisque j'utilise Qt/PyQt qui est GPL.

Était-ce utile?

La solution

La distinction entre fork/exec et liaison dynamique, en plus d'être assez artificielle,

Je ne pense pas que ce soit artificiel du tout.Fondamentalement, ils font simplement une division en fonction du niveau d'intégration.Si le programme comporte des « plugins » qui sont essentiellement exécutés sans intégration au niveau de l'API, il est peu probable que le travail résultant soit considéré comme un travail dérivé.De manière générale, un plugin qui est simplement forké/exécuté répondrait à ces critères, bien qu'il puisse y avoir des cas où ce n'est pas le cas.Ce cas s'applique particulièrement si le code du "plugin" fonctionne également indépendamment de votre code.

Si, d'un autre côté, le code dépend profondément du travail sous GPL, comme l'appel intensif d'API ou l'intégration étroite de structures de données, alors les choses sont plus susceptibles d'être considérées comme un travail dérivé.Autrement dit, le « plugin » ne peut pas exister seul sans le produit GPL, et un produit avec ce plugin installé est essentiellement une œuvre dérivée du produit GPL.

Donc, pour que ce soit un peu plus clair, les mêmes principes pourraient s'appliquer à votre code interprété.Si le code interprété repose fortement sur vos API (ou vice-versa), il sera alors considéré comme un travail dérivé.S'il s'agit simplement d'un script qui s'exécute tout seul avec extrêmement peu d'intégration, ce n'est peut-être pas le cas.

Est-ce que ça fait plus de sens?

Autres conseils

@Daniel

La distinction entre fork/exec et liaison dynamique, en plus d'être assez artificielle, ne s'applique pas aux langages interprétés :qu'en est-il d'un plugin Python/Perl/Ruby, qui est chargé via une importation ou un fichier exécutable ?

Je ne suis pas sûr que la distinction est artificiel.Après un chargement dynamique, le code du plugin partage un contexte d'exécution avec le code GPLed.Après un fork/exec, ce n'est pas le cas.

En tout cas, je suppose que importing provoque l'exécution du nouveau code dans le même contexte d'exécution que le bit GPL, et vous devez le traiter comme le cas du lien dynamique.Non?

Quelle quantité d’informations partagez-vous entre les plugins et le programme principal ?Si vous faites autre chose que simplement les exécuter et attendre les résultats (ne partager aucune donnée entre le programme et le plugin dans le processus), vous pourriez très probablement vous en sortir en étant propriétaires, sinon ils devraient probablement être sous GPL. d.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top