Alors que l’écosystème Linux se déchire sur l’implantation de Rust au cœur du système, le directeur technique de Microsoft a, lors d’une conférence Rust en Angleterre affirmé son soutien au langage et assuré que Microsoft le soutenait à 100%…
Le langage Rust fait beaucoup parler de lui en ce moment et déchire les communautés Linux alors que son implémentation au cœur du système open source connaît bien des difficultés et que certains fervents défenseurs du C++ s’y opposent fermement. Bien que Rust ait été officiellement ajouté au noyau Linux fin 2022 (Linux 6.1) pour apporter plus de sécurité mémoire, son intégration se heurte à des divergences de vues. Certains mainteneurs du noyau restent sceptiques quant à l’idée d’introduire du code Rust dans ce projet historiquement écrit en C. Les discussions se sont envenimées ces dernières semaines et ont même mené à des tensions ouvertes : un mainteneur historique (Christoph Hellwig) a dû démissionner de son rôle suite à une controverse sur un patch lié à Rust.
C’est dans ce contexte que Mark Russinovich, directeur technique d’Azure, a affirmé lors de sa keynote à Rust Nation UK à Londres que Microsoft était de son côté « totalement engagé » envers Rust, allant même jusqu’à qualifier les langages C et C++ comme « obsolètes » pour bien des nouveaux projets. L’occasion pour Mark Russinovich de se livrer à un exercice de transparence et mettre en avant les bénéfices retirés et les difficultés rencontrées par l’éditeur dans son adoption du langage.
De Windows à Azure, Rust trace son chemin
À contre-courant de ces polémiques, Microsoft a adopté une approche plus pragmatique et graduelle pour introduire Rust dans ses produits. Depuis plusieurs années, l’éditeur prépare le terrain pour utiliser Rust en production. Dès 2019, ses équipes cybersécurité étudiaient Rust comme alternative pour éliminer les vulnérabilités mémoire à la source. Concrètement, Microsoft a commencé à réécrire certaines composantes au cœur de Windows en Rust dès 2023. Des bibliothèques système vieilles de plusieurs décennies sont progressivement portées en Rust, avec pour objectif de remplacer des portions de code C/C++ critique par des équivalents plus sûrs. Microsoft propose même des outils sur GitHub pour permettre l’écriture de pilotes Windows en Rust, signe qu’il envisage du code Rust même au niveau des drivers du système et pas seulement au niveau du Kernel et des services. Le mouvement ne se limite pas à Windows : sur Azure, le cloud de Microsoft, Rust est également introduit pour développer des services backend plus robustes.
Un engagement motivé par la sécurité
L’adoption de Rust par Microsoft s’inscrit dans le cadre de son initiative « Secure Future Initiative » (SFI), lancée suite à des violations de sécurité par des acteurs étatiques. Russinovich a révélé qu’il y avait eu un ordre interne dans l’équipe Azure il y a environ trois ans : « Plus de code système en C++ dans Azure. Rust est prêt. Utilisons Rust au lieu de créer plus de dette technique. »
La sécurité mémoire est ainsi la motivation numéro 1 de Microsoft : environ 70 % des vulnérabilités de sécurité auxquelles l’éditeur attribue un CVE sont dues à des problèmes de mémoire, des bogues qui auraient pu être évités si le code avait été écrit en Rust. L’éditeur en est convaincu, adopter Rust permet d’éliminer proactivement des failles de sécurité tout en préservant (voire améliorant) les performances, un compromis idéal pour des produits aussi complexes que Windows ou Azure.
La sécurité n’est cependant pas le seul atout de Rust. Si la sécurité était bien l’objectif initial, Microsoft a aussi constaté des améliorations de performance inattendues de 5 à 15% lors des migrations vers Rust. Selon Russinovich, « nous n’avons jamais observé de régressions de performance en portant le code vers Rust. » Ces gains n’étaient pas anticipés car les conversions étaient des exercices de portage directs, sans optimisations.
Des projets concrets démontrant l’engagement
Microsoft a intégré Rust dans plusieurs projets stratégiques :
Project Mu – Une implémentation UEFI en Rust utilisée dans les datacenters Azure et les appareils Surface.
DirectWrite Core – Réécriture des API de rendu de texte, éliminant de nombreuses vulnérabilités liées au parseur de polices.
Win32 GDI Region – Premier composant du noyau Windows porté vers Rust, avec 6 000 lignes de code C/C++ migrées.
Microsoft a également réécrit de nombreuses bibliothèques cryptographiques critiques en Rust aussi bien pour Windows que pour Microsoft Office. Car Rust a également trouvé sa place dans la suite collaborative de l’éditeur pour remplacer certains composants C# dans l’indexeur sémantique par exemple.
Du côté d’Azure, de multiples composants comme Hardware Root of Trust, Hyper-V et Azure Boost Agents sont écrits en Rust.
Des défis d’adoption en toute transparence
Malgré cet enthousiasme, Microsoft reconnaît plusieurs défis à la fois techniques, organisationnels et humains.
Le principal défi de cette transition vers Rust reste, selon l’éditeur l’interopérabilité avec C/C++. Windows et la plupart des logiciels Microsoft reposent sur des API et interfaces écrites en C depuis des décennies. Intégrer des composants Rust implique de les faire cohabiter avec ce code natif historique. En pratique, Microsoft a dû développer des liaisons (FFI) et adapter ses interfaces pour que du code Rust puisse appeler – et être appelé par – des bibliothèques en C/C++ de façon sûre. Cette cohabitation de langages au sein d’un même produit est un exercice complexe comme l’ont souligné les développeurs du noyau Linux. Microsoft contourne progressivement ces obstacles en fournissant des abstractions adaptées.
Autre souci technique, les liens dynamiques sur lesquels reposent Windows et son mécanisme de DLL sont incompatibles avec la philosophie et l’approche de compilation statique de Rust qui sont au cœur de la sécurité du langage. Microsoft trouve des parades techniques mais celles-ci sont complexes et donc longues à mettre en œuvre, surtout lorsqu’il faut veiller à ne pas compromettre les garanties de sécurité apportées par Rust.
Autre souci, à la fois technique et organisationnel, l’écosystème d’outils est moins mature que pour les langages bien établis. Là encore cela demande un effort de R&D pour s’assurer que Rust devienne un citoyen de première classe dans son écosystème d’outils de développement.
Enfin, Microsoft reconnaît qu’il faut aussi mettre en place toute une politique de résistance au changement et de formation. Convertir un développeur système C++ en un développeur Rust nécessite une période d’apprentissage initiale pour les développeurs d’environ deux mois.
Vers une transition automatisée par l’IA ?
Convertir des monstres logiciels comme Linux et Windows en Rust est une initiative bien trop coûteuse et gigantesque pour être envisagée et rentable.
Mais Microsoft voit en l’IA un éventuel futur moyen d’accélérer des transpositions de codes C++ en Rust. Mark Russinovich a ainsi confirmé que cette piste était effectivement explorée par l’éditeur en profitant des capacités de codage des IA génératives. Pour l’instant, il ne s’agit encore que de projets de R&D mais le CTO d’Azure a expliqué comment les grands modèles de langage (LLM) combinés à la technologie GraphRAG pourraient dans un avenir encore indéterminé automatiser la traduction du code C/C++ vers Rust.
Quoi qu’il en soit, Microsoft semble aujourd’hui bien plus investie dans Rust que l’écosystème Linux. Ce qui a commencé comme une initiative expérimentale et isolée est en train de devenir une politique d’entreprise très intimement liée à ce qui est le plus essentiel des projets Microsoft, son initiative SFI. En adoptant désormais largement Rust sans controverse inutile, Microsoft montre qu’innovation et sécurité peuvent avancer de pair. Pas sûr néanmoins que cela suffise réellement à tracer la voie pour une industrie logicielle plus sûre et performante. Mais c’est un autre débat…