Recherche de site Web

Évitez cette erreur d'analyse open source courante


Pourquoi les scanners de code source signalent-ils parfois des informations de licence incorrectes ?

Pete Townshend, guitariste légendaire du groupe de rock britannique The Who, est bien connu pour jouer des accords suspendus. Les accords suspendus ajoutent de la tension musicale à une chanson. Pour les pianistes qui lisent ceci et qui (comme moi) aiment jouer dans la tonalité de do, jouez simplement un accord de do majeur (les notes do, mi et sol) et remplacez la note mi par un fa ou un ré. êtes maintenant en passe de devenir une rock star britannique !1

La musique est souvent remplie de combinaisons d'accords, comme des accords suspendus, qui procurent de la tension, puis relâchent. Bien qu’il soit souhaitable d’ajouter de la tension à une composition musicale, ajouter de la tension à un logiciel de numérisation avec des outils open source n’est certainement pas le bienvenu.

Un problème chez Red Hat impliquant un logiciel d'analyse m'a amené à écrire cet article.

Récemment, un client important a fait part de ses inquiétudes après avoir analysé une partie du code source de notre logiciel. Comme vous le savez peut-être, Red Hat fournit le code source de ses logiciels. L'outil d'analyse du client a signalé qu'un certain fichier logiciel était sous licence GPLv3, ce qui n'était pas prévu. En fait, le fichier logiciel était explicitement et uniquement marqué comme étant sous licence Apache 2.0. Le client nous a demandé d'examiner ce problème et nous avons été heureux de le faire.

Après nos recherches approfondies, nous avons conclu que leur logiciel de numérisation est clairement incorrect. Nous avons développé une hypothèse expliquant l'anomalie, que je vais maintenant expliquer.

Un type populaire d'outil d'analyse de logiciels open source compare le logiciel analysé à de vastes référentiels de logiciels open source préexistants et signale toute correspondance. Par exemple, supposons qu'il existe un fichier open source nommé MIT.c qui renvoie un entier supérieur de un à l'entier qui lui est transmis. En d’autres termes, il s’agit d’un simple additionneur. Cela pourrait ressembler à ceci :

Copyright 2021 Jeffrey R. Kaufman

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

int foo(int x) {
	x+=1;
	return x;
}

Pour cet exemple hypothétique, supposons que MIT.c ait été placé dans un référentiel GitHub nommé The Simple Maths Project en tant que projet communautaire open source pour résoudre des problèmes arithmétiques simples. Ce projet contient de nombreux autres fichiers similaires en langage C, tous sous la même licence MIT.

