Diskussion über die Einbindung von Rust-Entwicklungstools in den Linux-Kernel

Nick Desaulniers (Nick Desaulniers), der bei Google für die von Unterstützung Kernel-Builds von Linux mit dem Clang-Compiler zuständig ist und auch hilft, Fehler im Rust-Compiler zu beheben, vorgeschlagen auf der Konferenz Linux Plumbers Conference 2020 eine Sitzung zur Diskussion über die Ermöglichung der Entwicklung von Kernel-Komponenten in Rust abzuhalten. Nick organisiert eine Mikro-Konferenz, die LLVM gewidmet ist, und glaubt, dass es sinnvoll wäre, die technischen Aspekte der möglichen Integration der Rust-Unterstützung in den Kernel zu erörtern (ein funktionierender Prototyp für KBuild wurde bereits vorbereitet) und zu verstehen, ob eine solche Unterstützung überhaupt erforderlich ist und welche Einschränkungen bei der Verwendung von Rust berücksichtigt werden sollten.

Wir erinnern daran, dass Linus Torvalds in der jüngsten Diskussion auf der «Open Source Summit and Embedded Linux» Konferenz nicht ausgeschlossen hat Die Einführung von Bindungen zur Entwicklung von nicht kernzentralen Subsystemen (zum Beispiel Treibern) in Sprachen wie Rust. Die Möglichkeit, Treiber in Rust zu entwickeln, würde es ermöglichen, sicherere und qualitativ hochwertigere Treiber mit minimalem Aufwand zu erstellen, die von Problemen wie Zugriff auf freigegebenen Speicher, Dereferenzierung von Nullzeigern und Pufferüberläufen befreit sind. Es gibt bereits mehrere Drittanbieterprojekte, die diese Möglichkeit implementieren.

  • Entwickler von „Fish in a Barrel“ wir haben ein Werkzeug zur Erstellung von ladbaren Modulen für den Linux-Kernel in der Programmiersprache Rust, das abstrahierte Schichten über den Schnittstellen und Strukturen des Kernels zur Erhöhung der Sicherheit verwendet. Diese Schichten werden automatisch auf Basis der vorhandenen Header-Dateien des Kernels mit Hilfe des Tools bindgen. Für das Zusammenstellen der Schichten wird Clang verwendet. Die erstellten Module nutzen zusätzlich zu den Schichten das Paket staticlib.
  • Forscher der Chinesischen Universität in Hongkong entwickeln Ein Projekt zur Entwicklung von Treibern auf Basis von Rust für eingebettete Systeme und IoT-Geräte, das auch bindgen zur Generierung von Abstraktionen basierend auf Kernel-Header-Dateien nutzt. Das Framework ermöglicht eine erhöhte Sicherheit der Treiber, ohne Änderungen am Kernel vorzunehmen — anstatt zusätzliche Isolationsschichten für Treiber im Kernel zu schaffen, wird vorgeschlagen, Probleme bereits während der Kompilierung zu blockieren, indem eine sicherere Sprache wie Rust verwendet wird. Dieser Ansatz könnte für Hardwarehersteller von Interesse sein, die proprietäre Treiber hastig entwickeln, ohne eine angemessene Überprüfung durchzuführen.
  • Entwickler des Frameworks C2Rust zur Übersetzung von C-Code nach Rust, eine Aktion durch Experimente zur Umwandlung von Kernel-Modulen mit minimalen manuellen Anpassungen. Zu den Problemen zählt die Verwendung von GCC-Erweiterungen in vielen Teilen des Kern-Codes, die in C2Rust noch nicht unterstützt werden. Um dieses Problem zu beheben, ist geplant, die Unterstützung für die GCC-Attribute inline, cold, alias, used und section in C2Rust hinzuzufügen, sowie die Möglichkeiten des Inline-Assemblers zu erweitern und Probleme mit Strukturen zu lösen, die sowohl ausgerichtet als auch gepackt sind (z. B. xregs_state). Unter den wesentlichen Herausforderungen, die manuelle Eingriffe erfordern, ist die Unfähigkeit, nicht-triviale C-Makros in Rust-Makros zu übertragen, und die Notwendigkeit, Typen zu überschreiben, da C2Rust C-Typen in Definitionen im libc-Paket umwandelt, dieses Paket jedoch nicht in Kernel-Modulen verwendet werden kann.

Quelle: opennet.ru

Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen 🔥 Zuverlässiges Webhosting mit DDoS-Schutz, VPS- und VDS-Server kaufen | ProHoster