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.

Cette page explique tout cela en langage courant, et elle simplifie : elle ne détaille ni les outils employés, ni l’ordre exact des étapes, ni ce qu’il faudrait faire pour contourner un contrôle. Ce qu’elle décrit est en revanche exact, et vous n’avez pas à nous croire : les fichiers de mesure sont publics, et les vérifier prend moins de temps que de lire cette page.

  1. 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.

  2. 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

Ce principe a un point faible, et il a cédé une fois. Les nombres sont inscrits dans les pages tout à la fin de la fabrication ; ce jour-là, des pages ont été refaites après ce moment. Elles sont reparties avec la valeur qu’un marqueur affiche quand personne ne l’a rempli : zéro. Zéro langue, zéro phrase, zéro tout, sur chaque page qui montre un nombre.

Le vrai problème n’était pas le zéro, c’était qu’aucun contrôle de l’époque ne savait le voir : tous regardaient si la fabrication avait bien travaillé, aucun ne regardait le résultat. Depuis, un contrôle existe pour ce cas précis, et il travaille dans l’autre sens : il relit le texte réellement affiché sur chaque page publiée et le compare, chiffre par chiffre, à la mesure du jour. Un seul écart, et rien ne part en ligne. C’est aussi pour cela que les fichiers de mesure sont publics : la comparaison qu’il fait, vous pouvez la refaire.

  1. 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.

  2. 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. 5 fichiers sont aujourd’hui dans ce cas, découpés en 10 tranches au total.

    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 110 paires de langues, pour 58 langues distinctes (l’anglais compris, qui leur sert de pivot commun), réparties sur 340 fichiers et 2260 Mio au total. Personne ne télécharge cet ensemble en entier : une paire pèse en moyenne 21 Mio, et c’est tout ce qu’un visiteur reçoit pour la langue qu’il choisit réellement d’utiliser, deux paires si sa traduction doit passer par le pivot. Cette moyenne recouvre deux familles de modèles et ne décrit aucune direction en particulier : le poids exact d’un chemin se calcule sur le registre, et la boîte en annonce l’ordre de grandeur avant de télécharger.

17 verrous, et la chaîne s’arrête net

La fabrication se termine par une série de verrous — des contrôles automatiques qui lisent ce qui vient d’être écrit et refusent de publier s’ils trouvent un écart. Ils tournent du moins coûteux au plus coûteux. Si un seul mord, la fabrication échoue et rien ne part en ligne dans cet état. Aucun ne corrige à la place de quelqu’un : chacun nomme le fichier fautif et ce qu’il faudrait y lire à la place.

Le tableau ci-dessous les regroupe par famille, c’est-à-dire par ce qu’ils protègent, et non un par un : leur nombre augmente à mesure qu’on en ajoute, alors que ce qui est protégé, lui, se décrit une fois. Ce nombre est mesuré à la fabrication, comme tous les autres chiffres de ce site.

Ce que ces verrous empêchent de publier, par famille
VerrouCe qu’il empêche de publier
charteUne 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.
gabaritUne 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.
bannièreUne des promesses affichées en haut de chaque page reformulée ici sans l’être dans le texte de référence commun à tous les sites de l’association. C’est le verrou le plus chèrement acquis du projet : une promesse fausse peut vivre longtemps quand chaque page se contente de ressembler aux autres.
liensUn lien qui ne mène nulle part, une ancre qui vise un endroit inexistant, ou une page qui irait chercher quoi que ce soit — une image, une police, un script — sur un autre domaine que celui de l’ODERSA.
APIDes données ouvertes qui annonceraient un poids, un compte ou une empreinte différents de ceux des fichiers réellement publiés.
empreintesUn désaccord entre le calcul fait par votre navigateur et celui fait pendant la fabrication, sur une même phrase : les deux doivent tomber sur le même résultat, sinon une recherche ne trouverait pas ce que le site contient pourtant.
licencesUne 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.
chiffresUn 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èlesUn 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.
traductionUne mise en ligne alors que la dernière fois qu’on a vu la boîte traduire pour de vrai, dans un vrai navigateur, c’était sur une autre version du site. Une preuve qu’on ne rejoue pas ne prouve rien.
hors connexionUne copie gardée sur votre appareil qui ne correspondrait plus à ce qui est publié, ou un site qui prendrait d’avance plus que ce que la page annonce prendre.
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.