Concepts #008

Le concept du jour, c’est le « ramasse-miettes invisible », une notion informatique aux implications inquiétantes.

Anecdote amusante récemment dénichée sur Reddit : sur son blog, Raymond Chen (ingénieur chez Microsoft) réfléchit au concept de « fuite mémoire ». Et notamment à sa solution moderne : le ramasse-miettes (i.e. garbage collector en anglais, que l’on pourrait traduire par « éboueur » ou « ramasse-poubelles »). Le ramasse-miettes, donc, est un programme résident qui récupère les zones mémorielles inutilisées, perdues ou carrément abandonnées par des applications mal conçues, et qui les restitue au système. C’est du recyclage. Chen affirme que dans certains cas de figure, le « ramasse-miettes invisible » (the null garbage collector, que l’on pourrait traduire directement en « ramasse-miettes inexistant ») est le meilleur qui soit. Sous-entendant que parfois, on dispose de tant de mémoire qu’on ne pourra jamais l’épuiser avant d’atteindre la dernière instruction du programme.

Et c’est là que ça devient vraiment intéressant, car il cite une vieille conversation sur un forum usenet datant de 1996 (rien que ça) ! Un court échange entre deux codeurs, Norman Cohen et Kent Mitchell, qui se déroule comme suit (je traduis) :

Norman Cohen :
Les seuls programmes que je connaisse avec des fuites de mémoire délibérées sont ceux dont l’exécution est suffisamment courte, et dont les machines-cibles possèdent tellement d’espace mémoire, que manquer de place n’est même pas envisageable. Cette catégorie de programmes inclut de nombreux exercices pour étudiants, ainsi que de petites applications et des utilitaires. Il n’englobe que peu d’applications embarquées ou d’importance vitale -voire aucune.

Kent Mitchell : Cela m’évoque un souvenir intéressant. Il fut un temps je travaillais pour un client développant le logiciel embarqué d’un missile. En analysant le code, j’ai remarqué qu’ils avaient un certain nombre de problèmes en terme de fuites-mémoire. Imaginez ma surprise lorsque l’ingénieur en chef s’est exclamé : « Bien sûr que ça fuit ! » Il précisa qu’ils avaient calculé la mémoire perdue durant le temps de vol maximal du missile, puis doublé cette valeur. Et qu’ils avaient alors ajouté cette quantité de mémoire matérielle au système pour qu’il tolère les fuites. Le missile explosant quand il atteignait sa cible, ou qu’il dépassait son temps de vol, le ramasse-miettes invisible faisait ainsi son boulot sans la moindre ligne de programmation.

Au-delà de l’éclat de rire (2.0), on est en droit de se poser des questions vraiment graves, du genre : « Si ce niveau de bricolage suffisait pour les missiles américains durant les années 90, alors aujourd’hui, en 2023, avec le naufrage de l’éducation supérieure et l’ignoble pression du marché, quelle genre d’aberrations logicielles pilotent nos armes ? Peut-on raisonnablement confier la défense de vies humaines à des empilements instables de morceaux de code copiés/collés par un stagiaire depuis un vieux commentaire Stackoverflow ? Pire : comment se fier à des réseaux de neurones opaques dont (indépendamment du facteur apprentissage, qui pose de sérieux soucis) l’implémentation-même est sujette à caution ? »

Pour rappel, de simples calculs de nombres en virgule flottante (float) posent déjà des problèmes de précision dans tout un tas de situations concrètes… (et si vous cherchez bien vous en trouverez des exemples sur Shadertoy !)

Cette interrogation sur la qualité des logiciels militaires contemporains est aussi passionnante que sinistre. Doit-on privilégier la simplicité (ramasse-miettes invisible) ou la complexité (ramasse-miettes réel) ? Mais le ramasse-miettes lui-même, n’est-il pas clairement une forme de renoncement philosophique, une admission tacite que le codeur n’a qu’une maîtrise fort relative de ce qu’il a créé, et que l’on accepte cette fatalité ? Ou alors s’agit-il d’un garde-fou nécessaire, vital même, qui nous rappelle que quels que soient nos objectifs, l’imprévu reste la règle ?

Non, je n’ai pas de réponse.
Et oui, c’est sur cette haute falaise battue par les vents, cher lecteur, que je vous abandonnerai à la méditation… et aux philosophes !
*cris stridents menaçants qui se rapprochent*
*se sauvant à toutes jambes dans la direction opposée* « Bonne prise de tête ! »