GZ

Qu’est-ce qu’un fichier GZ ?

Compresse un seul fichier. Associé à TAR, il forme l’archive Unix habituelle.

Ce qu’est GZ

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

L’extension est .gz et le nom complet Gzip 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 GZ

Il remonte à 1992. La spécification est RFC 1952.

À 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.

Rien n’est jeté

GZ 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

GZ 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.

Ce qu’il peut porter d’autre

GZ peut contenir une disposition qui lui permet de commencer à jouer avant d’être arrivé en entier.

Cela compte surtout à la conversion : ce que la cible ne peut pas contenir est abandonné, en général sans avertissement.

D’où vient son taux de compression

Il travaille par tranches de 32 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

GZ 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 GZ

gzip, 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

GZ 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.

Un flux unique, sans archive ni répertoire

Gzip compresse un seul flux. Il n’y a pas de répertoire, pas de liste de noms, pas la moindre notion de plusieurs fichiers. Compressez `notes.txt`, vous obtenez `notes.txt.gz` ; il n’y a rien d’autre à l’intérieur, et la décompression restitue exactement un fichier.

C’est pourquoi `.tar.gz` est la forme normale et pourquoi l’extension porte deux morceaux. Tar assemble une arborescence en un flux, gzip compresse ce flux, et la chaîne se lit de droite à gauche. Si vous décompressez un `.gz` seul en attendant un dossier, vous obtenez le seul fichier qui était compressé — ce que le format a toujours contenu.

La majorité du gzip dans le monde n’est pas un fichier

C’est une réponse HTTP. Quasiment chaque serveur web comprime le HTML, le CSS, le JavaScript et le JSON avec gzip avant de les envoyer, le navigateur décompresse en transparence, et aucun des deux bouts n’écrit un `.gz` nulle part. Cela se produit des milliards de fois par jour, et reste invisible.

C’est la raison pour laquelle gzip est partout et pourquoi sa vitesse compte plus que son taux de compression. Un serveur qui compresse une réponse dispose de millisecondes, pas de secondes — un compresseur qui gagnerait dix pour cent de taille en multipliant le travail par dix serait le mauvais compromis à cette échelle, et c’est précisément le compromis que xz fait et que gzip refuse. C’est aussi pour cela que les en-têtes HTTP `Accept-Encoding` et `Vary` existent : le client annonce qu’il accepte la compression, le serveur répond, et un cache intermédiaire sait qu’il doit conserver des versions séparées pour les clients qui ne l’acceptent pas. Sans gzip à grande échelle, ces en-têtes n’existeraient pas.

DEFLATE, qui vit aussi à l’intérieur de ZIP et PNG

Gzip utilise DEFLATE — recherche LZ77 sur une fenêtre de 32 Ko, suivie d’un codage de Huffman. Le même algorithme compresse chaque fichier d’un ZIP et chaque image PNG, ce qui explique la parenté de comportement entre ces trois formats.

La fenêtre de 32 Ko est la limite qui le définit. Une répétition plus éloignée ne peut pas être trouvée, ce qui explique pourquoi gzip perd sensiblement face à xz et 7z sur de gros fichiers à structure longue — et pourquoi il coûte si peu à exécuter, puisque l’espace de recherche est petit par construction. Les successeurs modernes comme LZ4 cherchent avec la même fenêtre mais sacrifient délibérément le taux de compression pour la vitesse, tandis que LZMA, utilisé par xz et 7z, accepte une fenêtre arbitrairement grande et paie en mémoire et en temps. DEFLATE se trouve au milieu, et ce placement a survécu à trois décennies précisément parce qu’il était bien choisi pour la tâche.

Né pour contourner un brevet

Jean-loup Gailly et Mark Adler ont publié gzip en 1992 pour remplacer `compress` d’Unix, qui utilisait LZW — l’algorithme dont Unisys détenait les brevets et a commencé à exiger des redevances, le même différend qui a produit PNG en remplacement de GIF.

