Zweite Überarbeitung der Patches für den Linux-Kernel mit Unterstützung für die Programmiersprache Rust.

Miguel Ojeda, der Autor des Rust-for-Linux-Projekts, hat den Entwicklern des Linux-Kernels eine aktualisierte Version der Komponenten zur Entwicklung von Gerätetreibern in Rust zur Prüfung vorgeschlagen. Die Unterstützung für Rust wird als experimentell betrachtet, ist jedoch bereits für die Aufnahme in den linux-next-Zweig genehmigt worden. In der neuen Version wurden die während der Diskussion der ersten Patch-Version geäußerten Bedenken ausgeräumt. Linus Torvalds hat sich bereits an der Diskussion beteiligt und vorgeschlagen, die Logik der Verarbeitung bestimmter Bitoperationen zu ändern.

Wir erinnern daran, dass die vorgeschlagenen Änderungen die Möglichkeit bieten, Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen zu verwenden. Die Unterstützung von Rust wird als Option vorgestellt, die nicht standardmäßig aktiviert ist und nicht dazu führt, dass Rust zu den obligatorischen Build-Abhängigkeiten des Kernels gehört. Die Verwendung von Rust zur Treiberentwicklung ermöglicht es, mit minimalem Aufwand sichere und qualitativ hochwertige Treiber zu erstellen, die von Problemen wie dem Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern und Bufferüberläufen befreit sind.

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.

Die auffälligsten Änderungen in der neuen Patch-Version sind:

  • Der Code zur Speicherzuweisung wurde von möglichen Panic-Zuständen beim Auftreten von Fehlern wie Speicherknappheit befreit. Enthalten ist eine Version der Rust-Bibliothek alloc, in der der Code zur Verarbeitung von Fehlern überarbeitet wurde; das endgültige Ziel besteht darin, alle benötigten Funktionen in die Hauptversion von alloc zu übertragen (Änderungen wurden bereits vorbereitet und in die Standardbibliothek von Rust überführt).
  • Statt nächtlicher Builds zur Kompilierung von Kerneln mit Rust-Unterstützung können jetzt Beta-Versionen und stabile Releases des Compilers rustc verwendet werden. Derzeit wird rustc 1.54-beta1 als Referenzcompiler eingesetzt, aber nach der Veröffentlichung von Version 1.54 Ende des Monats wird genau dieses als Referenz unterstützt.
  • Es wurde die Unterstützung für das Schreiben von Tests mit dem standardmäßigen Rust-Attribut „#[test]“ hinzugefügt, sowie die Möglichkeit, Doctests zur Dokumentation von Tests zu verwenden.
  • Die Unterstützung für die Architekturen ARM32 und RISCV wurde zusätzlich zu den bereits unterstützten x86_64 und ARM64 hinzugefügt.
  • Die Implementierungen von GCC Rust (GCC-Frontend für Rust) und rustc_codegen_gcc (rustc-Backend für GCC) wurden verbessert, sodass jetzt alle grundlegenden Tests bestanden werden.
  • Ein neues Abstraktionsniveau wurde für die Verwendung von im C geschriebenen Kernelmechanismen in Rust-Programmen eingeführt, wie z.B. Rot-Schwarz-Bäume, referenzgezählte Objekte, die Erstellung von Dateideskriptoren, Aufgaben, Dateien und Eingabe-/Ausgabe-Vektoren.
  • Verbesserte Unterstützung für das Modul „file_operations“, das Makro „module!“, die Registrierung von Makros und rudimentäre Treiber (Probe und Remove) in den Komponenten zur Entwicklung von Treibern.
  • Binder unterstützt jetzt den Austausch von Dateideskriptoren und LSM-Hooks.
  • Ein funktionsreicheres Beispiel für einen Treiber in Rust wurde vorgeschlagen – bcm2835-rng für den Hardware-Zufallszahlengenerator auf Raspberry Pi-Platinen.

Zusätzlich werden Projekte einiger Unternehmen erwähnt, die den Einsatz von Rust im Kernel betreffen:

  • Microsoft hat Interesse bekundet, an der Integration von Rust-Unterstützung in den Linux-Kernel zu arbeiten und wird in den kommenden Monaten Treiberimplementierungen für Hyper-V in Rust bereitstellen.
  • ARM arbeitet daran, die Rust-Unterstützung für Systeme auf ARM-Prozessoren zu verbessern. Der Rust-Projekt hat bereits Änderungen vorgeschlagen, die 64-Bit-ARM-Systeme auf die Liste der Plattformen der ersten Unterstützungsstufe (Tier-1) setzen.
  • Google unterstützt direkt das Projekt Rust for Linux, entwickelt eine neue Implementierung des Interprozesskommunikationsmechanismus Binder in Rust und erwägt, verschiedene Treiber auf Rust umzubauen. Über die ISRG (Internet Security Research Group) hat Google die Finanzierung der Arbeit zur Integration der Rust-Unterstützung in den Linux-Kernel sichergestellt.
  • IBM hat Rust-Unterstützung im Kernel für PowerPC-Systeme umgesetzt.
  • Das LSE-Labor (Systems Research Laboratory) hat einen SPI-Treiber in Rust entwickelt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster