Microsoft hat auf Github Code veröffentlicht, der es Entwicklern ermöglicht, Windows-Treiber in Rust zu schreiben, ein wichtiger Schritt hin zu einer speichersicheren Programmierung für das Betriebssystem. Mark Russinovich, CTO von Azure, veröffentlichte den Link auf X mit dem Kommentar: „Wir arbeiten hart daran, Windows-Treiber in Rust zu entwickeln.“
Diese Arbeit reicht viele Jahre zurück. Im Juli 2019 gab Microsoft Research bekannt, dass man „eine ganze Klasse von Schwachstellen beseitigen will, bevor sie auftreten“, plädiert für eine speichersichere Sprache und sagt, dass „eine der vielversprechendsten neueren Systemprogrammiersprachen, die diese Anforderungen erfüllt, die ursprünglich von Mozilla erfundene Programmiersprache Rust ist.“
Das Unternehmen bewirbt Rust nicht nur wegen seiner Speichersicherheit, sondern auch wegen seiner Datenrennensicherheit – um sicherzustellen, dass „zwei oder mehr Threads nicht asynchron auf einen Speicherabschnitt zugreifen können“.
Im Jahr 2022 kündigte Russinovich an: „Es ist an der Zeit, keine neuen Projekte mehr in C/C++ zu starten und Rust zu verwenden, wenn Sie eine Nicht-GC-Sprache verwenden müssen. Aus Gründen der Sicherheit und Zuverlässigkeit sollte die Industrie diese Sprachen für veraltet erklären.“ GC oder Garbage-Collected-Sprachen wie C# und Java eignen sich für kommerzielle Anwendungen, nicht jedoch für den zugrunde liegenden Systemcode.
Obwohl Windows hauptsächlich in C und C++ geschrieben ist. „Aus verschiedenen technischen und historischen Gründen ist der Großteil des Benutzermodus-Codes mittlerweile in C++ geschrieben, der Großteil des Kernel-Codes ist jedoch immer noch in C-Sprache geschrieben.“ Im Jahr 2018 sagte Raymond Chen, ein Microsoft-Softwareentwickler, der sich seit langem mit der Softwareentwicklung beschäftigt, dass Windows 11 zwar seitdem erschienen sei, das Betriebssystem jedoch bei der Entwicklung neuer Versionen nicht neu geschrieben worden sei. Das Windows-Treiber-Toolkit, mit dem Hardwarehersteller ihre Geräte unter Windows ausführen, ist immer noch ein C/C++-Toolkit.
Den Versionshinweisen für das neue Rust-basierte Treiber-Toolkit zufolge soll es sowohl WDM- (Windows Driver Model) als auch WDF- (Windows Driver Framework) Treiber unterstützen. WDM-Treiber sind auf niedrigerer Ebene und eng an das Betriebssystem gebunden, während WDF-Treiber über Framework-Bibliotheken mit dem System interagieren. Das anfängliche Repository konzentriert sich auf das WDK.
In der Beschreibung heißt es weiter: „Das Projekt befindet sich noch in einem frühen Entwicklungsstadium und wird noch nicht für die kommerzielle Nutzung empfohlen. Microsoft ermutigt zu Experimenten und Feedback und weist darauf hin, dass Entwickler Feedback im GitHub-Diskussionsforum im Repository einholen können.“
Eine frühe Frage ist, wie mit Ausnahmen umgegangen werden soll. Ein Entwickler sagte: „Strukturierte Ausnahmebehandlung ist ein integraler Bestandteil der Windows-Entwicklung für den Windows-Kernel (und das Betriebssystem als Ganzes) und stellt ein echtes Hindernis für die Verwirklichung von Rust für die Windows-Kernel-Entwicklung dar. Rust hat keine Ausnahmen, es verwendet bevorzugt Ergebnisvariablen, um behebbare Fehler zu melden, und bei nicht behebbaren Fehlern wird es mit einem Absturzfehler beendet. Im Kernel-Code ist ein solcher Absturz unerwünscht, da er zum Absturz des gesamten Systems führt.“
Entwickler Johnny Shaw zitiert LinuxTorvalds im Linux-Kernel (der auch Rust verwendet): „Weil sich der Kernel-Code von zufälligen Userspace-Systemtools unterscheidet. Speichererschöpfung darf keinen Abbruch verursachen. Es muss nur eine Fehlerrückgabe verursachen.“ Torvalds sieht darin ein „grundlegendes Problem“.
Der frühe Code im neuen Repository von Microsoft enthält die folgenden Kommentare:
//FIXME: Sollte dies einen Bugcheck über KeBugCheckEx auslösen?
Dieses Problem zeigt, dass die Einführung von Rust in den zugrunde liegenden Windows-Code nicht so einfach ist wie das Hinzufügen von Rust-Sprachbindungen zu WDKAPI. Die ersten Reaktionen waren jedoch im Großen und Ganzen positiv. Speichersicherheitsprobleme machen einen großen Teil der Sicherheits- und Stabilitätsprobleme von Windows aus, daher ist die Einführung von Rust eine praktikable Lösung.