Auf der derzeit stattfindenden Konferenz Linux Plumbers 2022 hielt ein Ingenieur von Western Digital einen Vortrag über die Entwicklung eines experimentellen Treibers für SSD-Laufwerke mit NVM-Express (NVMe)-Schnittstelle, der in der Programmiersprache Rust geschrieben wurde und auf der Kernel-Ebene von Linux arbeitet. Trotz des frühen Entwicklungsstadiums hat das durchgeführte Testing gezeigt, dass die Leistung des NVMe-Treibers in Rust mit der bestehenden NVMe-Treiberversion, die in C verfasst ist, vergleichbar ist.


In dem Vortrag wird ausgeführt, dass der aktuelle NVMe-Treiber in C die Entwickler vollständig zufriedenstellt, jedoch ist die NVMe-Subsystem eine gute Plattform, um die Sinnhaftigkeit der Treiberentwicklung in Rust zu untersuchen, da sie ausreichend einfach, weit verbreitet und leistungsintensiv ist. Zudem gibt es eine bewährte Referenzimplementierung zum Vergleich und sie unterstützt verschiedene Interfaces (dev, pci, dma, blk-mq, gendisk, sysfs).
Es wird festgestellt, dass der PCI NVMe-Treiber in Rust bereits die erforderliche Funktionalität bietet, jedoch noch nicht für den breiten Einsatz bereit ist, da er spezifische Überarbeitungen benötigt. Zu den zukünftigen Plänen gehört die Beseitigung der bestehenden unsafe-Blöcke im Code, die Unterstützung von Gerätelöschvorgängen und das Entladen des Treibers, die Implementierung der sysfs-Schnittstelle, die Realisierung von verzögerter Initialisierung, die Erstellung eines Treibers für blk-mq sowie Experimente zur Verwendung eines asynchronen Programmiermodells für queue_rq.

Darüber hinaus sind die von der NCC Group durchgeführten Experimente zur Entwicklung von Treibern in Rust für den FreeBSD-Kernel erwähnenswert. Als Beispiel wird detailliert ein einfacher Echo-Treiber betrachtet, der die in die Datei /dev/rustmodule geschriebenen Daten zurückgibt. In der nächsten Phase der Experimente prüft die NCC Group die Möglichkeit, grundlegende Komponenten des Kernels in Rust zu überarbeiten, um die Sicherheit von Netzwerk- und Dateioperationen zu erhöhen.
Obwohl die Möglichkeit zur Erstellung einfacher Module in der Programmiersprache Rust aufgezeigt wird, erfordert eine tiefere Integration von Rust in den FreeBSD-Kernel zusätzliche Arbeiten. So wird beispielsweise die Notwendigkeit erwähnt, ein Set von Abstraktionsschichten über die Kernsubsysteme und -strukturen zu schaffen, ähnlich den Erweiterungen, die im Projekt Rust für Linux vorbereitet wurden. In Zukunft sind ähnliche Experimente mit dem Illumos-Kernel geplant, um gemeinsame Abstraktionen in Rust zu identifizieren, die in Rust geschriebenen Treibern für Linux, BSD und Illumos verwendet werden könnten.
Laut den Unternehmen Microsoft und Google sind etwa 70 % der Sicherheitsanfälligkeiten in ihren Softwareprodukten auf eine unsichere Speicherverwaltung zurückzuführen. Es wird angenommen, dass die Verwendung der Programmiersprache Rust das Risiko von Sicherheitsanfälligkeiten, die durch unsichere Speicherzugriffe verursacht werden, verringern kann und Fehler, wie das Zugreifen auf Speicherbereiche nach deren Freigabe und Pufferüberläufe, auszuschließen vermag.
Die sichere Verwaltung von Speicher in Rust erfolgt während der Kompilierung durch Überprüfung von Referenzen, das Verfolgen des Eigentums an Objekten und das Management der Lebensdauer von Objekten (Sichtbarkeiten). Außerdem bewertet Rust die Korrektheit des Zugriffs auf den Speicher zur Laufzeit. Rust bietet auch Mechanismen zum Schutz vor Überläufen bei Ganzzahlen, verlangt die obligatorische Initialisierung von Variablen vor ihrer Verwendung, behandelt Fehler in der Standardbibliothek besser und wendet das Konzept der Unveränderlichkeit (immutable) für Referenzen und Variablen standardmäßig an. Zudem bietet es eine starke statische Typisierung zur Minimierung logischer Fehler.
Quelle: opennet.ru
