web-dev-qa-db-fra.com

Puis-je appeler dynamiquement un logiciel LGPL / GPL dans mon application open source?

Je veux utiliser un outil ( ffmpeg ) sous GNU Lesser General Public License, version 2.1GNU General Public License (GPL) version 2 pour certains composants.

Pour ce faire, je l'appelle uniquement dans mon logiciel en tant que tel:

System.Diagnostics.Process p = new System.Diagnostics.Process();
p.StartInfo = new System.Diagnostics.ProcessStartInfo("lgplSoftware.exe", myParams);
p.Start();

Je ne le modifie pas, j'utilise uniquement une version intégrée du logiciel pour Windows.


Wikipedia dit:

Un différend clé lié à la GPL est de savoir si les logiciels non GPL peuvent être liés dynamiquement aux bibliothèques GPL. La GPL exige clairement que toutes les œuvres dérivées de code sous la GPL doivent elles-mêmes l'être sous la GPL. Bien qu'il soit entendu que la liaison statique produit des œuvres dérivées, il n'est pas clair si un exécutable qui lie dynamiquement à un code GPL doit être considéré comme une œuvre dérivée (voir Copyleft faible). La communauté des logiciels libres/open source est divisée sur ce problème. La FSF affirme qu'un tel exécutable est en effet un travail dérivé si l'exécutable et le code GPL "se font des appels de fonction et partagent des structures de données", certains autres étant d'accord (par exemple Jerry Epplin), tandis que certains (par exemple Linus Torvalds) conviennent que la liaison dynamique peut créer des œuvres dérivées mais n'est pas d'accord sur les circonstances.


Je suis vraiment confus par toutes ces choses légales. J'aurais également réalisé mon projet LGPL et publié la source, mais cela ne dépend pas de moi.

La question est donc: puis-je l'utiliser comme je le fais en ce moment ou vais-je être exécuté par une armée d'avocats?

51
marcgg

Linking a une signification spécifique dans la programmation informatique. Vous ne liez pas du tout de code GPL ou LGPL, vous générez uniquement un binaire GPL ou LGPL, et la GPL et LGPL le permettent. Vos utilisateurs sont libres d'utiliser eux-mêmes ce fichier binaire aux fins prévues par leurs auteurs et sont libres de télécharger et de compiler la source eux-mêmes, afin que toutes leurs libertés soient préservées, et que vous ne violiez pas la GPL ou la LGPL. (C'est ce dont parle la FAQ GPL en "communiquant à distance".) Cela ne viole même pas l'esprit de la LGPL et de la GPL; ils tolèrent l'existence de logiciels propriétaires et supposent qu'à un moment donné, les programmes propriétaires engendreront des programmes gratuits et vice versa. (Sinon, nous ne pourrions exécuter aucun logiciel sous GPL sous Windows.)

La GPL exige que les programmes propriétaires et sous licence GPL "ne soient pas combinés de manière à en faire un programme unique". Si votre programme dépend complètement des exécutables sous GPL, de sorte qu'il ne serait pas utilisable sans eux même s'il s'agit d'un binaire autonome, cela pourrait vous placer sur un terrain instable. (Et il est probablement temps de consulter votre avocat pour en être sûr.)

De plus, bien que vous n'ayez pas spécifiquement posé de questions à ce sujet, gardez à l'esprit que la distribution de logiciels sous GPL ou LGPL avec votre logiciel signifie que vous devez inclure une copie de la licence avec votre installateur et également distribuer la source. code. Par exemple, si vous empaquetez votre application dans un programme d'installation et incluez des copies des exécutables sous GPL ou LGPL dans le programme d'installation, alors vous distribuez du code sous LGPL ou GPL et devez faire des copies du code source disponibles (soit en ligne, par offre postale ou par CD, selon la façon dont vous distribuez votre application). Il n'est pas suffisant d'inclure un lien vers le projet amont (du moins pour la version 2 de la GPL). Lisez la GPL et la LGPL pour plus de détails.

