· 6 min de lecture · Eusel

Le filetage écrasé

Un matin, une roue de vélo parfaitement réparée que je ne peux pas gonfler — à cause d'un embout en plastique de deux centimètres. De ce filetage écrasé, je tire l'histoire de nos dépendances logicielles, du fiasco xz, et de ces mainteneurs seuls sur qui repose tout l'édifice.

Réflexions Open source Sécurité

Ce matin, j’accompagne mon fils à son entraînement de foot, à vélo. On gare les vélos en arrivant, et pendant qu’il joue, je vais marcher dans la forêt à côté. Je reviens sur la fin pour le regarder finir par un match. Tout est tranquille. C’est au moment de repartir que je tombe dessus : pneu arrière à plat.

Et là, honnêtement, aucun stress. Je suis équipé pour ça, et il y a un petit côté satisfaisant à apprendre à son gamin à bricoler, à se débrouiller par soi-même. Démonte-pneu, chambre à air de rechange, rustines, pompe. On s’y met à deux : on démonte la roue ensemble, on trouve le trou, je lui montre comment remplacer la chambre, on remonte le pneu. Quinze minutes de travail soigné à quatre mains, le genre de réparation dont on est un peu fier parce qu’on a tout anticipé.

Reste à regonfler. Je sors la pompe, j’attrape l’embout — la petite pièce qui adapte le flexible sur la valve. Elle est en plastique. Et le filetage, le pas de vis qui doit se serrer sur la valve, est complètement écrasé. Foutu. Impossible de visser quoi que ce soit dessus.

J’essaie quand même de rattraper le coup. Je force un peu, je tente de reprendre le pas de vis à la main, de le réaligner. Rien à faire : le plastique est trop abîmé, il ne mord plus. Le genre de pièce qu’on ne répare pas — on la remplace, ou on reste à pied.

Me voilà donc sur le parking, mon fils à côté, avec une roue parfaitement réparée que je ne peux pas gonfler. Tout l’équipement, tout le savoir-faire, tout le calme — et je suis impuissant devant cette pièce en plastique de deux centimètres dont je n’avais jamais soupçonné qu’elle puisse me lâcher.

On rentre à pied, à pousser les vélos. Et c’est pendant ce retour forcé, à ruminer, que l’analogie m’est venue. Parce que cette histoire, je la vis tout le temps dans mon métier.

Ce n’est pas la roue qui m’a eu

Le truc qui me reste, c’est l’ironie. J’ai bien fait tout ce qui était visible. La crevaison, c’est le problème qu’on voit, qu’on sait nommer, pour lequel on s’équipe. La réparation, c’est le geste valorisant, celui qu’on raconte.

L’embout, lui, je ne l’avais jamais regardé. Il était là, il faisait son travail, je ne lui avais jamais demandé d’effort sérieux. Sa défaillance ne s’est révélée qu’au moment précis où j’en avais besoin — c’est-à-dire le plus loin possible d’un endroit où la remplacer.

Et en repensant à mes journées de dev, je me suis dit que c’était exactement ça, une dépendance.

La pièce qu’on a faite au moins cher

On construit nos projets sur des centaines de briques qu’on n’a pas écrites. C’est sain, c’est même la condition pour avancer : personne ne réécrit son parseur de dates ou son client HTTP. On fait confiance. On installe, le package-lock.json se remplit de centaines de lignes, et on passe à la suite.

L’embout en plastique, dans cette histoire, c’est la dépendance transitive. Celle qu’on n’a pas choisie directement — elle est arrivée parce qu’une autre lib en avait besoin. On ne l’a jamais auditée. On ne sait même pas qu’elle existe. Elle a été « fabriquée au moins cher » parce qu’elle paraissait secondaire : onze lignes de code, un utilitaire que personne ne juge digne d’attention.

Jusqu’au jour où elle casse.

