Linux 5.18 kommt als "kleine Revolution"

Seite 3: Probleme mit altem C

Inhaltsverzeichnis

Der Linux-Kernel ist ein sehr aktives Projekt ist und lässt Innovationen und Neues schnell einfließen. Dennoch verharrt der Linux-Kernel auf alten Standards und Werkzeugen. So bemängeln Kritiker regelmäßig den Einsatz von E-Mails und Mailing-Listen als antiquierten und ineffizienten Kommunikationsweg. Auch die Wahl bei Standards sei nicht mehr zeitgemäß.

Einen solch alten Zopf schneidet Linux 5.18 jetzt ab. Bislang war das Programmieren nach dem C89-Standard in Kernel-Kreisen Pflicht. Wer neuer Standards nutzen wollte, blitzte mit seinen Patches kurzerhand ab. Danach sah es zunächst auch bei einem Patch von Jakob Koschel aus, als dieser auf das Unverständnis von Linus Torvalds stieß. Koschel hatte eine Unsicherheit identifiziert, die auf ein in C89 nicht lösbares Problem zurückzuführen war.

Beim Fix einer USB-Komponente entdeckte Koschel, dass nach dem Durchlauf einer Schleife über eine verkettete Liste der Kopfzeiger der Liste mit ungültigem Inhalt nachfolgenden Code-Teilen fälschlich zur Verfügung stand. Das liegt schlicht daran, dass in C89 die Laufvariable der Schleife außerhalb der Schleife deklariert werden muss und damit auch nach dem Schleifenblock weiterhin sichtbar ist. Ein klassischer "Leak" der Laufvariablen. Beim Zugriff auf die Variable nach der Schleife kommt es zum Bug. Koschel legte das detailliert dar. Kein noch so ausgefeiltes C-Makro des Kernels in C89 kann diese Situation einfangen, was Torvalds schließlich auch einsah.

Einzige Abhilfe wäre die Möglichkeit Laufvariablen in der Schleife zu deklarieren, wie es aber erst C-Standards seit C99 zulassen. Außerhalb der Schleife ist die Laufvariable dann nicht mehr sichtbar. Ein Bug, wie der von Koschel bearbeitete, wäre dann schon zur Compile-Zeit aufgefallen und erst gar nicht mehr möglich.

Schließlich wagt Linux 5.18 den Standardsprung. Erstmalig in der Geschichte des Kernel wechselt der C-Standard weg von C89 zu C11. Damit ist fortan der Sprachstandard aus dem Jahr 2011 die Grundlage für die Programmierung des Kernels. Was nach einer Formalie aussieht, ist ein kontrolliertes Wagnis.

Ein anderer Sprachstandard heißt ein anderer oder zumindest veränderter Parser im Compiler. Damit wird anderer Code erzeugt, der womöglich das Laufzeitverhalten von Kernelbestandteilen verändern kann. Nicht zuletzt daher hängt der Kernel an seinem alten Werkzeugkoffer. Nicht wehmütige Nostalgie, sondern praktische Stabilität. Dennoch überwiegen beim neuen C-Standard die Vorteile, wie es Jakob Koschel unwiderlegbar beweist. Ein anderer Sprachstandard kann durchaus Bugs verhindern, indem er die gefährlichen Konstruktionen gar nicht erst zulässt.

Der Großteil der akzeptierten Commits und Patch-Sets sind Treiber, Bugfixes und Verbesserungen. Was allerdings als umfangreiches Wartungs-Release erwartet wurde, stellt sich doch als eine kleine Revolution heraus. SDSi hat das Potenzial, den Open-Source-Ansatz unter Druck zu bringen. Zeigt SDSi doch eines deutlich: Die Hardware ist proprietär.

Das Ende von ReiserFS scheint besiegelt zu sein. Einmal mehr zeigt Linux damit, nicht zögerlich mit alten Zöpfen zu sein. Auch der mutige Wechsel zu C11 zeigt Reaktionsfähigkeit. Linux 5.18 mausert sich so vom Wartungsrelease zur bescheidenen Revolution.

Der Kernel 5.18 steht unter kernel.org zum Download bereit. Das ChangeLog mit allen Änderungen findet sich auf der kernel.org-Webseite.

(dmk)