Microsoft a publié du code sur Github qui permet aux développeurs d'écrire des pilotes Windows dans Rust, une étape clé vers une programmation sécurisée en mémoire pour le système d'exploitation. Mark Russinovich, CTO d'Azure, a publié le lien sur X avec le commentaire : "Travailler dur pour développer des pilotes Windows dans Rust."

Ce travail remonte à de nombreuses années. En juillet 2019, Microsoft Research a déclaré qu'il souhaitait « éliminer toute une classe de vulnérabilités avant qu'elles ne surviennent », a plaidé en faveur d'un langage sécurisé en mémoire et a déclaré que « l'un des nouveaux langages de programmation système les plus prometteurs qui répond à ces exigences est le langage de programmation Rust inventé à l'origine par Mozilla ».

La société fait la promotion de Rust non seulement pour la sécurité de sa mémoire, mais également pour sa sécurité dans la course aux données, garantissant que « deux ou plusieurs threads ne peuvent pas accéder à une zone de mémoire de manière asynchrone ».

En 2022, Russinovich a annoncé : « Il est temps d'arrêter de démarrer de nouveaux projets en C/C++ et d'utiliser Rust lorsque vous devez utiliser un langage non-GC. Pour des raisons de sécurité et de fiabilité, l'industrie devrait déclarer ces langages obsolètes. Les langages GC ou garbage collection tels que C# et Java conviennent aux applications commerciales, mais pas au code système sous-jacent.

Bien que Windows soit principalement écrit en C et C++. "Pour diverses raisons techniques et historiques, la plupart du code en mode utilisateur est désormais écrit en C++, mais la majeure partie du code du noyau est toujours écrite en langage C." En 2018, Raymond Chen, un ingénieur logiciel de Microsoft engagé depuis longtemps dans le développement de logiciels, a déclaré que même si Windows 11 est apparu depuis, le système d'exploitation n'a pas été réécrit lors du développement de nouvelles versions. La boîte à outils du pilote Windows utilisée par les fabricants de matériel pour faire fonctionner leurs appareils sous Windows est toujours une boîte à outils C/C++.

Selon les notes de publication de la nouvelle boîte à outils de pilotes basée sur Rust, elle vise à prendre en charge les pilotes WDM (Windows Driver Model) et WDF (Windows Driver Framework). Les pilotes WDM sont de niveau inférieur et étroitement liés au système d'exploitation, tandis que les pilotes WDF interagissent avec le système via des bibliothèques de framework. Le référentiel initial se concentre sur le WDK.

La description ajoute : « Le projet en est encore aux premiers stades de développement et n'est pas encore recommandé pour une utilisation commerciale. Microsoft encourage l'expérimentation et les commentaires, notant que les développeurs peuvent rechercher des commentaires sur le forum de discussion GitHub du référentiel. »

Une première question est de savoir comment gérer les exceptions. Un développeur a déclaré : « La gestion structurée des exceptions fait partie intégrante du développement Windows pour le noyau Windows (et le système d'exploitation dans son ensemble) et constitue un véritable obstacle pour faire de Rust une réalité pour le développement du noyau Windows. Rust n'a pas d'exceptions, il préfère utiliser des variables de résultat pour signaler les erreurs récupérables, et en cas d'erreurs irrécupérables, il se termine avec un crash. Dans le code du noyau, un tel crash n'est pas souhaitable car il entraînera le crash du système dans son ensemble.

Le développeur Johnny Shaw cite LinuxTorvalds dans le noyau Linux (qui utilise également Rust) : "Parce que le code du noyau est différent des outils système aléatoires de l'espace utilisateur. L'épuisement de la mémoire ne doit pas provoquer un abandon. Il doit seulement provoquer un retour d'erreur." Torvalds y voit un « problème fondamental ».

Les premiers codes du nouveau référentiel de Microsoft incluent les commentaires suivants :

//FIXME : cela devrait-il déclencher une vérification de bug via KeBugCheckEx ?

Ce problème montre qu'introduire Rust dans le code Windows sous-jacent n'est pas aussi simple que d'ajouter des liaisons du langage Rust à WDKAPI. Toutefois, la réponse initiale a été globalement positive. Les problèmes de sécurité de la mémoire représentent une grande partie des problèmes de sécurité et de stabilité de Windows, l'adoption de Rust est donc une solution viable.