BZ2

Qu’est-ce qu’un fichier BZ2 ?

Compresse mieux que GZ et met sensiblement plus longtemps.

Ce qu’est BZ2

BZ2 est un format de flux, écrit et lu du début à la fin. Il est utilisé pour l’archivage.

L’extension est .bz2 et le nom complet Bzip2 Archive. L’un et l’autre comptent moins que ce que le fichier peut contenir, et c’est le sujet du reste de cette page.

D’où vient BZ2

Il remonte à 1996.

À un format resté lisible aussi longtemps, on peut confier quelque chose qu’on veut retrouver dans dix ans.

La spécification est publique

Elle est publiée intégralement : n’importe qui peut l’implémenter à partir du document plutôt qu’en l’observant, et c’est pourquoi ce format apparaît dans tant de programmes et pourquoi des fichiers écrits il y a vingt ans s’ouvrent encore. Une spécification publiée n’est pas pour autant libre de redevances : quand un format enveloppe un codec, les brevets sont une question à part, que la norme ne tranche pas.

C’est un format hérité

Il s’ouvre encore partout et les anciens logiciels l’écrivent toujours, mais plus rien de neuf ne se construit autour. Convertissez ce que vous voulez garder, et ne le choisissez pas pour un projet qui commence aujourd’hui.

Rien n’est jeté

BZ2 enregistre son contenu à l’identique. Le réenregistrer ne change rien : vous pouvez l’ouvrir, le modifier et le réenregistrer autant de fois que vous voulez sans accumuler de dégâts, et c’est ce qui en fait un format de travail plutôt qu’un format de livraison.

Il contient exactement un fichier

BZ2 compresse un seul flux et n’a aucune notion de nom de fichier ni de dossier. C’est pourquoi on le voit si souvent accompagné de TAR, qui apporte la structure qui lui manque.

D’où vient son taux de compression

Il travaille par tranches de 900 Ko : pour être compressée, une répétition doit tenir tout entière dans cette étendue.

Ce seul nombre explique l’essentiel de l’écart entre un format d’archive et un autre. Une étendue plus grande trouve plus de répétitions et met plus de temps et plus de mémoire à le faire : voilà tout le compromis.

Ce qu’il fait pour se protéger

BZ2 porte une somme de contrôle, pour qu’un fichier abîmé soit détecté au lieu d’être mal lu en silence.

Une somme de contrôle ne répare rien. Elle vous dit que le fichier est abîmé, ce qui fait la différence entre l’apprendre maintenant et l’apprendre de la personne à qui vous l’avez envoyé.

Ce qui ouvre BZ2

bzip2, 7-Zip et Keka le lisent, comme la plupart des programmes du même genre.

Quand un fichier ne s’ouvre pas, le format est rarement en cause : le plus souvent, c’est le programme qui est plus ancien que lui. Convertir vers quelque chose de plus ancien est le contournement fiable, et c’est à cela que sert le reste de ce site.

L’ouvrir dans un navigateur

Aucun navigateur ne le lit.

C’est de loin la raison la plus fréquente de le convertir : non pas que le format soit mauvais, mais que l’endroit où vous voulez montrer le fichier ne sache pas le lire.

C’est un format de livraison

BZ2 est fait pour être transmis, pas pour travailler dedans. Modifier un tel fichier est possible et rarement agréable ; la voie raisonnable passe par la source et un nouvel export.

Ce qui se passe mal avec lui

Les reproches qui reviennent : il porte un seul flux et ne sait pas décrire un dossier.

Rien de tout cela n’est une raison d’éviter le format. Ce sont les choses à connaître avant que l’une d’elles vous surprenne, ce qui est une affirmation différente et plus utile.

Serré des deux côtés, et mérite d’être dit

Bzip2 est arrivé en 1996 en compressant notablement mieux que gzip, et pendant une décennie environ `.tar.bz2` a été le choix intermédiaire sensé pour les releases de code source et les archives. Cette période est révolue. xz compresse plus dur, zstd est plus rapide à des taux similaires, et les deux décompressent plus rapidement que bzip2, ce qui a réduit le format à un rôle de conservation.

Donc un `.bz2` que vous rencontrez aujourd’hui est presque toujours ancien — une release archivée, un jeu de données publié il y a des années, une sauvegarde d’un système dont les défauts dataient de 2008. Il n’y a pas d’argument vivant pour en créer de nouveaux, et la question utile est comment ouvrir celui que vous avez, pas s’il faut en créer d’autres.

Il trie les données au lieu de les chercher

Tous les autres compresseurs ici — gzip, xz, 7z, zip — regardent en arrière pour des séquences répétées. Bzip2 fait quelque chose de différent : la transformée de Burrows-Wheeler réarrange un bloc de données pour que des caractères similaires se retrouvent adjacents, puis un encodeur simple exploite les plages que cela crée.

La transformée est réversible, ce qui est la partie surprenante — le réarrangement peut être défait exactement. C’est une approche élégante et elle explique les caractéristiques du format : bons taux sur le texte, décompression lente parce que la transformée doit être défaite, et un coût en mémoire proportionnel à la taille du bloc plutôt qu’au fichier, ce qui le rend utilisable même sur de très gros fichiers.

Les blocs, qui le rendent récupérable

