11 Punkte von GN⁺ 2025-02-21 | 24 Kommentare | Auf WhatsApp teilen

Warum Rust in den Linux-Kernel aufgenommen werden sollte

  • Auf Grundlage meiner Erfahrung aus den letzten 15 Jahren, in denen ich mir fast alle Linux-Kernel-Bugfixes und Sicherheitsprobleme angesehen habe, möchte ich erläutern, warum die Einführung von Rust notwendig ist
  • Nicht jeder Bugfix wird in den Stable-Tree übernommen, aber im Allgemeinen die wichtigen, und ich bin in der Position, alle Kernel-CVEs zu prüfen

Die Grenzen von C und die Vorteile von Rust

  • Die meisten Bugs, die im Linux-Kernel auftreten, gehen auf strukturelle Grenzen der Programmiersprache C zurück
  • Besonders häufig sind Bugs, die durch einfache Fehler entstehen, und solche Probleme treten in Rust kaum auf
    • Speicherüberschreibungen (Rust fängt nicht jeden Fall ab, kann aber einen großen Teil davon verhindern)
    • Probleme beim Aufräumen von Error-Pfaden
    • Nicht geprüfte Error-Werte
    • Use-after-free-Bugs
  • Wenn Rust in den Kernel eingeführt wird, können sich Entwickler und Maintainer von solchen grundlegenden Fehlern lösen und auf die wirklich schwierigen Probleme konzentrieren (Logikfehler, Race Conditions usw.)

Die bestehende C-Codebasis muss weiterhin gepflegt werden

  • Der Linux-Kernel besteht derzeit aus mehr als 30 Millionen Zeilen C-Code, und es ist unmöglich, ihn kurzfristig durch Rust zu ersetzen
  • Deshalb sind die Arbeiten zur Härtung der Sicherheit von C-Code, die von Entwicklern wie Kees und Gustavo vorangetrieben werden, unverzichtbar und müssen fortgesetzt werden
  • Ideal ist nicht, dass Rust bestehenden Code ersetzt, sondern dass neuer Code (insbesondere Treiber) in Rust geschrieben wird, um Probleme zu verringern

Die API-Sicherheit, die Rust bietet

  • Rust ermöglicht es, interne Kernel-APIs sicherer und einfacher nutzbar zu gestalten
  • Die heutigen C-basierten Kernel-APIs sind komplex und fehleranfällig, sodass Maintainer sie oft sehr genau prüfen müssen
  • Zum Beispiel gibt es mehrere Möglichkeiten, Strukturen wie struct cdev sicher zu verwenden, und es erfordert viel Erfahrung, sie korrekt einzusetzen
  • Mit Rust lassen sich APIs klarer definieren, wodurch die Wahrscheinlichkeit von Entwicklerfehlern deutlich sinkt
  • Das ist nicht nur für Rust-Nutzer von Vorteil, sondern auch eine hilfreiche Veränderung für Nutzer bestehender C-Codebasen

Entgegnungen auf die Sorge, dass die Einführung von Rust schwierig sein wird

  • Rust ist keine Universallösung → kann aber einen erheblichen Teil der bestehenden Probleme beheben
  • Mehr Belastung für Maintainer → aber die Entwickler, die Rust einführen wollen, erledigen diese Arbeit selbst
  • Die Wartung einer gemischtsprachigen Codebasis ist schwierig → aber der Linux-Kernel hat bisher noch deutlich schwierigere Probleme gelöst

Fazit

  • Linux ist ein Werkzeug, das unzählige Entwickler weltweit nutzen, um Probleme zu lösen,
  • und wenn es nun eine Nachfrage von Entwicklern gibt, sicheren Code für Hardware schreiben zu können, darf diese nicht ignoriert werden
  • Das Linux-Entwicklungsmodell ist auf eine Größe gewachsen, die niemand vorhergesehen hatte, und hat herausragende Engineering-Fähigkeiten bewiesen
  • Jetzt ist es an der Zeit, mit der Einführung von Rust den Weg für mehr als 20 weitere Jahre Entwicklung zu ebnen

Wir müssen neue Technologien und Ideen annehmen und daran arbeiten, gemeinsam mit der Community erfolgreich zu sein.

