Il y a un an environ, deux acolytes et moi-même fondions le projet openZIM. L'objectif était la spécification d'un format de données adapté au stockage des articles issus de Wikipédia ainsi que la création d'une bibliothèque logicielle et d'outils nécessaires à la manipulation dudit format.

Nous travaillons aujourd'hui sur les dernières améliorations de ce qui sera probablement la première version officielle. Cependant, avant de détailler le projet et le format, je souhaite revenir brièvement sur les conditions de sa création.

L'une des questions qui se pose assez rapidement lorsque l'on réfléchi sur comment rendre accessible une version statique de Wikipédia est Comment vais-je stocker ces quantités importantes d'information ? Le cahier des charges, formulé de manière simplifiée, étant :

  • mémoire de masse nécessaire la plus réduite possible
  • temps d'accès les plus réduits possible

Dans les faits, rien n'existait qui satisfasse vraiment ces contraintes. Les solutions de compression actuelles étant particulièrement incapables d'offrir des temps d'accès acceptables (un dixième de seconde maximum par ressource).

Chaque initiative a donc essayé de faire au mieux (sachant que cela n'était qu'un aspect parmi d'autres) et la meilleure des approches que j'ai pu voir consistait à compresser N articles par fichier (typiquement avec Bzip2 ou LZMA) et de tenir un index dans une base de données locale indépendante (type SQLite). Ce type de solutions souffre cependant des inconvénients suivant :

  • avoir à gérer séparément l'index et les fichiers de contenu
  • compresser des contenus qui éventuellement le sont déjà (typiquement JPEG ou PNG)
  • ne pas offrir de bibliothèque avec API simplifiée
  • avoir à gérer de nombreux fichiers
  • ne pas être correctement documentée
  • gestion native des catégories (dev. en cours)
  • gestion des meta-tags (dev. en cours)

Telle était la situation lorsque en 2007 nous nous sommes pour la première fois rencontrés : Manuel, Tommi et moi-même. Tommi nous a alors présenté quelque chose d'intéressant : il avait programmé un lecteur libre pour le format de données ZENO qu'utilisait Directmedia (la maison d'édition qui publiait les DVDs de Wikipédia en allemand). Le format ZENO était intéressant parce que tout était dans un fichier et que l'on avait maintenant une librairie pour le décoder.

Il restait deux gros défis :

  • augmenter l'efficacité de la compression
  • écrire un outil pour créer les ZENOs

En l'espace d'un an, Tommi ayant fait cela et Directmedia ayant décidait de ne plus publier de DVD en allemand et d'abandonner ZENO ; nous nous sommes dit qu'il y avait vraiment là quelque chose à faire. Nous avons alors conçu le projet openZIM et renommé le format, qui entre temps avait beaucoup évolué, en ZIM (pour Zeno IMproved).

Aujourd'hui le format et les outils sont meilleurs que jamais :

  • tout tient dans un fichier
  • tout type de contenus peut être introduit
  • compression LZMA
  • compression paramétrable en fonction du mime-type
  • portable
  • librairie de référence extrêmement efficace
  • Index par titre et par URI

Nous sommes subventionnés par Wikimedia CH qui couvre nos frais de serveur ainsi que ceux occasionnés par nos rencontres. Le format ainsi que les outils continuent d'évoluer rapidement et sont de loin la meilleure solution actuelle… Ce qui est assez compréhensible finalement puisqu'il n'y a pas de véritable alternative.

La fondation Wikimedia s'est montrée intéressée pour proposer des dumps au format ZIM et nous discutons les contraintes techniques d'un tel projet. Kiwix utilise évidement ZIM et propose déjà quelques fichiers ZIM à tester. Je suis aussi convaincu que de plus en plus de projets seront en mesure de travailler avec ce format.

Le travail n'est pour autant pas terminé. Il reste en particulier à implanter quelques fonctionnalités importantes et à régler quelques points problématiques. Il nous faut aussi stabiliser le format ; en-effet, le rythme des améliorations est toujours soutenu et la rétro-compatibilité a déjà été cassée par deux fois : une chose pourtant indispensable pour une utilisation plus large.

... mais le jeux en vaut la chandelle !

Pour plus d'informations :