Hier ein Bild von meinem Sauerteigbrot:

Bild eines Brotes mit unscharfen Hintergrund .

Inhalte:

  • Roggensauerteig
  • 300g Emmervollkornmehl
  • 400g Weizenmehl 550
  • 20g Salz

Ich habe heute auf der FrOSCon einen Vortrag wie man mittels matrix-docker-ansible-deploy einen Matrix-Server aufsetzt.

Das Video werde ich hier auch mal noch verlinken, wenn es denn da ist.

Der Server unter froscon.datenknoten.me war innerhalb von 30 Minuten schnell aufgesetzt. Aber an der Föderation hat es dann gehapert. Das Problem war, das Matrix zur Förderation eine spezielle Datei /.well-known/matrix/server abfragt, aber unter der Domain nichts ausgeliefert wurde. Schlimmer noch, es wurde ein Zertifikat für matrix.froscon.datenknoten.me präsentiert, das dann zu Zertifikatsfehlern geführt hat. Des Rätsels Lösung war dann, das man dem Playbook sagen muss das es auch die Wurzeldomain froscon.datenknoten.me bespielen soll. Das kann man über die Variable matrix_nginx_proxy_base_domain_serving_enabled steuern. Wenn man diese auf true setzt, funktioniert die Föderation. Blöd nur das die ganzen anderen Server relativ stark cachen und das Problem dann noch einige Stunden weiter besteht.

So in der Retrospektive wäre es sinniger gewesen, den Vorgang von Anfang bis Ende im vorhinein mal durchzuspielen. Ich hätte aber auch die Dokumentation ordentlicher lesen könen, das hätte mich auch davor gerettet. Auf der Dokumentations-Seite zur Installation steht ja explizit:

Now that services are running, you need to finalize the installation process (required for federation to work!) by Configuring Service Discovery via .well-known (Hervorhebung von mir)

Hier ein paar nette Sachen aus meiner .zshrc mit Kommentaren.

bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end
autoload -U history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end

Das erlaubt mir meine Shell-Historie relativ einfach zu durchsuchen. Ich weis z.B. das ich irgendwas mit ip addr machen will und das es ein Befehl ist, den ich in der Vergangenheit schonmal ausgeführt hab. Dann tippe ich ip ad und drücke dann C-p und es kommt bei der Verfollständigung ip addr show dev eth0 | grep 'inet ' raus.

alias -g G=' | grep'
alias -g L=' | bat'
alias -g H=' | head'
alias -g T=' | tail'

Diese Aliase erlauben mir die gängigen Pipe-Befehle vereinfacht zu schreiben. So wird aus ip addr show dev eth0 | grep 'inet ' dann ip addr show dev eth0 G 'inet ' was ein erhöhter Schreibkomfort ist. bat ist übrigens ein ganz netter Ersatz für less.

Scuttlebutt“ ist ein dezentrales und autonomes soziales Netzwerk. Dieses möchte ich hier vorstellen. Dafür werde ich zuerst ein paar Begriffe erklären, darauffolgend das Protokoll vorstellen und zum Schluss einige Anwendungen zeigen, die es gibt.

Begriffe

„soziales Netzwerk“ — „dezentral“ — „autonom“ — „Scuttlebut“

Ein soziales Netzwerk kann als eine Assoziation von Menschen verstanden werden, die auf verschiedene Arten miteinander kommunizieren. Es ist wichtig anzumerken, dass in einem sozialen Netzwerk die Menschen im Fokus stehen und weniger die Kommunikationsweise selbst.

Dezentral heißt hier, dass es keine zentrale Autorität gibt, die bestimmt, welche Inhalte für das Netzwerk relevant sind.

Autonom bedeutet, dass die Software auch ohne Internet funktioniert, da die Benutzer direkt miteinander kommunizieren können, zum Beispiel über Freifunk, Bluetooth oder ein lokales Netzwerk.

