paint-brush
Une brève introduction d'ActivityPub : l'avenir des réseaux sociauxpar@thebojda
9,052 lectures
9,052 lectures

Une brève introduction d'ActivityPub : l'avenir des réseaux sociaux

par Laszlo Fazekas10m2023/10/07
Read on Terminal Reader

Trop long; Pour lire

ActivityPub est un protocole de réseau social ouvert et distribué standardisé par le World Wide Web. Son seul point faible est qu'il utilise le protocole HTTP, qui nécessite un serveur central. Le protocole ActivityPub devrait être étendu avec la prise en charge des protocoles décentralisés déjà existants, ce qui permettrait au Fediverse d'évoluer vers une direction encore plus ouverte et décentralisée.
featured image - Une brève introduction d'ActivityPub : l'avenir des réseaux sociaux
Laszlo Fazekas HackerNoon profile picture

ActivityPub est un protocole de réseau social ouvert et distribué standardisé par le World Wide Web Consortium. Sa première version est sortie en 2018, elle n’est donc pas nouvelle. Il est utilisé par plusieurs réseaux sociaux, dont Mastodon , qui a récemment connu une augmentation significative de sa popularité lorsqu'Elon Musk a racheté Twitter et y a apporté des modifications qui n'ont pas plu à beaucoup.


En outre, Tumblr et l'alternative de Facebook à Twitter, Threads, ont également signalé qu'ils prendraient en charge le protocole à l'avenir. Bien qu’il ne s’agisse pas d’un nouveau protocole, ActivityPub devient de plus en plus populaire.


Étant donné que l'Union européenne et les États-Unis s'inquiètent depuis longtemps du monopole de marché des grands réseaux sociaux, j'imagine qu'à l'avenir, sous la pression du gouvernement, les plus grands réseaux sociaux existants, tels que Facebook et Twitter, soutiendront également le protocole et deviendront fait partie du Fediverse . (Le Fediverse est un univers de réseaux sociaux composé de fournisseurs prenant en charge ActivityPub.)


Je crois qu'à l'avenir, nous ne choisirons pas Twitter ou Facebook car ils seront fermés et nous n'aurons pas d'autre choix.


La force de chaque plate-forme viendra de la meilleure intelligence artificielle pour filtrer la quantité massive de données entrantes, pour passer au crible, sélectionner et résumer les informations les plus importantes pour les utilisateurs.


Bien entendu, pour cela, il faut bien connaître l'utilisateur, ce qui est également dans son intérêt. En retour, l’intelligence artificielle peut fournir des publicités bien plus pertinentes.


Dans un système ouvert et accessible, la concurrence ne se fera plus entre les réseaux sociaux, mais entre les algorithmes basés sur l’intelligence artificielle.


Voyons comment fonctionne ActivityPub. La fonctionnalité de base est joliment résumée par ce schéma très simple.

ActivitéPub expliquée


Source : https://activitypub.rocks/



Le protocole comporte deux composants principaux : la boîte de réception et la boîte d'envoi. Il s'agit de deux points de terminaison d'API accessibles via le protocole HTTP. Lorsqu'un utilisateur souhaite communiquer quelque chose avec le monde extérieur (par exemple, publier du contenu), il l'envoie vers la boîte d'envoi. Ici, le système l'ajoute à une liste appropriée, à laquelle les abonnés peuvent accéder en lisant la boîte d'envoi.


Si quelqu'un du monde extérieur souhaite envoyer quelque chose à l'utilisateur (par exemple, une publication non publique qui ne peut être vue que par certains utilisateurs), il l'envoie dans la boîte de réception sous forme cryptée. La boîte de réception est comme une boîte de réception de courrier électronique, où le contenu entrant est collecté et où l'utilisateur peut y accéder.


On peut récupérer l'emplacement de la boîte de réception et de la boîte d'envoi en utilisant le protocole WebFinger. Cela peut également être testé à l'aide d' ActivityPub Explorer , un super outil pour expérimenter et comprendre le protocole.


Un nom d'utilisateur dans ActivityPub est similaire à une adresse e-mail. Par exemple, mon nom d'utilisateur Mastodon est @[email protected]. Cela signifie que mes informations utilisateur sont stockées sur le serveur dm.me sous le nom thebojda.


