
Package-Registry
Eine Package-Registry ist ein zentraler Online-Speicher für fertige Software-Bausteine, die Programmierer in ihre eigenen Projekte einbauen. Bekannte Beispiele sind npm für JavaScript und PyPI für Python.
Wer heute ein Programm schreibt, schreibt nur einen kleinen Teil selbst. Den Rest holt man sich fertig: kleine Software-Bausteine, die andere Leute geschrieben und veröffentlicht haben. So ein Baustein löst eine einzelne Aufgabe, zum Beispiel das Umrechnen von Datumsangaben oder das Zeichnen eines Diagramms. Eine Package-Registry ist der zentrale Lagerplatz im Internet, auf dem diese Bausteine liegen. Jeder kann dort etwas hochladen, und jeder kann etwas herunterladen. Man kann sich das wie eine öffentliche Bibliothek vorstellen, in der die Regale nach Namen und Versionsnummern sortiert sind.
Warum fast jedes Programm an einer Registry hängt
Der praktische Nutzen ist enorm. Eine Verschlüsselung selbst zu programmieren dauert Monate und geht meist schief. Ein geprüfter Baustein aus einer Registry ist in einer Minute installiert. Deshalb bestehen moderne Anwendungen oft aus hunderten solcher fremden Teile. Bei größeren Web-Projekten sind tausend und mehr keine Seltenheit.
Genau diese Abhängigkeit ist aber auch ein Risiko. Wenn ein einziger beliebter Baustein kaputt oder böswillig verändert wird, wirkt das auf alle Programme, die ihn benutzen. 2016 löschte ein Entwickler ein winziges npm-Paket mit elf Zeilen Code. Tausende Projekte weltweit ließen sich danach nicht mehr korrekt zusammenbauen.
Angreifer nutzen das gezielt aus. Sie laden Pakete hoch, deren Namen sich nur um einen Buchstaben von bekannten unterscheiden. Verschreibt sich jemand beim Installieren, landet Schadcode im Projekt. Fachleute nennen solche Angriffe über die Lieferkette der Software Supply-Chain-Angriffe.
Namen, Versionen und Abhängigkeiten
Jedes Paket in einer Registry hat einen eindeutigen Namen und eine Versionsnummer, etwa 2.4.1. Steigt die letzte Zahl, wurden nur Fehler behoben. Steigt die erste, hat sich das Paket grundlegend geändert und passt vielleicht nicht mehr zum eigenen Code. Diese Regel heißt semantische Versionierung und ist eine Absprache, keine technische Garantie.
In einem Projekt gibt es eine Textdatei, in der alle benötigten Pakete mit ihren Versionen aufgelistet sind. Ein Hilfsprogramm, der Paketmanager, liest diese Liste und lädt alles aus der Registry herunter. Dabei prüft er auch, welche Pakete ihrerseits weitere Pakete brauchen. So entsteht ein Baum von Abhängigkeiten, der schnell mehrere Ebenen tief wird.
Damit auf jedem Rechner wirklich dasselbe ankommt, schreibt der Paketmanager die exakt installierten Versionen in eine zweite Datei, die Lock-Datei. Zusätzlich speichert die Registry für jede Datei eine Prüfsumme, also einen kurzen Zahlencode aus dem Inhalt. Stimmt die Prüfsumme beim Download nicht, wurde unterwegs etwas verändert.
npm, PyPI und die Registries der KI-Welt
Jede Programmiersprache hat ihre eigene große Registry. npm gehört zu JavaScript und ist mit über drei Millionen Paketen die umfangreichste. PyPI versorgt die Sprache Python, in der ein sehr großer Teil aller KI-Software geschrieben wird. Hinzu kommen Maven für Java und Crates.io für Rust.
In der KI-Welt gibt es ein verwandtes Prinzip für fertig trainierte Modelle. Die Plattform Hugging Face funktioniert ähnlich wie eine Registry, verteilt aber nicht Programmcode, sondern die Modelldateien selbst. Auch Docker Hub arbeitet nach diesem Muster und liefert komplette vorbereitete Software-Umgebungen aus.
In den Wirtschaftsnachrichten tauchen Registries meist bei Sicherheitsvorfällen auf. Firmen betreiben deshalb oft interne Registries, die Pakete erst nach einer Prüfung weitergeben. Die EU verlangt mit dem Cyber Resilience Act außerdem, dass Hersteller ihre verwendeten Bausteine dokumentieren. Diese Liste nennt man Software Bill of Materials, also eine Stückliste für Software.