Software Heritage - Préserver le patrimoine logiciel de l’humanité

Roberto Di Cosmo

Titre : Software Heritage : pourquoi et comment préserver le patrimoine logiciel de l’Humanité
Intervenant : Roberto Di Cosmo
Lieu : Paris . Palais des Congrès - Conférence Devoxx France
Date : avril 2018
Durée : 20 min 18
Visionner la vidéo
Diaporama support de la présentation format PDF
Licence de la transcription : Verbatim
Illustration : Diapositive n°8 du support de la présentation
NB : transcription réalisée par nos soins. Les positions exprimées sont celles des intervenants et ne rejoignent pas forcément celles de l'April.

Description

Le logiciel est au cœur de notre société numérique au point et le code source des logiciels contient une part croissante de nos connaissances scientifiques, techniques et organisationnelles, au point d’être devenu désormais une partie intégrante du patrimoine de l'Humanité.

Transcription

Merci à tous d’être ici. Ça fait vraiment plaisir de pouvoir venir parler avec vous de quelque chose qui me tient vraiment à cœur qui est le logiciel. Roberto Di Cosmo ; dès que j’ouvre la bouche, vous savez bien que je suis italien tout de suite, je n’ai pas réussi à perdre l’accent ; ça fait trente ans que je suis en France, mais bon bref ! J’espère que vous me pardonnerez un peu.

De quoi on va parler ? Si vous regardez autour de vous aujourd’hui, vous voyez bien que le logiciel est partout. D’ailleurs nous, programmeurs, c’est une partie importante de notre société. Le logiciel est le moteur de notre industrie, c’est le carburant de l’innovation, c’est un pilier de la recherche scientifique moderne, c’est aussi le médiateur essentiel qui nous permet d’accéder à toute information numérique. Et en plus, regardez bien, c’est aussi un instrument qui permet de manipuler un tout petit peu les élections ; ça ce n’était prévu à l’origine, mais disons qu’effectivement ! Voilà ! On peut dire qu’il y pas mal de notre connaissance et de notre savoir-faire qui est aujourd’hui embarqué dans du logiciel. Donc on peut vraiment dire que le logiciel est devenu une partie essentielle de notre patrimoine culturel.

Mais quand on dit ça à quelqu’un qui n’est pas de notre communauté, il a tendance à oublier un aspect essentiel, c’est que oui les logiciels sont importants, ce sont des choses qui nous permettent de faire des tweets, de communiquer avec nos copains avec notre téléphone, mais pour réaliser des logiciels il faut d’abord les écrire. Et quand on les écrit, on écrit du code source. Et c’est bien le code source qui contient ces connaissances, pas juste le logiciel exécutable. Ça ce n’est pas quelque chose de très nouveau, ce sont des observations qui existent depuis un moment.

Vous voyez le monsieur dont j’ai mis une citation là-haut. Harold Abelson1 est un professeur d’informatique au MIT qui a un certain âge, c’est lui qui a contribué à créer la Free Software Foundation, qui a contribué à créer Creative Commons, qui était à l’origine du petit projet qui s’appelait Scratch qui est maintenant très utilisé pour apprendre la programmation au début à tout le monde. Il avait écrit un livre qui était un livre super important quand j’étais encore sur les bancs de l’université, donc ça ne me rajeunit pas, j’ai mis la date, comme ça full disclosure, vous savez à peu près, et il disait dans son introduction, vous voyez : « Des logiciels il faut d’abord les écrire pour que d’autre personnes puissent les lire et seulement, accessoirement, pour qu’une machine puisse les exécuter ». Vous allez dire d’accord, 1985, ça c’est un prof qui dit à ses étudiants : « Si je ne comprends rien de ce que vous avez écrit vous aurez une sale note ! » D’accord ? Ce n’est pas faux, mais il y a quelque chose de plus profond c’est qu’en réalité, vous savez bien, si vous écrivez un logiciel et vous avez besoin de le modifier, aujourd’hui on les modifie très souvent, il faut quand même arriver à comprendre ce que vous avez écrit il y a deux semaines. D’accord ! Donc c’est important d’arriver à comprendre ce qu’on a écrit dedans.

