github-octocat-microsoftLe respect du logiciel libre par Microsoft-GitHub

Techniquement il faut avouer que c'est bluffant. Mais pourrait-on émettre un avis critique avant de toujours céder à la dernière techno du moment ?

Cet article fait suite à une vidéo de l'excellente chaîne Youtube Micode "Elle a codé un bot Minecraft révolutionnaire". Pourtant cette fois, le recul vis à vis de l'outil n'y a de place ni dans la vidéo, ni dans les commentaires (1 seul commentaire sur 300 portant sur le respect des licences et la responsabilité du code généré).

Copilot, dernier outil pour Hipster ? Ou antagonisme du développeur éthique que de simples mots comme "boite noire propriétaire", "peut être en version light gratuite mais on verra" devraient faire bondir ?


Nous suivrons également Jean Kevin, développeur senior, 1 an d'expérienc.e en mastèr.e recherch.e et ses commentair.es (rarement, voire jamais) éclairé.e.s sur la.e question. sic :

  • je suis sous le choque, car nous développeur / codeur on en chie avec des pages de codes, des heures etc sans savoir cette IA et sans l'utiliser mais j'ai la HAINE 😭🤣

  • Si vous voulez vous lancer dans un projet perso et que en plus vous voulez aider la planète, apportez votre brique à ce projet !

  • Super intelligente, belle et sportive - Je suis amoureux

Microsoft a t'il pour but d'aider la planète ? Jean Kevin va t'il calmer ses ardeurs ? Toutes les réponses dans ce qui suit...

Sommaire

Contexte - Qu'est-ce que GitHub ?

Lors de l'achat de GitHub par Microsoft en 2018, j'ai cru que le conglomérat s'achetait "simplement" une base de données de développeurs. C'est vrai : En mettant l'accent sur des fonctionnalités communautaires (page de profil, dépôts en tendance, Marketplace, Events, Fil d'actualité, etc.), GitHub, déjà en position dominante, accroit sa masse critique de développeurs.

Voici quelques chiffres qui se passent de commentaires : 46 000 dépôts publics en 2009 la première année d'exercice, 10 millions de dépôts avec plus de 3 millions d'utilisateurs fin 2013, 275 millions de dépôts dont plus de 50 millions publics avec 81 millions d'utilisateurs début 2022.

Ne cherchez pas, aucune plateforme n'égale GitHub. Le concurrent GitLab affiche 30 millions d'utilisateurs (nombre de dépôts non trouvé). Il a d'ailleurs vu le nombre de ses projets augmenter de 100 000, deux jours après l'acquisition de GitHub par Microsoft.

GitHub est devenu le portfolio d'un développeur ; GitLab pourrait tout à fait faire l'affaire mais les contributions à divers projets sont une activité centrale, or la majorité de ceux-ci est sur GitHub. Jongler entre les deux plateformes est contraignant. La configuration se fait aisément : automatiquement depuis la plateforme ou manuellement chez le développeur[9], mais la gestion simultanée d'une communauté sur deux sites n'est pas tenable.

À 7,5 milliards de dollars l'achat, le nouveau jouet incontournable doit fructifier. Ce que je n'avais pas anticipé (je ne suis apparemment pas le seul), est que Microsoft s'achetait aussi une base de données de code colossale pouvant servir à entraîner des algorithmes à loisir sans rendre de comptes à qui que ce soit.

J'avoue que je n'avais pas vu venir le fait que notre travail serait spolié, encapsulé dans des boîtes noires algorithmiques (évidemment propriétaires), puis in fine que le produit de ces boîtes nous serait revendu.

En quoi GitHub Copilot est problématique

Plusieurs problèmes sont soulevés en matière de sécurité et surtout d'éthique.

Sécurité et bonnes pratiques aux fraises

Un fait tout d'abord : Une étude datant d'août 2021 a conclu que 40% du code produit par Copilot contenait des bugs, erreurs ou des risques de sécurité potentiels[3].

Le code proposé par l'IA représente le niveau de maîtrise moyen des développeurs ayant produit la matière du corpus d'apprentissage. Cela implique des qualités mais aussi bien souvent les défauts. En d'autres termes, le niveau est plutôt mauvais. Car dans la plupart des projets, le code est écrit sans connaissance/respect des règles élémentaires de développement logiciel, des bonnes pratiques de programmation en général, ni des règles spécifiques du langage ou des librairies utilisées.

Anecdote prise sur la page d'accueil du projet ou comment prouver par A+B que le code d'entrée de Copilot est souvent mauvais

Remove filename suffixPage d'accueil du projet Copilot - Comment traite-t-on les extensions de fichiers chez Microsoft ? Prix Nobel.

Vous ne pouviez pas trouver meilleur exemple pour la page de présentation de votre outil vue par des millions de personnes. Vue la fonction (non écrite par Copilot), vous allez en effet avoir besoin de tests...
PS : librairie standard, réinvention de la roue... :

>>> from pathlib import Path
>>> Path('/folderA/folderB/folderC/fileX.txt').stem
'fileX'

Moi je travaille avec les "advocates" (?) de Microsoft, les experts absolus dans leur domaine, ils utilisent tous Copilot ;"
Source : Vidéo Youtube 11m36s

Les mêmes qui ont rédigé la page d'accueil ?

En bref le code produit est assez merdique, non sûr et parfois buggé. Il n'est pas rare de générer du code fonctionnel mais présentant des failles comme des injections SQL (test le plus facile rapidement mis en évidence par les bêta-testeurs du service). Cf. Grafikart.fr - Découverte de Github Copilot

Ces problèmes seront corrigés aisément par un expert du domaine, mais un dev moins expérimenté en laissera passer d'autant plus que ce ne sera pas SON code, qu'il vient d'écrire.

C'est ici que l'entraînement à la relecture de code d'autrui est important, or c'est aussi un talent qui manque à beaucoup ; ils sont nombreux à pondre des lignes de code dans leur coin sans la moindre aptitude à ne serait-ce que s'interfacer avec du code de collègues travaillant sur le même projet qu'eux.

En conclusion ce type d'auto-complétion avancée place le développeur dans une position de "code reviewer"/relecteur or cela engendre :

  • souvent une perte de temps ;
  • l'introduction de bugs persistant par manque d'expertise ;
  • d'erreurs difficiles à percevoir en relecture qui ne seraient pas faites lors d'une écriture ex nihilo ;
  • un épuisement mental dû à des périodes prolongées de relecture (croyez moi, c'est épuisant).
  • il se perfection année après année , et a un moment donnée , hériterai de l'ensemble des bonne manière et technique des grands dev tout spécialité confondue , imagine . Les surprises de l'avenir !!!!!

  • Incroyable toutes ces innovations ! Pour les débutants comme moi ce sont des outils qui pourraient aider ;) (même si il faut savoir le faire sans, évidemment)

  • j'imagine déjà ce qui va se passer dans les entreprises avec des mecs qui veulent a tous prix faire des économies ils vont prendre des gars au rabais et leurs filé ce genre d'outils pour livré des projets bien naze.

Éclair de génie final de Jean Kevin ! Tout n'est pas perdu.

La bonne nouvelle est que dorénavant les mauvais codeurs auront pour excuse de chercher à tromper l'IA de Microsoft en validant systématiquement des propositions de mauvaise qualité...

Quel est le corpus d'apprentissage du RNN (Réseau de Neurones Récurrents) ? Quid du respect des licences ?

Le dataset a manifestement été constitué de code hébergé publiquement sur GitHub.

It has been trained on a selection of English language and source code from publicly available sources, including code in public repositories on GitHub.
Source: Copilot FAQ

L'outil pond du code recontextualisé par blocs plus ou moins importants et plus ou moins modifiés, et plus gênant, parfois même des copies strictes de code en provenance directe du corpus d'apprentissage. C'est imparable car inhérent à la technologie utilisée.

L'origine de ce code est (actuellement) intraçable ; des utilisateurs/acheteurs vont se retrouver à intégrer de "bonne foi" du code sous licence dans leurs projets, sans en respecter la moindre clause censée encadrer les droits des auteurs ET des utilisateurs.

La totalité de ce qu'il "sait" a été acquis sur du code exposé publiquement sous licence libre, permissive ou même sans licence.


Les questions abordées ici s'articulent autour du problème du respect des licences ; par conséquent cette partie fait appel de manière importante à des termes pas forcément juridiques mais ayant trait aux licences utilisées pour encadrer légalement les travaux des développeurs lorsqu'ils publient leur travail.