Une fois entré dans ActivityPub Explorer, il interrogera l'URL suivante selon le protocole WebFinger pour récupérer les données :


 https://me.dm/.well-known/webfinger?resource=acct:thebojda%40me.dm


La réponse est un objet JSON qui ressemble à ceci :


 { "subject":"acct:[email protected]", "aliases":[ "https://me.dm/@thebojda", "https://me.dm/users/thebojda" ], "links":[ { "rel":"http://webfinger.net/rel/profile-page", "type":"text/html", "href":"https://me.dm/@thebojda" }, { "rel":"self", "type":"application/activity+json", "href":"https://me.dm/users/thebojda" }, { "rel":"http://ostatus.org/schema/1.0/subscribe", "template":"https://me.dm/authorize_interaction?uri={uri}" } ] }


Il peut être déterminé à partir d'ici que les informations ActivityPub seront accessibles à l'URL https://me.dm/users/thebojda . Si nous entrons ceci dans l'explorateur ActivityPub, il renverra le JSON suivant :


 { "@context": [ "https://www.w3.org/ns/activitystreams", "https://w3id.org/security/v1", { "manuallyApprovesFollowers": "as:manuallyApprovesFollowers", "toot": "http://joinmastodon.org/ns#", "featured": { "@id": "toot:featured", "@type": "@id" }, "featuredTags": { "@id": "toot:featuredTags", "@type": "@id" }, "alsoKnownAs": { "@id": "as:alsoKnownAs", "@type": "@id" }, "movedTo": { "@id": "as:movedTo", "@type": "@id" }, "schema": "http://schema.org#", "PropertyValue": "schema:PropertyValue", "value": "schema:value", "discoverable": "toot:discoverable", "Device": "toot:Device", "Ed25519Signature": "toot:Ed25519Signature", "Ed25519Key": "toot:Ed25519Key", "Curve25519Key": "toot:Curve25519Key", "EncryptedMessage": "toot:EncryptedMessage", "publicKeyBase64": "toot:publicKeyBase64", "deviceId": "toot:deviceId", "claim": { "@type": "@id", "@id": "toot:claim" }, "fingerprintKey": { "@type": "@id", "@id": "toot:fingerprintKey" }, "identityKey": { "@type": "@id", "@id": "toot:identityKey" }, "devices": { "@type": "@id", "@id": "toot:devices" }, "messageFranking": "toot:messageFranking", "messageType": "toot:messageType", "cipherText": "toot:cipherText", "suspended": "toot:suspended", "focalPoint": { "@container": "@list", "@id": "toot:focalPoint" } } ], "id": "https://me.dm/users/thebojda", "type": "Person", "following": "https://me.dm/users/thebojda/following", "followers": "https://me.dm/users/thebojda/followers", "inbox": "https://me.dm/users/thebojda/inbox", "outbox": "https://me.dm/users/thebojda/outbox", "featured": "https://me.dm/users/thebojda/collections/featured", "featuredTags": "https://me.dm/users/thebojda/collections/tags", "preferredUsername": "thebojda", "name": "Laszlo Fazekas", "summary": "<p>Software developer, contributing writer</p>", "url": "https://me.dm/@thebojda", "manuallyApprovesFollowers": false, "discoverable": false, "published": "2023-03-02T00:00:00Z", "devices": "https://me.dm/users/thebojda/collections/devices", "publicKey": { "id": "https://me.dm/users/thebojda#main-key", "owner": "https://me.dm/users/thebojda", "publicKeyPem": "-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxlvpgcOxBikiXfm9snZt EB3Y2BSnBW3s8nd1d4Z1wCzaNfa/woB6RDQJoQYEISbMpkEyWhDzI4jRDafpn5/j YiyyGka9U2KZHv1to0Ej9uVwUcQOnsq9iUtJGhOWCP27blKGTLKFEHtPL2Y4hp4Z kYzlh1x0aAyw8YC7/nbS8WDAeZNS7R3ET7Syhp3LKiCMmL1aCLSoOQJ5DdxVikMJ rJ9bzlUjxzCsm1aNBB0i269t4fD1evBO8QDhEAOnAZ6wLEV74j9SCjYMvKRV8z5i PQbhbKntXjn1XhbkIkj1D+yGRYYfnm1XyWTuaM4mDllvuOyqJ8GQVFADLc6KCQYz 7QIDAQAB -----END PUBLIC KEY----- " }, "tag": [], "endpoints": { "sharedInbox": "https://me.dm/inbox" }, "icon": { "type": "Image", "mediaType": "image/jpeg", "url": "https://media.me.dm/accounts/avatars/109/955/144/019/799/820/original/fe8e930e0f1467ac.jpeg" } }


