Zip, archive et conteneur

Zip est devenu un format universel d'archives compressée, utilisé souvent pas les logiciels comme moyen de stockage.

Le format a été placé dans le domaine public, ce qui permet aux systèmes d'exploitation comme Windows, Linux, Mac de l'intégrer dans leur outils de gestion de fichiers et aux auteurs de distribuer leur logiciels dans ce format. Ainsi un fichier JAR contenant le bytecode de Java n'est autre qu'un fichier ZIP dont l'extension est renommée .jar.
Cela a permis aussi de voir une prolifération de logiciels de gestion d'archive à interface graphique, comme WinZip, IZArc, PeaZip, etc...

Le format zip et son histoire

A défaut de zapper, on finit par être zippé!

Quand il utilise le code source du logiciel de compression ARC, librement accessible, pour créer sa propre version, qu'il a appelée PKARC, Phil Katz s'est vu traduit devant les tribunaux. Alors qu'ARC était entièrement en C, PKARC était une combinaison d'Assembleur et de C, donc nettement plus rapide. ARC était couramment utilisé pour distribuer des logiciels à l'époque et on utilisait le term "ARCing" pour désigner la réalisation d'une archive. Mais PKARC (Phil Katz ARC) est devenu rapidement plus populaire à partir de 1986 ce qui n'a pas plû à l'auteur de l'original.

Le procès était fondé sur l'utilisation du mot ARC qui était une marque déposée de SEA ainsi que sur la similitude entre les codes source, confirmée à l'audience par un expert. Finalement en 1988, les deux auteurs sont parvenus à une entente. Phil Katz à dû verser 62 500 dollars et s'est engagé à ne plus utiliser le terme "ARC", ainsi qu'à verser à SEA 6.5% sur les ventes de son logiciel.

Il est alors devenu préférable pour Phil Katz d'écrire son propre code de compression, qu'il a nommé DEFLATE, et implémenté dans l'archiveur PKZIP, distribué en shareware. Les archives avaient maintenant pour extension ZIP, mot qui symbolise la vitesse. Non seulement PKZIP était plus efficace qu'ARC, mais l'auteur avait derrière lui toute la communauté des utilisateurs, qui apprécie peu que l'on régle les problèmes de concurrence par des procès.
En effet un deuxième procès a été intenté par SEA parce que le manuel de PKZIP utilisait le terme "arcing" pour dire archiver... Cela ressemble à de l'acharnement! Le procès a d'ailleurs été perdu par SEA.
En guise de protestation on remplaçait souvent l'extension ".arc" par ".sue", qui se traduit par "poursuivre en justice".
Aussi ZIP est devenu rapidemment le format le plus utilisé tandis qu'ARC a disparu dans l'oubli! Et maintenant on utilise le terme "zipping" pour désigner la créetion d'une archive...

La compagnie de Phil Katz a rapporté des millions. Cependant, à partir des années 90, l'auteur à rencontré des difficultés dues à son addiction à l'alcool. Il se fait arrêter de nombreuses fois pour conduite en état d'ivresse. Il est mort en avril 2000, vingt ans après les débuts de PKZIP, dans une chambre d'hôtel, en raison d'une perte de sang interne provenant de son alcoolisme chronique. Il avait 37 ans.

Zip, Gzip, etc...

ARC (1985) était basé sur l'algorithme LZW (Lempel-Ziv-Welsh). Le code source étant disponible au début, il a pu être porté sur plusieurs plateformes et à l'occasion, un second codage a été ajouté, le codage de Hufman.

PKZIP 1.0 (1989) utilisait le même algorithme qu'ARC. En version 2.0 il a adopté le nouvel algorithme DEFLATE toujours basé sur une première compression LZW puis une seconde avec le codage d'Huffman. PKZIP depuis utilise plusieurs modes de compression avec plusieurs autres algorithmes.

GIF (1987). Ce format graphique utilise LZW. Il est intéressant de noter qu'Unisys, disposant d'un brevet sur le format LZ78 et LZW (aux USA), a lancé une série de poursuites pour faire payer les utilisateurs, ce qui a conduit à la création du format concurrent PNG.

PNG (1995, Portable Network Graphics). Basé sur zlib, utilise l'algorithme DEFLATE plus efficace et non emcombré de brevet.

Tar (Tape Archive, 1975, Bell Labs). Conteneur pour stocker une liste de fichier dans une archive unique, pouvant être extraits individuellement. Il n'y a pas de compression mais on peut ensuite compresser l'archive en bloc. Le plus souvent avec Gzip ce qui produit une archive .tar.gz.

Gzip (1992). Basé sur DEFLATE, au contraire de PKZIP il est prévu pour compresser un fichier unique.

Zip (1992). Un des outils d'Info-Zip avec unzip, compatible avec le format ZIP et utilisant DEFLATE, est open-source et porté sur de nombreuses plateformes. Les archives ont aussi l'extension .zip. Info-zip utilise la bibliothèque zlib de Gzip.

Zlib (1995). Créé comme module séparé de gzip pour être utilisé par PNG et la bibliothèque libpng, il est maintenant utilisé dans de nombreux langages de programmation pour créer des archives et accéder au contenu. Cette bibliothèque est ainsi utilisée par Zip, Gzip, PNG, Git et autres. On y recourt aussi pour compresser les fichiers entre un serveur et un navigateur et accélérer la transmission.

Le format Zip

Le format a toujours été public et est décrit dans le fichier APPNOTE.TXT inclut dans l'archive ce qui permet au logiciels tiers d'être compatibles. Le fichier inclut la mention qu'on est libre d'implémenter cette spécification.

Dans une archive zip, le répertoire contenant la liste des fichiers est placé à la fin. Cela permet d'ajouter d'autres fichiers par la suite. Dans ce cas un nouveau répertoire est ajouté à la fin qui ajoute ceux-ci à la liste.

Pour chaque fichier il y a:

Le répertoire central est composé d'une liste d'en-têtes, une par fichier, puis d'un enregistrement de fin de répertoire.

Chaque en-tête reprend les mêmes information que l'en-tête du fichier plus la position relative de celle-ci dans l'archive. Cela permet à la fois d'obtenir une liste rapide des fichiers dans l'archive et d'accéder à l'un d'eux.

L'enregistrement de fin de répertoire comprend des informations telles que le nombre de fichiers, le numéro du disk pour les archives réparties sur plusieurs disques (c'est conçu au temps des disquettes), la position du répertoire centrale, etc...

Ainsi, si on veut accéder au contenu d'une archive par programme, il faut se positionner un certain nombre d'octets avant la fin du fichier et récupérer les informations qui permettront d'accéder à tout le reste.

Références

Pour plus de détails on se référera au fichier APPNOTE.TXT.

RFC 1951. Description de l'algorithme de compression DEFLATE basé sur une combinaision de LZW et le codage de Huffman.