Le détail qui me marque le plus dans ma mésaventure, c’est que le filetage n’était pas cassé net. Il était écrasé par l’usage. Une dégradation lente, silencieuse, que je n’avais pas vue parce que tout allait bien tant que je ne forçais pas dessus. C’est exactement le profil de la dépendance qui pourrit version après version, du mainteneur qui s’épuise sans que rien ne paraisse — tant qu’on ne met pas de charge réelle.

Le filetage écrasé le plus célèbre : xz

Si l’analogie te semble exagérée, il suffit de regarder ce qui est arrivé à xz en 2024. Le cas est récent, il a fait grand bruit, et il dit tout.

xz, c’est une bibliothèque de compression utilisée absolument partout sous Linux. Un de ces composants invisibles dont dépend la moitié de l’infrastructure mondiale sans que personne n’y pense jamais. Derrière, un mainteneur solo, épuisé, sous pression pour passer la main.

Arrive un « contributeur » serviable, patient, qui s’investit pendant deux ans, gagne la confiance, obtient les droits — et finit par dissimuler une porte dérobée là où, par définition, personne ne regarde : dans des fichiers de données de test. Des binaires d’apparence anodine, dans un répertoire de tests, pour une bibliothèque de compression. Qui irait les inspecter ? Un script de build trafiqué se chargeait de les extraire et de les injecter dans la lib au moment de la compilation. Plus retors encore : le piège n’était pas dans le dépôt que les relecteurs auditent, mais dans les archives de version que tout le monde télécharge.

La fragilité bénévole ne provoque plus seulement une panne — comme mon filetage écrasé qui me laisse au bord du chemin. Elle ouvre une faille de sécurité au cœur de l’infrastructure mondiale. Et on l’a évitée de justesse, par pur hasard, grâce à un ingénieur qui trouvait son SSH un peu lent et qui a eu la curiosité d’aller voir pourquoi.

Un composant que personne ne regardait. Maintenu par une personne seule, à bout. Voilà le filetage écrasé, à l’échelle de la planète.

Derrière l’embout, quelqu’un

C’est là que la métaphore touche le fond du problème.

Derrière mon embout en plastique, il y a un industriel qui a rogné sur la matière parce que la pièce semblait secondaire. Derrière la lib qu’on installe sans réfléchir, il y a très souvent une personne. Seule. Non payée. Qui maintient ça le soir, le week-end, par devoir ou par passion — et qu’on vient engueuler sur le bug tracker quand ça casse.

Il y a ce dessin de xkcd que tout le monde connaît : tout l’édifice numérique moderne, représenté comme une grande structure en équilibre, qui repose sur un petit bloc tout en bas. Et la légende : un projet qu’une personne quelque part dans le Nebraska maintient sans le moindre remerciement depuis 2003. On en rit, parce que c’est exactement ça.

On bâtit nos pyramides sur du bénévolat fragile, et on s’étonne des fissures.

Ce que je retiens (et ce que je ne dis pas)

Je ne vais pas conclure par « réécrivez tout vous-même ». C’est absurde et impossible : la force d’un écosystème, c’est précisément qu’on ne réinvente pas l’embout à chaque sortie.

Mais ma mésaventure m’a rappelé une discipline simple : savoir sur quoi on repose.

Ça veut dire prendre le temps de regarder ses dépendances critiques au lieu de faire confiance par défaut. Lire, parfois, ce qu’il y a dans le lock. Vendorer — c’est-à-dire copier le code de la dépendance directement dans ton dépôt — ce qui est vraiment vital, plutôt que de dépendre d’un registre distant. Et quand un projet open source porte une partie de ton gagne-pain — le sponsoriser, ne serait-ce qu’un peu, parce que c’est ça la différence entre un embout en plastique et un embout en métal. Le métal coûte un peu plus cher. Il te ramène chez toi.

La CI était verte. La roue était réparée. Tout allait bien.

Et je suis quand même rentré à pied, mon fils à côté, à pousser nos vélos. Il a trouvé ça drôle. Moi, j’y ai vu une leçon — et un sujet d’article. Pour la prochaine sortie, j’ai déjà acheté un embout en métal.