XZ

Wat is een XZ-bestand?

De sterkste van de gangbare compressors op Unix. De standaard om broncode en pakketten te downloaden.

Wat XZ is

XZ is een stroomformaat dat van voor naar achter wordt geschreven en gelezen. Het wordt gebruikt voor archivering.

De extensie is .xz en de volledige naam XZ Archive. Allebei zeggen ze minder dan wat het bestand kan bevatten, en daar gaat de rest van deze pagina over.

Waar XZ vandaan komt

Het gaat terug tot 2009.

De leeftijd is om een praktische reden interessant: hoe ouder een formaat, hoe meer programma’s de tijd hebben gehad om het te leren.

De specificatie is openbaar

Ze is volledig gepubliceerd, dus wie het formaat wil uitvoeren kan dat uit het document doen in plaats van door te kijken hoe anderen het doen. Daarom duikt het in zo veel programma’s op, en daarom gaan bestanden van twintig jaar geleden nog steeds open. Openbaar is niet hetzelfde als royaltyvrij: waar een formaat een codec omhult, is de octrooilicentie een aparte vraag waarop de standaard geen antwoord geeft.

Er wordt niets weggegooid

XZ bewaart zijn inhoud precies. Opnieuw opslaan verandert niets, dus je kunt het zo vaak openen, bewerken en wegschrijven als je wilt zonder dat er schade opstapelt — en dat is wat er een werkformaat van maakt in plaats van een afleverformaat.

Het bevat precies één bestand

XZ comprimeert één enkele stroom en kent geen bestandsnamen of mappen. Daarom zie je het zo vaak naast TAR staan, dat de ontbrekende structuur aanlevert.

Waar zijn compressieverhouding vandaan komt

Het werkt met 8 MB tegelijk: binnen dat stuk moet een herhaling vallen voordat ze weggerekend kan worden.

Dat ene getal verklaart het grootste deel van het verschil tussen het ene archiefformaat en het andere. Een groter stuk vindt meer herhaling en heeft daar meer tijd en meer geheugen voor nodig — dat is de hele ruil.

Wat het doet om zichzelf te beschermen

XZ brengt een controlegetal, zodat een beschadigd bestand opvalt in plaats van stilzwijgend verkeerd gelezen te worden mee.

Repareren doet een controlegetal niets. Het vertelt je dat het bestand stuk is — dat is het verschil tussen het nu ontdekken en het horen van degene aan wie je het gestuurd hebt.

Wat XZ opent

xz, 7-Zip en Keka lezen het, en de meeste programma’s van dezelfde soort ook.

Als een bestand niet opengaat ligt het zelden aan het formaat — vaker is het programma ouder dan het formaat. Converteren naar iets ouders is de betrouwbare weg eromheen, en daarvoor is de rest van deze site bedoeld.

Het in de browser openen

Geen enkele browser leest het.

Dat is veruit de meest voorkomende reden om het te converteren: niet dat het formaat slecht is, maar dat de plek waar je het bestand wilt tonen het niet kan lezen.

Het is een afleverformaat

XZ is bedoeld om door te geven, niet om in te werken. Er een bewerken kan en is zelden prettig; de verstandige weg loopt via de bron en een nieuwe export.

Wat er misgaat

De terugkerende klachten: het houdt één stroom vast en kan geen map beschrijven.

Niets daarvan is een reden om het formaat te mijden. Het zijn de dingen die je beter kent voordat een ervan je verrast, en dat is een andere en een nuttigere bewering.

Eén stroom, geen bestandsnamen, geen archief

Dit is het hele onderscheid met 7z en het verklaart al het andere. Een xz-bestand bevat precies één gecomprimeerde stroom. Het heeft geen directory, geen lijst met namen, geen begrip van meerdere bestanden. Comprimeer `verslag.txt` en je krijgt `verslag.txt.xz`; er zit verder niets in.

Dat is waarom `.tar.xz` de normale vorm is. Tar bundelt de mappenboom tot één stroom en xz comprimeert die stroom, dezelfde taakverdeling als bij `.tar.gz`. Een `.7z` heeft geen tar nodig omdat 7z zelf een archiefformaat is, en een `.xz` heeft er wel een nodig omdat het dat niet is.

Dezelfde compressie als 7z, in een andere wrapper

Beide gebruiken LZMA2, dus op dezelfde data leveren ze zeer vergelijkbare groottes op. xz verslaat gzip doorgaans met dertig procent of meer bij tekst, broncode en logs — een marge die van een download van 100 MB er een van 65 maakt.

Dat koopt het met tijd en geheugen. Comprimeren op de hogere niveaus kan meerdere keren langer duren dan gzip en kan enkele honderden megabytes werkgeheugen willen. Decompressie is snel en goedkoop, ongeacht dat, wat precies de juiste vorm is voor iets dat één keer gecomprimeerd en heel vaak gedownload wordt.

Waarom Linux-distributies het standaard maakten

De Linux-kernel wordt uitgeleverd als `.tar.xz`. Zo ook de meeste distributiepakketarchieven en een groot deel van de broncodereleases. De rekensom is eenvoudig: een bestand dat miljoenen keren gedownload wordt, rechtvaardigt vrijwel elke hoeveelheid compressiemoeite, want de kosten worden één keer betaald en de besparing vermenigvuldigd met elke download.

Dat is ook waarom je xz vooral tegenkomt bij het ophalen van software eerder dan wanneer iemand je een bestand stuurt. Het is een distributieformaat, geen deelformaat, en dat verschil is terug te zien in het gereedschap eromheen.

De achterdeur van 2024, en het is de moeite waard om daar duidelijk over te zijn

In maart 2024 werd een achterdeur gevonden in de xz-utils-software — versies 5.6.0 en 5.6.1, bijgehouden als CVE-2024-3094. Die was doelbewust geïntroduceerd door een bijdrager die zo’n twee jaar had besteed aan het opbouwen van vertrouwen binnen het project, en richtte zich op de SSH-daemon op systemen waar een tegen xz gelinkte bibliotheek erin geladen was.

Hij werd ontdekt door Andres Freund, een ontwikkelaar die merkte dat SSH-logins zo’n halve seconde langer duurden dan verwacht en die afwijking volgde in plaats van te schouderophalen. De getroffen versies zaten in testtakken en hadden stabiele distributies nauwelijks bereikt, dus was de blootstelling in de praktijk klein.

Wat dat wel en niet betekent voor jouw bestanden

Er is niets mis met het bestandsformaat zelf. De achterdeur zat in een specifieke release van een specifiek programma, veranderde niets aan hoe xz-bestanden gestructureerd zijn, en een `.xz` gemaakt vóór, tijdens of na die periode is een gewone gecomprimeerde stroom. Er is geen manier waarop een gewoon xz-bestand de exploit kan dragen.

De blijvende betekenis gaat over hoe opensourcesoftware onderhouden wordt, niet over compressie. Het blijft het ingrijpendste dat dit format ooit is overkomen, en het is de moeite waard het accuraat te kennen in plaats van als een gerucht dat xz onveilig is.

Integriteitscontrole, wat ongewoon is hier

xz bewaart een checksum — CRC32, CRC64 of SHA-256 — en verifieert die bij decompressie. Is er onderweg of op een falende schijf een byte veranderd, dan mislukt de extractie met een expliciete foutmelding in plaats van stilzwijgend verkeerde uitvoer te leveren.

Dat is een echt voordeel boven gewone gzip, waarvan de controle zwakker is, en het is deels waarom distributies erop vertrouwen voor softwarelevering. Het detecteert schade; het kan hem niet herstellen, wat het ene ding is dat RAR’s herstelrecord doet dat hier verder niets biedt.

Waar zstd past, en waarom sommige projecten overstapten

Zstandard, uitgebracht door Facebook in 2016, comprimeert bijna net zo goed als xz met snelheden dicht bij gzip. Voor alles waar compressietijd ertoe doet — pakketbuilds, nachtelijke back-ups, continu geschreven data — is die combinatie moeilijk te weerleggen, en verschillende distributies hebben hun pakketformaat ernaartoe verplaatst.

xz wint nog steeds op pure verhouding bij zijn hoogste instellingen, wat het op zijn plek houdt voor broncodereleases en kernelarchieven waar het bestand één keer gebouwd wordt. De twee concurreren eigenlijk niet echt om dezelfde klus.

Er een openen, en wat je daadwerkelijk krijgt

Elk Linux-systeem behandelt xz vanaf de commandoregel. Standaard macOS levert geen `xz`-binary mee — Homebrew of MacPorts levert er een — maar de op libarchive gebaseerde `tar` pakt een `.tar.xz` zonder hulp uit, wat het meeste dekt dat aankomt. Windows heeft een hulpprogramma als 7-Zip nodig gehad, dat het probleemloos leest. Een `.tar.xz` decomprimeren is twee stappen die de meeste tools als één presenteren: eerst de compressie uitpakken, dan de tar uitpakken.

Verwacht geen map bij het decomprimeren van een kale `.xz`. Je krijgt precies één bestand terug — het ding dat gecomprimeerd was — want dat is alles wat het format ooit bevatte. Verwachtte je een mappenboom, dan was het archief dat je wilde de `.tar` erbinnen.

Wanneer je het gebruikt

Gebruik het wanneer iets één keer gecomprimeerd en vaak opgehaald wordt: een release, een download, een archief voor langdurige opslag waar elke gigabyte betaald wordt. De extra minuten bij het comprimeren worden uitgesmeerd over elke keer dat het opgehaald wordt.

Gebruik het niet om een bestand naar een persoon te sturen. ZIP is wat hun computer zonder hulp opent, en het grootteverschil bij een enkele overdracht is zelden de moeite van het uitleggen waard van wat een `.xz` is en hoe je die opent.

De gegevens, op één plek

Kenmerken en herkomst van het formaat XZ.
Extensie.xz
Mediatypeapplication/x-xz
Voor het eerst gepubliceerd2009