Linux-Kernel: Riesiger Umbau könnte "Abhängigkeitshölle" eliminieren

Ein Entwickler schlägt Umbauten vor, die die Header von Linux klarer strukturieren und den Build-Prozess um bis zu 80 Prozent beschleunigen sollen.

In Pocket speichern vorlesen Druckansicht 279 Kommentare lesen
Aufmacherbild Linux-Kernel-Patches gegen Abhängigkeitshölle

(Bild: Siggy Nowak, gemeinfrei)

Lesezeit: 5 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Klarere Code-Abgrenzung innerhalb des Linux-Kernels und ein erheblich beschleunigter Bauprozess: Das sind die erklärten Ziele einer vom Kernel-Entwickler Ingo Molnar zur Diskussion gestellten Serie mit nahezu 2300 Kernel-Quellcodeänderungen. Sie versprechen, Ordnung in eine über "30 Jahre gewachsene Abhängigkeitshölle" in den Header-Dateien des Linux-Kernels zu bringen.

Dieses "Fast Kernel Headers"-Projekt ist aber noch unfertig. Der zu den wichtigsten Linux-Machern zählende Molnar will mit der Vorstellung zum jetzigen Zeitpunkt ausloten, ob die anderen Entwickler überhaupt gewillt wären, so umfangreiche Umbauten und die daraus entstehenden Umstände zu akzeptieren.

Greg Kroah-Hartman, der zweitwichtigste Kernel-Entwickler, hat sich indes bereits offen für die Idee gezeigt. Linus Torvalds hat sich nach 24 Stunden noch nicht dazu geäußert. Typischerweise sind er und andere zentrale Entwickler aber sehr interessiert an Umbauten, die die Build-Zeiten reduzieren, schließlich erleichtert es ihnen die tägliche Arbeit -- und ordentlichen, von Menschen besser verständlichen Code schätzen sie auch sehr.

Bei Molnars Änderungen dürften sie jedoch länger über das Für und Wider nachdenken, denn seine Patches verändern enorm viel Code. Überdies würden sie vielen Entwicklern kurz- und langfristig allerlei Arbeit bereiten.

Das beginnt mit der weiteren Ausarbeitung der Idee, denn Molnars Patches decken bislang nur den Code für ARM64 sowie die 32- und 64-Bit-Ausführungen von MIPS, Sparc und x86 ab. Der Code für andere Architekturen lässt sich nach den Änderungen derzeit nicht einmal mehr erfolgreich bauen. Molnar, der seit Ende 2020 an dem Projekt arbeitet, will hier als nächstes ran, sofern sein Vorschlag Anklang findet.

Auch der Einbau in den aktuellen Hauptentwicklungszweig und die dabei erfolgende Qualitätskontrolle würde vielen Entwicklern allerlei Arbeit bereiten: Denn sofern die Idee angegangen wird, soll die Aufnahme in kleinen Happen vornehmlich über die Subsystem-Maintainer erfolgen. Die Aufnahme dürfte sich daher über mehrere Kernel-Versionen verteilen, wodurch sie Monate oder gar Jahre dauern könnte. Größere Geschwindigkeiten im Build-Prozess dürften sich erst gegen Ende dieser Zeit ergeben, denn so zeigte sich der Effekt auch erst spät während der Entwicklung von Molnars Änderungen.

Laut Messungen können die Umbauarbeiten den Bau-Prozess um knapp 80 Prozent beschleunigen.

(Bild: Screenshot: Thorsten Leemhuis)

Damit aber nicht genug, denn das Ganze würde Entwicklern über Jahre ein Zurückportieren von Änderungen in ältere, noch gepflegte Kernel-Versionen erschweren. Das lässt sich nicht vermeiden, weil die aktuellen Patches über 25.000 der rund 53.000 Quellcodedateien verändern, aus denen Linux entsteht; dabei wächst der Kernel durch den Umbau um über hunderttausend Codezeilen, da sie viel Implizites explizit machen. Die Bekanntgabe dieser Idee ist damit vermutlich die größte Feature-Ankündigung in der Geschichte der Linux-Kernel-Mailingliste, wie Molnar selbst schreibt – und hinzufügt, dass er sich das nicht so ausgesucht hat.

Die Umbauten betreffen vor allem fast 10.000 Header-Dateien, die sich in den Linux-Quellen unter include/ und arch/*/include/ finden. Sie enthalten Deklarationen und andere Quelltextteile, auf die der Code zurückgreift. Die Header können dabei auch andere Dateien ihres Schlags einbinden, daher müssen der Compiler und andere beim Übersetzen eines Kernels involvierte Werkzeuge diese Hierarchie und die Abhängigkeiten zwischen den Dateien immer wieder auswerten. Genau dort gibt es allerlei "komplizierte und schmerzhafte Abhängigkeiten, die wir liebevoll 'Abhängigkeitshölle' nennen", schreibt Molnar in der detaillierten Ankündigung seines Fast-Kernel-Headers-Projekts.

Ebendiese historisch gewachsene Unordnung räumen die Patches auf, was Compilern & Co. die Arbeit erheblich erleichtert. Das ist der Grund, warum die Änderungen das erste Übersetzen eines Linux-Kernels um 50 bis 80 Prozent beschleunigen können, je nach Architektur und Konfiguration des gebauten Kernels. Das wiederholte Bauen eines Kernels nach kleinen Änderungen am Code soll teilweise sogar weit mehr als doppelt so schnell gelingen.

Neben diesen Vorteilen sorgen die Umbauten auch für eine klarere Abgrenzung von Typendeklarationen und Programmierschnittstellen (APIs) zwischen den verschiedenen Bereichen des Linux-Codes (den Subsystemen). Auf unter Linux laufende Software sollte das Ganze indes keine Auswirkungen haben, denn für Userspace-Code hat Linux schon lange einen separaten Satz von Header-Dateien. Einige von Molnars Änderungen modifizieren auch diese Dateien, aber sie sollten Schnittstellen (ABIs und APIs) zum Userspace nicht auf inkompatible Weise verändern – denn das ist bei Linux ohnehin tabu.

(dmk)