💾 Archived View for home.gegeweb.org › c_est_quoi_gemini.gmi captured on 2023-07-10 at 13:07:28. Gemini links have been rewritten to link to archived content

View Raw

More Information

⬅️ Previous capture (2021-11-30)

-=-=-=-=-=-=-

C'est quoi Gemini ?

Et bien c'est un nouveau protocole…

Voyez vous, c'est la question que je me suis posé voyant le mot-clef #gemini fleurir sur le fediverse.

mais qu'est-ce que c'est que ce #gemini ?!?

Et bien, cf. ci-dessus, c'est nouveau protocole pour remplacer, ou plutôt offrir une alternative au « world wide web » devenu lourd et compliqué.

D'accord, mais c'est quoi un protocole ?

Pour faire simple, un protocole est ce qui décrit et défini la façon dont doivent se parler deux ordinateurs ou plutôt logiciels pour s'échanger des données ou des informations.

Ça va définir donc le langage que vont devoir utiliser les programmes.

Vous pouvez aller lire si vous ĂŞtes curieux ou curieuse :

Protocole informatique (Wikipedia)

En préambule…

… avant de lire la suite, et pour comprendre ce qui a pu pousser certaines personnes à vouloir « inventer » une alternative, je vous invite à lire le billet suivant de Stéphane Bortzmeyer sur le Framablog :

Le Web est-il devenu trop compliqué ?

Le protocole Gemini

Spécifications du protocole Gemini (en anglais).

Ce protocole revient donc aux fondamentaux afin d'être le plus léger possible et surtout essayer d'éviter les dérives qui on mené « Internet » là où il est aujourd'hui. C'est à dire devoir charger une terra-chié de données et métadatas inutiles même pour diffuser du contenu simple et statique en faisant en sorte dans ses spécifications qu'il ne soit pas possible de l'étendre en y ajoutant de multiples couches.

Autant dire que ça ne va pas plaire aux publicitaires et autre « profileurs »… Et c'est tant mieux !

Pour être un peu plus précis, ce que nous verrons plus loin, Gemini ce n'est pas « Internet » ou plus exactement le « World Wide Web ». Gemini est un protocole, il ne peut rien faire. Il lui faut des logiciels qui vont l'utiliser pour « se parler », comme un navigateur spécifique.

Coté rédacteur, le langage HTML (sans parler de CSS pour le rendu) est déjà bien verbeux, par exemple pour afficher le titre de premier niveau de cette page en http(s) sur le « Web » :

<h1>C'est quoi Gemini&nbsp;?</h1>

Et encore, pour être exhaustif ce serait, pour n'afficher que ce titre :

<!DOCTYPE html>
<html lang="fr">
    <head>
    	<meta charset="utf-8">
    	<title>C'est quoi Gemini ?</title>
    </head>
    <body>
        <h1>C'est quoi Gemini&nbsp;?</h1>
    </body>
</html>

Alors qu'avec le « gemtext », content-type: text/gemini :

# C'est quoi Gemini ?

Tout simplement !

Ça en fait des octets en moins à se trimbaler, non ?

Nous verrons plus loin que la syntaxe est relativement simple et sommaire. De prime abord, avec les reflexes hérités de ce que permet le « web » ça peut paraitre spartiate, limité, insuffisant. En définitive je pense qu'il n'en est rien et que ça va, justement, à l'essentiel.

Restons sur le principe « KISS » (Keep it Simple and Stupid). Cependant le Markdown fait parti des formats supportés. Donc aux clients (navigateurs) de l'implémenter. Cependant il faudrait le standardiser.

Comment ça fonctionne

Et bien exactement comme tout ce qui fait fonctionner « Internet » !

Il y a besoin d'un coté de logiciels qui vont servir le contenu : les serveurs.

Et de l'autre les logiciels qui vont aller chercher le contenu et l'afficher : les clients.

Donc, principe, comme presque toujours clients/serveurs.

Et pour que tout ce petit monde se parle et se comprenne, le fameux protocole.

Pour l'instant on ne peut pas utiliser un navigateur « Internet » comme Firefox ou Chrome pour suivre les liens gemini:// car ils ne parlent pas encore ce langage (protocole). Sauf à passer par un service tiers qui va se charger de relayer les contenus sur la couche http et servir de proxy.