24 Kommentare

 
bus710 2025-02-23

Die Einführung von Rust ist wohl eine Veränderung, die sich kaum vermeiden lässt, wenn man Memory Safety berücksichtigt. Vermutlich wird man mit einem angemessenen Kompromiss versuchen, alles wieder zusammenzuführen.

Allerdings fallen mir persönlich die Schlüsselwörter von Rust nicht besonders leicht ins Auge, und wenn ich sie nach längerer Zeit wiedersehe, kann ich mich oft nicht mehr gut daran erinnern, weshalb ich einfach nicht richtig warm damit werde ;;;; Natürlich weiß ich, dass sie alle nötig sind, aber manchmal fühlt es sich an, als würde man unregelmäßige Verben im Englischen mit Gewalt auswendig lernen. Gleichzeitig ist es aber auch eine Tatsache, dass mit Rust geschriebene Ergebnisse in der Praxis weniger Probleme verursachen.....

 
lostid 2025-02-22

Ich frage mich, ob es wirklich so verwerflich ist, eine noch nicht ausreichend ausgereifte Sprache nicht in den Kernel aufzunehmen. Wenn man sofort in seinem Umfeld nach Leuten sucht, die Rust wirklich sicher beherrschen, gibt es davon doch fast keine, oder? Ich denke, es ist nicht zu spät, sie erst dann aufzunehmen, wenn die Sprache etwas reifer geworden ist und sich genügend Nutzer gefunden haben, auch wenn es nicht so viele wie bei Legacy-Sprachen sein müssen.
Ich bin überzeugt, dass sich die Nützlichkeit der Sprache Rust auch dann ausreichend beweisen lässt, wenn sie nicht im Linux-Kernel eingesetzt wird.

 
pcpenpal 2025-02-22

Es ist schon erstaunlich, dass Rust in seinem heutigen Zustand überhaupt noch als „unausgereifte Sprache“ bezeichnet wird. Unabhängig davon frage ich mich aber, ob es wirklich so verwerflich ist, den Anteil unsicherer Sprachen im Kernel endlich zu verringern. Gibt es in eurem direkten Umfeld denn wirklich viele Menschen, die in C so versiert sind, dass sie sicher genug Code schreiben können, um zum Kernel beizutragen? Anstatt von C noch mehr Reife zu erwarten, scheint mir gerade jetzt nicht zu spät zu sein, wo die Anforderungen des neuen Zeitalters ausreichend klar geworden sind.

Rust ist bereits nützlich, und der Versuch, in den Kernel aufgenommen zu werden, dürfte wohl kaum dazu dienen, seine Nützlichkeit erst noch zu beweisen.

 
aer0700 2025-02-22

Als man sich anfangs entschied, Rust einzuführen, wird es dazu wohl Diskussionen gegeben haben.
Wenn man darüber nachdenkt, auf welcher Seite der Pool größer ist, bei C-Erfahrenen oder bei Rust-Erfahrenen, dann ist C wohl überwältigend im Vorteil.
Man könnte auch denken, dass es keine große Sache ist, wenn ein Programmierer, der das Domänenwissen bereits vollständig mitbringt, noch eine weitere Sprache lernt,
aber das Kompetenzniveau, das Leute fordern, die am Kernel arbeiten, ist dann wohl wieder eine andere Geschichte ...

 
roxie 2025-02-22

Diese Meinung gefällt mir auch.

 
nemo1275 2025-02-21

Ich kann die Behauptung überhaupt nicht nachvollziehen, er solle doch einfach einen Fork machen und gehen. Warum um alles in der Welt sollte Linus denn Linux forken und verlassen?

 
regentag 2025-02-22

Gibt es Leute, die Linus sagen, er solle doch einen Fork machen und gehen? Ich glaube, ich habe in dieser Debatte niemanden so etwas sagen sehen..

 
cloverhearts 2025-02-21

Ich bin auch Rust-Nutzer, aber wenn Rust- und C-Code gemischt werden, scheint das ohne strenge Regeln dafür, bis zu welchem Umfang Rust-Code in Open Source zugelassen ist, entweder unkontrollierbar zu werden oder zumindest die Kosten für Review und Wartung enorm zu erhöhen. Deshalb halte ich es für die klügste Entscheidung, nichts zusätzlich einzubauen und stattdessen einen Fork zu erstellen.

 
aer0700 2025-02-21

