Container und Kompression sind nicht dasselbe
Unter dem Wort „Archiv“ werden zwei getrennte Aufgaben vermischt. Bündeln heißt, viele Dateien in eine einzige zu packen und dabei ihre Namen und Ordner zu behalten. Komprimieren heißt, Bytes kleiner zu machen. TAR bündelt nur – eine .tar ist so groß wie alles darin zusammengerechnet. Gzip komprimiert nur, und zwar immer nur einen Datenstrom auf einmal; deshalb gibt es .tar.gz: erst bündeln, dann das Bündel zusammenpressen. ZIP erledigt beides zugleich, Datei für Datei, und führt ein Verzeichnis über den Inhalt.
Dieser Unterschied bestimmt, wie sich das Format im Alltag verhält. Weil eine ZIP ihr Verzeichnis am Ende ablegt und jede Datei einzeln komprimiert, kann sie ein Archiv von zehn Gigabyte sofort auflisten und eine einzelne Datei aus der Mitte entpacken, ohne den Rest anzurühren – genau so arbeitet unser ZIP-Leser, der nichts dekomprimiert, bis Sie etwas anfordern. Ein solides Archiv komprimiert alles als einen durchgehenden Datenstrom. So werden Wiederholungen über Dateigrenzen hinweg gefunden, und das Ergebnis wird kleiner – bei vielen ähnlichen kleinen Dateien wie Quellcode oder Logs manchmal deutlich kleiner. Der Preis: Es gibt keinen günstigen Weg zu einer einzelnen Datei in der Mitte, denn alles davor muss zuerst dekomprimiert werden. TAR.GZ ist von Natur aus solide, 7z komprimiert in soliden Blöcken, und eine RAR wird hier von Anfang an durchgelesen statt über ein Verzeichnis.
Bereits komprimierte Inhalte lassen sich nicht noch einmal komprimieren. JPEG, PNG, MP3, MP4, PDF und jede moderne Office-Datei haben eine eingebaute Kompression, und Deflate verbraucht an ihnen Zeit, ohne etwas zu erreichen – gelegentlich kommen für die Mühe sogar ein paar Bytes dazu. Deshalb ist die ZIP eines Fotoordners genauso groß wie der Ordner, und viele halten das Tool dann für kaputt. ZIP erstellen erkennt diese Formate und legt sie unverändert ab, statt etwas vorzutäuschen – deshalb ist es bei Fotos sofort fertig und nimmt sich bei Text seine Zeit.
Die Metadaten eines Archivs sind nicht die Metadaten Ihrer Festplatte. Eine ZIP speichert Änderungszeiten im MS-DOS-Format, das auf zwei Sekunden genau ist und kein Datum vor 1980 oder nach 2099 darstellen kann – Daten außerhalb dieses Bereichs werden hier auf die Grenzen gesetzt, statt das ganze Archiv scheitern zu lassen. Das war ein echter Fehler, auf den wir beim Umwandeln von RARs mit einem Nulldatum gestoßen sind. Eine TAR speichert Unix-Berechtigungen, Eigentümer und symbolische Links. Ein Browser kann nichts davon von Ihrer Festplatte lesen und nichts davon zurückschreiben, daher setzt TAR erstellen einen sinnvollen Standardmodus, und unsere Entpacker listen Berechtigungen und Links auf, statt sie wiederherzustellen. Ist ein Archiv eine Sicherung, die exakt so zurückkommen muss, wie sie hineinging, muss es mit tar direkt auf dem Rechner erstellt und wiederhergestellt werden.
ZIP-Verschlüsselung gibt es in zwei Varianten, und nur eine taugt etwas. Das ursprüngliche ZipCrypto-Verfahren ist so gründlich geknackt, dass es nur noch Dekoration ist – ein Known-Plaintext-Angriff stellt den Inhalt auf gewöhnlicher Hardware in Sekunden wieder her, und die meisten Programme bieten es trotzdem standardmäßig an. Das später hinzugekommene AES-256 ist echte Verschlüsselung und nicht zu knacken. Hier wird keines von beiden angeboten: Das kaputte liefern wir nicht aus, und für das moderne gibt es keine browsereigene Implementierung, die wir unter einer freizügigen Lizenz nutzen können. So oder so gut zu wissen: Eine ZIP verschlüsselt ihre Dateinamen nie, das Verzeichnis eines verschlüsselten Archivs kann also jeder lesen. „Rechnungen/2024/Vergleich-vertraulich.pdf“ ist ohne Passwort sichtbar.
Ein Archiv ist die einzige Dateiart, deren Inhalt das Programm angreifen kann, das sie öffnet. Eine Datei darin kann „../../.bashrc“ heißen, um aus dem Ordner auszubrechen, in den sie entpackt wird, und ein paar Kilobyte lassen sich so präparieren, dass sie sich auf Terabytes aufblähen und den Tab lahmlegen. Beides wird abgefangen, bevor Sie irgendetwas sehen: Feindselige Namen – Sprünge ins übergeordnete Verzeichnis, absolute Pfade, Windows-Laufwerksbuchstaben, reservierte Gerätenamen, unsichtbare Zeichen zum Tarnen einer Dateiendung – werden bereinigt, und jede Korrektur wird aufgelistet. Kompressionsverhältnisse werden gemessen und abgelehnt, statt es darauf ankommen zu lassen. Symbolische Links in einem Archiv werden angezeigt, aber nie verfolgt.