Rust für Dateisysteme einsetzen
Ziele
- Das Typsystem von Rust nutzen, um mehr Fehler bereits zur Compile-Zeit zu erkennen
- Aufgaben wie Ressourcenbereinigung automatisieren und dadurch die Produktivität gegenüber C-Code erhöhen
- Speicherbezogene Schwachstellen reduzieren und die Debugging-Zeit verkürzen
Vorteile von Rust
- Rust beseitigt undefiniertes Verhalten und bietet Möglichkeiten, sichtbar zu machen, was im Code tatsächlich passiert
- Die Korrektheit von in Rust geschriebenem Code lässt sich nachweisen, wodurch weniger Bugs die Funktionsentwicklung behindern
Beispiel für das Rust-Typsystem
- Die Funktion
iget_locked() hat komplexe Anforderungen
- In Rust kann sie durch die Funktion
get_or_create_inode() ersetzt werden, wobei das Typsystem diese Anforderungen erzwingt
Diskussion über Umbenennungen von APIs
- Problem nicht übereinstimmender Namen zwischen C-API und Rust-API
- Dies könnte für die bestehende Entwickler-Community ungewohnt sein
- Es könnte notwendig sein, die Namen anzugleichen
Allgemeine Probleme
- Es muss entschieden werden, ob Rust-Abstraktionen allgemein für alle Kernel-Dateisysteme verwendet werden oder sich nur auf einfache, in Rust geschriebene Dateisysteme konzentrieren sollen
- Wenn sich C-Code weiterentwickelt, können Synchronisierungsprobleme mit dem Rust-Code entstehen
Probleme mit dem Objektlebenszyklus
- Der Objektlebenszyklus kann je nach Dateisystem unterschiedlich sein
- Wenn ein einzelner Lebenszyklus in die Rust-API kodiert wird, funktioniert das möglicherweise bei einigen Dateisystemen nicht
Probleme mit Rust-Bindings
- Nicht alle Dateisysteme werden sofort auf Rust umsteigen
- Wenn sich C-Code weiterentwickelt, können Rust-Bindings brechen
- Wenn Rust-Bindings brechen, bleibt das als Problem bei den Rust-for-Linux-Entwicklern
Fazit
- Die Entwicklung von Rust-Bindings fortsetzen und zugleich den C-Code weiterentwickeln lassen
- Ob es gut oder schlecht ist, viel Bedeutung in das Rust-Typsystem zu kodieren, wird sich mit der Zeit zeigen
Zusammenfassung von GN⁺
- Die Einführung von Rust in Dateisysteme wird wesentlich dazu beitragen, Speichersicherheit und Produktivität zu erhöhen
- Über das Rust-Typsystem lassen sich komplexe API-Anforderungen erzwingen, was die Korrektheit des Codes erhöht
- Wenn bestehende C-Entwickler Rust nicht lernen, können Schwierigkeiten wie Synchronisierungsprobleme entstehen
- Wenn Rust-Bindings brechen, wird deren Behebung Aufgabe der Rust-for-Linux-Entwickler sein
- Ein Projekt mit ähnlicher Zielsetzung ist Googles Fuchsia OS
1 Kommentare
Hacker-News-Kommentare
Dass jedes Dateisystem den Lebenszyklus von Inodes unterschiedlich verwaltet, aber alles mit derselben Funktion zu handhaben, widerspricht einer Abstraktionsschicht
Es wird gefragt, ob Rust Änderungen benötigt, um C-Aufrufe einfacher zu machen
Es ist nicht klar, ob die Rust-API die C-API umhüllt oder neu implementiert
Rust zum Kernel hinzuzufügen verursacht zusätzliche Komplexität
Die Diskussion verläuft sehr zivilisiert
Mehr Optionen im Linux-Kernel zu haben, ist immer nützlich
unsafe-Blöcke kann man nicht alles tun, was in C möglich istEinige Kommentare weiter unten auf der lwn.net-Seite sind unhöflich
Diskussion über das Problem nicht übereinstimmender Namen zwischen C-API und Rust-API