Kernel-Log: 15.000.000 Zeilen Code, 3.0 wird Longterm-Kernel

Mit den ersten für Linux 3.3 aufgenommenen Änderungen haben die Kernel-Quellen die Marke von 15 Millionen Codezeilen durchbrochen. Die Pflege für Linux 2.6.32 endet vermutlich in einem Monat; Linux 3.0 und der darauf basierende Echtzeit-Kernel sollen für zwei Jahre gepflegt werden.

In Pocket speichern vorlesen Druckansicht 13 Kommentare lesen
Lesezeit: 12 Min.
Von
  • Thorsten Leemhuis
Inhaltsverzeichnis

Nachdem das vergangene Woche freigegebene Linux 3.2 ganz knapp unter der Marke von 15 Millionen Zeilen Quellcode blieb, hat der Kernel diese Marke am Wochenende überschritten, als Torvalds die ersten Änderungen für Linux 3.3 in den Hauptentwicklungszweig aufnahm. Damit sind die Quellen des Linux-Kernels in etwas über drei Jahren um mehr als fünfzig Prozent gewachsen, denn die 10-Millionen-Marke hat der Kernel im Oktober 2008 durchbrochen; Kommentare, Leerzeilen, Dokumentation, Skripte und Userland-Werkzeuge, die dem Kernel beiliegen, werden dabei mitgezählt (find . -type f -not -regex '\./\.git.*' | xargs cat | wc -l ).

Unter den Kernel-Entwicklern wird der steigende Umfang eher selten kritisiert. Erst kürzlich hat Linux-Urgestein Theodore 'tytso' Ts'o auf der Mailingliste der Kernel-Entwickler angedeutet, Analysen zum Umfang hätten Unterhaltungswert, ließen aber keine Rückschlüsse auf die Komplexität zu. Letztere war in letzter Zeit häufiger Thema unter den Kernel-Entwicklern. Andrew Morton sagte etwa kürzlich bei der Begutachtung von Änderungen, die Kernel-Entwicklung hätte den Punkt überschritten, ab dem jede weitere Komplexität als Rückschritt ("regression") angesehen werden müsse. Normalerweise versuchen die Kernel-Entwickler, "Regressions" zu vermeiden, damit ein neuer Kernel keine Probleme bereitet, die die Vorgänger nicht zeigten.

Torvalds selbst hat die wachsende Komplexität vor einigen Wochen in einem Interview der "Zeit Online" ebenfalls kritisiert: Er sähe mit Bangen dem Tag entgegen, an dem die Kernel-Entwickler mit einen Fehler zu tun hätten, den niemand mehr nachvollziehen könne. Einem LWN.net-Bericht zufolge war Komplexität auch auf dem diesjährigen Treffen der Kernel-Entwickler ein Thema. Kritik gab es insbesondere am Code für das Memory Management: Demnach habe etwa die Lösung eines Problems im Umfeld von "page migration" drei wichtige Entwickler erfordert; niemand habe den Überblick über das große Ganze dieses Kernel-Bereichs. Schon im letzten Jahr hatte LWN.net einen Bericht veröffentlicht, der die Hintergründe eines während der Entwicklung von Linux 2.6.34 bemerkten Fehlers beim Code des Memory-Management-Codes erläuterte, dessen Ursache Torvalds und einige andere erfahrene Kernel-Entwickler tagelang nachgespürt hatten.

Zum Erscheinen dieses Kernel-Log enthielt ein aktueller Git-Checkout des Hauptentwicklungszweigs von Linux 15.046.951 Zeilen. Es ist möglich, aber eher unwahrscheinlich, dass der Codeumfang wieder unter diese Marke sinkt. Langfristig ist Wachstum sicher, denn von einigen Ausreißern abgesehen waren die letzten Versionen typischerweise um hundert- bis dreihunderttausend Zeilen größer als ihre jeweiligen Vorgänger.

Der Löwenanteil des Codes entfällt auf Treiber, Dateisysteme und architekturspezifischen Code.

Eine etwas näherer Blick auf den Kernel-Code gelingt mit dem Analyse-Programm Sloccount. Bei Linux 3.2, das mit 14.998.651 Zeilen Code knapp unter der 15-Millionen-Marke liegt, sind knapp 1,9 Millionen Zeilen für die Unterstützung der verschiedenen Prozessor-Architekturen zuständig; fast 700.000 Zeilen enthält das Verzeichnis für Dateisysteme. Das Treiber-Verzeichnis ist mit 5,6 Millionen Zeilen das größte. Letztlich geht allerdings noch mehr Code auf das Konto von Treibern, denn manche finden sich in anderen Verzeichnissen – die Treiber für Sound-Hardware beispielsweise in sound/drivers/.

SLOC    Directory       SLOC-by-Language (Sorted) 
5615064 drivers         ansic=5610304,yacc=1688,asm=1475,perl=792,lex=779,sh=26
1876166 arch            ansic=1632759,asm=241881,sh=692,awk=470,pascal=231, perl=58,python=45,sed=30
698974  fs              ansic=698974
533134  sound           ansic=532951,asm=183
493711  net             ansic=493615,awk=96
301646  include         ansic=299895,cpp=1709,asm=42
120454  kernel          ansic=120149,perl=305
56177   tools           ansic=51029,perl=3272,python=1399,sh=476,asm=1
54529   mm              ansic=54529
44171   security        ansic=44171
42627   crypto          ansic=42627
37307   scripts         ansic=22487,perl=8287,sh=2028,cpp=1820,yacc=1291,lex=947,python=447
28486   lib             ansic=28473,awk=13
14382   block           ansic=14382
11579   Documentation   ansic=6896,perl=2369,sh=1018,python=949,lisp=218,awk=129
5705    ipc             ansic=5705
4661    virt            ansic=4661
2377    init            ansic=2377
1876    firmware        asm=1660,ansic=216
1232    samples         ansic=1232
564     usr             ansic=550,asm=14
0       top_dir         (none)

Sloccount schaut sich die Dateien zudem noch näher an und erstellt eine Aufstellung zu den verwendeten Programmiersprachen. Demnach enthält Linux 3.2 nicht ganz 10 Millionen Zeilen Programmcode; davon sind 97 Prozent Ansi-C und 2,5 Prozent Assembler.

Totals grouped by language (dominant language first): 
ansic:      9667982 (97.22%)
asm:         245256 (2.47%)
perl:         15083 (0.15%)
sh:            4240 (0.04%)
cpp:           3529 (0.04%)
yacc:          2979 (0.03%)
python:        2840 (0.03%)
lex:           1726 (0.02%)
awk:            708 (0.01%)
pascal:         231 (0.00%)
lisp:           218 (0.00%)
sed:             30 (0.00%)
Total Physical Source Lines of Code (SLOC)  = 9,944,822

Das Programm wurde aber schon einige Jahre nicht mehr aktualisiert und lässt sich in die Irre leiten, wie die Angaben zum Pascal-Code zeigen. Perl- und Python-Code findet sich aber durchaus in den Linux-Quellen; bei einigen Kernel-Versionen wird der Perl-Interpreter sogar zum Übersetzen benötigt.