Étant donné que cet exemple de fonction hypothétique est très utile (bien sûr, ce n'est pas le cas, mais restez avec moi ici), il a été inclus pour fournir un utilitaire arithmétique simple dans de nombreux autres projets open source sur GitHub. Supposons également que l'un de ces autres projets, nommé The Sustained Chord Calculator, utilise ce fichier source MIT.c de The Simple Maths Project pour aider à calculer la formulation musicale des accords suspendus.

L'hypothétique projet Suspended Chord Calculator, en plus d'utiliser MIT.c, comprend également plusieurs fichiers sources sous licence GPLv2. Lorsque le projet Suspended Chord Calculator est compilé, vous pouvez supposer que l'exécutable résultant contiendra à la fois un logiciel sous licence GPLv2 et MIT.c sous licence MIT comme une œuvre combinée de telle sorte que MIT.c ne peut pas être raisonnablement considéré comme indépendant et distinct. travailler en soi. L'exécutable résultant serait à juste titre considéré comme sous licence GPLv2, et les obligations de la GPLv2 doivent être respectées. La conformité signifie fournir (ou proposer de fournir pendant trois ans) toutes les sources utilisées pour créer le binaire ou l'exécutable, y compris tous les fichiers logiciels sous licence GPLv2 et MIT.c.

Revenons à notre problème…

Supposons qu'un de vos produits logiciels utilise MIT.c, en plus de votre propre logiciel créé. Étant donné que MIT.c est uniquement sous licence MIT, cela vous obligerait à respecter uniquement les termes de la licence MIT, ce qui est facile à faire. En règle générale, les utilisateurs se conforment en fournissant une copie de la licence MIT ainsi que la mention de droit d'auteur avec leur distribution de logiciel. Ou, si vous êtes une entreprise comme Red Hat, fournir le code source qui contient le texte de la licence est également une méthode de conformité et l'approche que je recommande. (Voir Un modèle économiquement efficace pour la conformité des licences de logiciels open source.)

Si vous décidez d'analyser le code source de votre produit logiciel à l'aide d'un scanner de code source du type qui fait référence aux référentiels de projets open source, votre scanner peut probablement signaler que MIT.c est sous licence GPLv2 ! Pourquoi? Parce qu'il verra MIT.c, sous forme de code source, associé au projet The Suspended Chord Calculator sous licence GPLv2 et supposera, naïvement, que MIT.c doit également être soumis aux termes GPLv2. Ceci malgré le fait que le fichier source MIT.c porte clairement une licence MIT et que vous l'avez copié uniquement à partir du projet original sous licence MIT, The Simple Maths Project.

Il s’agit d’une conséquence malheureuse de l’utilisation de ces types de systèmes de numérisation. Dans cet exemple, ces systèmes signaleront généralement par erreur chaque projet open source de leur référentiel qui utilise MIT.c. Il peut y avoir des dizaines, des centaines, voire des milliers de programmes qui utilisent MIT.c, tous sous des licences différentes, et vous recevrez une pile géante de projets à examiner indiquant que MIT.c pourrait être sous licence MIT, sous licence BSD, GPLv2. sous licence, ou, franchement, porter toute autre licence open source sous le soleil d'un projet qui utilise simplement MIT.c. Et au final, vous découvrirez que le fichier était uniquement sous MIT.c. D'après mon expérience, il existe très peu de situations dans lesquelles ce type d'analyse est justifié et, même lorsqu'il est justifiable, les résultats de la licence de fichier sont différents de ceux attendus. Cela arrive, mais c'est rare.

Il existe un autre type de système d'analyse de logiciels qui rend compte des licences en recherchant uniquement les correspondances avec les textes de licence connus dans les fichiers sources du projet. Ce type de scanner détecterait le texte de la licence MIT dans le code source et signalerait correctement que le logiciel est soumis aux termes de la licence MIT, malgré le fait que MIT.c peut être utilisé dans de nombreux autres projets open source sous diverses conditions de licence. . Bien que ce type de scanner de code source puisse également avoir des faux positifs, d'après mon expérience, les scanners de code source du type qui référencent les référentiels de projets open source ont des taux de fausses déclarations significativement plus élevés pour les raisons évoquées précédemment.

Franchement, les scanners de code source qui référencent les référentiels de logiciels open source pour vérifier les données de licence peuvent être utiles dans certaines situations, par exemple lorsque vous craignez qu'un ingénieur ait copié et collé par inadvertance le code source d'une licence inacceptable sans également le copier. le texte de licence applicable. Dans cette situation, un scanner de code source du type qui recherche uniquement les correspondances avec les textes de licence ne détecterait pas cette inclusion. Cependant, comme je l'ai déjà dit, cette situation est exceptionnellement rare, ce qui rend les scanners de code source correspondant aux référentiels sujets à des erreurs et à un gaspillage de ressources pour rechercher la vérité. C’est du temps et des ressources qui pourraient être consacrés à davantage de questions de fond. Vous pouvez également remédier à cette situation en formant vos développeurs à ne jamais copier de logiciel à partir d'une autre source sans également copier toute licence applicable.

Un scanner qui signale une licence incorrecte rend un très mauvais service à votre organisation en vous obligeant à résoudre un faux positif. D’innombrables heures de ressources gaspillées sont consacrées à ces chasses à l’oie sauvage… comme notre client l’a vécu.

Nous ne serons plus dupes !

Je tiens à remercier mon collègue Richard Fontana pour avoir suggéré le titre de cet article. Lisez certains de ses excellents articles sur Opensource.com dans la section Droit.

1. Si vous souhaitez en savoir plus sur la théorie musicale et les accords suspendus, consultez l'analyse de Rick Beato d'un autre excellent morceau de The Who sur What Makes This Song Great? Ep. 96 Le Qui.

Articles connexes: