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 :