[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 / Repenser nos réseaux sociaux 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.
## Zoom sur 4 applications - Mastodon (Micro-blogging) - Peertube (Vidéos) - Pixelfed (Images/Photos) - Mobilizon (Événements)
## [Mastodon](https://joinmastodon.org/) (& Co) ![Icone de Mastodon](media/Icon_Masto.png) ![Icone d'Akkoma'](media/Icon_Akkoma.png) ![Icone d'Iceshrimp'](media/Icon_Iceshrimp.png) Logiciels de micro-blogging - 500 à 10 000 caractères - notion de like/fav et retweet/boost Note: Mastodon (et pleins d'autres) sont donc des logiciels de micro blogging (comme X/Twitter). Vous pouvez y écrire des posts de 500 caractères (ça peut monter a 10 000 sur certains logiciels mais est-ce que c'est encore du micro-blogging du coup ?) ou tout simplement doomscroller comme on aime en lâchant un "like" ou un "boost" de temps en temps ! Je ne vais pas faire la liste des similitudes et différences avec X/Twitter ici mais n'hésitez pas si vous êtes curieux à revenir vers moi dans un second temps. Par contre ce qu'il va être intéressant de discuter c'est l'impact de l'aspect "décentralisé" et du fonctionnement de l'ActivityPub sur ce genre de logiciel.
![Capture d'écran de Mastodon](media/Screen_Masto.jpg) Plusieurs "fils" chronologiques à disposition : - Accueil : Abonnements - Local : Posts publics des membres de l'instance - Global : Posts publics fédérés
![Capture d'écran d'un post Pixelfed depuis Iceshrimp](media/Screen_PixelfedFromIceshrimp.png) ![Capture d'écran d'une chaîne Peertube depuis Iceshrimp](media/Screen_PeertubeUserFromIceshrimp.png) Note: Possibilités de follows des users d'autres applications du fédiverse et d'interagir avec le contenu (like, boost, commentaires, etc.) - Valable pour peertube, pixelfed et les blogs de certains, le reste n'est pas maîtrisé de mon côté
## [Peertube](https://joinpeertube.org/) Alternative à YouTube principalement développé par [Framasoft](https://framasoft.org/). ![Capture d'écran de Peertube](media/Screen_Peertube.jpg) Note: Attention, comme il est écrit dans leur FAQ, une alternative n'est pas la pour remplacer/détrôner l'idée est de proposer quelque chose avec des valeurs différentes. Comme vu auparavant chaque instance a ses propres règles et sa propre modération mais vous permettra tout de même d'uploader des vidéos et d'initier votre chaîne Peertube. Par contre, et c'est là toute la beauté du Fediverse, pas besoin d'un compte Peertube pour suivre et commenter les chaines qui vous intéressent !
![Capture d'écran de commentaires Peertube](media/Screen_Peertube_comments.png) Note: exemple des commentaires sous la vidéo [suivante](https://framatube.org/w/9dRFC6Ya11NCVeYKn8ZhiD)
Exemple d'outil de recherche : [SepiaSearch](https://sepiasearch.org/) ![Capture d'écran de SepiaSearch](media/Screen_SepiaSearch.png) Note: Il faut donc utilisez des outils comme [SepiaSearch](https://sepiasearch.org/) qui indexent de nombreuses instances et vidéos. SepiaSearch étant mis en place par Framasoft, ils se réservent le droit de ne pas indexer les instances hébergeant du contenu sensible par exemple.
## [Pixelfed](https://pixelfed.org/) Plateforme de partage d'images fédérée Logiciel principalement développé par [Dansup](https://dansup.com/) ![Capture d'écran de Pixelfed](media/Screen_Pixelfed.jpg) Note: Fonctionnalités largement inspiré d'Instagram, il ne manque que les réels. Je ne l'utilise pas personnellement donc je n'ai pas d'avis particulier dessus ni d'infos supplémentaires mais le projet est très intéressant et le développeur principal est très actif.
## [Mobilizon](https://joinmobilizon.org/) Alternative aux événements Facebook principalement développé par [Framasoft](https://framasoft.org/). ![Capture d'écran de Mobilizon](media/Screen_Mobilizon.png) Note: Vous pouvez créer un compte sur une instance pour y faire vos premiers événements. Contrairement à Facebook les participants n'ont pas besoin d'avoir un compte pour s'inscrire et peuvent facilement ajouter ce dernier à leur agenda. Mobilizon est imaginé autour des groupes et c'est l'activité de ces derniers qui est fédéré et donc accessible depuis d'autres logiciels.
# 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)