paint-brush
Eine kurze Einführung in ActivityPub: Die Zukunft sozialer Netzwerkevon@thebojda
7,901 Lesungen
7,901 Lesungen

Eine kurze Einführung in ActivityPub: Die Zukunft sozialer Netzwerke

von Laszlo Fazekas10m2023/10/07
Read on Terminal Reader

Zu lang; Lesen

ActivityPub ist ein offenes, verteiltes soziales Netzwerkprotokoll, das vom World Wide Web standardisiert wird. Seine einzige Schwäche besteht darin, dass es das HTTP-Protokoll verwendet, das einen zentralen Server erfordert. Das ActivityPub-Protokoll sollte um die Unterstützung bereits bestehender dezentraler Protokolle erweitert werden, was es dem Fediverse ermöglichen würde, sich in eine noch offenere und dezentralere Richtung zu entwickeln.
featured image - Eine kurze Einführung in ActivityPub: Die Zukunft sozialer Netzwerke
Laszlo Fazekas HackerNoon profile picture

ActivityPub ist ein offenes, verteiltes soziales Netzwerkprotokoll, das vom World Wide Web Consortium standardisiert wurde. Die erste Version wurde 2018 veröffentlicht und ist daher nicht neu. Es wird von mehreren sozialen Netzwerken verwendet, darunter Mastodon , das kürzlich einen deutlichen Anstieg der Popularität erlebte, als Elon Musk Twitter kaufte und Änderungen vornahm, die vielen nicht gefielen.


Darüber hinaus haben auch Tumblr und Facebooks Alternative zu Twitter, Threads, signalisiert, dass sie das Protokoll in Zukunft unterstützen werden. Obwohl es sich nicht um ein neues Protokoll handelt, erfreut sich ActivityPub zunehmender Beliebtheit.


Da die Europäische Union und die Vereinigten Staaten seit langem über das Marktmonopol großer sozialer Netzwerke besorgt sind, kann ich mir vorstellen, dass in Zukunft auf Druck der Regierung auch die bestehenden größten sozialen Netzwerke wie Facebook und Twitter das Protokoll unterstützen und werden Teil des Fediverse . (Das Fediverse ist ein Universum sozialer Netzwerke, das aus Anbietern besteht, die ActivityPub unterstützen.)


Ich glaube, dass wir uns in Zukunft nicht für Twitter oder Facebook entscheiden werden, weil diese geschlossen werden und wir keine andere Wahl haben werden.


Die Stärke jeder Plattform liegt darin, wer über eine bessere künstliche Intelligenz verfügt, um die eingehenden riesigen Datenmengen zu filtern, die wichtigsten Informationen für die Benutzer zu sichten, auszuwählen und zusammenzufassen.


Dazu muss man natürlich den Benutzer sehr gut kennen, was auch im Interesse des Benutzers liegt. Im Gegenzug kann künstliche Intelligenz viel relevantere Werbung liefern.


In einem offenen, zugänglichen System wird die Konkurrenz nicht mehr zwischen sozialen Netzwerken, sondern zwischen auf künstlicher Intelligenz basierenden Algorithmen bestehen.


Sehen wir uns an, wie ActivityPub funktioniert. Die grundlegende Funktionalität wird durch dieses sehr einfache Diagramm gut zusammengefasst.

ActivityPub erklärt


Quelle: https://activitypub.rocks/



Das Protokoll besteht aus zwei Hauptkomponenten: dem Posteingang und dem Postausgang. Dies sind zwei API-Endpunkte, auf die über das HTTP-Protokoll zugegriffen werden kann. Wenn ein Benutzer etwas mit der Außenwelt kommunizieren möchte (z. B. Inhalte veröffentlichen), sendet er diese an den Postausgang. Hier fügt das System es einer entsprechenden Liste hinzu, auf die Follower durch Lesen des Postausgangs zugreifen können.


Wenn jemand von außen dem Benutzer etwas senden möchte (z. B. einen nicht öffentlichen Beitrag, der nur für bestimmte Benutzer sichtbar ist), sendet er ihn verschlüsselt an den Posteingang. Der Posteingang ist wie ein E-Mail-Posteingang, in dem eingehende Inhalte gesammelt werden und auf den der Benutzer zugreifen kann.


Mithilfe des WebFinger-Protokolls kann der Standort des Posteingangs und des Postausgangs abgerufen werden. Dies kann auch mit Hilfe des ActivityPub Explorers getestet werden, einem super Tool zum Experimentieren und Verstehen des Protokolls.


Ein Benutzername in ActivityPub ähnelt einer E-Mail-Adresse. Mein Mastodon-Benutzername ist beispielsweise @[email protected]. Das bedeutet, dass meine Benutzerinformationen unter dem Namen thebojda auf dem dm.me-Server gespeichert werden.


Bei der Eingabe in den ActivityPub Explorer wird die folgende URL gemäß dem WebFinger-Protokoll abgefragt, um die Daten abzurufen:


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


Die Antwort ist ein JSON-Objekt, das so aussieht:


 { "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}" } ] }


Hier kann bestimmt werden, dass die ActivityPub-Informationen unter der URL https://me.dm/users/thebojda zugänglich sind. Wenn wir dies in den ActivityPub Explorer eingeben, wird der folgende JSON zurückgegeben:


 { "@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" } }