59
Josh Kelley

Corrigez-moi si je me trompe, mais je pense que la situation que vous décrivez est la suivante:

  1. Vous avez un programme GPL ou LGPL, construit comme un exécutable séparé, sans aucune modification de votre part.
  2. Vous créez une application de source fermée qui a besoin des fonctionnalités du programme GPL ou LGPL.
  3. Dans votre programme, vous utilisez votre infrastructure ou vos installations de système d'exploitation pour exécuter un autre exécutable distinct.
  4. Vous utilisez la sortie de cet exécutable dans votre programme.

Si c'est le cas, vous n'êtes pas réellement reliant au programme sous licence GPL ou LGPL. Ainsi, vous n'êtes pas lié par les conditions de licence de ce programme. Il s'agit en fait d'un moyen assez courant, quoique compliqué, d'éviter les problèmes de licence avec de tels exécutables.

Cependant, cela viole les esprit de la GPL et de la LGPL.

3
mipadi

En général, c'est l'une des rares choses que je considère comme vraiment méchante de la GPL. Ce qui aggrave la situation, c'est à quel point elle peut être contagieuse. Pourtant, il existe un moyen de le contourner.

Commencez par définir votre propre interface pour envoyer des données. Celui-ci sera utilisé entre votre application et une bibliothèque distincte que vous créerez. Ne réutilisez rien du code GPL car cela relèverait de la licence GPL. Cependant, il n'y a rien de mal à utiliser une structure similaire. Puisque cette interface est votre propre création, elle tomberait sous votre propre licence. Vous êtes libre de l'utiliser comme bon vous semble.

Ensuite, créez une bibliothèque wrapper autour du code GPL qui implémentera également votre interface personnelle. Cette bibliothèque tomberait sous la licence GPL et serait donc contaminée. Cependant, même si cela exposerait votre interface au monde extérieur, votre interface ne peut pas être contaminée. Ce n'est pas dérivé ou quoi que ce soit. C'est 100% votre propre code et vous pouvez utiliser la même interface pour vous connecter à une bibliothèque différente.

Cette bibliothèque d'encapsuleur servira de tampon de protection entre votre propre code de propriété et le code GPL. Votre propre code ne sera jamais GPL car il n'utilise aucun code GPL directement. L'interface servira également de solution pour changer le code GPL par une solution différente.

C'est une astuce pour contourner la restriction de licence mais puisque l'interface est à vous et à vous seulement, la GPL sera bloquée par elle. Le code GPL et le code non GPL seraient deux programmes différents s'ils étaient utilisés de cette façon.

Cependant, sachez que vous pourriez avoir besoin de conseils juridiques ici. Il n'y a pas beaucoup d'avocats ici à SO. Mais c'est une astuce qui peut contourner cette licence GPL.

2
Wim ten Brink

Vous pouvez le faire avec le logiciel LGPL, mais vous ne pouvez pas le faire avec un logiciel sous licence GPL.

LGPL 2.1 section 6 sur les travaux combinés indique comment vous pouvez utiliser la bibliothèque dans votre programme source fermé. Vous pouvez appeler un programme sous licence LGPL comme vous le faites, et vous pouvez même y créer un lien dynamique.

La GPL n'a pas une telle exception, lorsque vous utilisez un programme/bibliothèque GPL dans le cadre de votre programme, de sorte qu'il est perçu comme faisant partie intégrante de votre programme, vous devez alors tout concéder sous licence GPL compatible. Voir cette entrée GPL-FAQ .

0
haffax

Je ne suis pas avocat et cela ne peut pas être un conseil juridique. Avec cela derrière nous, à mon humble avis si le code que vous liez est LGPL, vous êtes en clair. Si c'est GPL techniquement c'est un problème.

La différence entre GPL et LGPL, c'est que la liaison avec le code LGPL, ne déclenche pas la nécessité de partager.

0
Chen Levy