Zum Wochenende: Ein Plädoyer für schlanke Software

  Ralf Hersel   Lesezeit: 7 Minuten  🗪 5 Kommentare

Software, die niemand mehr versteht und Prozessoren, die nicht mehr skalieren, bilden den Boden für eine IT-Krise.

zum wochenende: ein plädoyer für schlanke software

Gegen Ende seiner Karriere wurde Niklaus Wirth (Titelbild), der am 1. Januar 2024 verstorben ist, ein leidenschaftlicher Verfechter von kleiner Software. Er schrieb einen wunderbaren kurzen Artikel darüber. Er heisst A Plea For Lean Software und ist nur ein paar Seiten lang. Lest ihn, es lohnt sich. Als Beweis für die Gültigkeit des Konzepts verliess Wirth Modula-2 und schrieb sein Meisterwerk, Projekt Oberon. Oberon ist eine winzige Pascal-ähnliche Sprache mit Nebenläufigkeitsprimitiven. Aber es ist auch ein Compiler für die Sprache und eine IDE für sie. Diese IDE ist auch ein eigenständiges, auf Tiling basierendes Betriebssystem. Der Quellcode des Kerns von Projekt Oberon umfasst etwa 4.623 Zeilen Code in 262 kB Text. Das ist ein selbstgehostetes Bare-Metal-Betriebssystem. Es ist unfassbar klein.

Zum Vergleich: Debian 12 hat 1.341.564.204 Zeilen Code. Das ist die eigene Schätzung des Projekts. Und noch ein Vergleich: Google Chrome umfasst etwa 40 Millionen Zeilen, was in etwa der Grössenordnung des heutigen Linux-Kernels entspricht.

Niemand kann den Quellcode von Chrome lesen. Nicht alleine, nicht als Team. Die Menschen leben nicht lange genug. Jede Gruppe, die behauptet, den Code durchgesehen und entgoogelt zu haben, lügt. Tausend Leute, die ein Jahrzehnt lang daran arbeiten, könnten nicht den gesamten Code lesen. Das ist die Grösse der Codebasis, auf der wir heutzutage das Internet aufbauen.

Diese Projekte sind so unfassbar umfangreich, dass kein menschlicher Verstand auch nur eine kleine isolierte Teilmenge des Ganzen erfassen kann. Wir halten das für normal. So ist es nun einmal: Computer sind gross, Speicher ist billig, Verbindungen sind schnell, und alles funktioniert und ist skalierbar.

Nach der ersten Lüge, der Lesbarkeit des Quellcodes, komme ich zu einer weiteren grossen Lüge:

Computer sind heute nicht viel schneller als vor einem Jahrzehnt, und sie werden wahrscheinlich nie wieder die Geschwindigkeit der Leistungssteigerung erreichen, die sie 60 Jahre lang bis Mitte der Nullerjahre hatten.

Das Moore'sche Gesetz ist vorbei und wurde durch das Koomey'sche Gesetz ersetzt. Heute verbrauchen Computer weniger Strom, geben weniger Wärme ab und werden immer kleiner und billiger, aber sie werden nicht mehr so massiv schneller als im 20. Jahrhundert. Viele erinnern sich an den Pentium 4, Intels Chip, der im Jahr 2000 auf den Markt kam und den das Unternehmen bis 2005 auf 10 Gigahertz hochfahren wollte. Dazu ist es nicht gekommen. Stattdessen bekamen wir den kleineren, kühler laufenden Pentium M, aus dem sich die heutigen Core-, Core 2- und Core i-CPUs entwickelten. Und dank AMD sind sie jetzt 64-Bit-fähig. Was wir statt viel schnellerer Prozessorkerne bekommen haben, sind mehr Prozessorkerne.

Das Problem ist, dass das nicht gut skalierbar ist. Auf dem Desktop haben wir Maschinen mit vier Kernen und jetzt gehen wir zu acht und mehr Kernen über, aber eine einzelne Person kann das nicht sehr hilfreich nutzen, also bekommen wir stattdessen Computer mit einer Mischung aus leistungsstarken, aber heissen, stromhungrigen Kernen und weniger leistungsstarken, kühleren, aber stromsparenden Kernen.

Wie Sophie Wilson, Miterfinderin des Arm-Chips, feststellte, ist die Siliziumchip-Industrie gut darin, uns immer mehr Produkte zu verkaufen, die wir nicht benutzen können, weil sie immer länger ausgeschaltet sein müssen, um nichts zu tun - oder das Gerät verbrennt sich selbst.

Serverchips haben natürlich viel mehr Kerne, weil Server das besser nutzen können, aber auch dafür gibt es eine Obergrenze. Schlagt es nach: Es heisst Amdahls Gesetz und es ist ziemlich beängstigend. Selbst wenn ein Programm zu 95 % parallelisiert werden kann, beträgt die maximale Beschleunigung etwa das 20-fache, egal, wie viele Prozessorkerne man einsetzt.

