Matrix experimentiert mit P2P-Chat im Browser!
Dank Webassembly laufen Matrix-Server nun auch im Browser. Das Team nutzt das für erste Experimente mit einem P2P-Aufbau…
Mit den Browsern Firefox und Chrome können Interessierte eine erste Alpha-Version einer Peer-to-Peer-Variante des Matrix-Chatsystems nutzen, kündigt das Matrix-Team an. In einer gewissen Weise sei dies immer schon das Endziel von Matrix gewesen, heißt es in der Ankündigung. Das Projekt soll demnach immer allen „die volle Kontrolle über ihre Kommunikation ermöglichen, anstatt einem bestimmten Dienstanbieter verpflichtet zu sein“.
Der Vorteil einer Architektur nach dem Prinzip des Peer-to-Peer (P2P) besteht für Matrix darüber hinaus aber auch darin, notfalls auf das klassische Internet verzichten zu können und stattdessen auch in lokalen Netzen, Mesh-Netzwerken oder ähnlichem genutzt werden zu können.
Bisher nutzt Matrix das typische Client-Server-Modell, wobei die Server dank der Open-Source-Software selbst gehostet werden können. Darüber hinaus bietet Matrix eine Föderation zwischen diesen Servern und somit eine Dezentralisierung und Unabhängigkeit von nur einem einzigen Anbieter, wie dies sonst oft vor allem bei kommerziellen Chat-Anbietern der Fall ist.
Die Art und Weise, wie Matrix seine neue experimentelle P2P-Architektur umsetzt, ist dabei zumindest derzeit keine generelle Abkehr von der bisher genutzten Technik. So kommt hier weiter ein Matrix-Homeserver zum Einsatz, in diesem Fall die Software Dendrite, die dank Webassembly nun im Browser läuft. Hinzu kommen der Webclient Riot sowie einige weitere Anpassungen an die neue Web- und Browserumgebung. Für die eigentliche P2P-Kommunikation setzt das Matrix-Projekt auf Libp2p.
Derzeit bietet das Team in seiner P2P-Variante von Matrix nur einige wenige Basisfunktionen und weist darüber hinaus auch noch auf weitere Unzulänglichkeiten hin. (golem)
Die Matrix-Entwickler begründen und erklären ihren neuen P2P-Ansatz, wie folgt:
Bei der P2P-Matrix geht es um mehr als nur darum, den Benutzern die Möglichkeit zu geben, ihre eigenen Gespräche zu speichern: Sie kann auch Abhängigkeiten vom Internet selbst vermeiden, indem sie über lokale Netzwerke, Mesh-Netzwerke oder Situationen, in denen das Internet abgeschnitten ist, arbeitet. Noch interessanter ist, dass sich ohne Homeserver nirgendwo Metadaten darüber ansammeln können, wer wann mit wem spricht - was eine legitime Beschwerde über das heutige Matrix-Netzwerk ist, da die Homeserver aller Benutzer in einer bestimmten Konversation notwendigerweise die Metadaten dieser Konversation speichern müssen. Mit P2P können wir auch die Anmeldung für neue Benutzer radikal vereinfachen, wenn sie keinen Server auswählen müssen, um loszulegen - und wir vermeiden die unbeabsichtigte Zentralisierung von Benutzern, die sich auf öffentlichen Servern stapeln.
P2P zwingt uns auch dazu, viele der schwierigsten verbleibenden Probleme in Matrix zu lösen: z.B. Multi-homed-Konten, da P2P mit mehreren Geräten erfordert, dass Ihr Konto an mehreren Orten existiert. Dies wiederum ermöglicht Hochverfügbarkeit und Geo-Redundanz für Konten im heutigen Matrix-Netzwerk (stellen Sie sich vor, einen primären und einen Backup-Homeserver zu haben, der auf magische Weise das Richtige getan hat!), sowie die Portabilität von Konten und damit auch Vhosting- und Lastausgleichskonten zwischen Servern und sogar eine verbesserte GDPR-Konformität (denn wenn Ihre Benutzer-IDs vergänglich sind, sind sie nicht länger persönlich identifizierende Informationen, die in Ihre Matrix-Räume gebacken wurden). Wir brauchen auch bessere Sicherheitsmechanismen, um zu verhindern, dass Leute die anonyme Natur des Netzwerks für Missbrauch ausnutzen, und um die Arbeit zu beschleunigen, die wir bereits für das heutige Matrix-Netzwerk leisten.
Die Art und Weise, wie wir P2P angegangen sind, ist der „ungeschickte, aber geniale“ Ansatz, Homeserver zu nehmen und sie auf dem Client neben oder innerhalb Ihres Matrix-Clients laufen zu lassen - was bedeutet, dass buchstäblich keine Änderungen erforderlich sind, damit jeder Matrix-Client mit P2P-Matrix sprechen kann, und so kann P2P-Matrix sofort von all der Arbeit profitieren, die in Riot und andere Anwendungen geflossen ist. Infolgedessen ist P2P auch ein großer Motivator für die Entwicklung viel kleinerer Homeserver, die effizient clientseitig laufen können (z.B. Dendrite!) - was natürlich eine großartige Nachricht für Matrix als Ganzes ist. Es zwingt uns auch dazu, besser skalierbare Routing-Algorithmen zu entwickeln (da Sie nicht wollen, dass Ihr Client jedes Mal, wenn er eine Nachricht sendet, mit jedem anderen Gerät in einem Raum sprechen muss!) und spornt auch die Entwicklung von Matrix-Transporten mit geringer Bandbreite an (da Sie nicht wollen, dass das zusätzliche Geplapper, das durch Gespräche mit mehreren Peers entsteht, Ihre gesamte Bandbreite verbraucht). Schliesslich zwingt es uns, die Föderation wirklich robust zu machen, da ständig Knoten auftauchen und wieder verschwinden, was die Föderation zu einem viel grösseren Stresstest macht, als wir es bei den heutigen relativ statischen Homeservern sehen.
P2P hat also in den letzten Monaten als Treibstoff für einen Großteil unserer längerfristigen Matrix-Arbeit gedient. Bisher gab es drei Hauptexperimente: Auf der FOSDEM haben wir gezeigt, wie wir unseren Dendrite-Homeserver der nächsten Generation laufen lassen, der clientseitig läuft und HTTP über libp2p als Transport benutzt. Wir stellten auch das Projekt von Timothée Floure an der EPFL vor, der mit Synapse experimentierte und P2P CoAP über yggdrasil als Transport über einen Proxy verwendete.
In jüngster Zeit haben wir jedoch mit der Kompilierung von Dendrite bis hinunter zum Web Assembly experimentiert und es eingebettet in Riot Web als Service Worker ausgeführt, wobei HTTP über den Websocket-Transport der libp2p (koordiniert über einen Websocket-Rendezvous-Server) verwendet wurde. Architektonisch sieht es wie folgt aus:
Heute liefern wir eine wichtige neue Alpha-Version (v0.1.1) dieser P2P-Demo unter https://p2p.riot.im (erfordert Desktop-Chrome oder Firefox im nicht-privaten Browsing-Modus) - die hoffentlich einen wirklich brauchbaren und konkreten Vorgeschmack auf die Form der kommenden Dinge geben sollte.
Die Hauptmerkmale sind:
Ihre Konversationen werden nun in Ihrem Browser-Speicher (über IndexedDB) persistiert, was bedeutet, dass solange nicht alle an einer bestimmten Konversation teilnehmenden Browser ihren lokalen Speicher löschen, Räume im P2P-Netzwerk bleiben!
Ihr Raumverzeichnis listet alle Aliase für alle Räume auf, die von aktiven Knoten im Netzwerk veröffentlicht werden. Außerdem veröffentlichen wir jetzt automatisch einen lokalen Raum-Alias, wenn Sie einen öffentlichen Raum betreten, so dass andere über Sie diesen Raum entdecken können, auch wenn der Server, der den Alias ursprünglich erstellt hat, verschwunden ist.
Viele, viele Verbesserungen bei der Föderation zwischen den Knoten - wenn beispielsweise ein Knoten online geht, sollten andere nun automatisch erkennen und einen Scrollback zu ihm senden. Einladungen sollten funktionieren, und es sollte keine unerwartet geschwärzten Nachrichten mehr geben.
Unnötig zu sagen, dass der gesamte Code hierfür Open Source unter der Apache-Lizenz ist, und wenn Sie sich besonders abenteuerlustig fühlen, können Sie Ihren eigenen P2P-Dendriten in Riot Web einbetten, indem Sie das Dockerfile auf
https://github.com/matrix-org/dendrite/blob/master/build/docker/DendriteJS
verwenden oder den Anweisungen auf
https://github.com/matrix-org/dendrite/blob/master/docs/p2p.md
folgen!
IMHO:
Endlich mal ein neuer Ansatz, der über eine Peer-To-Peer Umgebung versucht, das Thema Chatting komfortabler, aber auch sicherer zu machen! Natürlich gab es in der Vergangenheit schon Chat-Systeme, welche ebenfalls eine P2P-Umgebung zu Grunde gelegt haben. Genannt seien da z.B.
Tox, Jami, Fire-Chat, Bleep und Orbit etc. pp.
Allerdings sind die meisten Progs entweder in der Versenkung komplett verschwunden, oder sie fristen ihr Dasein als Nischenprodukt bei der Kommunikation in Firmen-Netzwerken…
Matrix hingegen hätte auch das Zeug dazu, in der Öffentlichkeit wahrgenommen zu werden!