Mon avis sur le protocole gemini
Par Arnaud Ouvrier publié le 29/07/2024
Le protocole gemini
Pour commencer, voici la description du protocole tel que donnée par ses créateurs et qui résume très bien leur vision :
Gemini est une nouvelle technologie internet qui prend en charge une bibliothèque électronique de documents texte interconnectés. Ce n'est pas une idée nouvelle, mais elle n'a pas d'ancienneté non plus. Il est intemporel et mérite des outils qui le traitent comme un concept de première classe, pas un cas vestigial dans un coin. Gemini n'est pas sur l'innovation ou la perturbation, il s'agit de donner un peu de repos à ceux qui sentent qu'internet a déjà été assez perturbé. Nous ne sommes pas là pour changer le monde ou détruire d'autres technologies. Nous voulons construire un espace en ligne simple où les documents ne sont que des documents, dans l'intérêt de la vie privée, de l'attention et de la bande passante de chaque lecteur.
- (Traduction de la description de page d'accueil du projet tel qu'affichée au 30/06/2024)
La page d'accueil du projet en gemini
La page d'accueil du projet en HTTP
Pour résumer simplement : le protocole gemini se veut simple, tant que par son implémentation côté client et serveur, que par son utilisation. Il se veut à contresens d'un web qui se complexifie de jours en jours. Il est là pour aider à redistribuer aux utilisateurs la diffusion de l'information sur internet.
Les spécifications protocolaires sont très courtes : il n'y a pas de fonction superflue. L'écriture de documents servis par gemini est minimaliste. On pourrait presque dire que le langage d'écriture est un markdown simplifié : il n'y que quelques éléments de mise en page qui sont balisés en début de ligne. L'écriture est simple, interprétation et la lecture l'est tout autant.
La navigation sur gemini se fait avec des clients dédiés. Les navigateurs web actuels ne permettent pas pour la majorité de charger des documents via le protocole gemini. De par sa simplicité, il existe beaucoup de clients en ligne de commande dans un terminal. C'est aussi dans une optique de décomplexification, le protocole étant tellement simple qu'il ne nécessite que d'un affichage textuel pour visualiser des documents.
On peut séparer le protocole gemini en deux sous protocoles : le protocole réseau gemini et le protocole de documents hypertextes "gemtext".
Le gemtext
En gemini, un texte ne peut être formaté qu'avec les éléments suivants :
- Lignes de texte
- Liens hypertexte
- Titres
- Liste à puce
- Blocs de citation
- Blocs préformatés (blocs de code)
Il ne peut y avoir qu'un élément par ligne : on ne peut pas insérer un lien au milieu d'une ligne de texte par exemple. Il ne peut pas non plus y avoir d'image au milieu d'un texte : pour afficher une image à l'utilisateur, il faut lui donner un lien vers cette image.
Les balises de formatage sont les suivantes :
- #, ##, ou ### Pour les titres de niveau 1, 2 ou 3
- => pour les liens
- * pour les lignes de liste à puce
- > pour les lignes de citation
- ``` pour le texte préformaté (une ligne avant le début du texte préformaté pour ouvrir le bloc, une ligne après pour le fermer)
On peut voir une légère ressemblance avec markdown. La ressemblance s'arrête là. Les deux formats n'ont pas la même vocation. Markdown est là pour permettre de rendre lisible un document dans un editeur de texte, mais aussi pour pouvoir être affiché de façon "traditionnelle" en HTML dans un navigateur. Markdown est beaucoup plus complexe à interpréter par un client pour être convenablement affiché.
Spécifications techniques du "gemtext" en gemini
Spécifications techniques du "gemtext" en HTTP
Le protocole réseau gemini
Le protocole réseau gemini a un fonctionnement assez proche du protocole HTTP, en beaucoup plus minimaliste. Le client ne peut qu'envoyer des simple. Ces requêtes contiennent uniquement l'URL de la page à afficher et optionnellement une donnée texte fourni par l'utilisateur. En retour, le serveur peut répondre avec cinq types de réponses différentes. Seul les réponses de type "success" retournent un document gemtext ou autre. Les plages de codes de réponse sont définies, mais pas tous les codes sont spécifiés.
Ces types de réponses sont les suivantes :
- Code 10 à 19 (10 et 11 spécifiés) : le serveur demande à l'utilisateur de saisir une donnée.
- Code 20 à 29 (20 spécifié) : le serveur renvoi un document gemtext ou un autre type de document défini par un type MIME.
- Code 30 à 39 (30 et 31 spécifiés) : code de redirection temporaire ou permanente.
- Code 40 à 49 (40 à 44 spécifiés) : erreur temporaire du serveur.
- Code 50 à 59 (50 à 53 et 59 spécifiés) : erreur permanente du serveur.
- Code 60 à 69 (60 à 62 spécifiés) : gestion des certificats clients.
Et c'est tout. Un client n'aura qu'un nombre très restreint de réponses, qu'un serveur pourra lui fournir, à savoir gérer. La communication client/serveur gemini se fait uniquement en TLS, il n'y a donc pas d'informations "en clair" transitant entre les deux.
Spécifications techniques du protocole réseau gemini en gemini
Spécifications techniques du protocole réseau gemini en HTTP
Mon expérience avec gemini
Je n'ai connaissance de ce protocole que depuis 2022 environ. Depuis, je n'avais jamais vraiment interagis avec tout en ayant une certaine familiarité avec le gemtext : je lis quelques blogs qui ont une version web pour l'affichage de leurs contenus gemini. Ces contenus, bien qu'écrits en HTML, respectent donc les restrictions du gemtext.
En 2024, trouvant aussi qu'internet est devenu très (trop) complexe, j'ai décidé de m'y intéresser de plus près.
J'ai donc décidé de créer un client web pour naviguer sur le protocole (voir plus loin, mon avis sur le protocole, pour connaître ma raison de créer un client web pour le protocole). Je l'ai écrit en PHP. Il respecte quasiment complètement le standard. Il gère tous les codes de réponse serveur (sauf les 6x, j'en reparle dans mon avis). Il ne lui manque plus qu'une gestion des types MIME, ce qui sera peut-être réglé avant la publication de cet article.
Mon client web permettant de naviguer sur Gemini depuis son navigateur
En programmant mon client, j'ai vraiment pu me rendre compte de la simplicité du protocole. Il ne faut que quelques dizaines de lignes pour communiquer avec un serveur et quelques dizaines d'autres pour l'interprétation du gemtext en HTML. La simplicité du protocole est bien là.
De cette façon, je peux continuer mon exploration du monde gemini, avec un accès direct au contenu distribué par ce protocole.
Mon avis sur le protocole
Mon avis est mitigé : d'un côté, consulter du contenu textuel sans fioritures est une bonne chose, d'un autre je trouve le protocole redondant, ajoutant un outil supplémentaire à internet alors que tant d'autres existent déjà.
C'est un peu comme l'invention de nouvelles technologies pour combattre le réchauffement climatique, alors que la solution existe déjà et est simplement de réduire notre consommation. Ici, la solution serait de tout simplement faire des sites web plus léger au lieu d'inventer un protocole qui en impose l'usage.
Je constate aussi que beaucoup de sites sont servis en HTTP en plus de gemini : je ne suis pas sûr que dédoubler l'information soit une solution pour la décomplexifier. Cela montre peut-être aussi un problème lié au manque de fonctionnalités fournies par le protocole.
Les blogueurs devenus gemlogueurs, car ils trouvent que le web est trop chargé, n'auraient-ils pas pu seulement simplifier leur blogs ? L'HTML permet très facilement de mettre en page du contenu de façon simple. Rien que les feuilles de style sont optionnelles... Je trouve aussi un peu dommage qu'on pert la personnalisation (presque personnalité) du contenu par l'auteur, même si je comprends que le but de gemini est de réduire les informations superflues.
Côté fonctionnement du protocole et du gemtext plus particulièrement, là aussi j'ai quelques réserves. Globalement, les options de formatage sont suffisante. Pouvoir mettre un texte en gras ou en italique aurait pu être un plus, mais pas une nécessité. Par contre, ce que je trouve qui manque grandement, c'est une gestion des images. Une balise pour indiquer un lien vers une image serait une bonne chose. Les images peuvent être un plus pour la compréhension d'un texte, du moment où les règles d'accessibilité soient bien respectées de façon à ne pas pénaliser la compréhension des personnes mal ou non-voyantes.
Le point positif majeur de gemini, c'est le regroupement de contenus simples. Il est compliqué aujourd'hui de naviguer sur internet uniquement sur des sites internet légers et sans fioritures. À part cela, un agrégateur de contenus centrés sur les blogs et site internet légers n'aurait-il pas suffi ? Ou définir une surcouche HTML ou un guide d'écriture spécifique pour générer des sites internet d'une façon suffisamment simple pour pouvoir être lu via un terminal n'aurait pas pu être une autre solution ?
Un autre problème, mais là causé par la "jeunesse" du protocole : à quoi servent les certificats clients gérés avec les codes réponse 60 à 69 ? Je ne suis pas sûr de comprendre, surtout que les certificats clients sont uniques par sous-chemin d'une URL sur un serveur, mais sont données par le client et non pas le serveur. Je n'ai pas trouvé les spécifications du protocole suffisamment clair pour comprendre.
Bien entendu mon avis n'est pas figé. Il est susceptible de changer au fil de mes expériences avec gemini, mais aussi avec le web en général.