Vorschlag zur Diskussion über die Aufnahme von Entwicklungswerkzeugen für die Programmiersprache Rust in den Linux-Kernel

(Übersetzt in DE)Nick Desaulniers), der bei Google für die Bereitstellung von Unterstützung der Linux-Kernel-Kompilation mit dem Clang-Compiler verantwortlich ist und auch hilft Fehler im Rust-Compiler zu beheben, Alternativen zu den Begriffen „whitelist/blacklist“ und „master/slave“ vor, die für die Verwendung in Spezifikationen bevorzugt werden – anstelle von „master/slave“ wird empfohlen, „primary/secondary“, „leader/follower“, auf der Konferenz Linux Plumbers Conference 2020 eine Sitzung zur Diskussion der Möglichkeit anzubieten, Kernel-Komponenten in Rust zu entwickeln. Nick organisiert eine Mikro-Konferenz zum Thema LLVM und denkt, es wäre hilfreich, die technischen Aspekte einer möglichen Integration der Rust-Unterstützung in den Kernel zu diskutieren (ein funktionierender Prototyp für KBuild ist bereits erstellt) und zu verstehen, ob eine solche Unterstützung überhaupt notwendig ist und welche Einschränkungen für die Nutzung von Rust akzeptiert werden sollten.

Wir erinnern uns, dass Linus Torvalds in der jüngsten Diskussion auf der Konferenz "Open Source Summit and Embedded Linux" die Möglichkeit von Bindungen für die Entwicklung nicht primärer Kernel-Subsysteme (zum Beispiel Treiber) in Sprachen wie Rust nicht ausgeschlossen hat. Die Möglichkeit, Treiber in Rust zu entwickeln, würde es ermöglichen, mit minimalem Aufwand sichere und qualitativ hochwertigere Treiber zu erstellen, die frei von Problemen wie dem Zugriff auf den Speicher nach dessen Freigabe, Dereferenzierung nuller Zeiger und Pufferüberläufen sind. Es gibt bereits mehrere externe Projekte zur Umsetzung dieser Möglichkeit:

  • Entwickler von "Fish in a Barrel" haben vorbereitet ein Werkzeug zur Erstellung von Ladbaren Modulen für den Linux-Kernel in Rust, indem ein Satz abstrakter Schichten über den Schnittstellen und Strukturen des Kernels verwendet wird, um die Sicherheit zu erhöhen. Die Schichten werden automatisch auf der Grundlage vorhandener Kernel-Header-Dateien mit dem Tool bindgengeneriert. Für den Bau der Schichten wird Clang verwendet. Die gebauten Module nutzen neben den Schichten das Paket staticlib.
  • Forscher der Chinesischen Universität in Hongkong entwickeln Ein Projekt zur Entwicklung von Treibern für eingebettete Systeme und IoT-Geräte in Rust, das auch bindgen zur Generierung von Schichten auf Basis von Header-Dateien des Kernels verwendet. Das Framework ermöglicht eine erhöhte Sicherheit der Treiber, ohne dass Änderungen am Kernel erforderlich sind – anstelle der Schaffung zusätzlicher Isolierungsebenen im Kernel für die Treiber wird vorgeschlagen, Probleme bereits während der Kompilierung durch Verwendung der sichereren Sprache Rust zu blockieren. Es wird angenommen, dass ein solcher Ansatz von Hardwareherstellern nachgefragt wird, die proprietäre Treiber schnell entwickeln, ohne eine ordnungsgemäße Überprüfung vorzunehmen.
  • Entwickler des Frameworks C2Rust zur Übersetzung von C-Code in Rust, eine Aktion Experimente zur Umwandlung von Kernel-Modulen mit minimalen manuellen Änderungen. Zu den Problemen gehört die Verwendung von GCC-Erweiterungen in vielen Teilen des Kernels, die derzeit nicht von C2Rust unterstützt werden. Um dieses Problem zu lösen, plant C2Rust die Unterstützung von GCC-Attributen inline, cold, alias, used und section sowie die Erweiterung der Möglichkeiten des Inline-Assemblers und die Behebung von Problemen mit Strukturen, die gleichzeitig ausgerichtet und gepackt sind (zum Beispiel xregs_state). Zu den wesentlichen Problemen, die manuelle Arbeit erfordern, gehört die Unfähigkeit, nicht triviale C-Makros in Rust-Makros zu übersetzen, sowie die Notwendigkeit, Typen neu zu definieren, da C2Rust C-Typen in Definitionen im libc-Paket übersetzt, dieses Paket jedoch nicht in Kernel-Modulen verwendet werden kann.

Quelle: opennet.ru

60GB SSD 8Gb DDR4