Die zweite Ausgabe von Patches für den Linux-Kernel mit Unterstützung für die Rust-Sprache

Miguel Ojeda, Autor des Rust-for-Linux-Projekts, schlug eine aktualisierte Version von Komponenten für die Entwicklung von Gerätetreibern in der Rust-Sprache zur Prüfung durch Linux-Kernel-Entwickler vor. Die Rust-Unterstützung gilt als experimentell, es wurde jedoch bereits eine Aufnahme in den Linux-Next-Zweig vereinbart. Die neue Version eliminiert die Kommentare, die während der Diskussion der ersten Version der Patches gemacht wurden. Linus Torvalds hat sich bereits der Diskussion angeschlossen und vorgeschlagen, die Logik für die Verarbeitung einiger Bitoperationen zu ändern.

Denken Sie daran, dass die vorgeschlagenen Änderungen es ermöglichen, Rust als zweite Sprache für die Entwicklung von Treibern und Kernelmodulen zu verwenden. Die Rust-Unterstützung wird als Option dargestellt, die standardmäßig nicht aktiviert ist und nicht dazu führt, dass Rust als erforderliche Build-Abhängigkeit für den Kernel einbezogen wird. Durch die Verwendung von Rust für die Treiberentwicklung können Sie mit minimalem Aufwand sicherere und bessere Treiber erstellen, ohne Probleme wie Speicherzugriff nach der Freigabe, Nullzeiger-Dereferenzierungen und Pufferüberläufe.

Die speichersichere Handhabung wird in Rust zur Kompilierungszeit durch Referenzprüfung, Verfolgung des Objektbesitzes und der Objektlebensdauer (Umfang) sowie durch die Bewertung der Korrektheit des Speicherzugriffs während der Codeausführung gewährleistet. Rust bietet außerdem Schutz vor Ganzzahlüberläufen, erfordert eine obligatorische Initialisierung von Variablenwerten vor der Verwendung, behandelt Fehler in der Standardbibliothek besser, wendet standardmäßig das Konzept unveränderlicher Referenzen und Variablen an und bietet starke statische Typisierung, um logische Fehler zu minimieren.

Die auffälligsten Änderungen in der neuen Version der Patches:

  • Der Speicherzuweisungscode vermeidet die Möglichkeit, einen „Panik“-Zustand zu erzeugen, wenn Fehler wie nicht genügend Speicher auftreten. Eine Variante der Rust-Alloc-Bibliothek ist enthalten, die den Code überarbeitet, um Fehler zu bewältigen. Das ultimative Ziel besteht jedoch darin, alle für den Kernel erforderlichen Funktionen in die Hauptedition von Alloc zu übertragen (die Änderungen wurden bereits vorbereitet und in den Standard übertragen). Rust-Bibliothek).
  • Anstelle nächtlicher Builds können Sie jetzt Beta-Releases und stabile Releases des Rustc-Compilers verwenden, um einen Kernel mit Rust-Unterstützung zu kompilieren. Derzeit wird rustc 1.54-beta1 als Referenz-Compiler verwendet, aber nach der Veröffentlichung der Version 1.54 am Ende des Monats wird es als Referenz-Compiler unterstützt.
  • Unterstützung für das Schreiben von Tests mit dem Standardattribut „#[test]“ für Rust und die Möglichkeit, doctests zum Dokumentieren von Tests zu verwenden, hinzugefügt.
  • Unterstützung für ARM32- und RISCV-Architekturen zusätzlich zu den zuvor unterstützten x86_64- und ARM64-Architekturen hinzugefügt.
  • Verbesserte Implementierungen von GCC Rust (GCC-Frontend für Rust) und rustc_codegen_gcc (Rustc-Backend für GCC), das nun alle grundlegenden Tests besteht.
  • Für die Verwendung von in C geschriebenen Kernelmechanismen wie Rot-Schwarz-Bäumen, Objekten mit Referenzzählung, Erstellung von Dateideskriptoren, Aufgaben, Dateien und E/A-Vektoren wird in Rust-Programmen eine neue Abstraktionsebene vorgeschlagen.
  • Treiberentwicklungskomponenten bieten verbesserte Unterstützung für das Modul „file_operations“, das Makro „module!“, die Makroregistrierung und rudimentäre Treiber (Prüfen und Entfernen).
  • Binder unterstützt jetzt die Übergabe von Dateideskriptoren und LSM-Hooks.
  • Es wird ein funktionaleres Beispiel eines Rust-Treibers vorgeschlagen – bcm2835-rng für den Hardware-Zufallszahlengenerator von Raspberry Pi-Boards.

Darüber hinaus werden Projekte einiger Unternehmen im Zusammenhang mit der Verwendung von Rust im Kernel erwähnt:

  • Microsoft hat Interesse bekundet, sich an den Arbeiten zur Integration der Rust-Unterstützung in den Linux-Kernel zu beteiligen, und ist bereit, in den kommenden Monaten Treiberimplementierungen für Hyper-V auf Rust bereitzustellen.
  • ARM arbeitet daran, die Rust-Unterstützung für ARM-basierte Systeme zu verbessern. Das Rust-Projekt hat bereits Änderungen vorgeschlagen, die 64-Bit-ARM-Systeme zu einer Tier-1-Plattform machen würden.
  • Google unterstützt direkt das Rust-für-Linux-Projekt, entwickelt eine neue Implementierung des Binder-Interprozess-Kommunikationsmechanismus in Rust und erwägt die Möglichkeit, verschiedene Treiber in Rust zu überarbeiten. Über ISRG (Internet Security Research Group) stellte Google Mittel für die Integration der Rust-Unterstützung in den Linux-Kernel bereit.
  • IBM hat Kernel-Unterstützung für Rust für PowerPC-Systeme implementiert.
  • Das LSE-Labor (Systems Research Laboratory) hat in Rust einen SPI-Treiber entwickelt.

Source: opennet.ru

Kommentar hinzufügen