Der Begriff „Scuttlebutt“ kommt aus der englischen Seemannssprache. Ein „Scuttlebutt“ ist eine Tonne mit Trinkwasser, an der sich Seeleute bedient haben. Da diese Tonne ein Treffpunkt für die Seeleute war, wurden dort auch Informationen ausgetauscht. Das soziale Netzwerk „Scuttlebutt“ ist im übertragenen Sinn die Wassertonne, an welcher sich die Menschen treffen und ihre Neuigkeiten austauschen.

Protokoll

In erster Linie ist „Scuttlebutt“ ein Protokoll. Ein Protokoll ist ein definierter Satz von Regeln, die die Kommunikation zwischen zwei Maschinen festlegt.

Dieses basiert auf dem „Gossip Protocol“. Eine vereinfachte Erläuterung geht so: In einem fiktiven Büro trifft Anja einen ihrer Freunde Felix in der Küche und tratscht darüber, dass Tim sehr verwildert aussieht, weil er seit Tagen seinen Bart nicht gepflegt hat. Etwas später trifft Felix seine Freundinnen Wilma und Isa in der Küche und tratscht weiter, dass Tim seinen Bart nicht pflegt. So haben Wilma und Isa die Information erhalten, obwohl sie nicht direkt mit Anja geredet haben. Bei „Scuttlebutt“ läuft das ähnlich, nur wird mit „Kryptographie“ sichergestellt, dass die Informationen von Anja auch wirklich von ihr stammen und vollständig sind. Da die Rechner der meisten Personen im Internet nicht von anderen Rechnern erreichbar sind, können die Rechner nicht direkt miteinander kommunizieren, sondern brauchen einen Mittelsmann. Im „Scuttlebutt“-Universum nennt man diesen gemeinsamen Treffpunkt den „Pub“, englisch für Kneipe. Die Kneipen werden von Individuen getragen, so betreibe ich auch eine Kneipe unter pub.datenknoten.

Meistens werden Protokolle in Bibliotheken programmiert, damit Anwendungen diese Bibliotheken benutzen können und jedes Programm das komplette Protokoll implementieren muss. Implementierungen des Protokolls sind die Bibliotheken scuttlebot für JavaScript-Projekte oder auch ssb-client-rs für Rust.

Soziales Netzwerk

Ich habe bisher ja eher den technischen Bereich beschrieben, wieso soll das ganze jetzt ein soziales Netzwerk sein? Im Kern von Scuttlebutt kann man Nachrichten und Dateien austauschen. Es gibt jetzt Programme wie Patchwork oder auch Patchbay die bestimmte Nachrichten-Typen verarbeiten. Der aktuelle Konsens sind folgende Typen:

  • post
  • about
  • contact
  • vote

post ist ein Artikel, der aus Markdown besteht und in dem man auch andere Nachrichten oder Dateien verlinken kann. Eine post-Nachricht kann auch ein Kommentar auf einen anderen Artikel sein.

Der about Nachrichten-Typ erlaubt es hier, sich selbst zu beschreiben. Man kann hier einen Namen, ein Bild oder einen Beschreibungstext hinterlegen.

Mit contact deutet ein Mensch an, ob er einem anderen Konto folgt oder blockiert.

Zum Schluss gibt es noch vote. Mit diesem Nachrichten-Typ kann man andere Nachrichten beurteilen. Der Wert +1 ist um Zustimmung zu einem zu bekunden. Mit dem Wert 0 kann man ein vorher gemachte +1 Abstimmung rückgängig machen. Der Wert -1 wird momentan nicht genutzt, es ist geplant damit Nachrichten zu markieren, z.B. das es sich um Spam oder unsachgemäße Kommunikation handelt.

Ein Programm kann seinen eigenen Nachrichten-Typ implementieren, dieser wird auch durch das Protokoll an andere Benutzer weitergereicht. Wenn das Programm des Benutzers damit nichts anfangen kann, dann wird die Nachricht nicht angezeigt.

Fazit

Insgesamt finde ich “Scuttlebutt” als Medium zur medialen Vernetzung sehr interessant, weil die Grundidee dem realweltlichen Sozialverhalten anlehnt. Auch auf der technischen Entwicklungsebene beobachte ich Veränderungen und bin sehr gespannt, was die nächste Zeit so bringen wird.

Viel Spaß mit „Scuttlebut“!