J'y dédierai probablement un article mais quelques définitions aussi synthétiques que possible sont présentes dans les notes ci-dessous.

Copyright et Copyleft

TL ;DR: Un logiciel public sous copyright c'est bien, mais avec le copyleft c'est mieux pour les utilisateurs.

Copyright :
Le copyright peut être assimilé au droit d'auteur où l'auteur peut renoncer à ses droits (y compris moraux aux États-Unis) et place son travail dans le domaine public[1]. Il peut aussi conserver l'intégralité des droits, c'est ce qui arrive quand un travail est publié avec "Copyright xxx 2021" comme seule mention.

Seul, le copyright restreint les libertés des utilisateurs en autorisant une personne à réutiliser un travail et en faire un outil "boite noire" propriétaire ne présentant aucune des 4 libertés fondamentales du logiciel vraiment libre: utilisation, étude, redistribution, amélioration.

Copyleft :
Le copyleft ajoute des conditions au copyright ; il stipule que celui qui redistribue un logiciel, avec ou sans modification, doit aussi transmettre la liberté de le copier et de le modifier. Le copyleft garantit ces libertés à tous les utilisateurs.

L'auteur refuse donc que l'évolution possible de son travail soit accompagnée d'une restriction du droit à la copie, à l'étude, ou à de nouvelles évolutions. De ce fait, le contributeur apportant une modification (correction, ajout, réutilisation, etc.) est contraint de redistribuer ses propres contributions avec les mêmes libertés que l'original[2].

Que veut dire licence permissive ?

TL ;DR: Toutes les licences ne sont pas copyleft et c'est bien le problème.

Dans le monde du logiciel libre, les licences dites libres se divisent entre licences qui ont une clause copyleft et celles qui n'en ont pas, et qui sont parfois qualifiées de permissives. Le terme laxiste serait plus approprié.

L'usage du terme permissif est issu d'un glissement sémantique où on finit par croire que "permissif = simple avec plus de libertés" en oubliant la seconde partie de la définition : "permissif = plus de libertés pour une personne/entreprise qui voudrait utiliser le projet sans avoir en retour à rendre de comptes/participer à la communauté".

On observe le même glissement avec l'usage du terme "open-source" vs "libre".

Voir ausi Wikipédia - Comparison of free and open-source software licences

L'usage sans demande d'accord fait fi des licences multiples de copyright et copyleft des divers projets utilisés en se cachant derrière le "fair use" (source: FAQ Copilot). Concept nié systématiquement par les majors de l'industrie du divertissement sur des plateformes comme Youtube ; Ce qui est bien avec la pratique du "2 poids 2 mesures" est qu'on arrive toujours à ses fins qu'on ait tort ou raison.

Voir le lien suivant : lechainonmanquant.com - La notion de fair use et son application.

Cette notion permet à GitHub, d'essentialiser le problème en le résumant à l'équation code envoyé en ligne = code public or tout code public peut être utilisé pour de l'entraînement car c'est une pratique ancrée dans la communauté du machine learning

Pourtant voici les critères pris en compte pour valider ou invalider le fair use :

  • objectif de l'utilisation : commerciale vs éducative et non lucrative ;
  • la nature de l'œuvre protégée ;
  • la quantité et valeur de la partie utilisée au regard de l'ensemble de l'œuvre ;
  • les conséquences de l'utilisation sur le marché ou sur la valeur de l'œuvre.

Bon nombre de points concernent ce qui est reproché à Copilot.

Sur le fond on nous indique donc que ce que considère la "communauté du machine learning" a plus de poids légal que les licences.

La famille des licences GPL

Prenons l'exemple de la famille des licences GPL qui est l'une des plus utilisées (et presque la seule licence réellement libre car incluant un copyleft) :

Ne pas respecter une des clauses de la GPL revient donc à commettre sans permission un acte interdit par le droit d'auteur, donc à violer la loi ; Source : Wikipédia - GPL

La GPL par exemple est contaminante à tout point de vue. Tout travail dérivé de ce code doit être publié sous cette licence s'il est distribué à des utilisateurs.

Par défaut un code public mais sans information de licence ne peut être QUE LU ; donc ni réutilisé, ni même exécuté !

Selon la FSF :

Si le code source ne comporte pas de licence donnant aux utilisateurs les quatre libertés essentielles, ce n'est pas du logiciel libre à moins qu'il n'ait été placé dans le domaine public de manière explicite et valide.

En l'absence de licence accordant la liberté aux utilisateurs, ces derniers n'en ont aucune. Dans certains pays, les utilisateurs qui téléchargent du code sans licence peuvent être en infraction du seul fait de le compiler ou de l'exécuter.

Ceci est corroboré par le site choosealicense.com: No License initié par GitHub en 2013 :

Bien qu'un hébergeur de code tel que GitHub puisse vous permettre de visualiser et de bifurquer le code, cela ne signifie pas que vous êtes autorisé à utiliser, modifier ou partager le logiciel à quelque fin que ce soit.

Vos options :

  • Demandez gentiment aux mainteneurs d'ajouter une licence.
  • N'utilisez pas le logiciel.
  • Négociez une licence privée.

On est loin de la position actuelle de GitHub "d'habitude dans le monde du ML on fait comme ça, donc t'inquiète c'est ok".

D'autant que justement dans le monde du traitement des images, les données du corpus d'apprentissage sont la plupart du temps publiques et volontairement constituées pour dans ce but ; les données produites sont alors soit étrangères au corpus d'apprentissage (en classification, on obtient un étiquetage des données de l'utilisateur), soit tellement modifiées que le corpus d'apprentissage ne transparait plus dans résultat final (GAN).

GAUGANŒuvre générée par le projet GauGAN (Generative adversarial network). Tous droits abandonnés à NVIDIA, c'est cadeau.

Notons que le niveau de modification suffisant pour ne pas crier au plagiat est difficile à évaluer. Copilot affirme que 0.1% du code généré est une copie stricte du corpus, mais les témoignages permettent de supposer qu'en pratique ce chiffre est plus important[4].

Constatons néanmoins qu'avec Copilot on dépasse ce cadre à l'entrée et à la sortie de l'algorithme puisque les travaux du corpus d'apprentissage ont des conditions de redistribution et d'usage restreints et non respectés.

Comment cela est-il possible ?

J'avoue avoir fait un copié collé partiel du site choosealicense.com. Il manque le second paragraphe que nous allons voir ci-dessous.

Avant cela, vous souvenez-vous par hasard de la page de conditions d'utilisation que vous avez acceptées en créant votre compte ? Vous feriez bien car on y retrouve ceci :

You grant us and our legal successors the right to store, archive, parse and display your content, and make incidental copies [...]. This license includes the right to do things like copy it to our database [...]parse it into a search index or otherwise analyze it on our servers. This licence does not grant GitHub the right to sell Your Content.[...]
Source : GitHub terms-of-service


Even in the absence of a license file, you may grant some rights in cases where you publish your source code to a site that requires accepting terms of service. For example, if you publish your source code in a public repository on GitHub, you have accepted the Terms of Service, by which you allow others to view and fork your repository. Others may not need your permission if limitations and exceptions to copyright apply to their particular situation.
Source : choosealicense.com: No License

On retrouve une partie de ce texte dans la documentation de GitHub - Licensing a repository.

Donc les conditions d'utilisation de la plateforme vous forcent à accepter que :

  • Les utilisateurs peuvent copier votre dépôt car la plateforme le permet.
  • N'importe qui peut utiliser votre travail sans votre permission lorsque les conditions de cette utilisation relèvent d'une exception autorisée au copyright. Exceptions au copyright dans lesquelles on retrouve la notion de Fair Use.

  • GitHub se réserve le droit d'analyser le contenu. C'est vague et anodin mais après tout c'est ce qui est fait dans le cas présent...

En retour GitHub s'engage toutefois à ne pas revendre le contenu de leurs utilisateurs...

Quelques chiffres en provenance de GitHub en 2015.

"Here at GitHub, we’re big fans of open source".
Open source assurément ; libre beaucoup moins.

percentage of repos licensedÉvolution du nombre de projets sous licence sur la plateforme GitHub entre 2008 et 2015

Le pic en 2013 est dû à l'initiative de GitHub visant à faciliter l'intégration de licences (via le site choosealicense.com), dans le but de protéger les auteurs contre tout vol et mauvaises interprétations de leurs droits. Ou après réflexion, pour légaliser le plus possible les modifications de projets que la plateforme héberge/permet et ne peut nier ?

