Fonctionnement technique de la fédération
Rappel : Instance
Une instance est :
une copie d'un logiciel libre
installée sur un serveur administré par un particulier ou une organisation et modéré par une personne ou une équipe
à laquelle on accède sur le Web via son URL
qui peut échanger des informations avec d'autres instances grâce à des langages de communication standards que l'on appelle "protocoles".
Rappel : Protocole
La définition générale d'un protocole est un ensemble de règles que l'on doit suivre pour communiquer.
En informatique, un protocole standard est un ensemble de règles normalisées qui permettent à des entités hétérogènes d'échanger des données.
Les protocoles du Fediverse
La standardisation et l'ouverture des protocoles du Fediverse établissent deux possibilités essentielles :
Toutes les instances qui les utilisent peuvent communiquer entre elles (elles savent quelles règles suivre pour ce faire) ;
Il est possible d'ajouter sa propre instance au Fediverse (en copiant un média social libre existant ou en créant un nouveau média social utilisant au moins un protocole du Fediverse).
Fondamental : ActivityPub
ActivityPub est le protocole principal du Fediverse. Il s'agit d'un standard ouvert, recommandé par le Web Social Networking Group du W3C depuis 2018.
Complément : Plusieurs protocoles
Bien qu'ActivityPub soit le protocole principal du Fediverse, d'autres protocoles y sont aussi utilisés :
Diaspora
WebFinger
OStatus
Matrix
Zot & Zot/6
...
Principes de fonctionnement d'ActivityPub
ActivityPub regroupe deux "sous-protocoles" :
Le protocole appelé "Social API", qui standardise les messages entre client et serveur.
Ce protocole permet à un client de créer, mettre à jour et supprimer des contenus.
Le protocole appelé "Federation Protocol", qui standardise les messages de serveur à serveur.
Ce protocole permet la fédération des contenus et des notifications entre les serveurs du Fediverse, en distribuant des
Activités
(contenant desObjets
) auxInbox
desActeurs
de ces serveurs.
Le modèle utilisé par ActivityPub s'appuie sur les spécifications Activity Streams (décrit les types de bases et les types étendus) et Activity Vocabulary (détaille les types étendus). Le format utilisé est JSON-LD.
Pour comprendre le fonctionnement d'ActivityPub, nous pouvons retenir 4 types principaux :
Actor
: un acteur est une personne (Person
) ou un groupe (Group
) qui réalise une action (ou activité) avec un objet.Object
: un objet est un contenu, par exemple uneNote
, unArticle
, uneImage
, unAudio
.Activity
: une activité est une action réalisée par un acteur sur un objet (qui peut être un autre acteur), par exempleFollow
,Like
,Create
,Delete
,Accept
.Collection
: une collection est une liste d'objets, par exemple une liste de followers (personnes abonnées à un acteur) ou une liste d'objets (comme une liste de messages publics).
Exemple : Exemple d'Actor (Person)
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"id": "https://framapiaf.org/stph/",
"name": "Stéphane Crozat",
"preferredUsername": "stph",
"summary": "Enseignant-chercheur à l'UTC, membre de Framasoft, Picasoft, Scenari et Miroir de Valem, auteur de roman chez Framabook.",
"inbox": "https://framapiaf.org/stph/inbox/",
"outbox": "https://framapiaf.org/stph/outbox/",
"followers": "https://framapiaf.org/stph/followers/",
"following": "https://framapiaf.org/stph/following/",
"liked": "https://framapiaf.org/stph/liked/"
}
Exemple : Exemple d'Object (Video)
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Video",
"name": "The Yes Men Fix the World",
"url": "https://aperi.tube/w/xBcj5U97Jdk8P6SZNz8t8Y",
"duration": "PT1H35M39S"
}
Exemple : Exemple d'Activity (Create) réalisé par l'Actor "audrey" avec un Object (Note) :
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Create",
"id": "https://masto-WE01.net/audrey/posts/34sfcdc-636h0-osi234slfi",
"to": ["https://masto-WE01.net/audrey/followers/",
"https://www.w3.org/ns/activitystreams#Public"],
"actor": "https://masto-WE01.net/audrey/",
"object": {"type": "Note",
"id": "https://masto-WE01.net/audrey/posts/84u4adj-f643-8885-b7ggpd-k7q445",
"attributedTo": "https://masto-WE01.net/audrey/",
"to": ["https://masto-WE01.net/audrey/followers/",
"https://www.w3.org/ns/activitystreams#Public"],
"content": "Vous me recevez ?"}
}
Traduction technique d'une interaction dans le Fediverse avec ActivityPub
Chaque acteur possède deux Collections
particulières, identifiables par une URL :
Une
Inbox
(boîte de réception).Une
Outbox
(boîte d'envoi).
Ces deux boîtes reçoivent des requêtes HTTP POST et traitent des requêtes HTTP GET qui contiennent des messages formatés selon le standard ActivityPub, et qui sont transmises de client à serveur ou de serveur à serveur.
Complément : Installer sa propre instance
Les médias sociaux du Fediverse sont libres, les protocoles sont standards et ouverts, et l'installation d'instances est documentée pour plusieurs logiciels ; il est possible, pour quiconque le souhaite et en a les compétences (ou connaît quelqu'un qui les a) d'installer sa propre instance de média social :
Documentation pour installer une instance Mastodon : docs.joinmastodon.org ;
Documentation pour installer une instance PeerTube : docs.joinpeertube.org ;
Documentation pour installer une instance Mobilizon : docs.joinmobilizon.org ;
Complément : Quelques limites d'ActivityPub
Quelques limites actuelles d'ActivityPub sont critiquées au sein de la communauté d'utilisateur⋅ices et de contributeur⋅ices du Fediverse :
Grande liberté d'implémentation ;
Ambiguïté entre les Objets ;
Absence de chiffrement ;
...
Pour en savoir plus, lire le billet de blog "ActivityPub - Final thoughts, one year later" de Dennis Schubert, publié en 2019 sous licence CC BY.