Linux-Kernel in C++ ?

  Ralf Hersel   Lesezeit: 3 Minuten  🗪 3 Kommentare

Während sich Linus Torvalds in einer unfreiwilligen und stromlosen Winterpause, aufgrund der winterlichen Wetterbedingungen in Oregon befindet, tanzen die Mäuse auf der Linux Kernel Mailing List auf dem Tisch.

linux-kernel in c++ ?

Eine sechs Jahre alte Diskussion auf der Linux-Kernel-Mailingliste wurde neu entfacht, als es darum ging, den Linux-Kernel zu konvertieren, um modernen C++-Code zu unterstützen. Der Linux-Kernel besteht überwiegend aus C-Code mit etwas Assembler sowie einem wachsenden Anteil an Rust-Code. Nun wurde die Diskussion über eine Konvertierung des C-Codes des Linux-Kernels in C++ neu gestartet.

Am 1. April 2018 stellte der Red Hat-Entwickler David Howells 45 Patches vor, um den Kernel auf C++ umzustellen. Dies würde es dem Mainline-Kernel ermöglichen, inline template functions, inline overloaded functions, class inheritance, und andere Funktionen zu nutzen, die der Linux-Kernel mit seinem C-Code derzeit nicht unterstützt. Damals wurde dieser Vorschlag nicht ernsthaft diskutiert und erst recht nicht weiterverfolgt.

Vorgestern antwortete der langjährige Linux-Entwickler H. Peter Anvin auf diesen Thread der Kernel-Mailingliste. Anvin schrieb einen langen Beitrag mit seiner Argumentation, warum C++ für den Linux-Kernel endlich der richtige Zeitpunkt sein könnte:

Andrew Pinski hat mich kürzlich auf diesen Thread aufmerksam gemacht. Mir ist klar, dass er am 1. April 2018 veröffentlicht wurde und entweder ein Scherz war oder als solcher aufgefasst worden sein könnte. Ich denke jedoch, dass er seine Berechtigung hat, und ich werde versuchen, meine Meinung hier zu begründen.

Sowohl C als auch C++ haben sich seit 1999 stark weiterentwickelt, und C++ ist meiner persönlichen Meinung nach endlich "erwachsen" geworden, um ein besseres C für die Art von eingebetteter Programmierung zu sein, die ein Betriebssystemkern verkörpert. Ich sage das als Autor einer sehr grossen Anzahl von Makro- und Inline-Assembler-Hacks im Kernel.

Was mich dazu veranlasst, das zu sagen, ist, dass viele Dinge, die wir in letzter Zeit für GCC-spezifische Erweiterungen gefordert haben, in der Tat relativ einfach in Standard-C++ zu implementieren sind und in vielen Fällen eine Verbesserung der Infrastruktur ohne globale Code-Änderungen ermöglichen.

Warum nicht Rust?

Rust verwendet eine andere Syntax, und nicht nur müssten sich alle Kernel-Entwickler so weit mit ihr vertraut machen, dass sie das gleiche "Gefühl" wie bei C bekommen, sondern die Konvertierung von C-Code nach Rust ist nichts, was stückweise erfolgen kann, während der vorhandene C-Code mit einigen Bereinigungen als C++ kompiliert werden kann.

Jiri Slaby von SUSE hat sich für diese C++-Initiative für den Linux-Kernel ausgesprochen. David Howells von Red Hat, der ursprünglich die Kernel-Patches veröffentlicht hat, hat sich ebenfalls für diese Diskussion ausgesprochen.

Wir werden sehen, wohin diese LKML-Diskussion führt und ob es im Jahr 2024+ genügend Unterstützung für modernen C++-Code - oder zumindest eine definierte C++14~20-Untermenge - im Linux-Kernel gibt. Linus Torvalds war in der Vergangenheit leidenschaftlich gegen C++.  Wehe denen, wenn Torvalds wieder Strom und eine Internetverbindung hat :)

Quellen:

https://www.golem.de/news/linux-us-wintersturm-fuehrt-zu-zwangspause-bei-kernel-entwicklung-2401-181173.html

https://lkml.org/

https://lore.kernel.org/lkml/3465e0c6-f5b2-4c42-95eb-29361481f805@zytor.com/

Tags

Kernel, Linux-Kernel, C, Torvalds, LKML, Rust

Christoph
Geschrieben von Christoph am 16. Januar 2024 um 11:46

Informativ und lustig geschrieben :-)

Knut
Geschrieben von Knut am 16. Januar 2024 um 15:39

Linus wird wie folgt Antworten:

Es gibt rein gar nichts was du in C++ schreiben musst weil du es in C nicht hinbekommst. C ist einfach näher am Prozessor, schneller und deshalb bleibt der Kernel in C gegossen.

Damit ist die Diskussion beendet ;-)

ric
Geschrieben von ric am 17. Januar 2024 um 15:30

Warum muss eigentlich alles Torvalds alleine absegnen? In solchen Zeiten zeigt sich doch, das die ganze Entwicklung, nur von ihm abhängt. Was passiert erst wenn mal was Größeres passiert oder er mal keine Lust mehr hat? Stibt dann Linux oder gibt es eine ädiquate Nachfolgeregelung, wie es bei größeren Unternehmen üblich ist?