Auf der derzeit stattfindenden Maintainers Summit-Konferenz wurde das Ergebnis eines Experiments zur Hinzufügung der Möglichkeit zur Entwicklung von Komponenten in der Programmiersprache Rust zum Linux-Kernel diskutiert. Die anwesenden Teilnehmer erkannten das Experiment als erfolgreich an und beschlossen, die Unterstützung für Rust in die Kategorie der Kernbestandteile zu überführen, wodurch der experimentelle Status aufgehoben wurde.
Vor drei Jahren wurde die Möglichkeit zur Entwicklung von Treibern und Modulen in der Programmiersprache Rust in den Kernel 6.1 eingeführt. Seitdem wurden Abstraktionen für die Entwicklung von Rust-Treibern für GPU, Dateisysteme, Blockgeräte, Netzwerkadapter und USB-Geräte in den Kernel aufgenommen. In Rust wird der Treiber Nova für NVIDIA-GPUs, asahi für Apple AGX-GPUs, Tyr für ARM Mali-GPUs und rust_ext2 für das Ext2-Dateisystem entwickelt. Eine in Rust geschriebene Implementierung des IPC Binder wurde in den Kernel aufgenommen. Das Projekt RROS entwickelt ein Real-Time-Subsystem für den Linux-Kernel, das in Rust geschrieben ist. Die Unterstützung für Rust ist standardmäßig deaktiviert und führt nicht dazu, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels hinzugefügt wird.
Befürworter der Förderung von Rust sind der Meinung, dass diese Sprache die meisten Fehler ausschließt, die im Kernel auftreten und durch die Eigenheiten der Programmiersprache C (corner case) verursacht werden, was es ermöglicht, sich bei der Überprüfung auf logische Fehler und Race Conditions zu konzentrieren. Rust hilft, Probleme wie Zugriffe auf Speicher nach dessen Freigabe, das Überschreiten von Puffergrenzen, unsachgemäße Ressourcenfreigaben bei der Fehlerverarbeitung und vergessene Überprüfungen von Rückgabewerten zu vermeiden. Der Einsatz von Rust für neuen Code ermöglicht es auch, die Entwicklungszeit zu verkürzen, da der Aufwand für das Debugging reduziert wird und die Sprache strenge Garantien bietet, die Fehler frühzeitig im Schreibprozess des Codes aufdecken.
Gegner der Einführung von Rust im Kernel halten die Verwendung mehrerer Programmiersprachen in komplexen Projekten für unzulässig — gemischte Codebasen erschweren die Arbeit der Maintainer, da sie sie von Code in einer anderen Sprache abhängig machen. Beispielsweise müssen Entwickler von Subsystemen, die in C geschrieben sind, bei Vorhandensein von Rust-Bindings die Auswirkungen von Änderungen auf die Funktionalität dieser Bindings berücksichtigen.
Quelle: opennet.ru
