Microsoft a réécrit le noyau Windows avec 180 000 lignes de Rust

Microsoft réécrit sa bibliothèque Windows principale en utilisant le langage de programmation Rust. 11 mai — La dernière version de Windows 11 Insider Preview est la première à inclure le langage de programmation sécurisé en mémoire Rust, selon le CTO d'Azure Mark Russinovich.

"Si vous rejoignez le réseau Win11 Insider, vous aurez un premier aperçu de Rust dans le noyau Windows", a tweeté Russinovich hier soir.

Quoi qu'il en soit, celui-ci est arrivé rapidement : Microsoft n'a révélé son intention de remplacer certaines parties du noyau Windows par du code Rust qu'à la mi-avril, lors de la conférence sur la sécurité BlueHat IL 2023 en Israël.

A l'époque, David "dwizzle" Weston, directeur de la sécurité du système d'exploitation Windows, avait annoncé dans une présentation que Rust entrerait officiellement dans le noyau Windows.

"Dans les prochaines semaines ou mois, les gens commenceront à utiliser Rust dans le noyau pour démarrer Windows. L'objectif fondamental de ce travail est de convertir certains types de données C++ du système sous forme Rust."

Rust est entré dans le noyau Windows

L'objectif de Microsoft est de "éliminer les classes d'erreurs" et souhaite adopter une approche plus agressive pour garantir un code plus sûr. Ils espèrent y parvenir grâce à des langages sécurisés en mémoire, à des modifications architecturales du processeur et à des sous-ensembles de langages plus sûrs.

L'exposé de David Weston se concentre sur les langages sécurisés pour la mémoire. Dans le noyau Windows, le langage principal est le C. Grâce à MFC et COM, la plupart du code en dehors du noyau est en C++, et même la libc MSVC est en fait écrite en C++, avec des déclarations externes « C ». Cependant, à partir de Windows Vista, le noyau a commencé à autoriser le code C++ (VC++ a obtenu l'indicateur /kernel).

Actuellement, Microsoft a réécrit deux projets majeurs, DWriteCore et Win32 GDI, qui contiennent du code très ancien. Win32 GDI a été écrit à la fin des années 80 et au début des années 90 spécifiquement pour 286/386.

Microsoft a d'abord introduit Rust dans DWriteCore, qui fait partie de l'implémentation du SDK d'application Windows du moteur Windows DWrite pour l'analyse, la mise en page et le rendu de texte.

Les travaux ont commencé en 2020 et DWriteCore contient actuellement environ 152 000 lignes de code Rust et 96 000 lignes de code C++.

L'API privée de DWriteCore utilise une interface de type COM et l'API publique est COM, où C++ et Rust peuvent être facilement intégrés.

Selon les rapports, il a fallu six mois au total à deux développeurs pour terminer le travail, y compris l'écriture du code et la réalisation des tests correspondants. Toutes ces améliorations sont désormais ouvertes aux développeurs de logiciels.

Selon David Weston, il s'agit d'un projet très intéressant car le domaine est connu pour ses failles de sécurité, et les gains de performances issus de la réécriture sont incroyables ! En plus des améliorations de sécurité attendues, il est dit que l'utilisation d'OTLS (OpenType Library Services) peut améliorer les performances de mise en forme (remplacement) des glyphes de 5 à 15 %.

De plus, l'interface graphique Windows de Microsoft (Win32 GDI) est également portée sur Rust et contient désormais 36 000 lignes de code Rust. Weston a souligné que Rust est non seulement plus facile à écrire que C++, mais aussi plus facile à comprendre. La dernière version de Windows 11 démarre avec cette version de Rust, mais même si elle réussit tous les tests GDI, l'interface Rust est toujours désactivée par un indicateur de fonctionnalité.

"Il existe aujourd'hui un SysCall dans le noyau Windows, et il est implémenté dans Rust", a déclaré Weston.

Mais la prise en charge de Rust par Microsoft n'est pas quelque chose qui doit être tenu pour acquis, a expliqué Weston : « Je crains que nous ne réécrivions pas complètement Windows dans Rust de si tôt, et même si nous aimons tous Rust, nous avons toujours besoin d'un son. stratégie en premier lieu, y compris la sécurisation d'une plus grande partie de notre code natif.

Mais il est important de reconnaître que l’approbation, le support et les contributions au code de Microsoft rendent Rust plus fort, et c’est une bonne chose pour la communauté open source dans son ensemble.

Rust est entré dans le noyau Windows

Microsoft a commencé à s'intéresser à Rust il y a quelques années, le considérant comme un excellent moyen de détecter et d'éliminer les bogues de sécurité de la mémoire avant la sortie officielle du produit. Depuis 2006, l'équipe de développement de Windows a corrigé un grand nombre de vulnérabilités de sécurité répertoriées par CVE, dont environ 70 % sont liées à la sécurité de la mémoire.

La chaîne d'outils Rust empêche les développeurs de créer et de publier du code comportant des failles de sécurité, réduisant ainsi la probabilité que des pirates malveillants exploitent les faiblesses des logiciels. En bref, l'accent mis par Rust sur la sécurité de la mémoire et les protections associées a effectivement réduit le nombre de bogues critiques contenus dans le code.

Des géants de l’industrie tels que Google ont également publiquement adopté le langage Rust.

Alors que l’industrie se concentre de plus en plus sur la programmation sécurisée en mémoire, Microsoft a également montré son enthousiasme pour l’exploration de Rust. En septembre dernier, Microsoft a donné un mandat informel au CTO de Microsoft Azure, Mark Russinovich, pour qu'il utilise Rust au lieu de C/C++ dans de nouveaux projets logiciels.

Maintenant que Rust est entré dans le noyau Windows, Weston a déclaré que Microsoft Windows continuerait à faire progresser ce travail et que Rust serait bientôt largement utilisé.

Armin Ronacher, ingénieur en sécurité chez Sentry et développeur de logiciels open source qui dirige le projet Python Flask, a noté dans une interview par courrier électronique que la faveur de Microsoft pour le langage Rust est importante.

"Plus précisément, j'espère que Microsoft réutilisera le compilateur existant pour apporter une meilleure prise en charge de PDB (Program Database). Windows actuel ne peut pas suivre le rythme des autres plates-formes basées sur DWARF (Debugging with Property Record Format)."

Samuel Colvin, fondateur de Pydantic et développeur Python/Rust, a également déclaré : « Je suis impressionné par cette réflexion avant-gardiste de Microsoft, mais cela a du sens. Je pense que Microsoft subit la pression des ingénieurs pour accepter Rust. L'objectif est de créer une application qui met l'accent sur les performances ou qui soit plus soucieuse des résultats, alors Rust est un choix clair.

Colvin a également mentionné que même s'il n'y a pas beaucoup de bons ingénieurs Rust sur le marché, il pense toujours qu'il est plus facile de trouver de bons ingénieurs Rust que de bons ingénieurs C/C++.

"Peu de gens ont une expérience significative en développement Rust, mais de nombreux ingénieurs sont prêts à essayer et à apprendre. Après tout, écrire du code sûr est intrinsèquement difficile, et dans Rust, c'est au moins relativement facile."

Colvin a conclu : « Pour ceux d'entre nous qui comptent sur Rust, la décision de Microsoft d'utiliser et de prendre en charge Rust est vraiment excitante. »

Guess you like

Origin blog.csdn.net/qq_41929396/article/details/132556185