Als wir anfingen, Multicore-Prozessoren zu entwickeln, bedeutete das Mooresche Gesetz, dass das Transistorbudget für mehr Breite und nicht für mehr Geschwindigkeit ausgegeben wurde. Jetzt werden spezielle Prozessoren für das Rendering von 3D-Grafiken, für Matrix-Arithmetik, Kryptografiealgorithmen oder für KI-Funktionen eingebaut.

Die Anbieter von Benchmarks nehmen heute Aufgaben wie die Videokomprimierung in ihre Tests auf, obwohl die meisten Computerbenutzer das nie nutzen, nur weil die Benchmark-Anbieter eine Möglichkeit brauchen, die Leistung von Multicore-Chips zu testen. Multicore-Prozessoren schaffen es, einige Aufgaben schneller auszuführen, und die Benchmarks müssen das zeigen. Die Leistungszahlen aktueller Benchmarks sind keine Lügen, beziehen sich aber zumeist auf Spezialfälle, die für normale Desktop- oder Laptop-Computer wenig relevant sind.

Ja, Computer werden immer noch alle anderthalb Jahre ein wenig schneller … aber bis vor etwa zwanzig Jahren verdoppelte sich ihre Geschwindigkeit. Jetzt sind es nur noch zehn oder 15 Prozent pro Jahr.

Die Branche ist von Natur aus nicht in der Lage, sich an eine Welt anzupassen, in der dies nicht mehr der Fall ist - und auch nie wieder sein wird. Das Ergebnis ist eine zunehmende Aufblähung der Software. Das sagt sogar die IEEE. Die Branche ist profitabel, weil der Grossteil dieser Software in unsicheren Programmiersprachen oder in geringfügig sichereren Sprachen, die in unsicheren Sprachen implementiert sind, erstellt wird, was zu einem wackeligen Stapel von Dutzenden von Schichten aus fehlerhaftem, unzuverlässigem Code führt, der wiederum von Tausenden und Millionen von Menschen ständig gepatcht werden muss, und für den die Kunden bezahlen müssen, um diese Korrekturen schnell zu erhalten.

Die Welt besteht aus Software, die in industriellem Massstabe produziert und verbraucht wird und immer grösser und komplizierter wird. Niemand versteht sie mehr. Niemand kann das. Sie ist zu gross. Aber es ist das einzige Modell für die Herstellung und den Verkauf von Software, das wir haben, also sind wir in ihm gefangen. Und da die Computer nicht viel schneller werden, wird auch die Software langsamer, wenn sie grösser wird. Das ist der Grund, warum wir keine grossen aufregenden neuen Funktionen, neue Möglichkeiten und Werkzeuge sehen.

Dank des Koomey'schen Gesetzes sind wir im ersten Viertel des 21. Jahrhunderts in der Lage, selbst mit kleinen Geräten hochauflösende Video-Streams zu übertragen. Dank riesiger Serverfarmen könnt ihr Videos aus einem Prompt generieren und Sprachen in Echtzeit übersetzen. Das geschieht zu dem Preis, dass niemand mehr die Software in ihrer Gänze versteht.

Sie ist zu gross, um sie sinnvoll zu verändern oder zu optimieren. Alles, was wir machen können, ist, an den Rändern herumzuknabbern, hier Bits zu entfernen, andere Bits ein wenig schneller zu machen. Es ist fast fraktal, also gibt es eine fast unendliche Anzahl von Kanten, an denen man herumknabbern kann. Alles, was wir machen können, ist, eine Menge Leute zu haben, die es beobachten, wenn es schiefläuft, und versuchen, das Problem zu finden und zu beheben.

Dieses Ausmass an Aufblähung ist eine Krise, die Wirth schon vorhersah, als sie noch ein Prozent von heute betrug, als Windows 95 auf 13 Disketten passte. Es besteht ein dringender Bedarf an kleinerer, einfacherer Software. Wenn etwas zu gross ist, um es zu verstehen, dann kann man es nicht auseinandernehmen und etwas Kleineres daraus machen.

Man kann es ein wenig zurechtstutzen, aber um tiefgreifende Änderungen vorzunehmen, muss man zurück in die Planungsphase gehen, überdenken, was man braucht, wegwerfen, was man nicht braucht, und versuchen, ein minimales lebensfähiges Produkt zu schaffen, das das Wesentliche tut und sonst nichts.

Das ist die existenzielle Krise, vor der die Softwareindustrie heute steht, und es gibt keine guten Antworten darauf.

Hinweis: Dieser Artikel ist eine Paraphrasierung des Vortrags, den Liam Proven bei der FOSDEM 2024 in Brüssel unter dem Titel "One way forward: finding a path to what comes after Unix" gehalten hat.

Quelle: https://fosdem.org/2024/schedule/event/fosdem-2024-3095-one-way-forward-finding-a-path-to-what-comes-after-unix/

Tags

Wirth, Chrome, Software-Krise, Skalierung, Moore, Koomey

Grauzone
Geschrieben von Grauzone am 17. Februar 2024 um 11:27

Ich verwende mehrere Cores nur zum Konvertieren von Musik-/Videodateien via SoundConverter in das MP3 Format. Bei Servern werden die zahlreichen Cores für virtuelle Maschinen verwendet. Das ist zumindest teilweise sinnvoll.