Ici, vous pouvez trouver toutes les informations spécifiques à l'utilisateur sur moi, mais le plus important, voici les URL des points de terminaison de la boîte de réception et de la boîte d'envoi, ainsi que la clé publique pour crypter les messages qui m'ont été envoyés. Lors de l'interrogation du contenu de la boîte d'envoi, le JSON suivant est renvoyé :


 { "@context": "https://www.w3.org/ns/activitystreams", "id": "https://me.dm/users/thebojda/outbox", "type": "OrderedCollection", "totalItems": 1, "first": "https://me.dm/users/thebojda/outbox?page=true", "last": "https://me.dm/users/thebojda/outbox?min_id=0&page=true" }


Comme les articles sont divisés en pages, nous pouvons voir ici les URL de la première et de la dernière page. En accédant à l'URL de la première page, nous pouvons visualiser mes entrées, dont il n'y en a actuellement qu'une.


 { "@context": [ "https://www.w3.org/ns/activitystreams", { "ostatus": "http://ostatus.org#", "atomUri": "ostatus:atomUri", "inReplyToAtomUri": "ostatus:inReplyToAtomUri", "conversation": "ostatus:conversation", "sensitive": "as:sensitive", "toot": "http://joinmastodon.org/ns#", "votersCount": "toot:votersCount" } ], "id": "https://me.dm/users/thebojda/outbox?page=true", "type": "OrderedCollectionPage", "prev": "https://me.dm/users/thebojda/outbox?min_id=109955178005562038&page=true", "partOf": "https://me.dm/users/thebojda/outbox", "orderedItems": [ { "id": "https://me.dm/users/thebojda/statuses/109955178005562038/activity", "type": "Create", "actor": "https://me.dm/users/thebojda", "published": "2023-03-02T18:47:47Z", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://me.dm/users/thebojda/followers" ], "object": { "id": "https://me.dm/users/thebojda/statuses/109955178005562038", "type": "Note", "summary": null, "inReplyTo": null, "published": "2023-03-02T18:47:47Z", "url": "https://me.dm/@thebojda/109955178005562038", "attributedTo": "https://me.dm/users/thebojda", "to": [ "https://www.w3.org/ns/activitystreams#Public" ], "cc": [ "https://me.dm/users/thebojda/followers" ], "sensitive": false, "atomUri": "https://me.dm/users/thebojda/statuses/109955178005562038", "inReplyToAtomUri": null, "conversation": "tag:me.dm,2023-03-02:objectId=1406005:objectType=Conversation", "content": "<p>My &quot;ars poetica&quot;: How to Change the World?! Pocket Guide for People With a Messiah Complex <a href=\"https://medium.com/geekculture/how-to-change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">medium.com/geekculture/how-to-</span><span class=\"invisible\">change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a</span></a></p>", "contentMap": { "en": "<p>My &quot;ars poetica&quot;: How to Change the World?! Pocket Guide for People With a Messiah Complex <a href=\"https://medium.com/geekculture/how-to-change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a\" target=\"_blank\" rel=\"nofollow noopener noreferrer\"><span class=\"invisible\">https://</span><span class=\"ellipsis\">medium.com/geekculture/how-to-</span><span class=\"invisible\">change-the-world-pocket-guide-for-people-with-a-messiah-complex-dd2d16bb92a</span></a></p>" }, "attachment": [], "tag": [], "replies": { "id": "https://me.dm/users/thebojda/statuses/109955178005562038/replies", "type": "Collection", "first": { "type": "CollectionPage", "next": "https://me.dm/users/thebojda/statuses/109955178005562038/replies?only_other_accounts=true&page=true", "partOf": "https://me.dm/users/thebojda/statuses/109955178005562038/replies", "items": [] } } } } ] }


Sur la base de ces exemples, il est facile de mettre en œuvre un client minimal capable de lire les publications publiques des autres ou de publier des publications publiques vers le monde extérieur. Je n'entrerai pas ici dans la structure exacte des fichiers JSON individuels et le fonctionnement de la boîte de réception.


Ceux-ci peuvent être trouvés dans la documentation ActivityPub .


Comme on peut le constater, ActivityPub est un standard relativement simple, facile à comprendre et à mettre en œuvre. Son seul point faible est qu'il utilise le protocole HTTP, qui nécessite un serveur central. Cela a donné naissance à des protocoles alternatifs comme Nostr, qui est le projet préféré de Jack Dorsey (le fondateur de Twitter).


Cependant, je pense que cela n’est pas nécessaire et que cela ne fait que provoquer une fragmentation encore plus grande des réseaux sociaux. Au lieu de cela, le protocole ActivityPub devrait être étendu avec la prise en charge des protocoles décentralisés déjà existants, ce qui permettrait au Fediverse d'évoluer vers une direction encore plus ouverte et décentralisée. Dans ce qui suit, je montrerai comment cela peut être réalisé.


Une solution parfaite pour décentraliser les données descriptives et les flux consiste à utiliser Swarm Feeds ou IPNS (j'ai un article complet sur ces protocoles). Dans le cas d’Ethereum Swarm, l’identifiant du flux est une adresse Swarm, tandis que dans le cas d’IPNS, il s’agit d’une clé publique.


En utilisant ceux-ci, un utilisateur ActivityPub ressemblerait à ceci : {adresse swarm}@swarm ou {adresse IPNS}@IPNS. La description de l'utilisateur peut être interrogée à partir d'ici.


Pour des raisons de compatibilité ascendante, des serveurs de passerelle pourraient également être utilisés, tels que {swarm address}@gateway.ethswarm.org, qui renverraient la description de l'utilisateur stockée sur Swarm via le protocole Webfinger, permettant aux systèmes existants (comme Mastodon) de lire ces données sans aucun problème. modifications.


La mise en œuvre de la boîte d'envoi se ferait également via des flux Swarm ou IPNS. Afin de maintenir la compatibilité ascendante, un champ "decentralized_outbox" devrait être introduit, où se trouverait une adresse de flux Swarm (bzz://...) ou IPNS (ipns://...).


Afin de maintenir la compatibilité ascendante, une adresse de passerelle supplémentaire pourrait être incluse dans le champ « boîte d'envoi » d'origine afin que les clients existants puissent lire ces flux sans aucune modification.


La mise en place d’une boîte de réception peut se faire de plusieurs manières. L'Ethereum Swarm dispose d'un système de messagerie appelé PSS , mais il existe également d'autres alternatives, comme Waku . Ici, l'adresse PSS ou Waku serait placée dans un champ "decentralized_inbox", tandis que le champ de la boîte de réception d'origine contiendrait une adresse de passerelle.


Avec ces quelques petites extensions, ActivityPub peut être rendu complètement décentralisé et "compatible web3", sans qu'il soit nécessaire d'introduire de nouveaux protocoles comme Nostr.


Selon le dépôt GitHub de Nostr, la nécessité du nouveau protocole et du nouveau système de relais est due à la censure potentielle des utilisateurs par les serveurs ActivityPub et à l'absence de système d'incitation. Cependant, ce problème est complètement résolu par l’extension ci-dessus.


IPNS et Swarm résistent à la censure, Swarm offrant également un anonymat complet. De plus, Swarm dispose de son propre système d'incitation, tandis que FileCoin est disponible pour IPNS.


Je crois que l'avenir appartient clairement à ActivityPub, et les développeurs devraient se concentrer sur l'avancement et l'évolution d'ActivityPub au lieu de créer de nouveaux protocoles, afin d'établir enfin un Fediverse complet et véritablement unifié.