2 Punkte von GN⁺ 2024-07-16 | 1 Kommentare | Auf WhatsApp teilen

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

 
GN⁺ 2024-07-16
Hacker-News-Kommentare
  • Dass jedes Dateisystem den Lebenszyklus von Inodes unterschiedlich verwaltet, aber alles mit derselben Funktion zu handhaben, widerspricht einer Abstraktionsschicht

    • Der Inode-Lebenszyklus sollte je Dateisystem verwaltet werden
  • Es wird gefragt, ob Rust Änderungen benötigt, um C-Aufrufe einfacher zu machen

    • Es fehlt an einem klaren Verständnis der Interoperabilität zwischen Rust und C
    • Bei C++ und Objective-C reicht es, Header-Dateien einzubinden und Funktionen aufzurufen
    • Swift kann Objective-C-Dateien einbinden und C aufrufen
    • Statt Rust an Kernel-Entwickler anzupassen, müsste die Sprache selbst etwas flexibler werden
  • Es ist nicht klar, ob die Rust-API die C-API umhüllt oder neu implementiert

    • Falls sie neu implementiert wird, kann die Verwendung derselben Namen wie in der C-API Probleme verursachen
  • Rust zum Kernel hinzuzufügen verursacht zusätzliche Komplexität

    • Wenn man ein neues OS von Grund auf schreibt, kann man alle Sprachfunktionen nutzen
    • Fügt man es zu einer bestehenden, riesigen Codebasis hinzu, entstehen zusätzliche Probleme
  • Die Diskussion verläuft sehr zivilisiert

    • Dem negativen Ton wird nicht zugestimmt
    • Es stimmt optimistisch, dass die Beteiligten die Probleme klar vermittelt haben
  • Mehr Optionen im Linux-Kernel zu haben, ist immer nützlich

    • Rust ist nicht die Lösung für alle Probleme
    • Rust bietet ein sicheres Programmiermodell, ist aber eingeschränkt
    • Speicherprobleme? Rust verwenden!
    • Nebenläufigkeitsprobleme? Auf Rust umsteigen!
    • Aber ohne unsafe-Blöcke kann man nicht alles tun, was in C möglich ist
    • Rust kann neue Perspektiven bieten, ist aber keine vollständige Lösung
  • Einige Kommentare weiter unten auf der lwn.net-Seite sind unhöflich

    • Man stelle sich einen Kommentar wie „Die Wissenschaft schreitet mit jedem Begräbnis voran“ gegenüber jemandem vor, der zu einem Open-Source-Projekt beiträgt
  • Diskussion über das Problem nicht übereinstimmender Namen zwischen C-API und Rust-API

    • Die Schwierigkeiten von Legacy-Namenskonventionen
    • Man kann entweder dieselben Namen beibehalten oder sie unter neuen Namen kapseln
    • Benennung ist schwierig