La diminution de l'usage des licences peut s'expliquer par :

  • l'augmentation exponentielle du nombre d'utilisateurs et de projets sur la plateforme : Les nouveaux inscrits se sentent moins concernés ;
  • l'arrivée de dépôts qui ne contiennent pas de code (blog, etc.), donc moins susceptibles d'être soumis à une licence.

Ainsi en 2015 moins de 20% des projets sont licenciés, et il est raisonnable de penser qu'en 2022, on tombe à moins de 10%.


Des chiffres plus récents ne sont pas disponibles mais on peut utiliser l'outil de recherche et un script rapide pour les reproduire. Voici la liste des 10 licences les plus présentes sur GitHub ainsi que le nombre de dépôts publics les utilisant (à jour en janvier 2022) :

NameNumber of projects
ISC43 058
Mozilla Public License 2.077 151
BSD 2-clause 'Simplified' license97 756
Others124 668
GNU Lesser General Public License family134 394
Creative Commons license family150 479
The Unlicense214 703
BSD 3-clause 'New' or 'Revised' license251 439
Apache license 2.01 846 004
GNU General Public License family2 246 013
MIT7 430 595
------
Sous copyleft (MPL, GPL*, CC BY-SA)2 471 991
------
Total12 616 260


github_first_10_licensesReprésentation graphique des licences associées aux dépôts publics sur GitHub en janvier 2022. Soit 12 616 260 dépôts au total ; 2 471 991 d'entre eux sont sous copyleft, soit environ ~20%.

Le nombre total de dépôts uniques (non miroirs) et publics est difficile à évaluer. En effet, la page de recherche plafonne à ~50 millions de résultats pour cause de timeout depuis au moins 2020 pour 200 millions de dépôts, là où elle affichait 28 millions en 2018. En janvier 2022 GitHub héberge 275 millions de dépôts. Si la plateforme en a gagné 20 millions entre 2018 et 2020, il semble raisonnable de penser que début 2022 nous pouvons trouver entre 70 et 100 millions de dépôts publics.

Ce qui permet de conclure que entre 10% et 14% des dépôts publics possèdent une licence.

Les 10 licences les plus utilisées sont toutes approuvées par la communauté FOSS (Free and Open Source Software) et par la FSF en tant que licences libres et parfois laxistes (sans copyleft)[5]. Seules les licences de la famille GNU GPL, la Creative Commons CC BY-SA, et la Mozilla Public License 2.0 sont dotées d'un copyleft et sont donc réellement libres.

Notons que toutes les licences approuvées sont compatibles avec la GPLv3 (au cas où les développeurs voudraient s'engager sur la voie de la rédemption...).

Le réel problème qui nous intéresse ici porte premièrement sur les projets sous copyleft potentiellement utilisés dans GitHub Copilot ; soit ~20% des codes sous licence hébergés. Et deuxièmement sur les dépôts sans licence ou avec conservation totale des droits par défaut. Ces derniers sont potentiellement bien plus nombreux et difficilement dénombrables sans analyse approfondie de ce qu'héberge la plateforme.

Microsoft-GitHub s'assoit littéralement sur les attentes du monde du logiciel libre avec Copilot. Toutefois il semble difficile pour les auteurs de code sous licence permissive de jouer les offensés (80% des dépôts sous licence sur GitHub). Ils sont en effet au cœur du problème en ne participant pas à une masse critique de code pouvant décourager les sursauts d'une industrie monopolistique.

Responsabilité du code produit par Copilot

Le développeur est-il responsable d'une atteinte au Copyright, sachant qu'il ne peut remonter au projet originel pour prendre acte de son statut ?

Selon Copilot, "circulez y'a rien à voir" :

The suggestions GitHub Copilot generates, and the code you write with its help, belong to you, and you are responsible for it.
We use telemetry data, including information about which suggestions users accept or reject, to improve the model. Your private code is not used as suggested code for other users of GitHub Copilot.
Source : Copilot FAQ

Vous pouvez donc développer votre code propriétaire et dormir sereinement. Bien que ce code sera partiellement construit sur le travail non rémunéré de vos collègues.

La position de la FSF à propos de GitHub

Depuis longtemps, la FSF est claire au sujet de GitHub, c'est une plateforme non libre qui recommande de mauvaises pratiques concernant les licences (notamment l'omission volontaire de sa mention/existence dans les sources). Elle recommande/exhorte de ne pas l'utiliser[6].

Autre citation (why-not-github) :

Ne laissez pas le centre névralgique de votre projet [...] à la merci de personnes qui veulent simplement un retour sur investissement, et ne se soucient pas des principes d'une minorité de nerds en colère.

[NDLR: À propos de Copilot] Si vous aviez besoin d'un autre indicateur comme quoi GitHub est en train de prendre la température pour voir quels abus de votre code il peut faire à l'avenir, c'en est un bon. N'hébergez pas votre code sur GitHub si vous pouvez l'éviter.

La position de Microsoft

Je rappelle que dans le monde du logiciel, les licences dites "libres" se divisent entre licences qui ont une clause copyleft et celles qui n'en ont pas (dites permissives ou laxistes).

Le copyleft bien que qualifié de non permissif vise précisément à s'assurer que des droits fondamentaux soient garantis et transmis aux utilisateurs.

Voici en substance ce que Microsoft pense des droits des utilisateurs :

Steve Ballmer, qui deviendra PDG de Microsoft, a comparé de manière virulente la licence GPL à un cancer qui s'étend à tous les logiciels qui utilisent du code sous cette licence, en voulant établir que cette licence était incompatible avec le commerce du logiciel, littéralement « a cancer that attaches itself in an intellectual property sense to everything it touches ».
Source : Wikipédia - Copyleft

Le propos est fallacieux car à aucun moment la GPL n'interdit le commerce du matériel et de ses dérivés ! De plus rien n'empêche un auteur de publier son travail en vendant des fonctionnalités ou sous une double license : libre communautaire d'une part, et payante pour les entreprises ou pour inclusion dans un projet propriétaire d'autre part. C'est le cas de Matomo alternative sous lience GPL à Google Analytics gratuit mais qui tarifie son offre d'hébergement et des plugins, ou de GhostScript.

Cette pensée est omniprésente dans l'industrie du développement ; à tel point que le terme "logiciel libre" a disparu en faveur du terme plus confus "logiciel open source". Comment s'étonner dorénavant que les licences permissives soient les plus utilisées ou que choisir une licence ne soit pas une priorité dans le processus de publication d'un travail ?

Chez Microsoft et chez tous vos rejetons, VOUS êtes le cancer de ce monde.

Conclusion

De mon point de vue, Copilot facilite considérablement l'utilisation non autorisée du travail d'autrui.

Je considère cela comme du recel de code ; je considère qu'il s'agit d'une grave atteinte aux droits des développeurs de logiciels.

Les entreprises ne SONT PAS nos amies surtout quand elles semblent avancer des principes vertueux.

Google nous fait travailler à améliorer sa reconnaissance d'image en nous faisant résoudre ses captchas (pour accéder à des ressources plus difficiles d'accès par des êtres humains que par des robots d'indexation[7]).

Microsoft se sert de développeurs de logiciels bien souvent libres pour créer des produits propriétaires. D'un point de vue éthique l'intellect et temps de travail sont volés.

Bien que considéré à titre personnel comme mal moindre face aux autres géants du net omniprésents durant la décennie qui vient de s'écouler, il faut bien constater que Microsoft est toujours aussi toxique et a conservé sa pleine capacité à nuire aux écosystèmes dont il s'accapare.

À l'heure de la rédaction de ces lignes, Microsoft envisage ni plus ni moins que d'acheter Activision-Blizzard-King. Je souhaite bien du plaisir aux studios et acheteurs concernés pour leur entrée dans cet univers.

Le plus beau dans tout ça est que les conséquences juridiques de ce genre d'outil n'ont pas été le moins du monde anticipées par les organismes tels que la FSF[8], alors que leur émergence nous pendait au nez depuis plusieurs décennies, alors que le rachat de GitHub aurait dû éveiller des soupçons plus visibles dans les sphères aptes à anticiper ces problèmes.

C'est juste un peu triste, mais évidemment normal, que tout soit payant
C'est surtout qu'il faut faire tourner les serveurs et alimenter les modèles IA qui pèsent des centaines de TB.

Surtout ne change pas Jean Kevin.

Références