Vorschlag zur Diskussion der Frage des Hinzufügens von Rust-Entwicklungstools zum Linux-Kernel

Nick Desagnier (Nick Desaulniers), der bei Google arbeitet, um bereitzustellen Unterstützung Erstellen des Linux-Kernels mit dem Clang-Compiler und auch Portion Fehler im Rust-Compiler beheben, vorgeschlagen auf einer Konferenz abhalten Linux-Klempnerkonferenz 2020 Sitzung, um zu diskutieren, wie es möglich wird, Kernel-Komponenten in Rust zu entwickeln. Nick organisiert eine Mikrokonferenz zum Thema LLVM und glaubt, dass es schön wäre, die technischen Aspekte der möglichen Integration der Rust-Unterstützung in den Kernel zu diskutieren (er hat bereits einen funktionierenden Prototyp für KBuild vorbereitet) und zu verstehen, ob eine solche Unterstützung erforderlich ist welche überhaupt hinzugefügt werden sollten und welche Einschränkungen bei der Nutzung von Rust akzeptiert werden sollten.

Erinnern wir uns an eine kürzliche Diskussion auf dem Open Source Summit und der Embedded Linux-Konferenz, Linus Torvalds nicht ausgeschlossen die Entstehung von Bindungen für die Entwicklung von nicht zum Kernel gehörenden Kernel-Subsystemen (z. B. Treibern) in Sprachen wie Rust. Die Möglichkeit, Treiber in Rust zu entwickeln, würde es uns ermöglichen, mit minimalem Aufwand sicherere und bessere Treiber zu erstellen, ohne Probleme wie Speicherzugriff nach der Freigabe, Nullzeiger-Dereferenzierungen und Pufferüberläufe. Es gibt bereits mehrere Projekte von Drittanbietern zur Implementierung dieser Funktion:

  • Entwickler der Firma „Fish in a Barrel“ подготовили ein Toolkit zum Schreiben ladbarer Module für den Linux-Kernel in der Rust-Sprache, das eine Reihe abstrakter Schichten über den Schnittstellen und Kernelstrukturen verwendet, um die Sicherheit zu erhöhen. Mithilfe des Dienstprogramms werden Ebenen automatisch basierend auf den vorhandenen Kernel-Header-Dateien generiert bindgen. Clang wird zum Aufbau von Ebenen verwendet. Zusätzlich zu den Zwischenschichten verwenden die zusammengestellten Module das Paket staticlib.
  • Forscher der Chinesischen Universität Hongkong entwickeln ein Projekt zur Entwicklung von Treibern für eingebettete Systeme und Internet-of-Things-Geräte in Rust, das auch bindgen verwendet, um Schichten basierend auf Kernel-Header-Dateien zu generieren. Mit dem Framework können Sie die Treibersicherheit verbessern, ohne Änderungen am Kernel vorzunehmen. Anstatt zusätzliche Isolationsstufen für Treiber im Kernel zu erstellen, wird vorgeschlagen, Probleme in der Kompilierungsphase mithilfe der sichereren Rust-Sprache zu blockieren. Es wird davon ausgegangen, dass ein solcher Ansatz möglicherweise von Geräteherstellern gefordert wird, die in Eile proprietäre Treiber entwickeln, ohne eine ordnungsgemäße Prüfung durchzuführen.
  • Framework-Entwickler C2Rust für die Übertragung von C-Code an Rust, Verhalten Experimente zur Konvertierung von Kernelmodulen mit minimalen manuellen Bearbeitungen. Eines der festgestellten Probleme ist die Verwendung von Code in vielen Teilen des Kernels, der GCC-Erweiterungen verwendet, die in C2Rust noch nicht unterstützt werden. Um dieses Problem zu lösen, plant C2Rust, Unterstützung für die GCC-Attribute Inline, Cold, Alias, Used und Section hinzuzufügen sowie die Fähigkeiten des Inline-Assemblers zu erweitern und Probleme mit Strukturen zu lösen, die sowohl ausgerichtet als auch gepackt sind (z. B. xregs_state). . Zu den erheblichen Problemen, die manuelle Arbeit erfordern, gehören die Unfähigkeit, nicht triviale C-Makros in Rust-Makros zu übersetzen, und die Notwendigkeit, Typen neu zu definieren, da C2Rust C-Typen in Definitionen im libc-Paket übersetzt, dieses Paket jedoch nicht in Kernelmodulen verwendet werden kann.

Source: opennet.ru

Kommentar hinzufügen