Comme pour aller sur « Internet », le « world wide web » sur la couche http(s), il va donc vous falloir un « client », autrement dit un « navigateur » causant le protocole Gemini.

Celui qui a, en mode graphique, ma préférence du moment est Lagrange.

Lagrange, un client graphique Gemini

Des binaires sont disponibles pour MacOS et Windows, Linux Debian Buster ou Ubuntu 18.04, et se compile relativement facilement :

Installation du navigateur Lagrange sous Linux (Ubuntu/Debian)

Il existe aussi des clients en mode texte ou « console » qui permettent de naviguer sans interface graphique, comme Amfora :

Amfora (lien web vers le dépôt Github du projet)

Et déjà aussi des client Android comme Ariane, par exemple :

Ariane (sur Google Play)

J'ai testé et utilise les trois.

Les clients vont donc suivre des liens, ou URL, préfixées de gemini://, tout comme les navigateurs « internet » suivent des liens http:// ou https://.

Il n'y a pas de distinction pour Gemini, qui par défaut impose l'utilisation de SSL. Et pour l'instant il est possible d'utiliser son propre certificat auto-signé sans faire hurler le navigateur.

Ça signifie que les administrateurs de serveur peuvent générer le certificat qui sert à chiffrer la communication et le signer "eux même" sans avoir à faire certifier (signer) leur certificat par une autorité reconnue par les navigateur comme c'est le cas pour le World Wide Web sur la couche https://.

Et de l'autre coté, du coté de l'administrateur système et des machines qui vont servir le contenu il y a les serveurs.

Vous n'avez pas besoin d'avoir un serveur Gemini pour accéder aux contenus diffusé sur ce réseau !

Juste du logiciel client, Ă  savoir un navigateur Gemini.

J'ai à ce jour testé et utilisé deux serveurs, qui sont tout deux écrits en Rust :

Agate, un serveur Gemini simple

Gemserv, un serveur Gemini plus complet gérant les hôtes virtuels, les redirections, les scripts serveurs (CGI)…

C'est d'ailleurs celui que j'ai choisi d'utiliser.

Et comme pour n'importe quel site web, pour y publier les contenus et déposer les fichiers dans le répertoire des documents sur le serveur, il faut disposer d'un accès distant à la machine (le serveur physique). Soit un accès SFTP ou FTP, via Git et SSH…

Pour la rédaction de cet article je suis connecté en SFTP et édite directement les fichiers depuis mon ordinateur vers mon serveur Gemini.

La syntaxe simple du gemtext et ne pas avoir à se soucier du rendu final en fonction du terminal et logiciel utilisés font qu'on peut se le permettre !

Publier à mesure de la rédaction ! Le rêve !

Pour un projet aussi jeune (été 2020 à priori), je trouve qu'il y a déjà une offre assez conséquente en terme de logiciels fonctionnels :

Gemini software (en anglais)

RĂ©diger du contenu