Ich kenne mich mit dem Kernel nicht besonders gut aus, aber es wäre schön, wenn man C-Code automatisch nach Rust übersetzen könnte. Natürlich gibt es dabei nicht nur Probleme bei der Code-Übersetzung, sondern auch menschliche Faktoren.

 
regentag 2025-02-21

Wenn es so viele Menschen gibt, die Rust im Kernel einführen wollen, könnten sie ihn dann nicht forken und ein neues Projekt starten? Wenn das dann ausreichend ausgereift ist, würden die wichtigsten Distributionen wohl auf einen Rust-basierten Kernel umsteigen.
Ich verstehe nicht so recht, warum sie sich gegenseitig bekämpfen.

 
gurugio 2025-02-21

Ich weiß nicht genau, ob Sie Erfahrung mit der Kernel-Entwicklung haben, daher bin ich mir nicht sicher, was ich dazu sagen soll.
Zunächst einmal bedeutet der Einsatz der Sprache Rust nicht, den Kernel auf Rust umzustellen. Man könnte zwar fragen, ob man nicht einfach getrennt einen weiteren Kernel bauen sollte,
aber es geht nicht darum, einen Kernel in Rust zu schreiben, sondern lediglich darum, im Kernel nur für Device-Treiber eine Rust-Wrapper-Schnittstelle zu schaffen, damit nur die Device-Treiber in Rust
entwickelt werden können. Deshalb ergibt es keinen Sinn, dafür auf ein neues Projekt zu gehen.

 
regentag 2025-02-21

Ich habe keine Erfahrung mit Entwicklung im Linux-Bereich.
Anscheinend ist der Rust-Wrapper für Gerätetreiber so aufgebaut, dass er nicht vom Kernel getrennt werden kann ...

 
mammal 2025-02-21

Es ist schon ziemlich ironisch, dass die Linux-Community, die toxische Ausdrucksweisen lange mit der Kernel-Stabilität gerechtfertigt hat, jetzt ausgerechnet mit „Wenn es dir nicht gefällt, dann forke es doch“ reagiert und das für eine vernünftige Antwort hält.

 
regentag 2025-02-21

Ich gehöre nicht zur Linux-Community, aber ...

 
roxie 2025-02-21

Ich denke nicht, dass man diese Personen und den Verfasser dieses Kommentars als dieselbe Community betrachten sollte.

 
jeiea 2025-02-21

Es scheint schwer vorherzusagen zu sein, ob das Ergebnis eines Forks zu einer Migration wird oder zu einer Zeit der Zersplitterung.
Auch nach dem Fork dürfte es keine besonders erfreuliche Situation sein, weiterhin Änderungen aus dem Upstream zu übernehmen.

 
savvykang 2025-02-21

https://de.news.hada.io/topic?id=16860
Wenn man bedenkt, dass der Realtime-Linux-Fork erst nach 20 Jahren zusammengeführt wurde, sollte man die Entscheidung für einen Fork wohl nicht mit Bedacht treffen?

 
regentag 2025-02-21

Ich meinte das, als ich das gesehen habe.
Man konnte die Echtzeitfunktionalität lange als vom Kernel getrenntes Projekt pflegen, und wer sie brauchte, konnte sie übernehmen, auf den Kernel anwenden und nutzen.

 
ilsubyeega 2025-02-21

Ich bin zwar Rust-Nutzer, aber der Kommentar von hgwxx7_ auf r/rust hat mich beeindruckt1.

I think what Greg does really well here is demonstrating technical leadership.Leadership doesn't mean being right. He is right, but that's not the point.

Leadership means bringing along on the path he thinks is best. He doesn't crack the whip, chiding or coercing maintainers who disagree. Instead, he first acknowledges their very valid concerns about maintaining a code base with two languages. This is good, because they're right about that, their lives do get harder before they get easier.

He then ends on an inspirational note, pointing out that they've done much harder things and this is well within their abilities. He gently nudges them to welcome R4L devs.

Absolute masterclass of leadership.
I don't know if the other maintainers will be convinced when they read this. But it's hard for me to imagine a more convincing pitch than this one.

 
gurugio 2025-02-21