Hier finden Sie alle benutzerspezifischen Informationen über mich, aber am wichtigsten sind hier die URLs der Inbox- und Outbox-Endpunkte sowie der öffentliche Schlüssel zum Verschlüsseln der an mich gesendeten Nachrichten. Bei der Abfrage des Inhalts des Postausgangs wird folgender JSON zurückgegeben:


 { "@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" }


Da die Beiträge in Seiten unterteilt sind, können wir hier die URLs der ersten und letzten Seite sehen. Durch den Zugriff auf die URL der ersten Seite können wir meine Einträge einsehen, von denen es derzeit nur einen gibt.


 { "@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": [] } } } } ] }


Basierend auf diesen Beispielen ist es einfach, einen Minimal-Client zu implementieren, der die öffentlichen Beiträge anderer lesen oder öffentliche Beiträge nach außen veröffentlichen kann. Auf den genauen Aufbau der einzelnen JSON-Dateien und die Funktionsweise des Posteingangs gehe ich hier nicht ein.


Diese finden Sie in der ActivityPub-Dokumentation .


Wie man sieht, handelt es sich bei ActivityPub um einen relativ einfachen Standard, der leicht zu verstehen und zu implementieren ist. Seine einzige Schwäche besteht darin, dass es das HTTP-Protokoll verwendet, das einen zentralen Server erfordert. Daraus entstanden alternative Protokolle wie Nostr, das Lieblingsprojekt von Jack Dorsey (dem Gründer von Twitter).


Ich glaube jedoch, dass dies nicht nötig ist und nur zu einer weiteren Fragmentierung der sozialen Netzwerke führt. Stattdessen sollte das ActivityPub-Protokoll um die Unterstützung bereits bestehender dezentraler Protokolle erweitert werden, was es dem Fediverse ermöglichen würde, sich in eine noch offenere und dezentralere Richtung zu entwickeln. Im Folgenden werde ich zeigen, wie dies erreicht werden kann.


Eine perfekte Lösung für die Dezentralisierung beschreibender Daten und Feeds ist die Verwendung von Swarm Feeds oder IPNS (ich habe einen vollständigen Artikel über diese Protokolle). Im Fall von Ethereum Swarm ist die Feed-ID eine Swarm-Adresse, während es sich im Fall von IPNS um einen öffentlichen Schlüssel handelt.


Mit diesen würde ein ActivityPub-Benutzer so aussehen: {Swarm-Adresse}@swarm oder {IPNS-Adresse}@IPNS. Die Benutzerbeschreibung kann hier abgefragt werden.


Aus Gründen der Abwärtskompatibilität könnten auch Gateway-Server wie {swarm-Adresse}@gateway.ethswarm.org verwendet werden, die die auf Swarm gespeicherte Benutzerbeschreibung über das Webfinger-Protokoll zurückgeben würden, sodass bestehende Systeme (wie Mastodon) diese Daten ohne diese lesen könnten Modifikationen.


Die Implementierung des Postausgangs würde ebenfalls über Swarm- oder IPNS-Feeds erfolgen. Um die Abwärtskompatibilität aufrechtzuerhalten, müsste ein „decentralized_outbox“-Feld eingeführt werden, in dem sich ein Swarm-Feed (bzz://...) oder eine IPNS-Adresse (ipns://...) befinden würde.


Um die Abwärtskompatibilität aufrechtzuerhalten, könnte eine zusätzliche Gateway-Adresse in das ursprüngliche Feld „Postausgang“ eingefügt werden, damit bestehende Clients diese Feeds ohne Änderungen lesen können.


Die Implementierung eines Posteingangs kann auf verschiedene Arten erfolgen. Der Ethereum Swarm verfügt über ein Nachrichtensystem namens PSS , es gibt aber auch andere Alternativen, wie zum Beispiel Waku . Hier würde die PSS- oder Waku-Adresse in einem „decentralized_inbox“-Feld platziert, während das ursprüngliche Posteingangsfeld eine Gateway-Adresse enthalten würde.


Mit diesen wenigen kleinen Erweiterungen kann ActivityPub vollständig dezentralisiert und „web3-kompatibel“ gemacht werden, ohne dass neue Protokolle wie Nostr eingeführt werden müssen.


Laut dem GitHub-Repo von Nostr ist die Notwendigkeit des neuen Protokolls und Relay-Systems auf die mögliche Zensur von Benutzern durch ActivityPub-Server und das Fehlen eines Anreizsystems zurückzuführen. Dieses Problem wird jedoch durch die obige Erweiterung vollständig gelöst.


Sowohl IPNS als auch Swarm sind zensurresistent, wobei Swarm auch vollständige Anonymität bietet. Darüber hinaus verfügt Swarm über ein eigenes Anreizsystem, während FileCoin für IPNS verfügbar ist.


Ich glaube, dass die Zukunft eindeutig ActivityPub gehört, und Entwickler sollten sich auf die Weiterentwicklung und Weiterentwicklung von ActivityPub konzentrieren, anstatt neue Protokolle zu erstellen, um endlich ein umfassendes und wirklich einheitliches Fediverse zu etablieren.