Abhängigkeiten

Essentiell: Was heißt das eigentlich?

Vor ein paar Jahren ist das halbe Internet kaputtgegangen. Nicht wegen eines Hackerangriffs. Nicht wegen eines Stromausfalls. Wegen elf Zeilen Code.

Ein Entwickler namens Azer Koçulu hatte ein winziges Paket geschrieben. left-pad. Elf Zeilen. Die Funktion: Einen Text links mit Leerzeichen auffüllen. Das wars.

Er hatte Streit mit npm, der Paketverwaltung für JavaScript. Er war wütend. Also hat er alle seine Pakete gelöscht. Auch left-pad.

Innerhalb von Minuten brach alles zusammen. React ging nicht mehr. Babel ging nicht mehr. Tausende von Projekten weltweit konnten nicht mehr bauen. Entwickler starrten auf Fehlermeldungen und verstanden nicht, was passiert war.

Elf Zeilen. Ein Mann in der Türkei. Das halbe Internet.

Dazu eine Geschichte:

Vor Jahren gab es in den USA ein Katzensterben. Hunderttausende eigentlich gesunde Tiere gingen kläglich ein. An den verschiedensten Krankheiten. Man konnte keinen gemeinsamen Nenner finden.

Die Ursache lag im Futter. Whiskas hatte den Fleischlieferanten gewechselt. Der neue Lieferant hatte Rinder, die an Taurin verarmt waren. Andere Böden, anderes Gras, weniger Taurin im Fleisch.

Den Rindern machte das nichts. Taurin ist für sie keine essentielle Aminosäure. Die können sich das selbst zusammenbauen.

Katzen können das nicht. Bei denen ist Taurin essentiell. Lebensnotwendig. Muss im Futter sein.

Die Katzen starben an Herzschwäche. Auch ganz junge. Niemand kam drauf. Wer untersucht schon ein junges Tier auf Herzschwäche?

Das Futter sah gleich aus. Die Zusammensetzung sah gleich aus. Aber eine unsichtbare Abhängigkeit hatte sich geändert. Und niemand hatte es bemerkt.

Das Muster ist immer dasselbe:

Dein Projekt hängt von einer Library ab. Die Library hängt von einer anderen Library ab. Die hängt von einer dritten ab. Irgendwo am Ende dieser Kette sitzt ein einzelner Mensch, der das Paket in seiner Freizeit pflegt. Unbezahlt. Oft undankbar.

2022 hat der Maintainer von colors.js und faker.js seinen eigenen Code sabotiert. Absichtlich. Er hat eine Endlosschleife eingebaut. Tausende Projekte kaputt. Seine Begründung: Er hatte keine Lust mehr, Milliarden-Konzerne kostenlos zu unterstützen.

2024 hat jemand eine Backdoor in xz-utils eingeschleust. Fast wäre sie in jeden Linux-Server weltweit gelangt. Der Maintainer war ausgebrannt, hatte die Kontrolle an jemanden abgegeben, der sich über Jahre das Vertrauen erschlichen hatte. Der Angriff war so raffiniert, dass er nur durch Zufall auffiel.

Die Software sieht gleich aus. Die Versionsnummer sieht gleich aus. Aber irgendwo in der Kette hat jemand den Fleischlieferanten gewechselt.

Ich vertraue blind. Wir alle vertrauen blind.

Das Essentielle fehlt:

Früher hat man Code geschrieben. Heute installiert man Code. Der Unterschied ist gewaltig.

Wenn ich Code schreibe, verstehe ich ihn. Ich sehe jede Zeile. Ich weiß, was passiert.

Wenn ich Code installiere, habe ich keine Ahnung. Ich vertraue darauf, dass Tausende von Fremden gute Arbeit gemacht haben. Dass niemand müde war. Dass niemand Fehler gemacht hat. Dass niemand Absichten hatte, die nicht meinen entsprechen.

Das alte Visual Studio von 1998 hatte keine Abhängigkeiten außer der Win32 API. 30 Megabyte. Es lief.

Das Katzenfutter sieht immer noch gleich aus. Aber das Taurin?

Keine Ahnung.