« Les avions F-35 bannissent 90 % des fonctionnalités du C++ pour obtenir un code sûr », selon une GooglerDont le partage d’expérience suscite des appels d’observateurs à passer au langage Rust
L'avion de chasse F-35 est actuellement programmé en C++. C'est un choix basé sur la maturité du langage, un vaste vivier de développeurs et l'existence d'une norme de codage stricte et largement testée (le standard JSF C++). C’est autant d’éléments qu’une ingénieure de Google met en avant dans le cadre d’un retour d’expérience de mise à contribution dudit standard qui suscite des appels de certains intervenants à passer au langage Rust. En effet, la question de savoir si Rust est meilleur que le C++ pour la programmation des systèmes critiques fait l'objet d'un débat continu au sein de la communauté des ingénieurs logiciels au sens large, mais actuellement, il n'est pas utilisé dans les systèmes principaux du F-35.
This...is Programming Like a Fighter Pilot.
— LaurieWired (@lauriewired) December 3, 2025
A single unhandled exception destroyed a $500 million rocket in seconds.
The F-35 wasn't going to make the same mistake.
By carefully slicing C++, engineers created one of the strictest coding standards ever written. pic.twitter.com/AO9VhrLFqs
Rust is a programming language solution looking for a great problem to solve. I was thinking... why not rewrite the F-35 fighter's eight million lines of C++ in Rust? That would be perfect, and much better/safer.
— kgk (@kgk) October 13, 2025
C++ contre Rust : Et si le problème se situait plutôt entre la chaise et le clavier ?
C’est ce que suggère l’existence de la norme JSF C++. Elle contient 221 règles dont le programmeur a la charge de l’implémentation afin d’éviter les pièges courants du C++. Parmi les plus notables, on peut citer :
- Pas d'exceptions : la gestion des exceptions C++ est entièrement interdite afin de garantir une exécution déterministe.
- Pas d’allocation dynamique de mémoire : l'utilisation de malloc, free et new/delete est généralement interdite après l'initialisation afin d'éviter les fuites de mémoire et la fragmentation.
- Pas de récursivité : la récursivité est interdite afin d'éviter les débordements de pile et de rendre le temps d'exécution prévisible.
- Complexité limitée : chaque fonction doit être suffisamment simple (complexité cyclomatique ≤ 20) pour que tous les chemins de décision puissent être testés de manière approfondie.
L’existence de la norme JSF C++ est en phase avec un avis de Bjarne Stroustrup selon lequel ce qu’il est possible d’obtenir du C++ en matière de sécurisation des logiciels dépend entre autres du développeur et notamment de la connaissance des outils que lui offre le langage, de sa maîtrise du compilateur, etc. En droite ligne avec cette position, le créateur du C++ propose donc des Profils qui ont pour but de définir des modes de C++ qui imposent des contraintes sur la manière dont le programmeur utilise le langage et la bibliothèque, afin de garantir certaines propriétés de sécurité. Il s'agit principalement de contraintes au moment de la compilation, bien que dans la pratique, certaines vérifications puissent être mises en œuvre à l'aide de fonctionnalités de bibliothèque qui ajoutent une surcharge d'exécution limitée.
Au lieu d'introduire des constructions de langage entièrement nouvelles, les Profils limitent principalement les fonctionnalités et les utilisations existantes. L'idée est que vous pouvez activer un profil, et tout code qui l'utilise accepte de se conformer aux restrictions. Si vous ne l'activez pas, tout fonctionne comme avant. Il est donc rétrocompatible.
La récente adoption du Rust comme deuxième langage de programmation du noyau Linux aux côtés du C indique néanmoins que le Rust a du potentiel pour se positionner parmi les mastodontes de la programmation système
La prise en charge de Rust pour le développement du noyau Linux est vue comme une « une étape importante vers la capacité d'écrire les pilotes dans un langage plus sûr. » Rust de Mozilla Research est le type de langage de programmation auquel ceux qui écrivent du code pour des systèmes d’entrée/sortie de base (BIOS), des chargeurs d’amorce, des systèmes d’exploitation, etc. portent un intérêt. D’avis d’observateurs avertis, c’est le futur de la programmation système en lieu et place du langage C. En effet, des experts sont d’avis qu’il offre de meilleures garanties de sécurisation des logiciels que le couple C/C++. Chez AWS on précise que choisir Rust pour ses projets de développement c’est ajouter l’efficacité énergétique et la performance d’exécution du C à l’atout sécurité.
En effet, il y a une liste de griefs qui reviennent à l’encontre du langage C : les problèmes liés à la gestion de la mémoire – dépassements de mémoire tampon, allocations non libérées, accès à des zones mémoire invalides ou libérées, etc. D’après les chiffres du dictionnaire Common Vulnerabilities and Exposure (CVE), 15,9 % des 2288 vulnérabilités qui ont affecté le noyau Linux en 20 ans sont liées à des dépassements de mémoire tampon.
De plus, certains benchmarks suggèrent que les applications Rust sont plus rapides que leurs équivalents en langage C. Et c’est justement pour ces atouts que sont la parité en termes de vitesse d’exécution en comparaison avec le C, mais surtout pour la sécurisation et la fiabilité que de plus en plus d’acteurs de la filière du développement informatique recommandent le Rust plutôt que le C ou le C++.
Ainsi, en adoptant Rust, la communauté autour du noyau Linux devrait mettre à profit ces atouts du langage sur le C. Et elle devrait faire d’une pierre deux coups étant donné que Rust peut faciliter l’arrivée de nouveaux contributeurs. C’est en tout cas ce que laisse entrevoir une étude de l’université de Waterloo. C'est pour ce lot de raisons que Mark Russinovich de Microsoft recommande le langage Rust plutôt que le C ou C++ dans le cadre des nouveaux projets.
Et vous ?
Que pensez-vous de ces appels à réécrire la base de code C++ des avions F-35 en Rust ? Quels seraient les avantages d’une telle opération ?
Partagez-vous les avis selon lesquels le problème n’est pas les langages de programmation mais la capacité des programmeurs à tirer le meilleur parti de ces derniers ?
L'adoption du Rust comme deuxième langage de programmation du noyau Linux aux côtés du C est-elle un signal suffisamment fort pour que les nouveaux projets soient menés dès le départ non pas en C ou C++ mais en Rust ?
Partagez votre expérience personnelle en programmation système avec Rust comme langageVoir aussi :
L'équipe Microsoft Security Response Center recommande l'utilisation de Rust comme approche proactive pour un code plus sécurisé
Quel langage pourrait remplacer C ? Après avoir comparé Go, Rust et D, le choix d'Andrei Alexandrescu se porte sur D
C2Rust : un outil qui permet de faire la traduction et la refactorisation de votre code écrit en langage C vers le langage Rust
Vous avez lu gratuitement 2 289 articles depuis plus d'un an.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.
Soutenez le club developpez.com en souscrivant un abonnement pour que nous puissions continuer à vous proposer des publications.