Ich erinnere mich, dass er, wenn wegen eines Backports in die Stable-Version oder aus ähnlichen Gründen Kontakt aufgenommen wurde, trotz seines vollen Terminkalenders immer zuverlässig geantwortet hat.

 
codemasterkimc 2025-02-21

„Rust ist nicht die richtige Antwort, aber näher an der richtigen Antwort als Java und Python.“ -codemaster kimc-

 
GN⁺ 2025-02-21
Hacker-News-Kommentare
  • Mit Rust-Bindings kann sich die interne ABI des Kernels nicht mehr frei weiterentwickeln, und es besteht das Risiko, dass sich das Projekt in einen C-Kern und eine Rust-Seite aufspaltet. Wenn sich die interne API jedoch stabilisiert, kann das Linux zugutekommen
  • Die Community und die Menschen sind das Hauptproblem. Wenn die Leute, die aktuell am Kernel arbeiten, diese Richtung nicht mögen, ist das ein großes Problem
  • Die Linux-Führung scheint sich nicht auf das Menschenproblem zu konzentrieren. Es ist fraglich, wo der Beleg dafür ist, dass die Menschen, die derzeit Kernel-Entwicklung betreiben, dieser Richtung zustimmen
  • Manche denken, dass die Übernahme von Rust mehr Schmerzen verursacht als Nutzen bringt. Sie glauben, dass sich die Vorteile auch auf andere Weise erzielen lassen
    • Zum Beispiel könnten Bounds Checking und die Vereinfachung von Allokation/Freigabe wie bei RAII auch ohne Rust möglich sein
    • Wenn man Clang zum verpflichtenden Compiler macht und solche Erweiterungen übernimmt, ließe sich die Wirkung leichter erzielen
  • Wenn neuer Code bzw. neue Treiber in Rust geschrieben werden, treten diese Arten von Bugs nicht auf. Davon profitieren alle
  • Die meisten Menschen wollen Speichersicherheit, aber sie wollen nicht zu allgemeinen Maintainer:innen werden
  • Das eigentliche Ziel des Projekts ist die Modernisierung der internen Kernel-API-Oberfläche. Wie gut es sich aushalten lässt, diese API in Rust zu schreiben, ist der beste Maßstab, um den Fortschritt zu messen
  • Als jemand, der in den letzten 15 Jahren fast alle Kernel-Bugfixes und Sicherheitsprobleme gesehen hat: Die meisten Bugs entstehen in kleinen Corner Cases von C. In Rust verschwinden diese Probleme
  • Wenn neuer Code bzw. neue Treiber in Rust geschrieben werden, treten diese Arten von Bugs nicht auf. C++ bietet diese Vorteile nicht
  • Rust macht Fehler bei der Definition von Kernel-APIs nahezu unmöglich. Das macht Linux insgesamt besser
  • Rust-Bindings wirken wie Magie, aber man ist bereit zu lernen und mit den Entwickler:innen zusammenzuarbeiten
  • Rust ist keine Wunderwaffe, die jedes Problem löst, hilft aber in vielen Bereichen
  • Linux ist ein Werkzeug, mit dem alle Probleme lösen. Wenn Entwickler Code für Hardware schreiben, möchte man nicht, dass solche Bugs auftreten
  • Ein gemischtsprachiger Codebestand ist schwer zu warten, aber wir sind Kernel-Entwickler. Wir sollten neue Ideen annehmen und versuchen, gemeinsam erfolgreich zu sein
  • Diese Erklärung war nötig, um die Diskussion voranzubringen
  • Der Fokus liegt auf den technischen Vorteilen, aber der Aufwand, eine neue Programmiersprache bzw. Toolchain zu lernen, wird nicht angemessen bewertet
  • Eine neue Programmiersprache zu meistern ist nicht einfach, und manche Maintainer wollen das wegen persönlicher Interessen/Motivation vielleicht nicht
  • Die Probleme des C++-Sprachkomitees zeigen, dass alle diese Sprache so schnell wie möglich aufgeben sollten.
 
hbahk42 2025-02-22

Kann man solche Hasskommentare nicht melden?

 
kodingwarrior 2025-02-22

Ich stimme zu.