[comment]: # (This presentation was made with markdown-slides) [comment]: # (This is a CommonMark compliant comment. It will not be included in the presentation.) [comment]: # (Compile this presentation with the command below) [comment]: # (mdslides presentation.md --include media) [comment]: # (Set the theme:) [comment]: # (Pass optional settings to reveal.js:) [comment]: # (markdown: { smartypants: true }) # ActivityPub et ses applications Thomas MEYER
# Introduction Note: Vous connaissez et utilisez sûrement Facebook, X/Twitter ou Instagram par exemple. Je n'ai jamais trop trouvé mon compte sur ces derniers, pas forcément en accord avec les fonctionnements, les choix de direction ou de modération et le contenu mis en avant. Du coup je me suis mis à chercher des alternatives et j'ai découvert par hasard le fédiverse et par extension l’ActivityPub. Dans cette présentation je vais donc tenter de vous expliquer grossièrement ce dernier ainsi qu'une liste non exhaustive des applications l'utilisant. J'espère ainsi vous faire découvrir un nouveau terrain de jeu !
# L'ActivityPub *un protocole pour les gouverner tous*
## Le standard Définition du standard par le [W3C](https://www.w3.org/) : > Le protocole ActivityPub est un protocole de réseau social décentralisé basé sur le format de données ActivityStreams 2.0. > Il fournit une API client-serveur pour la création, la mise à jour et la suppression de contenu, ainsi qu'une API de fédération serveur-serveur pour l'envoi de notifications et de contenu. > [Source en anglais](https://www.w3.org/TR/activitypub/) Note: C'est un standard écrit par une équipe avec des personnes queer comme [Christine Lemmer-Webber](https://dustycloud.org/) et sans affiliation à des sociétés privés ce qui a favorisé une approche sur le fonctionnement et la modération très intéressante, je reviendrai plus tard dessus. ActivityStreams, cette spécification détaille un modèle de représentation des activités potentielles et complétées en utilisant le format JSON. Son vocabulaire inclus notamment toutes les activités typiques d'un RS.
## La fédération Définition de [Bonfire](https://bonfirenetworks.org) dans leur [FAQ](https://bonfirenetworks.org/faq/) : > Un réseau social fédéré est un système décentralisé, développé et géré par des fournisseurs distincts (un peu comme le courrier électronique mais pour les réseaux sociaux). Il se compose de plusieurs applications et sites web, où les utilisateurs de chaque site peuvent communiquer avec les utilisateurs de n'importe quel autre site compatible. > Une application ou un site web participant à un réseau social fédéré est interopérable avec les autres sites (connus sous le nom d'instances) et se fédère (en récupérant et surtout en envoyant des données) avec eux sur la base des interactions de leurs utilisateurs. La communication entre les sites web sociaux s'effectue par le biais de protocoles de réseaux sociaux, tels que ActivityPub Note: Pour résumé je vais reprendre l'exemple de [Evan Prodromou](https://en.wikipedia.org/wiki/User:EvanProdromou), un co-auteur du standard, dans cette [vidéo](https://youtu.be/Kd1mcNPjs7Y?si=IU0COkpHwp-hMLMV&t=64) : il vous est probablement arrivé que quelqu'un veuille vous montrez cette vidéo trop cool sur TikTok mais vous n'avez pas de compte TikTok ! Et puis votre ville met ses actus sur son compte Facebook, donc il vous faut en potentiellement un la-bas aussi ! Bref il vous faut maintenir des comptes sur chaque plateforme pour être au courant de tout. Le protocole ActivityPub avec la fédération permet ainsi d'avoir un compte sur une seule instance (ou application) et de s'abonner ensuite à tous les comptes distants que vous le souhaitez, quelque soit leur instance. Toutes les interactions/activités sociales arriveront dans votre fil d'actualité chronologiquement !
En deux lignes : - protocole basé sur HTTP (GET & POST) - format JSON standardisé Note: Il s'agit donc d'un protocole basé sur l'HTTP permettant à des clients et des serveurs de s'échanger des informations (ou activités) typiques d'un réseau social via un format JSON standardisé. Les activités peuvent correspondre par exemple à la publication d'une note, la mise à jour d'un profil, etc. Chaque activité est transmise ensuite de mon serveur initial aux serveurs des personnes qui me suivent et ces derniers, en utilisant une interface web ou un client mobile, voient cette activité et peuvent y réagir.
![Schéma simplifié ActivityPub](media/ActivityPub.png) Note: Dans le standard chaque user est un "actor" et ce dernier à forcément une "INBOX" (recevoir les activités) et une "OUTBOX" (envoyer des activités). résumé : POST to OUTBOX pour envoyer à tous, GET from INBOX pour les activités reçus, POST to autre actor INBOX pour envoyer un message, GET from other actor OUTBOX pour voir ces activités récentes. Si je veux envoyer un message à XY alors POST dans mon OUTBOX, les serveurs se connaissent donc le POST va arrivé dans l'INBOX de XY
# Le Fediverse & ses applications *mais c'est quoi ce truc ?* Note: C'est bien beau tout ça mais on y trouve quoi sur le Fediverse ? Pour m'aider à répondre à cette question je vais reprendre l'excellent "arbre" proposé par [Per Axbom dans son article sur le Fediverse](https://axbom.com/fediverse/).
Note: Comme vous pouvez le voir il existe pléthore d'applications inter-opérables grace à l'ActivityPub et quasiment toutes les activités "classiques" des réseaux sociaux s'y retrouvent. _prendre le temps d'expliquer les principales équivalences aux RS connus_
Une courte explication des possibilités de la fédération ![Schéma pour expliquer la fédération](media/Federation.png) Note: Parler aussi de la possibilité de faire une instance basée sur les whitelists. Sidenote pour les dev d'une nouvelle PF -> Réseau à disposition, communautés à portée de main
Moyen de modérer : le silence ![Schéma pour expliquer la modération via le mute](media/Federation-Silence.png) Note: Le Silence rends les activités de l'instance invisible sur le fil global de l'instance qui a initié le silence. Les activités des gens suivis sont tout de même transmise au fil principal des concernés et toutes les activités/users publics sont quand même trouvable par la recherche. (exemple de la vague de spam récente)
Moyen de modérer : la défédération/suspension ![Schéma pour expliquer la modération via la défédération](media/Federation-Défédération.png) Note: Toutes les données de l'instance suspendu est détruite sur le serveur local, les follows sont supprimés aussi. Il n'est plus possible de trouver les activités et users dans la recherche. Même si annulation, les users locaux doivent manuellement retrouver leurs follows.
# Critiques **Intéressant** - Standardisation - Communautaire - Nombreux clients alternatifs - Maîtrise relative des données personnelles **Limites** - Réalité de l'inter-opérabilité - Recherche de contenus - Modération / contenu sensible - Peut nécessiter une maîtrise technique Note: Il y a tout de même des critiques entendables, tel qu'il est défini actuellement certaines personnes déplorent de la largesse dans la spec qui rends l'inter-opérabilité parfois difficile. Un dialogue entre les personnes qui développe les différentes applications doit avoir lieu pour affiner cela. Pour les applications : la recherche de contenu par exemple est limité à l'instance et à sa fédération sur laquelle vous vous trouvez. S'agissant de logiciels et non de plateformes, n'importe qui peut mettre en place une instance de l'un d'entre eux et diffuser du contenu légalement répréhensible.
# Conclusion Ce n'est que la partie émergée de l'iceberg... Merci pour votre attention, à vos questions ! Note: Il y a encore tellement de choses à dire ou à découvrir mais il est temps pour moi de conclure cette présentation. J'espère avoir éveillé votre curiosité autour de cet univers fédéré et des centaines de logiciels qui gravitent autour.
# Sources supplémentaires *En Anglais* - [Christine Lemmer-Webber](https://dustycloud.org/) - [Evan Prodromou](https://en.wikipedia.org/wiki/User:EvanProdromou) et son [interview](https://youtu.be/Kd1mcNPjs7Y?si=IU0COkpHwp-hMLMV) - [Explications des interactions entre instances](https://seb.jambor.dev/posts/understanding-activitypub/) - [Instance Mastodon pour tester/jouer avec les activités et découvrir l'ActivityPub](https://activitypub.academy/) - [La modération](https://mastodon.gitbook.io/mastodon/admin/moderation) - [Critiques du protocole](https://overengineer.dev/blog/2019/01/13/activitypub-final-thoughts-one-year-later.html) - [Video Peertube présentée](https://framatube.org/w/9dRFC6Ya11NCVeYKn8ZhiD)