1985, ça c’était un message qui était un peu dur à comprendre parce qu’à l’époque il n’y avait pas beaucoup de code source disponible. D’accord ! On ne voyait pas grand-chose, la plupart du code source était stocké dans des coffres-forts dans les entreprises. Heureusement aujourd’hui, grâce au mouvement du logiciel libre, de l’open source qui a quand même complètement changé la façon dont nous développons du logiciel, il y a énormément de code source qui devient disponible et si vous cherchez un peu vous trouvez des choses qui sont absolument magnifiques. Par exemple, est-ce que quelqu’un ici se rappelle encore de Doom2 ? Voir un peu ? Ah quand même, voilà, je ne suis pas le seul vieux dans la salle. Super ! Eh bien le programmeur mythique qui avait travaillé pour id Software à l’époque et qui avait écrit Doom, c’est John Carmack et on attribue à John Carmack3 cette fonction que vous voyez là. D’accord ! C’est le calcul de 1 sur racine de x. C’est une fonction qui est très importante quand vous faites du 3D.

À l’époque où il avait envie de sortir le jeu, les coprocesseurs en floating point dans le numérique n’étaient pas super efficaces, donc ça prenait trop de temps, si vous appeliez juste la fonction pour faire 1 sur racine carrée, c’était une division flottante et une racine carrée flottante, c’était super cher, donc vous pouvez tourner votre manette mais le fusil ne bouge pas et vous êtes mort et vous n’êtes pas content dans le jeu.

Du coup il a dû trouver une solution qui était plus intéressante. Donc vous voyez ici, dans le code source qui est vraiment le code source qui maintenant est devenu disponible, c’est sous open source depuis 95, vous voyez ce qu’il fait ? Il prend un flottant, number est un flottant, là-bas, et après il commence à faire des choses bizarres et heureusement qu’il y a des commentaires : vous voyez une ligne, là il y a marqué evil floating point bit level hacking, donc c’est une méchante manipulation au niveau des bits. Alors qu’est-ce qui se passe ? Je ne vais pas rentrer dans les détails, mais essentiellement. Vous avez votre flottant, c’est une représentation IEEE 32 bits là-dessous, il arrive, c’est sous la forme exposante mantisse ; et la mantisse c’est ce qu’il y après la virgule quand c’est 1 virgule quelque chose. Bref des histoires.

Si vous voulez faire la racine carrée de quelque chose, la chose simple c’est calculer le logarithme en base de 2, après vous multipliez par -1/2 et après vous refaites la manipulation inverse. Il faut faire quelques petits ajustements pour enlever l’exposant et donc là on arrive jusqu’à la ligne qui dit la chose que je vais pas prononcer parce que sinon ça va être censuré sur YouTube plus tard. Donc vous voyez le commentaire là [what the fuck, NdT].

Et un peu plus bas, il fait d’autres choses qu’on ne comprend pas. Pourquoi il multiplie y par 3/2, etc., mais heureusement il y a un commentaire qui dit « première itération ». Ah ! Première itération ça me rappelle quelque chose quand j’étais sur les bancs de la fac il y a super longtemps, ça doit être la méthode de Newton pour approcher une fonction. Effectivement ! Donc il fait des tests et après, en réalité, il fait cette deuxième itération, mais ça ne sert pas à grand-chose, vous ne voyez pas trop la différence quand vous faites le jeu. Donc il est arrivé, il a fait ça.

Cette fonction-là est une fonction mythique, vous la retrouvez même si vous allez rechercher ça sur Wikipédia, vous mettez juste « 0x5f3759df », vous tombez directement sur la page Wikipédia de la fonction4.

Il y a d’autres exemples, d’accord ! Il n’est pas le seul.

Essentiellement c’est pour vous dire, ça c’est vraiment précieux, c’est de la conception qui prend du temps. Ça fait quelques lignes, c’est super dur de comprendre, de le concevoir et c’est précieux de le retrouver, de le comprendre plus tard. Et on ne peut le faire que si nous disposons du code source et en particulier des commentaires, même si peut-être il faut faire une passe pour effacer quelques petits gros mots qu’il ne faut pas trop faire passer ; et si on avait seulement le binaire, tout ça serait perdu.

Donc si vous voulez, pour résumer d’une certaine façon comme disait Len Shustek, qui est le directeur du board du Computer History Museum, qui un endroit magnifique à Mountain View dans lequel ils essaient de reconstruire un peu de l’histoire de l’informatique : « Les codes sources nous ouvrent une fenêtre dans la tête du programmeur, de l’architecte, de la personne qui conçoit un logiciel » et c’est vraiment précieux.

Alors, vous voyez en plus, le code source est quelque chose source d’assez récent. Ce que nous faisons est une science, une technologie, une discipline qui est assez récente ; elle n’a pas beaucoup plus de 50 ans. Et en 50 ans la croissance a été spectaculaire. C’est-à-dire qu’il y a 50 ans, presque jour pour jour, on mettait le premier homme sur la lune et pour arriver à le faire arriver là-bas et pas se perdre dans l’espace, il y avait 60 000 lignes de code qui ont été écrites sous le pilotage de Margaret Hamilton, une dame incroyable qui est encore vivante aujourd’hui et qui avait écrit, à l’époque : « quand on a écrit ce code on ne savait pas du tout ce qu’on faisait ; on était dans le Far-West le plus complet ». D’accord ! Pour vous rappeler, mettre un homme sur la lune, c’était 200 milliards de dollars à l’époque, ce n’est pas tout à fait donné et le code logiciel était une partie de ce coût-là.

Cinquante ans après, si vous regardez, le noyau Linux qui est juste une toute petite partie de la partie pile Android que vous avez dans votre téléphone là-dedans, ça fait quand même 20 millions de lignes de code et on l’utilise régulièrement.

Donc la vraie question est de savoir est-ce qu’on prend soin de ce patrimoine précieux que nous sommes en train tous collectivement de construire ? On pourrait se dire que oui, près tout, s’il y a une industrie florissante, c’est l’industrie de l’informatique. S’il y a des géants qui ont des quantités d’argent pas possibles, c’est bien dans notre domaine, et pourtant, faisons un petit peu le tour. Vous allez voir que la situation n’est pas si brillante que ça !

Première chose, oui le logiciel est bien partout, dans un bon sens on l’utilise partout, mais aussi partout dans un mauvais sens, dans le sens où il est éparpillé un peu partout. Il n’y a pas un catalogue central de tous les logiciels. Nous utilisons tout plein de plateformes diverses et variées pour développer, pour distribuer du code. Donc quand moi j’étais plus petit, je ne dis pas que je n’étais pas jeune, quelques années qui sont passées, il y avait une plateforme qui s’appelait SourceForge qui a un peu disparu maintenant. Après j’ai eu pas mal d’étudiants, toutes les fois qu’il y avait des étudiants qui me disaient : « Non, il ne faut pas utiliser celle-là, il y a un truc super, merveilleux, il faut que tu passes tout ton code dans un autre endroit », donc à un moment donné je l’ai mis sur Gitorious, par exemple. Il y avait Google Code, il y avait plein d’autres choses, maintenant il y a GitLab. Maintenant la plus populaire c’est GitHub5, évidemment. Mais après, si vous regardez ce qui s’est passé, vous avez un bout de code qui était sur SourceForge, qui a été bougé sur Gitorious, après on l’a mis sur Ghihub, donc finalement si vous voulez le retrouver ce n’est pas super facile ; on n’a pas de catalogue. La meilleure façon pour retrouver du code aujourd’hui c’est demander à un copain à la machine à café ou faire une recherche dans un moteur de recherche. Ce n’est pas un catalogue ça !

Non seulement tout cela est éparpillé donc on n’a pas quelque chose centralisé, mais le logiciel, comme toute information numérique finalement, est très fragile. Bien évidemment vous pouvez perdre votre clef USB avec 150 gigas de données dessus ; ça on le sait. Vous pouvez avoir une panne dans un data center, ça c’est aussi une chose qu’on sait, c’est pour ça qu’il faut faire des backups. Il ne suffit pas de faire des backups, il faut aussi vérifier que ça marche. Pour les gens qui ont suivi GitLab, il y a un an environ, vous vous rappelez il y avait cinq niveaux de backups ; ils ont tous échoué l’un après l’autre. Il faut aussi vérifier que ça marche. Mais plus récemment, on a trouvé quelque chose d’incroyable : il y a des attaques malveillantes dans lesquelles on essaye, on pirate vos systèmes, on crypte tout, donc y compris vos codes sources, ou on détruit vos données. Et plus récemment quelque chose qui est quand même surprenant. Vous vous rappelez là je vous ai donné une liste d’exemples ? Gitorious n’existe plus ; Google Code n’existe plus ; ils ont été fermés il y a deux ans environ, pour des décisions purement business. Alors ça c’est nouveau ; on n’était pas habitués au fait que quelqu’un, d’un jour à l’autre, dise : « Ah ben tiens, finalement ce n’est plus intéressant, on ferme la plateforme ». Sous Gitorious il y avait 120 000 projets de développement en logiciel libre. Sous Google Code un million et demi. Et enfin, la dernière chose, c’est que finalement le logiciel est essentiel ; c’est vraiment partout ; c’est même dans notre corps si vous avez un pacemaker, si vous avez des systèmes différents c’est le logiciel qui contrôle votre propre vie. Donc c’est devenu essentiel de garantir la qualité et l’absence d’erreurs graves dans les logiciels critiques. On se dirait qu’on devrait tous avoir une plateforme de recherche massive qui nous permette d’analyser tous les codes sources qui existent de façon systématique pour réduire autant que possible les erreurs et défauts.

Mais alors, malheureusement, autant les êtres humains ont réussi à se motiver pour dépenser quelques dizaines de milliards pour faire des infrastructures magnifiques qui nous permettent de regarder les étoiles ; là, par exemple, c’est une belle photo du télescope du désert d'Atacama qui permet de regarder les étoiles, et autant on n’a pas réussi à mettre en place une infrastructure de recherche pour analyser les codes sources.

Pour toutes ces raisons-là, il y a deux-trois ans environ, on s’est dit qu’il fallait faire quelque chose. Et, pour faire quelque chose, on a lancé un projet qui s’appelle Software Heritage6, dont vous pouvez trouver le site web là-bas. Ce projet a comme mission, précisément, d’aller récolter tous les codes sources de tous les logiciels qui sont publiquement disponibles sur la planète, si possible aussi les autres, de les préserver sur le long terme, de les rendre facilement accessibles, ces codes sources, pour tout le monde.

Ce n’est pas juste préserver les codes de l’Apollo par exemple — ça c’est très intéressant pour les études et pour le passé —, c’est aussi pour analyser les codes d’aujourd’hui et nous aider tous à améliorer les logiciels qu’on prépare pour le futur.

Comment faire ça ? Eh bien il y a un petit papier qui est en accès ouvert que vous pouvez télécharger sur l’URL que vous trouvez sur ce transparent-là7, où l'on a posé des principes de base.

Premier principe de base c’est — moi je suis assez vieux, j’ai appris la leçon — donc on fait une seule chose et on la fait bien. Donc on construit une infrastructure qui collecte, préserve et partage les codes sources et on travaille avec tous les autres, donc avec des patrimoines culturels — c’est pour ça qu’on travaille avec l’Unesco —, avec les industries — c’est pour ça que je suis ravi d’être avec vous aussi —, avec les chercheurs, avec les enseignants, pour faire en sorte que cette plateforme puisse être utilisée pour plein d’applications différentes.

Si vous allez regarder sur le site, on a quand même commencé à faire notre travail, ce n’est pas trop mal ! On a déjà collecté à peu près 83 millions des origines de projets en logiciel libre qu’on retrouve sur la planète et on a tout dupliqué dans l’infrastructure ; donc il y a, à peu près, 4 milliards et quelques centaines de millions de fichiers sources uniques pour à peu près 1 milliard de commits. OK ! Et pour construire tout ça, on a mis des piliers importants. D’un point de vue technologique, tout ce que nous développons est du logiciel libre. Vous pouvez voir ce qu’on fait. La façon dont on travaille est transparente, il y a des canaux IRC, des mailing lists, vous pouvez venir voir et discuter, tout le monde est bienvenu.

On essaie de répliquer, on veut faire des miroirs. On ne prétend pas qu’on est les meilleurs du monde, on fera des erreurs, mais pour corriger les erreurs, on essaye de travailler avec plusieurs personnes en parallèle. Et pour ce qui concerne le contenu, on stocke toutes les données factuelles : on a tout l’historique des systèmes de contrôle des versions. Et on veut construire une organisation qui n’est pas une start-up mais qui est une fondation no profit avec plusieurs partenaires au niveau international. D’ailleurs la fondation, on va la créer d’ici deux semaines je pense.

Comment ça marche ?

Si vous regardez l’architecture de ce qu’on fait, de façon très simplifiée évidemment, d’un côté vous avez plein de plateformes, Ghihub, GitLab, les différentes distributions, les gestionnaires de paquets, les zip, toutes les choses que nous utilisons tous les jours. On ne veut pas juste aller faire une copie un jour. On veut vraiment aller faire une copie de tout ce qu’il y a dedans mais aussi garder à jour l’information. Pour faire ça, il nous faut construire l’adaptateur pour chacune de ces plateformes. C’est beaucoup plus compliqué que faire une archive du Web parce que dans le Web au moins j’ai un standard, j’ai HTTP et les URL pour suivre un peu. Dans les plateformes non. Chaque plateforme a sa propre API pour dire ce qu’il y a comme contenu et certaines plateformes n’ont même pas d’API.

Donc on construit des adaptateurs et après, une fois qu’on a construit ces adaptateurs, on a la liste de tous les projets qui sont sur chacune de ces plateformes. Mais là ce n’est pas fini, c’est une sorte de tour de Babel à deux étages. Donc non seulement il y a des protocoles différents pour chaque plateforme, mais après, dedans, vous avez du code qui est maintenu sous Git, sous Bazar, sous Mercurial, des vieux trucs sur CVS, des choses qui sont juste des systèmes de paquets, des tar, des zip, des paquets dans tous les systèmes divers et variés. Et comme on se place dans une logique de long terme, c’est-à-dire on veut que tout ce qu’on collecte soit là pendant longtemps, c’est vraiment important de ne pas obliger tout le monde, après, d’avoir la bonne version de Git, la bonne version de Subversion, la bonne version de Mercurial pour aller relire tout ça. Donc on fait, nous, le travail de tout adapter. On relit tout et on reconstruit un énorme, gigantesque graphe de Merkle, si vous voyez, si vous êtes habitués vous connaissez un peu comment Git fonctionne, c’est une sorte de graphe Git mais au niveau de la planète, avec absolument tous les codes.

Là-dedans, si vous regardez ce qu’on fait, maintenant on a automatisé le suivi de Github ; on a automatisé le suivi de Debian. On a sauvé tout ce qu’il avait dans Gitorious, on a sauvé tout ce qu’il y avait dans Google Code. Donc grand merci à l’Archive Team pour Gitorious, à Vinton Cerf pour Google Code qui nous a donné un coup de main pour avoir ça. On a tout l’historique des logiciels GNU et après, petit à petit, on va élargir avec votre aide j’espère.

Ce n’est pas si grand. Grâce au fait qu’on déduplique ça fait un peu moins de 200 téraoctets de données pour le contenu des fichiers et une dizaine de téraoctets pour le graphe ; ça fait quand même un graphe qui est très grand. Et maintenant, juste pour vous, si vous voulez vous pouvez noter cette URL-là8, il y a un mot de passe, un utilisateur-mot de passe ; utilisateur « devoxx », allez savoir pourquoi, et mot de passe « 2018 ». Vous pouvez regarder ce qu’il y a dedans, cherchez un peu. Je n’ai pas le temps de vous faire une demo parce qu’il reste peu de temps, mais vous pouvez chercher à travers toutes les origines, vous pouvez faire du browsing des contenus des répertoires, des révisions, etc. Vous pouvez voir les différences entre deux révisions.

Ce n’est pas une plateforme de développement, c’est une archive ce que je vous présente là. Mais c’est quand même une archive faite pour nous, pour des développeurs, pour des gens qui savent lire ce qu’il y a dedans. Ce ne sont pas juste des zip que vous pouvez trouver dedans.

Et là, comme on a besoin, évidemment, de construire cette infrastructure pour le long terme, pour notre communauté et pour la société tout entière, c’est très important de faire émerger une prise de conscience de l’importance de ce que nous faisons jour après jour, des logiciels que nous écrivons. C’est du vrai patrimoine de l’humanité ; ce n’est pas juste un objet technique.

Donc là, on a fait un gros effort ces derniers temps. Il y a un an on a signé un accord avec l’Unesco. Il y avait Inria, l’Unesco de l’autre côté, et dans la photo vous voyez des personnes dont au moins la personne au milieu je pense que vous la connaissez. À gauche il y a Antoine Petit qui était président de l’Inria, qui est maintenant président au CNRS et à droite Irina Bokova qui était la directrice générale de l’Unesco qui a été remplacée par Audrey Azoulay – j’espère qu’on arrivera à voir elle aussi –, dans lequel [accord] on reconnaît l’importance de préserver, rendre disponible tout ce patrimoine. On a trouvé plein de monde qui partage cette vision. Vous avez des logos qui vont vous parler. On a aussi besoin, évidement tout ça n’est pas gratuit, on a besoin de ressources. L’Inria a mis énormément de ressources et d’énergie au début et après il y a des entreprises qui, petit à petit, se sont jointes à nos efforts ; vous trouvez Microsoft, Intel, la Société Générale, d’autres, même Github.

Et là, si je peux vous envoyer un message, vous pouvez aider et on a vraiment besoin de vous. Surtout sur la partie codage, notre code est tout en open source ; si vous voulez jeter un coup d’œil et donner un coup de main vous êtes les bienvenus.
On a besoin de documenter pour que ça soit plus simple pour les autres de venir.
On a besoin de gens qui aident à résoudre cette tour de Babel en faisant tous les adaptateurs pour tous les différents systèmes. On a une interface web qui n’est peut-être pas aussi flashy qu’on voudrait, mais vous êtes bienvenus de venir là.
On a aussi, de temps à autre, l’occasion de recruter des gens. Il y a une offre d’emploi qui est en ligne.

Si vous ne pouvez pas faire ça, eh bien allez convaincre votre compagnie de devenir un sponsor, ce n’est pas compliqué, il y a des liens ici.
Si vous ne pouvez pas, à votre bon cœur, contribuez personnellement : depuis ce matin vous pouvez donner sur le site web du projet, sur « donner ».
Et si vous n’avez même pas envie de faire tout ça, eh bien au moins parlez-en autour de vous.

C’est vraiment très important de partager cette mission et faire reconnaître à tout le monde que ce que nous faisons ici, dans notre discipline, ce n’est pas juste de la technique bas de gamme c’est vraiment la nouvelle littérature du 21e siècle.

Pour terminer, dans les quelques secondes qui restent, c’est un projet qui est ouvert, c’est un projet qui est au service de tous, n’hésitez pas à partager cette mission donc construire une librairie d’Alexandrie de tout le code qui a jamais été écrit et un CERN pour le logiciel dont nous avons vraiment besoin.

Merci beaucoup pour votre attention.

[Applaudissements]