DEFLATE a été conçu pour être libre de droits et publié en RFC 1951 pour que quiconque puisse l’implémenter. Cette décision explique pourquoi il a fini dans ZIP, PNG, HTTP et d’innombrables protocoles : c’était le compresseur acceptable que personne n’avait à demander la permission d’utiliser. La bibliothèque de référence zlib, écrite par les mêmes auteurs et publiée peu après, est devenue l’une des dépendances les plus installées de l’histoire de l’informatique — présente dans à peu près chaque système d’exploitation, chaque navigateur, chaque outil de manipulation d’images. Sans la gratuité juridique du format, aucun de ces usages n’aurait été aussi facile à démarrer.

Les niveaux, et pourquoi le défaut est le bon

Gzip propose les niveaux 1 à 9. Le niveau 1 est rapide et peu serré, le 9 cherche au maximum, et le 6 est la valeur par défaut. L’écart entre 6 et 9 représente typiquement quelques pour cent de taille pour une augmentation substantielle du temps, ce qui est un mauvais échange presque partout.

La vitesse de décompression reste essentiellement constante quel que soit le niveau utilisé, et elle est rapide — des centaines de mégaoctets par seconde sur un matériel ordinaire. Cette asymétrie est la caractéristique définissant le format : peu coûteux à lire, suffisamment peu coûteux à écrire, jamais remarquable dans un sens comme dans l’autre. Pour un usage interactif, le niveau 1 suffit en général ; pour un envoi unique qui sera téléchargé mille fois, le coût marginal d’aller à 9 est amorti au premier téléchargement et ne mérite pas d’être négligé.

Ce qu’il stocke du fichier d’origine

L’en-tête peut contenir le nom du fichier d’origine, un horodatage de modification et un commentaire, et une somme de contrôle CRC32 des données non compressées est placée à la fin. La somme de contrôle permet à la corruption d’être détectée à la décompression plutôt que de produire un fichier silencieusement faux.

Le nom stocké explique pourquoi la décompression produit parfois un fichier dont le nom diffère de celui du `.gz`. C’est aussi un petit détail de confidentialité : un `.gz` peut transporter le chemin ou le nom d’origine, même après que le fichier a été renommé pour l’envoi. L’horodatage de modification est dans la même catégorie : il révèle quand le fichier a été modifié pour la dernière fois, ce qui n’est pas anodin pour un export de base de données ou un document juridique. `gzip -n` au moment de la compression ignore l’un comme l’autre et donne un `.gz` strictement minimal.

Il se concatène, ce qui est inhabituel et utile

Joindre deux fichiers gzip par une simple copie produit un fichier gzip valide contenant les deux, dans l’ordre. Les décompresseurs le prennent en charge sans qu’on le leur dise.

C’est pourquoi la rotation des journaux, les pipelines en flux et les systèmes de collecte de données s’appuient dessus : un processus peut ajouter des blocs compressés au fur et mesure sans jamais réécrire ni relire ce qui précède. Ni ZIP ni 7z ne le permettent, et c’est une grande partie de la persistance de gzip dans l’infrastructure. Le programme `zcat` lit d’ailleurs la concaténation comme si c’était un seul flux, ce qui permet de chaîner `cat server.log.gz server.log.1.gz | zcat | grep` sans se soucier de la segmentation — un confort auquel on s’habitue et dont l’absence surprend dès qu’on touche à un format qui ne le permet pas.

Quand le convertir en ZIP

Quand il est destiné à une personne plutôt qu’à une machine. ZIP est ce qu’une installation Windows ou macOS standard ouvre sans aide, et envoyer un `.tar.gz` à un collègue peu technique revient à lui demander de résoudre un problème en silence.

Ne convertissez pas quand le fichier retourne vers un système Unix. Réemballer en ZIP abandonne les permissions, la propriété et les liens symboliques que tar portait, et le résultat extrait peut ne pas fonctionner. Pour une sauvegarde serveur ou une release de code source, `.tar.gz` n’est pas un obstacle à contourner — c’est ce qui fait que l’archive fonctionne. Les installeurs de paquets natifs, les archives de code source sur les miroirs Linux et les sauvegardes automatisées de bases de données restent massivement en `.tar.gz` précisément parce que l’alternative perdrait quelque chose d’utile. Le bon test est la destination : si elle lit tar, laissez le format tel quel.

Les données, au même endroit

Identifiants et origine du format GZ.
Extension.gz, .tgz
Type de médiaapplication/gzip
Première publication1992
SpécificationRFC 1952