Bzip2 travaille sur des blocs indépendants, 900 Ko par défaut. Chaque bloc se compresse et se décompresse de manière autonome, sans référence à ses voisins, ce qui est la propriété structurante du format.

Cela lui donne une propriété que rien d’autre ici n’a : si une partie de l’archive est corrompue, les blocs non endommagés restent lisibles, et un outil de récupération peut les extraire. Dans gzip ou xz, un dommage tôt dans le flux coûte en général tout ce qui suit, parce que le flux est une suite d’interdépendances. Pour une vieille archive sur un média défaillant, c’est un avantage réel et parfois décisif, et c’est la raison pour laquelle certains jeux de données scientifiques ont été publiés en `.tar.bz2` même quand un format plus moderne aurait été techniquement supérieur.

Et qui le rendent parallèle

Parce que les blocs sont indépendants, ils peuvent être compressés et décompressés sur des cœurs de processeur distincts en même temps. Des outils comme pbzip2 et lbzip2 exploitent cela et produisent des fichiers que le bzip2 ordinaire lit toujours, ce qui est important pour les outils existants.

Sur une machine à huit cœurs, cela transforme la pire caractéristique de bzip2 en quelque chose de tolérable. C’est la raison principale pour laquelle le format a survécu aussi longtemps en calcul scientifique et dans les chaînes de données, où les fichiers sont gros et les cœurs nombreux, et où la parallélisation vaut le coup d’être ajoutée par-dessus l’algorithme de base.

La double extension, encore

Bzip2 compresse exactement un flux. Il n’a pas de répertoire, pas de noms de fichiers, pas la notion de plusieurs fichiers — la même forme que gzip et xz. C’est pourquoi `.tar.bz2` est la forme normale : tar regroupe l’arborescence en un flux et bzip2 la compresse, et les deux étapes sont en général fusionnées par les outils d’archive.

Décompresser un `.bz2` nu restitue exactement un fichier. Si vous attendiez un dossier, l’archive que vous vouliez est le `.tar` à l’intérieur, et la plupart des outils présentent les deux étapes comme une seule, ce qui masque l’opération mais ne la supprime pas.

Là où les chiffres tombent réellement

Sur du texte typique et du code source, bzip2 se pose environ un quart plus petit que gzip — 25 et 27 pour cent sur deux corpus de code source mesurés pour cette page — et à quelques pour cent près de xz sur ce type d’entrée. La compression est plusieurs fois plus lente que gzip ; la décompression est encore plus lente, ce qui est la caractéristique qui l’a achevé.

Ce dernier point est ce qui rend le format peu attractif plutôt que remplacé. Un fichier est compressé une fois et décompressé plusieurs fois, donc un format lent à lire paie son coût à répétition. xz est lent à écrire et rapide à lire, ce qui est la bonne disposition, et c’est pour cela que la communauté du logiciel libre a basculé de `.tar.bz2` à `.tar.xz` à mesure que la puissance de calcul augmentait.

Il a été non maintenu, et cela a compté

Le bzip2 original est passé des années sans release, et en 2019 une écriture hors limites a été trouvée dans le décompresseur qui était présente depuis longtemps. La maintenance a depuis été reprise et le problème est corrigé partout où c’est à jour, ce qui rend le format sûr à ouvrir avec un logiciel récent.

Cela vaut la peine d’être su pour le contexte plutôt que comme un avertissement sur vos fichiers : un `.bz2` est une donnée, pas du code, et en ouvrir un avec un logiciel à jour est sans particularité. L’épisode fait partie des raisons pour lesquelles les distributions sont passées à autre chose, en plus de la vitesse, et c’est aussi pourquoi les nouveaux projets choisissent xz ou zstd plutôt que bzip2 par défaut.

Ce qui en produit encore

Les anciennes releases de code source Linux et paquets de distribution archivés. Des jeux de données scientifiques et génomiques, où les outils bloc-parallèle l’avaient rendu pratique et où les archives publiées ne sont pas ré-encodées. Des systèmes de sauvegarde configurés il y a dix ans. Les dumps de base de données de Wikipédia, historiquement et pendant longtemps, et certaines archives académiques qui ont standardisé le format à l’époque de leur création.

Le motif est la publication plutôt que l’échange : des fichiers écrits une fois, téléchargés par beaucoup, jamais revisités. Personne n’envoie aujourd’hui à un collègue un `.bz2`, parce que les nouvelles archives sortent toutes en `.tar.zst` ou en `.tar.xz`, et l’ancien format reste présent là où il a été créé et n’a pas été remplacé par un travail explicite de migration.

Pour des archives scientifiques ou génomiques, le `.tar.bz2` reste parfois la forme de distribution officielle parce que la chaîne de traitement en aval attend ce format et que la migration est coûteuse en temps de validation. C’est une situation où le format n’est pas le bon choix, mais où le coût de changer de format dépasse le bénéfice, et c’est l’une des raisons pour lesquelles on continue à voir des `.bz2` dans des contextes où un choix plus récent serait techniquement supérieur. Pour vos propres usages, cette contrainte n’existe pas, et le passage à `.tar.zst` ou `.tar.xz` se fait en une commande qui ré-emballe l’archive avec un gain immédiat de temps de décompression.

Les données, au même endroit

Identifiants et origine du format BZ2.
Extension.bz2
Type de médiaapplication/x-bzip2
Première publication1996