Comment ce site est fabriqué
Ce site affirme des choses vérifiables : que votre texte ne part jamais sur le réseau, que ses langues et ses chiffres sont mesurés et non déclarés, que ses modèles de traduction sont ceux que Mozilla publie sous licence libre. Aucune de ces affirmations ne repose sur la confiance qu’on veut bien lui accorder : chacune est le produit d’un mécanisme qu’on peut décrire, et d’un verrou qui refuse de publier si ce mécanisme n’a pas tenu. Voici comment.
-
Un seul gabarit, jamais recopié
Aucune page de ce site n’écrit sa propre bannière de confiance, son propre en-tête, son propre pied de page ou son propre sélecteur de langues. Ces quatre pièces existent une seule fois, dans un générateur commun à toutes les pages ; chaque page ne fournit que ce qui lui est propre : un titre, un texte, parfois un tableau. Le générateur pose le reste, au signe près, sur chacune des pages du site, dans chacune des langues déjà servies.
Cela change ce que veut dire corriger une erreur. Un intitulé à revoir dans le pied de page, un lien du sélecteur de langues mal posé : une seule retouche, au seul endroit où ces pièces existent, et toutes les pages la reçoivent d’un coup. Une page ne peut pas non plus écrire son propre en-tête à la place de celui du site : la fabrication le refuse et nomme la page fautive, plutôt que de laisser deux en-têtes cohabiter sur ce qui est réellement servi.
-
Aucun chiffre ne s’écrit à la main
Chaque nombre affiché sur ce site (un compte de langues, un poids de fichier, une part de traductions déjà connues) est un marqueur, pas un texte écrit une fois pour toutes. Au moment de fabriquer le site, un programme parcourt les fichiers réellement présents sur le disque : il compte les entrées d’un fichier de mémoire, il pèse les octets d’un modèle, il calcule une part. C’est cette valeur mesurée, et elle seule, qui vient remplir le marqueur affiché sur la page ; personne ne tape le nombre à la main dans un fichier de contenu, ce site y compris. Ce principe suppose une seule chose : que la fabrication tourne bien du premier geste jusqu’au dernier, dans l’ordre prévu. Voici ce qui s’est passé le jour où ce n’était pas le cas.
Le jour où le site a affiché zéro partout
La fabrication d’une page passe par plusieurs étapes, dans un ordre précis, et la toute dernière est celle qui mesure les chiffres et vient les inscrire dans les pages déjà écrites. Un jour, ces étapes ont tourné dans le désordre : des pages ont été régénérées après cette mesure, plutôt qu’avant. Elles sont reparties avec leur valeur de secours, la même partout, zéro : zéro langue, zéro entrée de mémoire, zéro tout, sur toutes les pages qui affichent un chiffre.
La suite de vérifications automatiques, elle, restait entièrement au vert. Pas parce qu’elle mentait : parce qu’à chaque fois qu’on la relance en entier, dans le bon ordre, elle rejoue aussi cette dernière étape, celle qui corrige les zéros. Elle guérissait le défaut à chaque passage sans jamais avoir eu besoin de le constater. Un site mis en ligne juste après le mauvais ordre, sans relancer la chaîne complète depuis le début, serait donc parti avec des zéros partout, un contrôle au vert en poche pour le prouver.
C’est le défaut le plus difficile à voir : invisible pendant la fabrication, et sérieux une fois publié. Depuis, un verrou séparé existe pour exactement ce cas. Il ne corrige rien et ne rejoue rien : il lit le texte réellement affiché sur chaque page servie, et le compare, chiffre par chiffre, à la mesure du jour. Un seul écart, et la publication s’arrête. Ce verrou-là ne peut pas être trompé par un bon relancement de la chaîne, puisqu’il regarde après coup ce qui a été réellement écrit, pas ce que la chaîne avait l’intention d’écrire.
-
Une date qui vient des données, jamais de l’horloge
Le fichier de données ouvertes de ce site porte une date. Elle ne vient pas de l’horloge de l’ordinateur qui fabrique le site : elle est reprise dans les données elles-mêmes, à la plus récente des dates que portent les fichiers du corpus.
La différence semble petite ; elle ne l’est pas. Ce site scelle, à partir des mêmes fichiers, une empreinte qui sert à vérifier qu’une copie gardée hors connexion correspond encore à ce qui est publié en ligne. Si la date venait de l’horloge, elle changerait à chaque fabrication du site, même un jour où pas une seule donnée n’aurait changé, et elle ferait donc changer cette empreinte avec elle, pour rien. Le contrôle qui compare la copie hors connexion à la version en ligne se tromperait alors sur un simple effet de calendrier, à chaque fois. Une date dérivée des données ne bouge que lorsque les données bougent réellement : c’est elle qui rend l’empreinte, et donc la vérification, dignes de confiance.
-
Les modèles de traduction, pesés fichier par fichier
Chaque modèle de traduction servi par ce site est mesuré à sa source, fichier par fichier : son poids réel en octets, et une empreinte calculée sur son contenu une fois décompressé. Ces deux valeurs sont écrites dans le registre des modèles que ce site publie, et que n’importe qui peut ouvrir : /modeles/registre.json.
L’hébergement impose une limite de poids à tout fichier livré tel quel au navigateur, 25 Mio : un plafond de la plateforme, pas un choix de ce projet. La plupart des paires de langues tiennent largement dessous ; quelques-unes, parmi les plus lourdes, la dépassent. Pour ces fichiers-là, la règle n’est jamais de tronquer le modèle : le fichier est découpé en tranches numérotées, chacune sous la limite, que le navigateur recolle avant de les décompresser. 10 fichiers sont aujourd’hui dans ce cas.
Ce recollage n’est jamais supposé correct, il est vérifié : une fois les tranches réunies et décompressées, leur empreinte est recalculée et comparée à celle du registre. Un seul octet déplacé pendant le découpage suffit à ce que l’empreinte ne corresponde plus, et la publication s’arrête plutôt que de laisser partir un modèle dont plus personne ne peut garantir qu’il est intact.
Au total, ce site sert aujourd’hui 112 paires de langues, pour 59 langues distinctes (l’anglais compris, qui leur sert de pivot commun), réparties sur 346 fichiers et 2290 Mo au total. Personne ne télécharge cet ensemble en entier : une paire pèse en moyenne 20 Mo, et c’est tout ce qu’un visiteur reçoit pour la langue qu’il choisit réellement d’utiliser, le double si sa traduction doit passer par le pivot.
Neuf verrous, et la chaîne s’arrête net
La fabrication se termine par une suite de verrous, du moins coûteux au plus coûteux, chacun sur ce qui vient d’être réellement écrit. Si un seul mord, c’est-à-dire s’il trouve un écart, la fabrication se solde par un échec et rien ne part en ligne dans cet état. Aucun de ces verrous ne corrige à la place de quelqu’un : chacun nomme le fichier fautif et ce qu’il faudrait y lire à la place.
| Verrou | Ce qu’il empêche de publier |
|---|---|
| charte | Une feuille de style retouchée site par site plutôt que reportée au système commun : elle est comparée, à l’octet près, à sa version de référence. |
| gabarit | Une page dont la bannière, l’en-tête, le pied ou le sélecteur de langues diffèrent, même d’un signe, de ce que le générateur commun aurait produit pour elle. |
| liens | Un lien qui ne mène nulle part, une ancre qui vise un endroit inexistant, ou une page qui charge quoi que ce soit depuis un domaine autre que celui de l’ODERSA. |
| API | Des données ouvertes qui déclarent un poids, un compte ou une empreinte différents de ceux des fichiers réellement écrits sur le disque. |
| empreintes | Un calcul fait par le fichier envoyé à votre navigateur qui ne tomberait pas exactement sur la même empreinte que celui fait pendant la fabrication, pour une même phrase. |
| licences | Une valeur servie qu’on ne pourrait pas rattacher à une source à la licence vérifiée, ou une licence à condition mélangée aux données librement réutilisables. |
| chiffres | Un texte réellement affiché sur une page qui diffère, ne serait-ce que d’un chiffre, de la valeur mesurée pour ce marqueur : le verrou né de l’épisode ci-dessus. |
| modèles | Un fichier de modèle qui dépasserait la limite de poids de l’hébergement, ou un fichier recollé après découpage dont l’empreinte ne correspondrait plus à celle annoncée. |
| accessibilité | Un titre qui saute un niveau, une image sans description, un état qui ne se voit qu’à la couleur, ou une portion de texte dans une autre langue privée de l’attribut qui le dit. |
Rien de tout cela ne se prend sur parole. Le registre des modèles et le fichier de données ouvertes de ce site sont publics, et l’écart entre ce qu’ils mesurent et ce qu’une page affiche est exactement ce que ces verrous surveillent à chaque fabrication : /data/impact.json. Une page qui explique ses propres garde-fous ne vaut que par leur exactitude ; ouvrir ce fichier pour la vérifier prend moins de temps que de la croire sur parole.