La compatibilité, c'est « peut-on combiner et distribuer ? »
Deux licences sont compatibles lorsque, en combinant en un seul programme le code soumis à chacune et en le distribuant, on peut respecter simultanément les conditions des deux licences. Si l'une interdit les conditions de l'autre, elles sont incompatibles. Par exemple, la GPL exigeant de « ne pas ajouter de restrictions supplémentaires », le code soumis à une licence imposant des conditions que la GPL n'autorise pas ne peut pas entrer dans un programme GPL.
La compatibilité a un sens
Le code permissif peut entrer dans un projet copyleft, mais pas l'inverse.
- Code MIT → projet GPL : possible. En conservant la mention MIT, l'ensemble combiné peut être distribué sous GPL.
- Code GPL → projet MIT : l'ensemble combiné doit suivre les conditions de la GPL et ne peut donc plus rester un « projet MIT ».
C'est pourquoi un tableau de compatibilité doit toujours se lire « quel code → dans quel projet ».
Cas typiques
Apache-2.0 et GPL
La FSF considère que l'Apache-2.0 est compatible avec la GPL-3.0 mais pas avec la GPL-2.0, car ses clauses de résiliation des brevets et d'indemnisation sont des conditions supplémentaires absentes de la GPL-2.0. La GPL-3.0 a été conçue pour résoudre ce problème. Un projet GPL-2.0-or-later peut donc utiliser du code Apache-2.0 en distribuant l'ensemble combiné sous GPL-3.0.
MPL-2.0 et licences GNU
L'article 1.12 de la MPL-2.0 définit la GPL-2.0, la LGPL-2.1, l'AGPL-3.0 et leurs versions ultérieures comme « Secondary License », et l'article 3.3 permet de distribuer sous licence GNU une Larger Work combinant du code MPL avec ce code. L'exception est le cas où l'auteur d'origine a ajouté l'Exhibit B (« Incompatible With Secondary Licenses »).
Bibliothèques LGPL et applications fermées
Une bibliothèque LGPL peut être utilisée dans une application fermée. En contrepartie, l'utilisateur doit pouvoir remplacer la bibliothèque par une version modifiée (la liaison dynamique est le plus simple), et il faut fournir le source de la partie bibliothèque ainsi que les mentions de licence. Si vous copiez et mélangez du code LGPL dans le source de l'application, la situation change : l'ensemble combiné doit suivre les conditions LGPL/GPL.
GPL-3.0 et AGPL-3.0
Les deux licences autorisent expressément la combinaison par leur article 13 respectif. Dans l'ensemble combiné, la partie GPL continue de suivre les conditions de la GPL, et la partie AGPL celles de l'AGPL, y compris l'obligation de fournir le source via le réseau.
EPL-2.0 et GPL
L'EPL-2.0 n'est pas compatible avec la GPL par défaut, mais la combinaison devient possible si l'auteur d'origine désigne la GPL, etc., comme Secondary License via l'Exhibit A.
| Code importé | Application fermée | Projet MIT | GPL-2.0-only | GPL-3.0 |
|---|---|---|---|---|
| MIT · BSD · ISC | Possible (mention) | Possible | Possible | Possible |
| Apache-2.0 | Possible (mention · NOTICE) | Possible | Impossible | Possible |
| MPL-2.0 | Sous conditions (publication des fichiers) | Sous conditions | Sous conditions (Secondary) | Sous conditions (Secondary) |
| LGPL-3.0 | Sous conditions (liaison) | Sous conditions (liaison) | Impossible | Possible |
| GPL-3.0 | Impossible | Impossible | Impossible | Possible |
Jusqu'où va la « combinaison » ?
Les problèmes de compatibilité naissent lorsque du code est combiné en un seul programme. La FSF considère que des éléments liés dans un même exécutable ou partageant des structures de données internes complexes forment un seul programme, tandis que la communication habituelle entre programmes séparés (tubes, sockets, arguments de ligne de commande) relève généralement d'un « agrégat » (aggregate) de programmes distincts. Cette frontière n'est toutefois pas fixée par la jurisprudence et les interprétations divergent. Réunir plusieurs programmes dans une même distribution ne constitue pas en soi une combinaison.
Démarche pratique
- Extrayez la liste des dépendances (fonction de rapport de licences du gestionnaire de paquets ou outil SBOM).
- Classez la licence de chaque dépendance par identifiant SPDX.
- Vérifiez une première fois les combinaisons avec la licence de votre projet dans le vérificateur de compatibilité.
- Pour les combinaisons « sous conditions », vérifiez les conditions (mention, mode de liaison, Secondary License) dans les textes.
- En cas de combinaison impossible, changez de dépendance, séparez les programmes ou ajustez votre licence.
Cet article est fourni à titre d'information générale et ne constitue pas un conseil juridique. Pour toute décision importante, consultez un professionnel.
Sources
- FAQ des licences GNU (matrice de compatibilité, MereAggregation) — https://www.gnu.org/licenses/gpl-faq.html
- FSF, Various Licenses and Comments about Them — https://www.gnu.org/licenses/license-list.html
- Apache Software Foundation, GPL Compatibility — https://www.apache.org/licenses/GPL-compatibility.html
- Mozilla, MPL 2.0 FAQ — https://www.mozilla.org/en-US/MPL/2.0/FAQ/
- Eclipse Foundation, EPL 2.0 FAQ — https://www.eclipse.org/legal/epl-2.0/faq/