Évitez cette erreur d’analyse open source courante


  • FrançaisFrançais


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

    La musique est souvent remplie de combinaisons d’accords, comme des accords suspendus, qui fournissent une tension, puis se 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 de numérisation m’a amené à écrire cet article.

    Récemment, un client important a fait part de ses préoccupations après avoir scanné une partie du code source de notre logiciel. Comme vous le savez peut-être, Red Hat fournit le code source de son logiciel. 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 a demandé que nous examinions 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 qui explique 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 à celui qui lui a été 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 a é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 de langage C similaires, tous sous la même licence MIT.

    Étant donné que cette fonction d’exemple hypothétique est si utile (bien sûr que non, mais restez avec moi ici), elle a été incluse 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.

    Le projet hypothétique Suspended Chord Calculator, en plus d’utiliser MIT.c, comprend également plusieurs fichiers sources sous licence GPLv2. Lorsque le projet The Suspended Chord Calculator est compilé, vous pouvez supposer que l’exécutable résultant contiendra à la fois un logiciel sous licence GPLv2 et le MIT.c sous licence MIT comme un travail combiné de telle sorte que MIT.c ne peut pas être raisonnablement considéré comme indépendant et un travailler en soi. L’exécutable résultant serait à juste titre considéré sous licence sous la GPLv2, et les obligations de la GPLv2 doivent être respectées. La conformité signifie fournir (ou offrir 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 que l’un de vos produits logiciels utilise MIT.c, en plus de votre propre logiciel créé. Étant donné que MIT.c est uniquement sous la licence MIT, cela vous obligerait à vous conformer uniquement aux termes de la licence MIT, ce qui est facile à faire. Généralement, les gens se conforment en fournissant une copie de la licence MIT ainsi que l’avis 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 mon approche recommandée. (Voir Un modèle économiquement efficace pour la conformité des licences de logiciels open source.)

    Si vous décidez de scanner le code source de votre produit logiciel à l’aide d’un scanner de code source du type qui référence les 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 de la GPLv2. Ceci nonobstant le fait que le fichier source MIT.c est clairement marqué d’une licence MIT et que vous ne l’avez copié qu’à partir du projet original sous licence MIT, The Simple Maths Project.

    C’est une conséquence malheureuse de l’utilisation de ces types de systèmes de numérisation. Dans cet exemple, de tels systèmes rapporteront généralement à tort chaque projet open source de son référentiel qui utilise MIT.c. Il pourrait 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 énorme pile de projets à examiner indiquant que MIT.c pourrait être sous licence MIT, sous licence BSD, GPLv2 sous licence, ou, franchement, portez toute autre licence open source sous le soleil d’un projet qui utilise justement MIT.c. Et à la fin, vous découvrirez que le fichier était uniquement sous MIT.c. D’après mon expérience, il y a très peu de situations où ce type d’analyse est justifié et, même lorsqu’il est justifiable, que les résultats de la licence de fichier sont autre chose que ce à quoi vous vous attendiez. 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 source 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, nonobstant le fait que MIT.c peut être utilisé dans de nombreux autres projets open source sous différentes 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 des 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 des 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 pouvez être hyper inquiet qu’un ingénieur ait copié et collé par inadvertance le code source d’une licence inacceptable sans également copier le texte de la 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 aux erreurs et à un gaspillage de ressources pour traquer 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 une 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 en a fait l’expérience.

    Nous ne serons plus dupes !


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

    1. Si vous voulez 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 Qu’est-ce qui rend cette chanson géniale ? Ep. 96 Le Qui.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code