Greg Kroah-Hartman, der für die Wartung des stabilen Linux-Kernel-Zweigs zuständig ist, hat sich für die Entwicklung neuer Kernel-Komponenten in der Programmiersprache Rust ausgesprochen. Als Person, die in den letzten 15 Jahren für die gesamte Fehler- und Sicherheitsinformationen im Linux-Kernel verantwortlich war, behauptet er, dass die meisten Fehler im Kernel durch unberücksichtigte Eigenheiten der Programmiersprache C (corner cases) verursacht werden, die im Rust-Code vollständig ausgeschlossen sind.
Durch die Verwendung von Rust können Probleme wie der Zugriff auf Speicher nach dessen Freigabe, teilweise Bufferüberläufe, fehlerhaftes Freigeben von Ressourcen bei der Fehlerbehandlung und vergessene Überprüfungen von Rückgabecodes der Fehlerbehandlung der Vergangenheit angehören. Dies ermöglicht es den Maintainers, sich auf reale Fehler wie Race Conditions und logische Probleme zu konzentrieren, anstatt bei der Überprüfung ihre Aufmerksamkeit auf Kleinigkeiten zu verteilen.
Der bereits vorhandene alte Code in C wird nicht verschwinden, aber für neuen Code und neue Treiber wird die Einführung von Rust die Qualität erheblich steigern. Zudem ermöglicht die Einführung von Rust, interne Programmierschnittstellen des Kernels so zu strukturieren, dass Fehler bei der Nutzung der internen API nahezu ausgeschlossen sind. Im Kernel haben sich zu viele komplexe und verworrene APIs angesammelt, die eine erhebliche Belastung für die Maintainer darstellen, wenn es darum geht, sicherzustellen, dass diese APIs korrekt verwendet werden. Während sich die Rust-Bindungen weiterentwickeln, haben die Maintainer die Möglichkeit, die API neu zu überdenken und zu ordnen, was allen zugutekommt, auch denjenigen, die die Sprache C verwenden.
Greg sieht Rust nicht als die "silberne Kugel", die alle Probleme im Kernel lösen wird, aber die Sprache wird in vielen Situationen sicherlich hilfreich sein. Die Unterstützung von Rust wird auch den Bedarf der Treiberentwickler decken, die ein Werkzeug suchen, um Code für ihre Hardware zu schreiben und viele Arten von Fehlern zu vermeiden. Was das Mischen mehrerer Sprachen angeht, sieht Greg darin kein großes Problem. Seiner Meinung nach haben die Kernelentwickler in der Vergangenheit auch mit schwerwiegenderen Herausforderungen zurechtgekommen, und es gibt keinen Grund, auf gute neue Ideen zu verzichten, die dem Projekt in den nächsten 20+ Jahren zum Erfolg verhelfen können.
An der Diskussion nahm auch Kees Cook, der ehemalige Hauptsystemadministrator von kernel.org und Leiter des Ubuntu Security Teams, teil. Kees stellte klar, dass es nicht um die Umschreibung bereits vorhandenen Codes im Kernel geht, sondern um die Bereitstellung der Möglichkeit, Rust zur Erstellung neuer Treiber und Subsysteme zu verwenden. Der Einsatz von Rust für neuen Code wird nicht nur die Anzahl der Speicherfehler verringern, sondern auch die Entwicklungszeit verkürzen. Die Entwicklungsgeschwindigkeit steigt durch die reduzierte Fehlerbehebung und die strengen Garantien der Sprache, die es ermöglichen, Fehler frühzeitig im Code zu identifizieren, noch bevor mit dem Testen des Produkts begonnen wird.
Die Wirksamkeit der Taktik, Rust zur Verbesserung der Qualität neuen Codes zu nutzen, wurde bereits von Google auf der Android-Plattform demonstriert. Es wurde aufgezeigt, dass die Hauptquelle für Sicherheitsprobleme neuer Code ist, und der Verbesserung seiner Qualität sollte besondere Aufmerksamkeit gewidmet werden. Für alten Code gibt es eine exponentielle Abhängigkeit der Sicherheit von der Zeit (zum Beispiel hat 5 Jahre alter Code im Durchschnitt eine 3,4-mal geringere Dichte an Schwachstellen als neuer Code).
Quelle: opennet.ru
