Linux rustet

Di, 6. Juli 2021, Ralf Hersel

Das von Google gesponserte Projekt Rust für Linux ist mit der Verwendung eines Beta-Rust-Compilers (im Gegensatz zu einem Nightly-Build), dem Testen von ARM- und RISC-V-Architekturunterstützung, neuen Rust-Abstraktionen und mehr vorangekommen. Ein neuer Satz von Patches, der bei der Linux-Kernel-Mailingliste eingereicht wurde, fasst den Fortschritt des Projekts zusammen, damit Rust neben C für die Implementierung des Linux-Kernels verwendet werden kann. Die Fortschritte sind beachtlich.

Der Projektleiter Miguel Ojeda ist Informatiker am CERN in Genf, und arbeitet Vollzeit an Rust für Linux. In seinem Beitrag erklärt er zunächst, dass unfehlbare Allokationen über eine angepasste "alloc"-Standardbibliothekskiste entfernt worden sind. Eine unfehlbare Allokation liegt vor, wenn der Entwickler davon ausgeht, dass eine Speicherallokation immer erfolgreich sein wird. Wenn sie nicht erfolgreich ist, bricht Rust den Prozess ab. Unfehlbare Allokationen sind im Kernel nicht akzeptabel, da Fehlschläge zu einer Kernel-Panik führen. Eine fehlbare Allokation lässt den Entwickler auf Erfolg testen.

"Letztendlich ist das Ziel, alles, was der Kernel braucht, im Upstream 'alloc' zu haben und es aus dem Kernelbaum zu entfernen", sagte er.

Rust für Linux erfordert neue Funktionen im Rust-Compiler (rustc) sowie im Kernel-Code. Daher hat das Projekt bisher nightly Releases von rustc verwendet. Dies ist nun nicht mehr notwendig, da die Beta von rustc 1.54 ausreichend ist. Wenn rustc 1.54 vollständig freigegeben ist, wird es der Referenz-Compiler für das Projekt sein. Das Schreiben von Unit-Tests für Rust-Kernel-Code funktioniert jetzt mit dem Standard-Rust-Attribut #test. Sie laufen noch nicht im Kernel, aber:

"das Ziel ist es, sie im Kernel-Space laufen zu lassen, sodass wir Code testen können, der von Kernel-Features abhängt", schrieb Ojeda.

ARM- und RISC-V-Architekturen werden nun unterstützt, dank der Arbeit an rustc_codgen_gcc. Das bedeutet, dass rustc die anfängliche Kompilierung von Rust-Code durchführt, aber GCC (die GNU Compiler Collection) die Backend-Kompilierung übernimmt, was die Unterstützung für die Architekturen ermöglicht, die GCC unterstützt.

Es gibt einen Vorschlag, diese Arbeit in die Hauptcodebasis von Rust einzubinden, was ein Lizenzproblem aufwirft, da Rust MIT und Apache v2 verwendet, während GCC GPLv3 verwendet. Die Rust Foundation hat das Problem geprüft und ist zu dem Schluss gekommen, dass:

"die vorgeschlagene Änderung keinen Einfluss auf die Lizenz von rustc haben wird, außer wenn es mit dem gcc-Backend gebaut wird, in diesem Fall wird die GPLv3 für das resultierende Binary gelten"

- womit das Compiler-Binary gemeint ist, nicht die Anwendungen, die es kompiliert.

Die Patches beinhalten auch neue Rust-Abstraktionen für Kernel-C-Objekte wie "red-black-trees, referenzierte Objekte, Dateideskriptor-Erzeugung, Tasks, Dateien, io-Vektoren", sagte Ojeda. Insgesamt ist "die Rust-Unterstützung noch als experimentell zu betrachten. Wie jedoch bereits im April festgestellt, ist die Unterstützung gut genug, dass Kernel-Entwickler mit der Arbeit an den Rust-Abstraktionen für Subsysteme beginnen und Treiber und andere Module schreiben können", fuhr er fort.

Es gibt eine beträchtliche Unterstützung für das Projekt in der Industrie. Google sagte im April, dass "wir das Gefühl haben, dass Rust jetzt bereit ist, sich C als praktische Sprache für die Implementierung des Kernels anzuschliessen" und dass es die Anzahl der potenziellen Bugs und Sicherheitslücken reduzieren würde.

Google sponsert Ojeda, um ein Jahr lang Vollzeit an dem Projekt zu arbeiten, über die ISRG (Internet Security Research Group), die letzten Monat sagte, dass es Teil der "Bemühungen ist, die kritische Software-Infrastruktur des Internets auf speichersicheren Code umzustellen", unter dem Projektnamen Prosimio. Die ISRG ist auch die Non-Profit-Organisation hinter den kostenlosen Sicherheitszertifikaten von Let's Encrypt.

Ojeda erwähnte auch, dass Microsofts Linux Systems Group einen Beitrag leistet und hofft, "ausgewählte Hyper-V-Treiber, die in Rust geschrieben sind, einzureichen." ARM verspricht Unterstützung mit Rust für Linux auf ARM-basierten Systemen. IBM hat Rust-Kernel-Unterstützung für seinen PowerPC-Prozessor beigesteuert.

Weitere Details werden auf der bevorstehenden Linux Plumber's Conference im September versprochen. In der Zwischenzeit ist das Projekt auf GitHub zu finden. Linus Torvalds hat bei mehreren Gelegenheiten gesagt, dass er die Möglichkeit begrüsst, Rust neben C für die Kernel-Entwicklung zu verwenden.

Quellen:

https://lore.kernel.org/lkml/20210704202756.29107-1-ojeda@kernel.org/

https://www.theregister.com/2021/07/05/rust_for_linux_kernel_project/

https://github.com/Rust-for-Linux

Es wurden noch keine Kommentare verfasst, sei der erste!