Seitenansicht eines Schichtstapels: unten die Basisschicht mit Betriebssystem, darüber Schichten für Laufzeitumgebung, Zusatzpakete und eigenen Programmcode; rechts Markierungen, welche Schichten aus dem Cache wiederverwendet und welche nach einer Codeänderung neu gebaut werden.

Build-Layer

Ein Build-Layer ist eine einzelne, unveränderliche Zwischenstufe beim Zusammenbauen eines Software-Pakets: Jeder Bauschritt legt eine neue Schicht auf die vorherige. Weil unveränderte Schichten wiederverwendet werden können, verkürzt das Bauzeiten und spart Speicherplatz.

Software wird heute meistens nicht mehr von Hand auf einem Server installiert, sondern nach einem festen Bauplan automatisch zusammengesetzt. Dieser Bauplan besteht aus einer Liste von Anweisungen, die nacheinander abgearbeitet werden: Betriebssystem holen, Programmiersprache installieren, Zusatzpakete nachladen, eigenen Programmcode hineinkopieren. Nach jedem einzelnen dieser Schritte wird das Zwischenergebnis eingefroren und gespeichert. Genau so ein eingefrorenes Zwischenergebnis heißt Build-Layer, auf Deutsch etwa Bauschicht. Das fertige Paket ist also kein einzelner Block, sondern ein Stapel solcher Schichten, die übereinanderliegen. Man kann sich das wie die Schichten einer Lasagne vorstellen: Jede Lage wird einzeln aufgetragen, am Ende zählt aber nur das Gesamtgericht.

Warum Entwickler auf jede einzelne Schicht achten

Der große Vorteil von Schichten ist der Cache, also ein Zwischenspeicher für schon erledigte Arbeit. Ändert sich an einem Bauschritt nichts, muss er beim nächsten Mal nicht wiederholt werden. Das System nimmt einfach die gespeicherte Schicht von letztem Mal. Bei größeren Projekten macht das den Unterschied zwischen zwanzig Minuten Wartezeit und zwanzig Sekunden.

Der Haken: Sobald eine Schicht sich ändert, sind alle darüberliegenden Schichten wertlos. Sie müssen komplett neu gebaut werden. Deshalb sortieren erfahrene Entwickler ihre Bauanweisungen bewusst. Selten geänderte Dinge wie das Nachladen von Zusatzpaketen kommen nach unten, der eigene Programmcode kommt ganz nach oben. Dreht man die Reihenfolge um, baut jede winzige Codeänderung das halbe Paket neu.

Ein zweiter Punkt ist die Größe. Jede Schicht belegt Speicherplatz und muss über das Netz übertragen werden, wenn das Paket auf einen Server wandert. Wer unnötige Dateien in eine Schicht packt, verteilt sie später an jeden Server mit. Bei KI-Anwendungen ist das besonders spürbar, weil Bibliotheken für maschinelles Lernen schnell mehrere Gigabyte groß werden.

Wie der Stapel entsteht und warum er unveränderlich ist

Beim Bauen startet das System mit einer Basisschicht, meist ein abgespecktes Betriebssystem. Dann führt es die erste Anweisung aus und schreibt nur die Unterschiede zum vorherigen Zustand in eine neue Schicht. Es wird also nicht jedes Mal alles neu gespeichert, sondern nur die Veränderung. Dieses Prinzip nennt man Copy-on-Write: kopiert wird erst, wenn etwas wirklich geschrieben wird.

Fertige Schichten sind danach unveränderlich. Man kann sie nicht nachträglich bearbeiten, sondern nur eine weitere Schicht darüberlegen. Das führt zu einem verbreiteten Irrtum: Wer in einem späteren Schritt eine Datei löscht, wird sie nicht wirklich los. Die Datei liegt weiterhin in der unteren Schicht und wird nur ausgeblendet. Auch ein versehentlich hineinkopiertes Passwort bleibt damit im Paket auffindbar.

Jede Schicht bekommt außerdem eine Prüfsumme, also einen eindeutigen Fingerabdruck aus ihrem Inhalt. Daran erkennt das System, ob eine Schicht identisch ist mit einer bereits vorhandenen. Nutzen zehn Anwendungen dieselbe Basisschicht, liegt sie trotzdem nur einmal auf der Festplatte.

Vom Docker-Tutorial bis zur Rechnung des Cloud-Anbieters

Am häufigsten trifft man den Begriff bei Docker und ähnlichen Container-Werkzeugen. Container sind abgeschlossene Pakete, in denen eine Anwendung samt allem Nötigen steckt. Wer eine solche Datei baut, sieht in der Ausgabe zeilenweise Meldungen wie « CACHED » — das heißt, diese Schicht wurde wiederverwendet.

In der Praxis stecken Build-Layer hinter Zeitangaben, die man im Arbeitsalltag ständig hört. Wenn ein Team klagt, die Auslieferung einer neuen Version dauere zu lange, liegt die Ursache oft in schlecht sortierten Schichten. Cloud-Anbieter berechnen zudem Speicher und Datenübertragung, sodass aufgeblähte Schichten direkt Geld kosten.

Auch in Sicherheitsmeldungen taucht der Begriff auf. Scanner prüfen jede Schicht einzeln auf bekannte Schwachstellen und melden, in welcher Ebene ein veraltetes Programm steckt. Verwandt, aber nicht dasselbe, ist der Begriff Build-Pipeline: Sie beschreibt den gesamten automatisierten Ablauf vom Code bis zum Server, während ein Build-Layer nur eine einzelne Zwischenstufe darin ist.

Subscribe free. Unsubscribe the second it sucks.

High-signal news across AI, business, UX, and tech. Every morning.