Hier soir, un correctif que j’ai écrit est entré dans le code d’un logiciel qui n’est pas le mien. Trois lignes utiles, une centaine de commentaire. Le mainteneur l’a mergé le jour même, avec une phrase : « Thanks for the clear write-up and testing. I reviewed the final diff and it looks good to merge. »

C’était ma première vraie pull request.

Je dis « vraie » parce qu’il y a une différence entre pousser une correction de faute de frappe et proposer un changement de comportement à quelqu’un qui connaît son code mieux que vous. Le second exige que l’inconnu vous fasse confiance, et il n’a aucune raison de le faire.

Ce qui l’a fait passer

Pas le code. Le code faisait trois lignes.

Le logiciel est Subwave, le moteur de la radio de cet univers. Il intercale des jingles entre les morceaux, et il sait déjà ne pas en lancer un pendant qu’une nappe sonore tourne. Ce qu’il ne savait pas, c’est ne pas en lancer un pendant que l’animateur parle. Le jingle passait par-dessus la voix.

Le mainteneur avait pourtant traité l’autre moitié du problème : quand un jingle est déjà en cours, la voix attend. C’est écrit dans son code, documenté, réfléchi. Il avait vu le sujet ; il n’avait pas vu ce sens-là.

La correction évidente était un piège, et c’est là que ça devient intéressant. Le réflexe est de demander au moteur audio « une voix est-elle en train de passer ? ». J’ai mesuré ce que cette question répond vraiment :

t=2s   voix en cours ? faux
t=6s   voix en cours ? vrai
t=12s  voix en cours ? vrai
t=24s  voix en cours ? vrai   ← le clip durait 6,4 secondes

Elle reste bloquée sur « oui » pour toujours. Corriger le bug de cette façon aurait coupé les jingles définitivement — un remède pire que le mal, et silencieux.

Ces quatre lignes de mesure sont ce qui a emporté la décision. Un correctif se relit en trente secondes ; ce qui coûte cher à un mainteneur, c’est de décider s’il peut vous croire. Le relevé lui a évité de refaire l’expérience.

Puis il l’a amélioré

C’est le moment que je préfère, et je ne l’avais pas prévu.

Il aurait pu merger tel quel. Il a regardé le patch et vu deux choses que je n’avais pas vues. D’abord, ma version n’avait pas de plafond : si la durée du clip était mal mesurée — un fichier corrompu, un nom qui pointe ailleurs — les jingles se taisaient aussi longtemps que ce chiffre le disait. Il a ajouté une limite dure, avec un commentaire que je garde :

La porte échoue en servant les jingles, délibérément : cet échec-là est inaudible, rien dans le log ne dit pourquoi les stingers se sont arrêtés.

Ensuite, l’ordre des opérations. J’écrivais un marqueur après avoir mesuré la durée ; il l’écrit avant, parce que la mesure peut échouer sur un fichier illisible et faire perdre le marqueur entier.

Mon correctif marchait. Le sien ne casse pas en silence. C’est exactement ce à quoi sert une revue, et c’est plus rare qu’on ne croit.

Des épaules, et une phrase empruntée

On dit qu’en science on se tient sur les épaules de géants. La formule est de Newton, en 1675 — sauf qu’elle ne l’est pas : il la reprenait de Bernard de Chartres, cinq siècles plus tôt, rapporté par Jean de Salisbury en 1159. Nous sommes des nains juchés sur des épaules de géants. La phrase qui décrit l’héritage est elle-même un héritage, et personne n’y trouve à redire.

Le logiciel libre fonctionne pareil, avec les mêmes rituels : on publie, un pair relit, il réplique, il corrige. Ma mesure était mon protocole expérimental. Son plafond était sa contre-expertise. Le code qui tourne maintenant sur cette radio n’est ni le sien ni le mien : c’est le nôtre, et il est meilleur que ce que chacun aurait écrit seul.

Sophia Antipolis, un modem, des disquettes

J’ai eu la chance de rencontrer ça très tôt, avant de savoir que ça portait un nom.

Mon premier travail dans l’informatique consistait à écumer les BBS Amiga pour en ramener des freewares et des sharewares. On se connectait, on attendait, on téléchargeait. Et quand on avait trouvé la pépite — l’utilitaire qui faisait précisément la chose que personne d’autre ne faisait — on la compilait précieusement sur une disquette 3,5 pouces. Précieusement, oui : il n’y avait pas de « télécharger à nouveau ». La disquette était l’objet, et la copier était le geste.

J’allais dans les locaux de l’INRIA à Sophia Antipolis. Des gens y écrivaient des choses et les donnaient. Pas contre un abonnement, pas contre une adresse e-mail : ils les donnaient, avec un fichier texte expliquant comment ça marchait et à qui envoyer une carte postale si ça vous avait servi.

Je n’avais pas les mots pour ce que je voyais. Je savais seulement que j’aimais ça, et que c’était rare.

Merci Fred. Tu te reconnaîtras sans doute.

Le même geste, trente ans plus tard

Ce qui me frappe, c’est que rien n’a changé sauf la vitesse.

À l’époque, ramener un shareware sur une disquette était une contribution : quelqu’un l’avait écrit, je le faisais circuler. Aujourd’hui j’écris trois lignes dans le code d’un inconnu, il les relit, les améliore, les diffuse à tous ceux qui font tourner le même logiciel. La boucle est plus courte et infiniment plus large. Le geste est identique.

Et il y a une ironie que je trouve juste. J’ai découvert ce bug parce que j’avais rallumé les jingles de ma radio après des mois d’arrêt. Depuis, je les ai recoupés — ils ne me plaisaient pas. Le correctif ne me sert plus.

Il sert à tous les autres. C’est précisément l’accord, et il n’a jamais eu besoin d’être écrit : on prend beaucoup plus qu’on ne rend, on rend quand même, et un jour ce qu’on rend ne nous sert à rien. C’est ce qui prouve qu’on a compris.


Écrit avec la machine avec qui je travaille, qui a mesuré le piège et rédigé le patch — et qui s’est fait corriger par un humain, ce qui est le bon ordre des choses. — O.B.