Je réalise régulièrement des audits de code source visant à vérifier l’absence de « mine juridique » dans une application. Cela m’a amené à me pencher avec attention sur la licence des projets libres et à constater que la licence annoncée par ces projets était en général trop monolithique.

Un projet libre fournit des ressources variées en nature et en finalité, parmi lesquelles on peut notamment trouver :

  • le code source du composant publié sous licence libre ;

  • la documentation du composant ;

  • le code source fourni dans la documentation pour illustrer la mise en œuvre du composant ;

  • des données de test ou des données nécessaires au fonctionnement du composant ;

  • des plans et autres schémas ;

  • des logos, dessins et modèles.

Et pour toutes ces ressources, le projet annonce bien souvent une seule et même licence. Cette globalité pose divers problèmes :

  • Les licences adaptées aux logiciels utilisent un vocabulaire et traitent de notions inadaptés aux œuvres littéraires et artistiques, ce qu’est leur documentation. Et la réciproque est vraie, les licences adaptées aux œuvres littéraires et artistiques ne sont pas assez précises au regard de ce que l’on peut faire ou non des différentes formes d’un logiciel. Autrement dit, on ne devrait jamais publier une documentation sous licence GNU GPL, pas plus qu’on ne devrait publier un code source sous licence Creative Commons (et pourtant, on trouve les deux).

  • Les fragments de code source fournis dans la documenation pour illustrer la mise en œuvre du composant ne font pas, à proprement parler, partie du code source du projet. Ils sont fournis à des fins pédagogiques et représentent souvent la meilleure manière – voire la seule – d’utiliser le composant. Ces fragments sont tacitement fournis pour que les utilisateurs s’en inspirent copieusement ou les « copient/collent » dans le code source de leur application. Ces fragments ne doivent pas être porteurs de risque ou de complexité juridique. Si vous annoncez par exemple de manière monolithique que votre projet est diffusé sous licence GNU LGPL, alors c’est aussi le cas de votre documentation et du code source qui l’illustre. Tout copié/collé de ce dernier entraine la diffusion de la licence GNU LGPL au logiciel qui le reçoit. Or, si vous avez choisi une licence faiblement diffusive telle que la licence GNU LGPL, c’est justement pour que votre composant puisse être utilisé par une application sans que sa licence ne se diffuse à elle.

  • Les logos, dessins et modèles joints à votre projet à des fins de communication ou de promotion peuvent être des œuvres protégées, éventuellement propriétés de tiers, qui vous ont autorisé à les utiliser, sans que cette autorisation ne soit transitive, ni qu’elle vous permette d’annoncer leur mise à disposition sous une licence particulière.

Bref, vous l’avez compris, il est judicieux de bien réfléchir à la licence sous laquelle vous mettez à disposition chaque ressource de votre projet.

Même si votre outil est diffusé sous une licence libre fortement diffusive telle que la lience GNU GPL, il est préférable que sa documentation soit diffusée sous licence CC BY-SA ou sous licence GNU FDL (ce n’est pas pour rien que la FSF a créé cette dernière).

Même si votre outil est diffusé sous une licence libre permissive telle que la licence Apache, les exigences de forme (préservation des mentions de copyright, fourniture d’une copie de la licence et du fichier NOTICE) sont une sérieuse nuisance juridique pour le simple copié/collé d’un fragment de code issu de la documentation. J’ai longtemps préconisé la publication des fragments de code source illustrant la mise en œuvre du composant sous licence BSD 2-Clause ou MIT. Mais récemment, un client à qui j’avais prodigué ce conseil, a creusé le sujet de son côté et m’a fait découvrir la licence Zero-Clause BSD. Elle me semble particulièrement adaptée à ce besoin précis.

Suivant la nature et l’origine des données qui accompagnent votre projet, il convient :

  • Lorsqu’elles sont d’origine exogène, de préciser sous quelle licence elles sont mises à disposition. Relèvent-elles du domaine public, sont-elles la propriété d’un tiers qui en autorise l’utilisation gratuite, mais interdit leur altération, etc. ?

  • Lorsque vous en êtes l’auteur, d’opter pour une licence adéquate, telle que l’ODbL (fortement diffusive), la LO/OL (permissive) ou la CC0 (pseudo versement dans le domaine public).

Voici donc le genre d’information que j’aimerais plus souvent lire dans le fichier README des projets libres :

Copyright and license

Copyright (C) 2015-2021, [Copyright Holder Name] <[Copyright Holder Email]>

The [PROJECT NAME] software as a whole is distributed under the Apache License, version 2.0. A copy of this license is available in the LICENSE file. [PROJECT NAME] depends on third-party components and code snippets released under their own license (obviously, all compatible with the one of [PROJECT NAME]). These dependencies are listed in the NOTICE file.

The [PROJECT NAME] documentation (available in the doc directory) is distributed under the Creative Commons Attribution 4.0 International license (CC BY 4.0). A copy of this license is available in the LICENSE.CC-BY-4.0 file.

All code snippets provided in the documentation, tutorials and examples (available in the doc and examples directories) are intended to show how to use [PROJECT NAME] and are not, strictly speaking, part of [PROJECT NAME] project. In order to facilitate their reuse, they are released under the “Zero-Clause BSD” license (aka BSD 0-Clause or 0BSD). This is a permissive license that allows you to copy and paste this source code without preserving copyright notices. A copy of this license is available in the LICENSE.0BSD file.

Pour terminer, si le nom de votre projet et son logo sont protégés (i.e. ont fait l’objet d’un dépôt de marque et de logo), vous devez indiquer aux utilisateurs de votre projet dans quelles limites ils peuvent les réutiliser. Pour trouver l’inspiration dans ce domaine, je vous invite à consulter la section Usage Guidelines sur le site web du projet Blender.