Les piĂšges de certains composants open source
đ«đ· â dimanche 9 janvier 2022
Mots clés : #opensource, #FLOSS, #GitHub, #licences, #social
D'ordinaire nous aimons utiliser des bibliothĂšques tierces dans nos projets, ces âlibrairiesâ que l'on retrouve par exemple sur des forges logicielles publiques comme GitHub et GitLab. Rares sont les logiciels qui ne possĂšdent pas une once de FLOSS (Free Libre and Open Source Software) Ă l'intĂ©rieur. Le plus souvent, on retrouve dans chaque projet des composants FLOSS, que ce soit pour se faciliter la vie, Ă©crire des tests unitaires ou gĂ©rer une base de donnĂ©es par exemple. On a vite tendance Ă prendre l'outil le plus connu, le plus rĂ©pandu, ou Ă faire des rĂ©flexions trop rapides pour choisir ce dont on a besoin, et pourtant il y a des piĂšges Ă Ă©viter.
Tout le monde est juriste, Ă©videment !
Beaucoup (trop) d'entre nous ne considĂšrent pas suffisamment la licence qui est appliquĂ©e Ă la libraire choisie ; par paresse intellectuelle, par pure fainĂ©antise, par certitude de bien comprendre les licences, par oubli, ou par excĂšs de confiance. On fait tous la boulette, et on en tire des leçons ensuite, ce n'est pas si anormal quand encore aujourd'hui dans les Ă©tablissements de formation Ă l'ingĂ©nierie logicielle ou âles Ă©coles de codageâ on en parle assez peu, ou pas assez, voire pas du tout. Merci les formations au rabais vendeuses de rĂȘves laissant leurs apprenants se fracasser sur le mur de la rĂ©alitĂ©.
Toutefois, parmi les piÚges dans lesquels chacun et chacune peuvent plonger, il y en a particuliÚrement qui sont beaux. Et grossiers. Et pourtant, beaucoup de personnes se font avoir, et ne finissent par réagir que lorsque le sujet est médiatisé. Avant de se jeter sur le dernier composant à la mode, regardons en détails les piÚges, en commençant par les licences évidemment.
Des clauses déloyales dans les licences
Par exemple, il y a quelques annĂ©es, on pouvait trouver les frameworks React de Facebook / Meta sous une curieuse licence âBSD + Patentsâ. Le truc, c'est que cette licence possĂšde des clauses relatives aux brevets (une vague idĂ©e ici). Si j'exagĂšre et grossis les choses, le fait de chercher des noises en justice Ă Facebook Ă l'Ă©poque pouvait faire tomber le droit que vous aviez d'utiliser ses cadriciels (j'adore ce mot). Pot de terre contre pot de fer dans du bĂ©ton armĂ©, embĂȘter Big F peut revenir Ă vous interdire d'utiliser ses technos, donc Ă retirer beaucoup de produits. Une fois la chose mĂ©diatisĂ©e, finalement Facebook changea son fusil d'Ă©paule et utilisa la licence MIT.
Bref, attention aux clauses déloyales des licences !
Des changements radicaux de licences
RĂ©cemment encore, c'est HashiCorp qui changea brutalement la licence de son produit phare nommĂ© Terraform, et l'entreprise est dans son bon droit. Le passage de la licence MPL 2.0 Ă la Business Source License a Ă©tĂ© fait avec fracas, justifiĂ© maladroitement par l'entreprise et dĂ©criĂ© par la communautĂ© open source. MongoDB a eu droit aussi auparavant Ă son concert de casseroles avec le passage Ă la SSPL. Pour aller plus loin, MariaDB propose cette page de FAQ sur la BSL. Benoit Sibaud (un chouette collĂšgue chez Orange !) a rĂ©digĂ© et diffusĂ© un billet abordant les âvirevoltantes valses de licences libres et non libres dans les bases de donnĂ©esâ, trĂšs instructif ! En d'autres termes, attendez-vous Ă peut-ĂȘtre voir des revirement de situations dingues sur les licences appliquĂ©es !
Le truc, c'est que quand bien mĂȘme une entreprise dĂ©cide d'agir ainsi, elle reste tout de mĂȘme lĂ©galement dans l'obligation de satisfaire les demandes qui concernent les licences anciennement appliquĂ©es. Autrement dit, si Ă un instant T un composant C Ă©tait sous une licence libre L (admettons GPL 3.0), mais que plus tard cette licence passe Ă une bullshit licence BL, si vous avez eu le composant sous licence L vous ĂȘtes en droit de demander les sources (si L l'autorise Ă©videment), mĂȘme si elles ne sont pas accessibles publiquement. Bon courage donc.
On peut ainsi imaginer jouer la prudence, et se dire que si on utilise des composants FLOSS, dans le doute, au cas oĂč, on pourrait garder une copie du code source. J'apprĂ©cie beaucoup cet article de Geoffrey Dorme qui vous donnera davantage de motivations Ă le faire. En plus cloner les dĂ©pĂŽts Git d'une organisation GitHub c'est facile pour l'instant.
Imaginez maintenant, malgrĂ© les trahisons prĂ©cĂ©dentes, que certaines technos soient si rĂ©pandues qu'elles en deviennent presque indispensables pour des entreprises, au hasard les frameworks comme React. Rien n'empĂȘche Facebook / Meta du jour au lendemain de changer la licence, de rendre l'exploitation de l'outil payante, et de monter un vrai business model dessus. Un magnifique coup Ă jouer maintenant que le place est faite dans l'Ă©cosystĂšme logiciel. Impossible ? C'est vite oublier le ramdam lorsque Oracle avait mis en place son JDK payant.
Mais il y a d'autres piĂšges plus gros encore...
L'ajout de clauses additionnelles
Prenons par exemple une librairie Java bien connue, qui est utilisĂ©e en production : Realm Java (la situation a Ă©tĂ© corrigĂ©e depuis, mais a trainĂ© un bon moment tout de mĂȘme pour que ce soit notable).
Ă premiĂšre vue, si on regarde le README vaguement, on voit ceci :
On peut alors en dĂ©duire que le composant est sous licence open source Apache 2.0. Sauf que trop de gens s'arrĂȘtent lĂ . Car que si on jette un Ćil au fichier de licence, on trouve certes des rĂ©fĂ©rences Ă la licence Apache 2.0, mais aussi un autre Ă©lĂ©ment d'enfoirĂ© : l'export compliance.
Vous pouvez retrouver le diff du commit sur GitHub, je vous met ci-dessous le contenu scélérat de cette clause, qui rend la licence non conforme à la définition donnée par l'OSI, donc plus open source du tout.
Pour celles et ceux qui n'ont plus assez de caféine dans le sang pour comprendre, voici un résumé : si on se retrouve sur une liste noire du gouvernement américain, que ce soit dans un pays, ou individuellement, ou dans une entreprise détenue par une personne dans cette liste noire, on ne peut pas utiliser ce produit.
En soit, quel est le soucis ?
Et bien le soucis est que l'on peut avoir des applications critiques ou indispensables, ou son produit tout bĂȘtement qui, si un jour le client, l'Ă©diteur, le pays, les actionnaires etc. sont dans le collimateur des Ătats Unis d'AmĂ©rique, peuvent ĂȘtre dĂ©gagĂ©es des boutiques d'applications, avec toutes les consĂ©quences que ça implique.
On peut espérer que ça n'arrivera jamais, ceci dit l'Úre Trump a montré qu'il ne fallait pas grands choses pour que des fous furieux mettent la pagaille à l'échelle mondiale en interdisant l'usage de produits. Et le contexte international actuel ne rassure pas non plus vis à vis de la Russie. Demandez leur avis aux iraniens, cubains, ukrainiens ou chinois.
Bref, dit autrement, quand vous utilisez une librairie FLOSS, regardez sur GitHub la section dĂ©diĂ©e Ă la licence. Si le texte âView licenceâ apparaĂźt au lieu du nom de la licence, il y a deux cas de figure :
- le texte a été modifié (souvent les copyrights) ou décoré faisant que GitHub s'y perd ;
- il y a du texte en plus dans le fichier. Ceci pouvant ĂȘtre des dĂ©tails sur d'autres licences appliquĂ©es ou d'anciens contributeurs, ou des clauses additionnelles.
Et oui, tout ça en droit français est valable.
Mais oĂč ailleurs peut-on se faire avoir ?
La plaie de l'excĂšs de social dans les forges logicielles
Et si on regardait le nombre de commits ?
DĂ©jĂ , pour âĂ©valuerâ un composant FLOSS, on peut regarder par exemple la vie de son code source. Ainsi, si un projet a des commits faits rĂ©guliĂšrement, on serait en droit de se dire qu'il est toujours vivant. Toutefois la contraposĂ©e est fausse car on peut trĂšs bien avoir des projets FLOSS qui semblent âvivoterâ, avec peu de commits rĂ©guliers mais qui fonctionnent trĂšs bien, tout simplement car le projet en lui-mĂȘme peut ĂȘtre maintenu ponctuellement, discrĂštement, mais efficacement.
D'ailleurs regarder la date et le nombre de commits est aussi une fausse bonne idĂ©e, car par exagĂ©ration on pourrait croire qu'un projet qui a beaucoup de commits est un projet de qualitĂ©, et fiable, ce qui est absurde. Dans la mesure oĂč des outils comme Git permettent le squashing, les merge commits et le rebasing, on remarque bien que se fier uniquement Ă un historique de commits n'est pas viable. De plus, doit-on vraiment prendre en compte les commits et pull requests ridicules qui arrivent lors du Hacktoberfest quand celles et ceux qui les proposent veulent juste profiter du moment pour avoir un joli badge sur le profil GitHub par pur opportunisme ?
Est-ce que pour l'exemple ci-dessous le projet est vivant ou mort ? On peut s'y fier ou pas ? Pour faire des confettis, c'est suffisant ?
Et Si On RegArDaIt LeS LiKes eT LeS FoLlOwErS ?
Les rĂ©seaux sociaux ont amenĂ© du pire dans GitHub avec les âlikesâ et les compteurs de âfollowersâ.
Cet autre piĂšge Ă Ă©viter consiste Ă se contenter de regarder ces nombres de stars et de forks d'un projet sur la forge logicielle que l'on veut. Avec l'avĂšnement des rĂ©seaux sociaux, on veut âlikerâ, âboosterâ, âup-voterâ ou âstarrerâ des projets que l'on aime bien, ou que l'on pourrait aimer, ou pour faire plaisir au gars derriĂšre qu'on connait. Mais en soit, ni le fonctionnel ni la qualitĂ© du projet ne sont par essence et par dĂ©finition concernĂ©s. Il en est de mĂȘme pour les forks ; il est courant de voir des utilisateurs en crĂ©Ă©er juste... au cas oĂč, pour grossir son profil GitHub, ou pour faire une pull request un jour ou pas. Surtout ou pas. Quand au nombre de âfollowersâ du dĂ©veloppeur principal, en quoi le fait qu'il en ait 2 300 au moins soit rassurant ? Le personnage peut ĂȘtre tout Ă fait exĂ©crable, pĂ©nible voire mĂȘme adepte de la pizza avec des patates dessus, pourquoi afficher cette fausse notoriĂ©tĂ© qui n'apporte rien ?
Est-ce que l'exemple ci-dessous est un gros projet ? Un truc balĂšze ? Non, c'est juste un programme affichant un train Ă vapeur si on se trompe de commande (moi j'adore).
Oh, et puis, bien Ă©videmment, on peut acheter des âstarsâ sur GitHub Ă prix rĂ©duit ! La plaie du social jusqu'aux forges logicielles, et Ă portĂ©e de main. Cet article est trĂšs instructif sur le sujet.
Environnement et qualité, beau code ou infect projet
On regarde les issues et requests ?
Un autre Ă©lĂ©ment Ă considĂ©rer avec prudence est le nombre de issues et de pull requests / merge requests. En effet, un projet qui en possĂšde beaucoup peut ĂȘtre un projet trĂšs vivant, comme aussi un projet qui est trĂšs Ă l'abandon mais avec une base d'utilisateurs rĂ©clamant des choses ou voulant contribuer sans personne derriĂšre pour valider. Ou alors peut ĂȘtre victime de trolls, comme ce fut le cas pour le dĂ©pĂŽt contenant l'algorithme de recommandations de Twitter. Prudence donc si on ne regarde que ces Ă©lĂ©ments sans les contextualiser.
On regarde les contributeurs ?
Chose intéressante aussi à voir, les contributeurs, ces petites mains visibles fournissant un incroyable travail.
Si vous utilisez un composant FLOSS avec un faible nombre de contributeurs, il est possible que derriĂšre ce projet il n'y ait presque personne en dehors de quelques passionnĂ©s dĂ©vouĂ©s (bĂ©nĂ©volement le plus souvent) Ă leur projet (pour la gloire plus que pour l'argent). Il faut donc se demander si le fait que le projet repose sur un tout petit nombre de contributeurs est bloquant ou pas. Pour une librairie affichant de confettis c'est peut-ĂȘtre un Ă©lĂ©ment peu pertinent. Mais pour votre couche de chiffrement, est-ce une bonne idĂ©e de compter sur un seul pĂ©quin derriĂšre ?
D'ailleurs, question bĂȘte, est-ce que l'on suppose que la source de vĂ©ritĂ© est... fiable ? Car pour ĂȘtre affichĂ©s comme contributeurs sur un projet GitHub, il faut apparaĂźtre Ă certains endroits dans les commits. Quid des personnes voulant rester anonymes ? Des personnes en pair-programming ? Ou d'une organisation faisant que le mainteneur principal s'acharne maladroitement Ă garder un historique Git propre et donc fait du copier/coller des pull requests mais en gardant Ă jour le fichier AUTHORS par honnĂȘtetĂ© intellectuelle ? Ou des robots qui exĂ©cutent des tĂąches automatisĂ©es sur le dĂ©pĂŽt et qui figurent dans les contributeurs ?
Ci-dessous un exemple, avec le projet Amaroq. A-t-on vraiment 13 contributeurs ou 1 seul ? D'ailleurs peut-on vraiment se contenter de mesurer l'activité par le nombre de commits ? Non, évidemment.
En parlant de commits et des contributeurs, peut-on vraiment faire confiance aux contributions ? Il y a des projets FLOSS qui exigent des signatures cryptographiques des commits d'une part, et que le Developer Certificate of Origin soit appliqué d'autre part. Engager les responsabilités de chacun et s'assurer que les commits soient intÚgres ne semble pas une mauvaise idée, mais a-t-on toutes et tous l'habitude de le faire ? Non. Méconnaissance ou fainéantise ?
La doc ?
D'ailleurs, on peut aussi regarder les Ă©changes qui ont lieu dans les issues, les Slack ou Mattermost. Pour ce composant FLOSS qui vous intĂ©resse, peut-ĂȘtre ne seriez-vous jamais amenĂ©s Ă Ă©changer avec les mainteneurs derriĂšre. Mais si vous voulez contribuer, ĂȘtes-vous prĂȘts Ă dialoguer avec une Ă©quipe ayant une organisation pyramidale ? Ou concentrĂ©e sur un dĂ©veloppeur quasi-messianique Ă qui tout le monde demande son avis et attend son accord ? Est-ce que l'ambiance est dĂ©lĂ©tĂšre dans le projet ?
On regarde le code source alors ?
Par ailleurs, jetez un Ćil aussi au code source en lui-mĂȘme.
Si vous avez un projet iOS Ă©crit en Swift, avec uniquement des compĂ©tences en Swift dans votre Ă©quipe, seriez-vous prĂȘt Ă soumettre des pull requests sur un composant Ă©crit en bon vieux Objective-C Ă la papy ? Si une librairie JavaScript vous plait pour faire des jolies animations, ça vous tente vraiment de l'utiliser sachant qu'elle va tirer jQuery et que vous ĂȘtes fiers de vous en ĂȘtre dĂ©barrassĂ©s y'a 2 ans ? Si le CERT signale de vulnĂ©rabilitĂ©s critiques, et que le composant que vous voulez est concernĂ©, comment et Ă quelle vitesse sont corrigĂ©es ces failles ? Il y en a certaines qui ne le sont toujours pas ? Et ils feront comment si le Cyber Resilience Act passe ? Si on voit plusieurs issues sur des vulnĂ©rabilitĂ©s non corrigĂ©es, remontĂ©es par Dependabot ou Snyk peut-on nĂ©cessairement en conclure que ce composant est dangereux alors qu'un autre sans de telles choses le serait moins mĂȘme si finalement il pourrait n'avoir en place aucun outil de dĂ©tection ?
Les gens c'est bien aussi non ?
Truc rigolo, vous connaissez le dĂ©veloppeur / grand chef derriĂšre le composant que vous voulez ? Car peut-ĂȘtre politiquement engagĂ© ou susceptible, ou impulsif, ou infect, et qu'il va saboter son projet ou pas, quitte Ă se faire virer de GitHub. Impossible ? Voyez plutĂŽt.
D'ailleurs, pourquoi c'est lĂ ?
Ce n'est pas parce que le code est sur GitHub, avec une licence libre ou open source que forcément cela a été fait avec une volonté de respecter la philosophie de l'un ou la méthodologie de développement de l'autre.
Par exemple le code a trĂšs bien pu ĂȘtre publiĂ© juste pour des raisons de transparence totalement opportuniste comme l'algorithme de recommandation de Twitter, maintenant X. Ou alors le code est publiĂ© car il embarque un composant sous licence Ă copyleft fort qui implique une mise Ă disposition du code source. D'autres projets peuvent ĂȘtre open source pour attirer des contributeurs trĂšs rapidement et aussi Ă©viter toute polĂ©mique en pleine pĂ©riode de crise, tant sur le manque de fonctionnalitĂ©s que sur le fonctionnement, sans pour autant avoir des perspectives sur le long terme. Ou alors certains projets dĂ©cident de se mettre en open source pour faire comme les concurrents et tout avoir public et sans vraiment de contributions venant de l'extĂ©rieur, pour le moment, ce qui est dommage car la qualitĂ© du produit est lĂ . Ou juste pour montrer ce qu'ils savent faire mais avec des licences ni libre ni open source, pour avoir quelques contributions mais juste avec le code source public. C'est trompeur, mais correct. Mais on a aussi des dĂ©pĂŽts open source car une communautĂ© s'est formĂ©e autours de l'outil, et lĂ c'est chouette. Plus chouette qu'exposer des projets comme des design system alors que les seuls utilisateurs pourraient ĂȘtre des filiales ou partenaires, qui se serviront gratuitement, plutĂŽt que d'ĂȘtre facturĂ©s.
Bref... ce n'est pas parce que le produit est joli sur la vitrine, bien placĂ© en tĂȘte de gondole avec un emballage colorĂ© qu'il faut forcĂ©ment sauter dessus. C'est bien de regarder la date limite de consommation, les ingrĂ©dients, les excipients et les origines.
Du coup...
Du coup, il n'y a pas de bons ou de mauvais composants FLOSS. Et non, cette rĂ©flexion n'est pas de la âbranlette intellectuelleâ, bien au contraire. Certains composants sont d'apparence plus fiables que d'autres, il faut les juger par leur efficacitĂ© mais pas uniquement ceci dit. Il faut rester prudent sur les licences altĂ©rĂ©es, bĂątardes ou simplement sur leur nature intrinsĂšque. S'intĂ©resser Ă lâenvironnement, Ă l'ambiance, aux commits et au code source est une bonne chose Ă©galement.
Il faut aussi envisager le fait qu'un projet finisse par mourir, que sa core team abandonne, que le moteur s'épuise. N'attendez pas pour les soutenir. N'attendez pas pour contribuer. N'hésitez pas les soutenir s'ils défendent des causes justes. L'open source c'est comme une kombucha : c'est super de récupérer une souche mÚre pour faire vos boissons, mais c'est mieux de partager vos souches filles à d'autres personnes pour qu'elles fassent pareil. à rester dans votre coin tout finira par pourrir et vous n'en tirerez plus grands choses. Prenez, améliorez, partagez et profitez.
Si vous voulez quelques pistes pour aborder les projets FLOSS, je vous partage ce support documenté, factuel et juste.
â DerniĂšre mise Ă jour : mercredi 17 octobre 2023 PrĂ©cĂ©demment sur paper.wf â
Did you enjoy reading this blog? Give me a beer đș or use something else â€ïžâđ„ Licensed under CC-BY-SA 4.0. Opinions are my own. To contact me, feel free to choose the most suitable medium for you, or for example Mastodon.