Die dritte Auflage der Patches für den Linux-Kernel mit Unterstützung für die Programmiersprache Rust.

Miguel Ojeda, der Urheber des Rust-for-Linux-Projekts, hat den Entwicklern des Linux-Kernels eine dritte Version von Komponenten zur Entwicklung von Gerätetreibern in der Sprache Rust zur Prüfung vorgeschlagen. Die Unterstützung von Rust wird als experimentell betrachtet, ist jedoch bereits für die Aufnahme in den linux-next-Zweig genehmigt. Die Entwicklung wird von Google und der ISRG (Internet Security Research Group) finanziert, die Initiator des Let's Encrypt-Projekts ist und die Förderung von HTTPS sowie die Entwicklung von Technologien zur Verbesserung der Internet-Sicherheit vorantreibt.

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.

In der neuen Patch-Version werden die während der Diskussion der ersten und zweiten Patch-Version geäußerten Kommentare weiterhin adressiert. Die auffälligsten Änderungen sind:

  • Ein Wechsel zur Verwendung des stabilen Releases von Rust 1.57 als Referenzcompiler wurde vollzogen, und es wurde eine Bindung an die stabilisierte Version der Sprache Rust 2021 sichergestellt. Zuvor waren die Patches an den Beta-Zweig von Rust gebunden und verwendeten einige Sprachmerkmale, die als instabil gelten. Der Übergang zur Rust 2021-Spezifikation hat die Arbeit an der Beseitigung von instabilen Merkmalen in den Patches wie const_fn_transmute, const_panic, const_unreachable_unchecked und core_panic sowie try_reserve initiiert.
  • Die Entwicklung der in den Patches enthaltenen Rust-Bibliothek alloc, die modifiziert wurde, um Funktionen zur Speicherzuweisung von möglichen „panic“-Zuständen bei Fehlern wie Speichermangel zu befreien, wurde fortgesetzt. In der neuen Version wurden die Optionen „no_rc“ und „no_sync“ implementiert, um die im Rust-Code für den Kernel nicht verwendete Funktionalität auszuschalten, wodurch die Bibliothek modularer wird. Die Zusammenarbeit mit den Hauptentwicklern von alloc, die darauf abzielt, die für den Kernel erforderlichen Änderungen in den Hauptbestand der Bibliothek zu bringen, geht weiter. Die Option „no_fp_fmt_parse“, die für den Betrieb der Bibliothek auf Kernel-Ebene erforderlich ist, wurde in die Rust-Basisbibliothek (core) übertragen.
  • Eine Codebereinigung wurde durchgeführt, um mögliche Compilerwarnungen beim Bauen des Kernels im CONFIG_WERROR-Modus zu beseitigen. Bei der Kompilierung des Rust-Codes wurden zusätzliche Diagnosetools des Compilers und Warnungen des Linters Clippy aktiviert.
  • Abstraktionen zur Verwendung von seqlock (Sequenzsperren), Callback-Aufrufen zur Energieverwaltung, I/O Memory (readX/writeX), Interrupt-Handler und Streams, GPIO sowie den Zugriff auf Geräte, Treiber und Credentials wurden vorgeschlagen.
  • Die Mittel zur Entwicklung von Treibern wurden durch die Implementierung von beweglichen Mutexen, Bit-Iteratoren, vereinfachten Wrappern über Zeigern, verbesserter Fehlerdiagnose und Bus-unabhängiger Infrastruktur erweitert.
  • Die Handhabung von Referenzen wurde durch einen vereinfachten Typ Ref verbessert, der auf dem Backend refcount_t basiert, das die gleichnamige Kernel-API zur Zählung von Referenzen verwendet. Die Unterstützung der in der standardmäßigen alloc-Bibliothek bereitgestellten Typen Arc und Rc wurde entfernt und ist im Kernel-Code nicht verfügbar (für die Bibliothek wurden Optionen vorbereitet, die diese Typen deaktivieren).
  • Der Patch umfasst eine PL061 GPIO-Treiber-Implementierung, die in Rust neu geschrieben wurde. Besonderheit des Treibers ist, dass seine Implementierung fast zeilenweise dem vorhandenen GPIO-Treiber in C entspricht. Für die Entwickler, die sich mit der Erstellung von Treibern in Rust vertrautmachen möchten, wurde ein zeilenweiser Vergleich vorbereitet, der zeigt, in welche Konstrukte in Rust der C-Code umgewandelt wurde.
  • In den Hauptcode von Rust wurde rustc_codegen_gcc aufgenommen, das Backend rustc für GCC, das die Möglichkeit der vorab kompilierten (AOT) Kompilierung mit der libgccjit-Bibliothek realisiert. Bei entsprechender Entwicklung des Backends wird es möglich sein, den im Kernel verwendeten Rust-Code mit GCC zu kompilieren.
  • Neben den Unternehmen ARM, Google und Microsoft hat auch Red Hat Interesse an der Verwendung der Sprache Rust im Linux-Kernel bekundet. Zur Erinnerung: Google unterstützt das Rust-for-Linux-Projekt direkt, entwickelt eine neue Implementierung des Interprozesskommunikationsmechanismus Binder in Rust und prüft die Möglichkeit, verschiedene Treiber in Rust neu zu gestalten. Microsoft hat mit der Implementierung von Treibern für Hyper-V in Rust begonnen. ARM arbeitet an der Verbesserung der Rust-Unterstützung für ARM-basierte Systeme. IBM hat die Unterstützung von Rust im Kernel für PowerPC-Systeme realisiert.

Quelle: opennet.ru

Erwerben 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