XZ : voila un format de compression qu’il est bien.

Dans un billet de fin mai 2009, j’avais abordé rapidement l’arrivée des xz-utils dans Archlinux. Mais que sont donc les xz-utils ?

Avant toute chose, il faut aborder deux notions différentes et pourtant liée de l’informatique : l’archivage et la compression.

Archivage : c’est créer un fichier unique à partir d’un ensemble de fichiers et de répertoires.

Compression : c’est utiliser des outils pour réduire – sans perte de données – un fichier ou une archive.

Dans le petit monde des unix, c’est tar pour Tape ARchive qui est le plus connu. Dans le petit monde de Windows, c’est zip, qui combine à la fois archivage et compression.

D’ailleurs, si mes souvenirs sont bons, la première fois qu’un Windows a intégré la gestion en natif des fichiers zip, cela devait être à l’époque de Windows Millenium en 2000.

D’ailleurs d’autres formats ont maintenant pris le relais : rar, ace ou encore 7-zip.

Côté outil de compression dans le monde des unix, on peut citer : gzip (Gnu zip), Bzip2 (l’un des plus employé actuellement), rzip (assez confidentiel). Sinon, historiquement ce fût compress qui a eu ses heures de gloire.

Maintenant que le point – rapide – a été fait sur la différence entre archiveur et compresseur, continuons à parler de xz-utils.

xz-utils, c’est le descendant de lzma, pour « Lempel-Ziv-Markov chain-Algorithm » et il permet d’avoir des taux de compression assez impressionnant.

Depuis la version 1.22 de Gnu Tar, il est possible de compacter directement en utilisant le protocole de compression xz.

Pour les utilisateurs de linux, si vous avez Gnu Tar 1.22, pas la peine de vous poser de questions. Pour résumer, en restant dans les grands noms :

En cas de doute sur une ligne de commande :


fred ~ $ tar --version
tar (GNU tar) 1.22
Copyright © 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later .
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Écrit par John Gilmore et Jay Fenlason.

Et pour savoir si xz est présent sur votre machine, ce qui doit être le cas si gnu tar 1.22 est présent :


fred ~ $ xz --version
xz (XZ Utils) 4.999.9beta
liblzma 4.999.9beta

J’ignore cependant si 7-zip supporte le format xz, proche du lzma de 7-zip.

Maintenant, voyons le gain par rapport au déjà bien réducteur de taille bzip2. Pour cela, je vais récupérer le dernier code source du noyau linux, le 2.6.31.6 au moment où je rédige cet article, puis le décompresser.

En ligne de commande :

fred ~/download $ bzip2 -kd linux-2.6.31.6.tar.bz2
fred ~/download $ xz -k9 linux-2.6.31.6.tar

Quelques explications :

  • L’option k dans les deux lignes permette de conserver le fichier d’origine
  • L’option d signifie qu’on veut décompresser
  • L’option -9 indique le niveau de compression à appliquer. Cela va de 0 à 9, xz étant réglé par défaut en niveau -6

Et maintenant, jettons un coup d’oeil au résultat :


fred ~/download $ ls -alh linux-2.6.31.6.tar*
-rw-r--r-- 1 fred users 349M nov. 15 13:43 linux-2.6.31.6.tar
-rw-r--r-- 1 fred users 59M nov. 15 13:43 linux-2.6.31.6.tar.bz2
-rw-r--r-- 1 fred users 49M nov. 15 13:43 linux-2.6.31.6.tar.xz

10 MiO de moins. Avec bzip2, l’archive est comprimé à hauteur de 83,09%. Et en xz ? 85,96%.

Il est vrai que le code source de linux est composé presque uniquement de texte. Avec le code source de Mozilla Firefox, on a un peu plus de variété. Voyons donc le résultat de la même manipulation. J’ai donc récupérer le code source de Mozilla Firefox 3.5.5. Voici le résultat du traitement :


fred ~/download $ ls -lh firefox-3.5.5.source.tar*
-rw-r--r-- 1 fred users 307M nov. 15 13:56 firefox-3.5.5.source.tar
-rw-r--r-- 1 fred users 45M nov. 15 13:56 firefox-3.5.5.source.tar.bz2
-rw-r--r-- 1 fred users 36M nov. 15 13:56 firefox-3.5.5.source.tar.xz

9 MiO de moins. Avec bzip2, l’archive est comprimé à hauteur de 85,34%
. Et en xz ? 88,27%

En gros, on gagne 2 à 3% sur une archive compressé avec bzip2. Ce qui est tout de même intéressant au final.