Comme dis précédemment le contenu diffusé sur ce protocole est essentiellement (mais pas que) du texte au format gemtext, content-type: text/gemini, les fichiers de ce content-type (que le serveur va détecter afin de l'envoyer correctement au client) ont l'extension .gmi.

Mais il est parfaitement possible de publier des images, charge au client de décider la façon des les afficher, des contenus multimédia comme de l'audio, du texte brut (text/plain), des PDF, du Markdown…

C'est le client utilisé qui va déterminer la façon dont le contenu va être présenté ou redirigé vers un logiciel tiers sur la machine cliente.

Syntaxe du Gemtext

La syntaxe du Gemtext est relativement simple et sommaire, inspirée du markdown.

Tout se passe en début de ligne, pas de lien hypertexte à l'intérieur d'un paragraphe par exemple.

Insérer une image ou un contenu multimédia se fera de la même façon que pour un lien, sur une seule ligne.

Une longue ligne est un paragraphe, le client se chargeant d'adapter le contenu à la largeur, en général sur une largeur (historique) de 80 caractères. Ce qui était la largeur des premiers terminaux informatiques.

Les titres

Il y a trois niveau de titre (un quatrième n'aurait pas été superflu) les lignes de titres démarrent avec le caractère # :

  # Titre de niveau 1 (titre principal)
  ## Titre de niveau 2 (titre de paragraphe)
  ### Titre de niveau 3 (titre de sous-paragraphe)

Le titre principal de niveau 1 en début de page sera aussi (ça dépend du client) le titre affiché dans la fenêtre du navigateur.

Les Listes

Pas de listes ordonnées, que des listes à puce, les lignes commencent par un * :

  * Premier élément
  * Deuxième élément
  * Troisième élément

Ce qui donne :

Les citations

Les lignes commençant par le caractère > sont considérées comme des citations :

  > Ceci est une citation (sur une seule ligne pour un pargraphe !)

Ce qui donne :

On ne le dira jamais assez, l'anarchisme, c'est l'ordre sans le gouvernement ; c'est la paix sans la violence. C'est le contraire précisément de tout ce qu'on lui reproche, soit par ignorance, soit par mauvaise foi.

– Hem Day

Texte pré-formaté

Pour présenter une portion de code ou un texte non mis en forme ou interprété il faut encapsuler le bloc de texte entre deux ligne de ```, comme ceci :

   ```
   portions de texte non mise en forme.
   > citation
   => ./index.gmi lien vers l'index
   
   etc…
   ```

Liens (externes et internes)

Pour faire des liens vers des ressources internes ou des liens vers des ressources externes les lignes commencent par =>, la première partie est la cible de lien, et si suivit de texte après un espace le texte sera affiché :

Lien externe (gemini)

  => gemini://gemini.boizot.ch/gemtext/antiseche.gmi L'antisèche Gemtext 

Va produire :

L'antisèche Gemtext

Sans le texte :

  => gemini://gemini.boizot.ch/gemtext/antiseche.gmi

Va produire :

gemini://gemini.boizot.ch/gemtext/antiseche.gmi

Liens internes (vers des images, par exemple), c'est le content-type qui va déterminer le comportement.

Cependant, dans l'esprit de ce que souhaiterais être Gemini, les images ne devraient pas être chargées et affichées avec le document (comme c'est le cas) mais seulement chargées et affichées à la demande, en cliquant sur ou en suivant les liens :

  => ./images/lagrange_macos.png Lagrange sous macOS
  => ./images/anfora.png Anfora

Lagrange sous macOS

Anfora

Pour un lien interne, vers un répertoire avec un fichier index.gmi (comme pour un serveur http, l'index, c'est à dire le fichier à afficher par défaut se configure coté serveur) :

  => ./aubepine/ Aubépine, recueil de poésies

Aubépine, recueil de poésies

On peut aussi lier vers des contenus multimédia (interne ou externe), ce qui devrait permettre la lecture dans un lecteur intégré (ça dépend encore du client) :

  => gemini://immer.band/audio/08_Je_Regrette_Tellement.mp3 Immer - Je Regrette Tellement 

Immer - Je Regrette Tellement

Les chemins des liens internes sont relatifs par rapport Ă  la page courante.

Paragraphes

Une ligne correspond à un paragraphe qui sera adapté par le client pour correspondre à la largeur du terminal, généralement sans dépasser les 80 caractères.

Les saut de lignes sont l'Ă©quivalent des <br> en HTML.

Et les lignes vides séparent les paragraphes.

      On peut indenter le texte en ajoutant des espaces insécables en début de ligne.

Les espaces "normaux" et tabulations en début de ligne sont ignorés, sauf pour le texte pré-formaté (paragraphe entouré de deux lignes ```).

Capsules et sites parlant de Gemini

Comme d'autres ont déjà écrit sur le sujet, plutôt que de les paraphraser ou copier même si le contenu est sous licence CC ou libre, voici quelques liens :

RĂ©flexions autours de Gemini

Le protocole Gemini, revenir à du simple et sûr pour distribuer l'information en ligne ?

Gemini, le protocole du slow web (par @ploum)

Remerciements

Merci Ă  @lareinedeselfes

Pour ses questions, sa relecture ainsi que ses suggestions et corrections.

________________________________________________________________________________

Accueil