Fonctionnement technique de la fédération

RappelInstance

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

RappelProtocole

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 :

  1. Toutes les instances qui les utilisent peuvent communiquer entre elles (elles savent quelles règles suivre pour ce faire) ;

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

FondamentalActivityPub

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.

Logo d'ActivityPubInformations[1]

ComplémentPlusieurs 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" :

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

  2. 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 des Objets) aux Inbox des Acteurs 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 :

  1. Actor : un acteur est une personne (Person) ou un groupe (Group) qui réalise une action (ou activité) avec un objet.

  2. Object : un objet est un contenu, par exemple une Note, un Article, une Image, un Audio.

  3. Activity : une activité est une action réalisée par un acteur sur un objet (qui peut être un autre acteur), par exemple Follow, Like, Create, Delete, Accept.

  4. 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).

ExempleExemple d'Actor (Person)

1
{
2
 "@context": "https://www.w3.org/ns/activitystreams",
3
 "type": "Person",
4
 "id": "https://framapiaf.org/stph/",
5
 "name": "Stéphane Crozat",
6
 "preferredUsername": "stph",
7
 "summary": "Enseignant-chercheur à l'UTC, membre de Framasoft, Picasoft, Scenari et Miroir de Valem, auteur de roman chez Framabook.",
8
 "inbox": "https://framapiaf.org/stph/inbox/",
9
 "outbox": "https://framapiaf.org/stph/outbox/",
10
 "followers": "https://framapiaf.org/stph/followers/",
11
 "following": "https://framapiaf.org/stph/following/",
12
 "liked": "https://framapiaf.org/stph/liked/"
13
}

ExempleExemple d'Object (Video) 

1
{
2
  "@context": "https://www.w3.org/ns/activitystreams",
3
  "type": "Video",
4
  "name": "The Yes Men Fix the World",
5
  "url": "https://aperi.tube/w/xBcj5U97Jdk8P6SZNz8t8Y",
6
  "duration": "PT1H35M39S"
7
}

ExempleExemple d'Activity (Create) réalisé par l'Actor "audrey" avec un Object (Note) :

1
{
2
 "@context": "https://www.w3.org/ns/activitystreams",
3
 "type": "Create",
4
 "id": "https://masto-WE01.net/audrey/posts/34sfcdc-636h0-osi234slfi",
5
 "to": ["https://masto-WE01.net/audrey/followers/",
6
        "https://www.w3.org/ns/activitystreams#Public"],
7
 "actor": "https://masto-WE01.net/audrey/",
8
 "object": {"type": "Note",
9
            "id": "https://masto-WE01.net/audrey/posts/84u4adj-f643-8885-b7ggpd-k7q445",
10
            "attributedTo": "https://masto-WE01.net/audrey/",
11
            "to": ["https://masto-WE01.net/audrey/followers/",
12
                   "https://www.w3.org/ns/activitystreams#Public"],
13
            "content": "Vous me recevez ?"}
14
}

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.

Principe de fonctionnement d'ActivityPubInformations[2]

ComplémentInstaller 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 :

ComplémentQuelques 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.