Mistral migre 40 000 lignes de Fortran 77 vers C++ avec des agents IA

Le 9 septembre, Mistral a publié un retour d'expérience client racontant comment l'entreprise a utilisé ses propres agents IA pour migrer le simulateur de gisement d'un énergéticien européen de Fortran 77 vers C++. L'ensemble du code compte 300 000 lignes; cette fois, 40 000 ont été touchées. Au démarrage du projet, il n'y avait presque rien en main : ni suite de tests, ni documentation rassemblée en un seul endroit.

Les difficultés du Fortran 77 sont clairement listées dans le rapport : pas de modules, pas d'espaces de noms, pas de types structurés; l'état du programme vit dans des blocs COMMON, l'équivalent d'une mémoire globale partagée par tout le programme; les variables sont typées implicitement selon leur première lettre; les noms de variables sont limités à 6 caractères, si bien que lire le code revient presque à deviner.

La première tentative a consisté à confier toute la tâche à l'agent pour qu'il tourne seul; cela a pris une semaine et a échoué. L'équipe est ensuite passée à une approche avec un humain dans la boucle, découpée par module, chaque module étant réparti entre quatre rôles : planification, écriture du code, tests et revue de qualité du code, selon le cycle "planifier → implémenter → tester → nouveau tour". Le rôle principal de l'humain dans la boucle était de débloquer l'agent quand il restait coincé.

D'abord compléter la documentation, ensuite toucher au code

La phase de documentation a été menée en lançant plus d'une centaine d'agents en parallèle via Vibe CLI. Chaque agent pouvait aller chercher les PDF pertinents à lire via une bibliothèque documentaire et Mistral OCR — les hypothèses physiques des logiciels industriels ne sont souvent consignées que dans des rapports papier ou des documents scannés, et c'était la partie la plus coûteuse en effort dans un projet sans documentation centralisée.

Pour le découpage en modules, un seuil empirique a été fixé : garder chaque module de code Fortran à environ 10 000 lignes ou moins.

La cohérence numérique comme critère de recette

Ce qui a tenu ce projet, c'est un dispositif de vérification croisée. Il comprend trois éléments : un ensemble de sous-routines capables d'exporter l'état d'exécution de la base de code Fortran, un framework de test qui charge ces points de contrôle en C++, et plusieurs fichiers Skill.md qui guident les agents pour utiliser correctement les deux premiers éléments.

L'exemple donné dans le rapport est très concret : l'agent insère une ligne dans le code Fortran pour afficher la valeur de la variable RHOG; lors de cette exécution, la valeur obtenue était 42,71834; ce même chiffre sert ensuite de point de contrôle de référence pour tester le module C++ une fois migré.

"Numerical agreement is the cheapest, most convincing proof that a module is done."

La concordance des chiffres est la preuve la moins coûteuse, et la plus convaincante, qu'un module a fini d'être migré.

Pour des lecteurs d'ailleurs, l'enseignement à retenir ne tient sans doute pas au modèle utilisé par Mistral. Dans des secteurs comme l'électricité, le pétrole et le gaz, la météorologie ou l'aviation, le code de calcul central contient encore énormément de Fortran des années 1970-1980, lui aussi sans tests, sans documentation, avec des auteurs d'origine partis à la retraite depuis longtemps. Pendant plus d'une décennie, parler de "réécriture" a surtout buté sur la recette : sans ligne de base, qui signe pour valider le code réécrit ? L'approche de Mistral transfère ce pouvoir de validation à des points de contrôle numériques — une étape qui n'a rien à voir avec l'agent IA utilisé; il suffit de disposer d'un ancien code exécutable pour pouvoir la mettre en place soi-même.

Les conditions préalables figurent aussi dans le rapport. Mistral reconnaît que les conditions de départ étaient cette fois favorables : la base de code Fortran était autonome et exécutable. Le rapport original liste trois catégories de cas nettement plus difficiles : un code dépendant de systèmes externes, l'absence de ligne de base exécutable disponible, et des hypothèses physiques qui ne sont documentées nulle part. Le rapport ne donne pas de chiffre sur le gain de vitesse par rapport à une réécriture manuelle.

Sources : blog officiel de Mistral, CocoLoop; le nombre de lignes de code, le seuil de découpage en modules, la répartition des rôles des agents et la valeur du point de contrôle RHOG ont été vérifiés à partir du retour d'expérience officiel.