-->

Vous êtes ici : accueil » article » C'est quoi Gemini ?

C'est quoi Gemini ?

Rédigé par Gérald Niel - - 5 commentaires

gemini://home.gegeweb.org/c_est_quoi_gemini.gmi

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 : https://fr.wikipedia.org/wiki/Protocole_informatique

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

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), lu et interprété par les navigateurs « Internet » est déjà bien verbeux, par exemple pour afficher le titre de premier niveau de cette page de blog 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 (qui est le format principal du contenu) :

# 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 réflexes 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 si on a besoin d'un peu plus. 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^W protocole. Sauf à passer par un service tiers qui va se charger de relayer les contenus sur la couche http et servir de proxy et traduire le "gemini" et le format text/gemini en "http" et format text/html.

Comme pour aller sur « Internet » (le « world wide web » sur la couche http://) avec Firefox ou Chrome il va donc vous falloir un « client », autrement dit un « navigateur » spécifique causant le protocole Gemini (gemini://).

Celui qui a, en mode graphique, ma préférence du moment est Lagrange.
Des binaires sont disponibles pour MacOS, Windows et Linux Debian Buster et Ubuntu 18.4, et il se compile et s'installe relativement facilement sous Linux :

Il existe aussi des clients en mode texte ou « console » qui permettent de naviguer sans interface graphique, comme Amfora : https://github.com/makeworld-the-better-one/amfora

Et déjà aussi des clients Android comme Ariane, par exemple :
https://play.google.com/store/apps/details?id=oppen.gemini.ariane

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 chouche 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 (cf. ci-dessus).

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

C'est d'ailleurs celui que j'ai choisi d'utiliser pour ma capsule personnelle.

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 (sur ma capsule Gemini) je suis connecté en SFTP et édite directement les fichiers depuis mon ordinateur vers serveur Gemini.
La syntaxe simple du gemtext et ne pas avoir à se soucier du rendu final en fonction du terminal et/ou logiciel utilisé par le lecteur 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://gemini.circumlunar.space/software/ 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 en fonction de l'extension 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 niveaux 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 de niveau 2
### Titre de niveau 3

Le titre 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 liste ordonnées, que des listes à puce, les lignes commencent par un * :

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

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 paragraphe !)

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 lignes contenant ``` :

```
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 du 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

=> 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. Contrairement à cette version « web » qui les affiche « inline » et donc les charge avec la page.

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

Lagrange sous MacOS

=> ./images/anfora.png Anfora

Amfora

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

On peut aussi lier vers des contenus multimédia (interne ou externe), en fonction du client utilisé, la lecture de fichier audio peut être faite dans un lecteur intégré :

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

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 :

Remerciements

Merci a @lareinedeselfes pour ses questions, sa relecture ainsi que ses suggestions et corrections.

5 commentaires

#1 lareinedeselfes a dit :

j'ai essayé de reprendre dans quel chapitre j'ai vu ce qui me chatouillait. Oh mais flûte cela ne prend pas ce que j'avais barré pour que ce soit plus facile à lire
je ne sais pas si je ne vais pas te le mettre aussi sur le fediverse en mp, ce sera peut être plus facile à lire…

#2 Gérald Niel a dit :

Merci beaucoup !

#3 Clemclem a dit :

Guide d'installation rapide de gemserv sous Debian :

# installation des dépendances par les dépots
apt update
apt upgrade
apt curl install git make build-essential zlib1g-dev -y

#installation de rust
curl https://sh.rustup.rs -sSf | sh

#téléchargement de openssl
git clone https://github.com/openssl/openssl.git --branch=OpenSSL_1_1_0-stable

#installation de openssl
cd openssl
./config --prefix=/usr/local/ssl --openssldir=/usr/local/ssl shared zlib
make install
export OPENSSL_DIR=/usr/local/ssl

#téléchargement de gemserv
cd ~
git clone https://git.sr.ht/~int80h/gemserv

#installation de gemserv
cd gemserv
cargo build --release

dans le fichier de config, je ne garde sous les [server] que les paramètres suivant : hostname, dir, key, cert, index


et ensuite ./target/release/gemserv config.toml

#4 Gérald Niel a dit :

Je pense qu'il est inutile de compiler openssl.

sudo apt install libss-dev devrait suffire.

#5 Clemclem a dit :

Personnellement sans compiler openssl, il ne trouvait pas le dossier, et j'ai tourné pas mal de temps pour trouver quelle valeur donner à OPENSSL_DIR.

et bien sur, je corrige la troisième commande du guide ci-dessus :
apt install curl git make build-essential zlib1g-dev -y

Écrire un commentaire

Quelle est la deuxième lettre du mot idll ? :