pt
Moulé à la louche depuis 1999
Les trucs qui m'énervent... et je vais pas prendre de pincettes
Internet, informatique, logiciel libre, économie, politique, vie courante et tout le reste...

La supériorité du format 7z (7-Zip)

Mercredi 23 juin 2010

Le format de compression ZIP est vieux. Il a 21 ans. 21 ans, c'est une éternité en informatique. Depuis les choses ont bien évolué, et le format 7z est désormais bien supérieur. Je ne comprend pas l'acharnement de certains internautes à utiliser (voir cracker) WinZip (payant) ou WinRAR (payant aussi) alors que des alternative gratuites et plus performantes comme 7-Zip (www.7-zip.org) existent.

Non seulement 7-Zip sait décompresser les format ZIP, RAR et bien d'autres (arj, cab, lha, gz, bzip2, iso...) mais il possède son propre format 7z, largement plus performant. Laissez-moi mettre en avant quelques avantage du format 7z sur le format ZIP:

  • 7z supporte l'Unicode, le format ZIP non. Ça ne vous dit peut-être rien, mais cela permet d'avoir un encodage des caractères internationaux corrects quels que soient les systèmes utilisés.

  • La taille maximale que peut supporter un fichier 7z est de 16 000 000 000 Go par fichier compressé. Le format ZIP est limité à 4 Go. (Le format zip64 qui dépasse cette limite n'est pas standard et ne fonctionne pas partout).

  • ZIP utilise la méthode de compression deflate (qui est une combinaison de LZ77 et Huffman). Cette méthode est rapide et consomme peu de mémoire, mais elle est relativement ancienne. 7-Zip utilise plusieurs méthodes, dont le LZMA qui est plus performant que deflate. Exemple: On prend la liste des titres des articles Wikipedia francophone (fichier unique de 41 Mo):

    Compression d'un unique fichier
    FormatTaille
    Fichier non compressé41 444 012 octets
    ZIP10 614 829 octets
    7z8 472 843 octets


  • En plus de LZMA, 7z possède des méthodes de compression spécialisées pour certains types de fichiers, par exemple l'algo BCJ pour compresser les exécutables x86 (.exe). Ces méthodes de compression spécialisées donnent de meilleurs résultats que les algorithmes génériques LZMA ou deflate sur ces types de données.

  • Le format ZIP est assez bête: Il compresse chaque fichier individuellement, hors de tout contexte. C'est à dire qu'une fois qu'un fichier est compressé, ZIP oublie toutes ses tables de compression et recommence à "apprendre" avec le fichier suivant. Le format 7z groupe les fichiers par extension (quels que soient les répertoires dans lesquels il se trouvent), et conserve ses tables de compression d'un fichier à l'autre. Par exemple les fichiers html contiennent tous généralement les mêmes balises (body,div,span...), et les sources en C souvent les mêmes instructions (if,return,define,char,else...). En compressant par extension, 7z tire partie de cette redondance.
    Exemple: Prenons les sources de VLC (vlc-1.1.0.tar.bz2).
    Sources de VLC (vlc-1.1.0.tar.bz2)
    (Fichiers .c .h .hpp...)
    FormatTaille
    Fichiers non compressés121 160 840 octets
    ZIP31 641 396 octets
    7z14 681 662 octets

    Le fichier 7z est deux fois plus petit que le fichier ZIP !

  • Le format 7z repère bien les fichiers identiques. Exemple: Prenons 8 répertoires contenant le même fichier de 23,9 Mo (vlc-1.1.0.tar.bz2).

    Compression de 8 fichiers identiques, dans des répertoires différents
    FormatTaille
    Fichiers non compressés191 268 096 octets
    ZIP191 031 164 octets
    7z24 074 531 octets


    Le format ZIP aura compressé 8 fois le fichier. Le format 7z aura repéré les copies et n'en garde qu'une.

  • En fait, c'est même encore plus sioux que ça: Le format 7z est capable de repérer les segments de données identiques dans des fichiers différents. Créons un fichier message.txt (mettez le texte que vous voulez dedans), puis tapez: copy /b message.txt+vlc-1.1.0.tar.bz2+message.txt essai.bin
    Cela va créer un fichier essai.bin différent de vlc-1.1.0.tar.bz2, mais qui contient en son milieu un segment de données identique au fichier vlc-1.1.0.tar.bz2. Compressons maintenant nos deux fichiers ensembles:
    Compression de deux fichiers ayant des parties en commun.
    FormatTaille
    Fichiers non compressés47 817 036 octets
    ZIP47 757 715 octets
    7z24 054 240 octets


    Le fichier 7z est à peine plus gros que le fichier vlc-1.1.0.tar.bz2: 7-Zip a repéré qu'une partie du fichier essai.bin correspond à vlc-1.1.0.tar.bz2. Au lieu de recompresser cette partie, il a juste fait référence au fichier vlc-1.1.0.tar.bz2.

  • En format ZIP, la liste des fichiers contenus dans l'archive n'est pas compressée, et cela peut prendre une place non négligeable. Par exemple, si vous compressez les sources de VLC en ZIP, voici ce que donne la liste des fichiers (extrait):
    Extrait binaire de la partie du fichier ZIP stockant la liste des fichiers.

    On voit qu'il y a beaucoup de redondance, et cela a un impact d'autant plus important que les fichiers sont nombreux et les répertoires imbriqués. En format 7z, cette liste est compressée.

  • Le format 7z supporte nativement le chiffrement AES 256 bits (solide). Le chiffrement en format ZIP est faible, vraiment faible. (Il existe un chiffrement fort en ZIP, mais cela rend les fichiers ZIP incompatibles avec certains logiciels.)

  • Le chiffrement des fichiers ZIP laisse les noms de fichiers en clair. Le format 7z peut aussi chiffrer les noms des fichiers.

  • C'est l'une des rares applications à savoir exploiter le multithreading des processeurs. Quand n'importe quel autre programme utilise 50% du processeur (un seul thread), 7-Zip l'utilise à 100%.

  • Le format 7z est libre, ouvert. Le logiciel 7-Zip est gratuit et libre (GPL). 7-Zip est multiplaformes (Windows, Linux, Mac...). On peut l'utiliser avec son interface graphique, en ligne de commande ou sous forme de librairie. Le code de décompression fait 5 ko.

  • L'interface graphique sous Windows est pratique. On peut mettre la compression en arrière-plan pour ne pas ralentir l'ordinateur. Il y a même un bouton "Pause". En prime 7-Zip peut faire un découpage automatique ou créer des archives auto-extractibles (sous Windows).

Le format 7z est vraiment une belle réalisation. J'arrive difficilement à lui trouver des inconvénients. Même si de nos jours c'est l'orgie de giga-octets au niveau des mémoires et des disques durs, l'utilisation du format 7z permet de gagner une place non négligeable, surtout pour envoyer par internet (par exemple par email). Il est tellement performant, portable et pratique que ça ne vaut pas le coup de s'en passer.

Le format 7z a quand même un inconvénient: Il n'est pas possible d'effacer ou remplacer un seul fichier dans l'archive sans tout décompresser/recompresser (sauf si vous désactivez le mode "solid", mais la compression est alors moins bonne).

Notez qu'il existe des algos encore plus performants que 7z/LZMA, mais ils ont des temps de compression bien trop long pour nos processeurs actuels (En 2006, je vous avais déjà parlé de l'algo paq8hp5 d'Alexander Ratushnyak, qui depuis a encore amélioré son exploit avec lpaq9m ; Malheureusement les pages de téléchargement font un 404, et c'est fort dommage).

Par pitié, arrêtez de prendre des versions crackées de WinZip ou WinRAR. Faites-vous une fleur: Passez à 7-Zip.


PS: Comme me le fait très justement remarquer klein, sous Linux ni ZIP ni 7z ne mémorisent les droits sur les fichiers, contrairement au format .tar (.tar.gz ou .tar.bz2). Pour l'archivage, le format .tar reste donc incontournable. Le format .tar.7z pourrait être une solution (Les sources de VLC font 23,9 Mo en .tar.bz2, et seulement 13,8 Mo en .tar.7z).

PS n°2: Antoine me signale que la compression lzma est dispo sous Linux (sans besoin du système d'archive de 7z): Faites un man lzma: Il s'utilise comme gzip. tar sait même l'utiliser directement (Faites un man tar). Le format .tar.lzma est même intégré à Nautilus (le gestionnaire de fichiers de Gnome):