Robert
Geschrieben von Robert am 18. Februar 2024 um 13:07

Die Forderung nach schlanker Software findet sich ebenfalls in der UNIX-Philosophie, schon Mitte der 70er Jahren https://de.wikipedia.org/wiki/Unix-Philosophie

Und ja - Software wird im Laufe der Zeit immer größer und komplexer. Als Paradebeispiel für das stetige Wachstum von Software, kann man mal kurz auf Adobe Photoshop zurückschauen: Vor mehr als 30 Jahren passte das Programm noch auf eine Diskette. Und wenn man seinen Programm-Code nicht entsprechend clever modularisiert hat, kann das im schlimmsten Fall bis zur Unwartbarkeit (Code ist nicht mehr alleine durchschaubar) führen.

Noch viel schlimmer - und im Artikel leider nicht angesprochen - finde ich heutzutage allerdings die große Abhängigkeit, aller Programme, von einer Vielzahl an bestimmten Bibliotheken & Libraries. Dieses Szenario ist heute überall in jeder modernen Software verbreitet und wird als "praktische" State-of-the-Art-Technik als ganz normal akzeptiert. Doch es bedeutet auch den (freiwilligen) Einbau einer zusätzlichen, nicht mehr beherrschbaren, Komplexitätsschicht. Und Veränderungen an diesen Bibliotheken & Libraries können dann regelmässig ebenfalls zu großen Problemen führen. Man verlässt sich aber lieber weiterhin auf das schon Vorhandene, um nicht selbst "das Rad" neu zu erfinden. Hier ist Teil des Problems, dass es (aus Bequemlichkeit) jeder so macht, ohne das schon vorhandene Rad, aus Mangel an Zeit, auf Fehler zu überprüfen.

Vielleicht bedarf es in der Informatik dringend ein paar Stil- und Paradigmen-Wechsel, ähnlich wie es sie in der Geschichte der Architektur (Romantik, Gotik, Jugendstil, Bauhaus) gab und man deutliche Unterschiede und Verbesserungen wahrnahm. Und das nicht nur, weil ihnen plötzlich neuere oder festere Baumaterialien zur Verfügung standen. Obwohl weit von Perfektion entfernt, ist die Programmiersprache RUST vielleicht einer dieser, im Augenblick leider nur sehr wenigen, Bausteine für den richtigen Weg.

HaraldMeier
Geschrieben von HaraldMeier am 19. Februar 2024 um 08:11

> Noch viel schlimmer - und im Artikel leider nicht angesprochen - finde ich heutzutage allerdings die große Abhängigkeit, aller Programme, von einer Vielzahl an bestimmten Bibliotheken & Libraries.

Das ist doch die Unix/Linux Philosophie. Ein Programm für einen Zweck. Wenn nun eine Oberfläche einen Werkzeugkasten für den Nutzer bereitstellen soll, müßen da viele Programme zusammenspielen.

Andreas
Geschrieben von Andreas am 20. Februar 2024 um 06:41

Sehr sehr guter Artikel und auch Kommentare.

Ja, die "Programm-Monster" mit ihrer Größe sind ein immenses Problem. Auch wenn Software modularisiert wird, blickt niemand mehr durch den Programm-Code durch. Nicht umsonst gibt es soviele Sicherheitslücken und Schwachstellen.

V wie Vendetta
Geschrieben von V wie Vendetta am 7. März 2024 um 14:30

Ein sehr toller Artikel über ein hochaktuelles Problem.

Beispiel: systemd und s6 software suite. Systemd, ursprünglich ein init-System, ist ein unüberschaubares Krebsgeschwür mit etlichen CVEs geworden, welches das System befällt und Metastasen wirft. Leider denken viele Projekte nicht längerfristig oder modular und setzen mittlerweile diese Krake vorraus. Alternativen und neue Ansätze werden somit quasi verboten. Wer Software benutzen will, die systemd voraussetzt, kann sich noch mittels polyfills retten. Wenn systemd aufgrund seiner schlechten Basis, der schlechten Führung (MS Lennart "Scheiß auf Gentoo, BSD, libmusl und schlanke, modulare und von Großkonzernen unabhängige Software" Poettering) und der Komplexität endgültig zusammenbricht, dann ist ein Großteil der Linuxdistributionen und -desktopumgebungen am Ende. Nicht klug.

Kommen wir zu s6 init. Laurent Bercot, der wirklich was von init-Systemen versteht, werkelt seit Jahren an einem schlanken, modularen Ersatz für systemd. Er als Einzelperson kann den Code überblicken, er ist Fan von DJBs elegantem Code und er möchte es richtig machen statt billiger Hacks zu verwenden. Obarun, Artix und Adélie Linux setzen bereits auf s6. Seine Software ist mit glibc und libmusl kompatibel, BSD könnte es auch nutzen, die Komponenten sind modular und können unabhängig voneinander verwendet werden. Klug!

Leider entwickelt sich ein Großteil der Linux-Welt in die falsche Richtung. Mal sehen, wie lange die suckless Bewegung Widerstand gegen Big Tech leisten kann.