ActivityPub ist weder eine Kneipe, noch ein Gesellschaftsspiel, sondern ein Protokoll, das vom World Wide Web Consortium (W3C) verwaltet wird. Es ist ein dezentrales Protokoll für soziale Netzwerke, das auf dem Datenformat ActivityStreams basiert. Es bietet eine Client-Server-API für das Erstellen, Aktualisieren und Löschen von Inhalten sowie eine föderierte Server-Server-API für die Bereitstellung von Benachrichtigungen und Inhalten.
Durch das Protokoll wird zum einen sichergestellt, dass bei Diensten im Fediverse die Client-Anwendungen mit den Instanz-Servern kommunizieren können (zum Beispiel, wenn der Mastodon-Client Tusky mit seinem Mastodon-Server spricht). Ausserdem kommt ActivityPub zum Einsatz, wenn verschieden Dienste im Fediverse untereinander kommunizieren möchten (zum Beispiel, wenn ich bei Mastodon einem Profil bei Pixelfed folgen möchte).
Bei ActivitPub heissen die Benutzer Actors, wobei Benutzerkonten auf verschiedenen Servern auch verschiedenen Actors entsprechen. Hier ist ein Beispiel, wie ein Actor technisch dargestellt wird:
{"@context": "https://www.w3.org/ns/activitystreams",
"type": "Person",
"id": "https://social.example/alyssa/",
"name": "Alyssa P. Hacker",
"preferredUsername": "alyssa",
"summary": "Lisp enthusiast hailing from MIT",
"inbox": "https://social.example/alyssa/inbox/",
"outbox": "https://social.example/alyssa/outbox/",
"followers": "https://social.example/alyssa/followers/",
"following": "https://social.example/alyssa/following/",
"liked": "https://social.example/alyssa/liked/"}
Jeder Actor hat einen Posteingang und Postausgang. Das Senden und Empfangen von Nachrichten im Fediverse über das ActivityPub-Protokoll sieht sehr ähnlich aus, wie wir es von E-Mails kennen:
- Du kannst an den Posteingang einer anderen Person POSTEN, um ihr eine Nachricht zu senden (nur von Server zu Server / Föderation)
- Du kannst aus deinem Posteingang GET holen, um deine letzten Nachrichten zu lesen (Client-to-Server; das ist wie das Lesen eines Social Network Streams)
- Du kannst an deinen Postausgang POSTEN, um Nachrichten an die ganze Welt zu senden (Client-to-Server)
- Du kannst aus dem Postausgang einer anderen Person GETEN, um zu sehen, welche Nachrichten sie gepostet hat (oder zumindest die, für die du berechtigt bist). (Client-zu-Server und/oder Server-zu-Server)
Auf die Details des Sendens und Empfangens von Nachrichten gehe ich hier nicht näher ein. Falls euch die JSON-Dateien interessieren, die dabei hin und her gesendet werden, findet ihr hier illustrierte und gut beschriebene Beispiele.
ActivityPub verwendet ActivityStreams als Vokabular. Darin sind alle gängigen Objekte enthält, die man braucht, um alle Aktivitäten und Inhalte, die in einem sozialen Netzwerk fliessen, darzustellen. Falls etwas fehlt, können diese Objekte über JSON-LD erweitert werden. Das ist eine weitere W3C-Spezifikation für verknüpfte Daten.
Unter den Objekten findet man so ziemliche alles, was man sich im Social Media Kontext vorstellen kann. Ein Beispiel sind die Actors, die wir weiter oben schon gesehen haben. Dann gibt es Sammlungen (Collections): Outbox, Inbox, Followers, Following, Liked, Public Addressing und Shares. Diese Sammlungen enthalten Listen von Objekten, z.B. die Liste der Follower.
Zu den Objekten gehören auch die Activities. Das sind alle Handlungsanweisungen für die Interaktion im Fediverse. Hier ein paar selbsterklärende Beispiele: Accept, Add, Block, Create, Delete, Dislike, Follow, Ignore, Invite, Join, Leave, Like, Question, Reject, Read. Die Liste der Aktivitäten ist viel länger; ich habe nur die herausgesucht, unter denen man sich etwas vorstellen kann. Hier ist ein Beispiel für ein Question-Objekt:
{
"@context": "https://www.w3.org/ns/activitystreams",
"id": "http://polls.example.org/question/1",
"name": "A question about robots",
"type": "Question",
"content": "I'd like to build a robot to feed my cat. Which platform is best?",
"oneOf": [
{"name": "arduino"},
{"name": "raspberry pi"}
]
}
Auch bei den Aktoren gibt es unterschiedliche Ausprägungen, nämlich: Application, Group, Organization, Person und Service. Es sind nicht nur Personen, die im Fediverse teilnehmen möchten. Dann gibt es selbstverständlich auch inhaltsbezogene Objekte: Article, Audio, Document, Event, Image, Note, Page, Place, Profile, Relationship, Tombstone und Video. Wer sich nun fragt, was Place und Tombstone sein soll, hier sind zwei Beispiele:
{
"@context": "https://www.w3.org/ns/activitystreams",
"type": "Place",
"name": "Fresno Area",
"latitude": 36.75,
"longitude": 119.7667,
"radius": 15,
"units": "miles"
}
Und hier ist der Tombstone:
Ein Grabstein stellt ein Inhaltsobjekt dar, das gelöscht wurde. Er kann in Sammlungen verwendet werden, um anzuzeigen, dass an dieser Position früher ein Objekt vorhanden war, das jedoch gelöscht wurde.
Zum Schluss zeige ich noch ein Beispiel für Mentions und Tags. Der Post würde so aussehen:
"Thank you @sally for all your hard work! #givingthanks"
Im Note-Objekt stellt sich das folgendermassen dar:
{
"@context": "https://www.w3.org/ns/activitystreams",
"name": "A thank-you note",
"type": "Note",
"content": "Thank you <a href='http://sally.example.org'>@sally</a>
for all your hard work!
<a href='http://example.org/tags/givingthanks'>#givingthanks</a>",
"to": {
"name": "Sally",
"type": "Person",
"id": "http://sally.example.org"
},
"tag": {
"id": "http://example.org/tags/givingthanks",
"name": "#givingthanks"
}
}
Ok, genug von den technischen Details.
Fazit
ActivityPub ist das Rückgrat des Fediversums. Social Media Dienste, die dieses Protokoll implementieren, sind Bestandteil des Fediverse. Das Protokoll unterstützt sowohl die Dezentralisierung (es gibt z.B. mehr als eine Mastodon- oder Pixelfed-Instanz), als auch die Föderation (unterschiedliche Dienste können miteinander reden). Würden z. B. Facebook und Twitter ActivityPub, zumindest die Server-zu-Server-Schnittstelle, implementieren, könnte ein Twitter-Nutzer einen Tweet schreiben und ein Facebook-Nutzer ohne Twitter-Konto auf diesen Tweet innerhalb von Facebook antworten.
Zu dieser Erkenntnis passt auch eine News-Meldung von heute: Tumblr will das ActivityPub-Protokoll unterstützen!
Das muss man sich auf der Zunge zergehen lassen. Soweit mir bekannt ist, ist das der erste zentralistische und proprietäre Social Media Dienst, der erwägt, ActivityPub einzubinden. Vermutlich gibt es darüber in Zukunft noch viele Artikel zu schreiben.
Quelle: https://www.w3.org/TR/2018/REC-activitypub-20180123/
"Föderation (unterschiedliche Dienste können miteinander reden)"
Das ist doch nicht die Definition von Föderation. Föderation bedeutet Bündnis von Entitäten, nicht Daten- oder Kommunikationsverbindung. Warum diese Irritation des Lesers?