COMPAX UND MATRIX
Ein Unterschied,
und was daraus folgt
Matrix ist der ausgereifte föderierte Messenger, und das meiste, was die beiden vergleicht, schreiben Leute, die keine der beiden Codebasen benutzt haben. Was folgt, wurde in beiden nachgelesen.
Gemessen am 27. August 2026. Synapse: 246.976 Zeilen Python — 71.349 allein in der Speicherschicht. Continuwuity, eine zweite Implementierung desselben Netzes, 95.220 Zeilen Rust. Dieser Server: 17.041 Zeilen. Beide Seiten bewegen sich, und die Hälfte des Folgenden handelt vom Heute und nicht vom Wesen der Sache; die Stellen, die vom Wesen der Sache handeln, sind markiert.
DIE WEGGABELUNG
Wer entscheidet,
was ein Raum ist
- Ein Raum ist ein DAG aus Ereignissen, jedes mit seiner eigenen Autorisierungskette.
- Wenn Server sich uneinig sind, entscheidet die Zustandsauflösung v2.
- Daher Zustandsgruppen, vordere und hintere Extremitäten, Outliers, Backfill — und 71.349 Zeilen allein in der Speicherschicht.
- Ein Commit wird lokal angenommen, auch wenn das Netz auseinanderfällt, und danach zusammengeführt.
- Der Server ist ein Zustelldienst. Eine Reihenfolge, gehalten vom Zuhause des Raums.
- Epoche vergleichen, unter derselben Sperre anhängen. Da ist nichts, was auseinanderlaufen könnte.
- Also kein DAG, keine Zustandsauflösung, kein Backfill.
- Und ein Commit braucht einen Weg nach Hause und zurück, und bekommt bei einem Rennen eine
409.
Der Tausch ist in beide Richtungen ehrlich, und MLS lässt darüber keine Wahl: einen Commit anzuwenden zerstört die Geheimnisse der vorigen Epoche. Es gibt nichts, wohin man zurückrollen könnte.
EINE BEHAUPTUNG, DIE MAN GENAU NEHMEN SOLLTE
„Deren Server liest deine Nachrichten“
ist in beide Richtungen falsch
In einem verschlüsselten Matrix-Raum ist der Rumpf einer Nachricht Geheimtext, und der Server liest ihn nicht — Megolm, genau wie hier MLS. Was stimmt, ist enger und für die meisten schlimmer.
- Verschlüsselung ist ein Schalter am Raum. Öffentliche Räume haben ihn meist nicht, und dort ist alles lesbar.
- Der Raumzustand ist nie verschlüsselt: Name, Thema, Avatar, Mitgliedschaft, Einladungen, power levels — Klartext auch in einem verschlüsselten Raum.
- Das ist kein Versehen. Der Server wendet die Autorisierungsregeln auf Ereignisse an, also muss er sie lesen können.
- Wer mit wem in einem Raum ist, wer wen eingeladen hat und wann — für deren Server immer sichtbar.
- Hier lebt das im MLS-Baum. Der Server sieht eine
group_idund eine Epoche. - Und eine Folge, die man leicht übersieht: serverseitige Suche in verschlüsselten Räumen funktioniert bei ihnen überhaupt nicht. Element sucht lokal — bei der Suche liegt das hier also hinter Element zurück, nicht hinter Matrix.
WORAUF JEDE SEITE IHRE MÜHE VERWENDET
Schwerpunkt
- Eine Netzteilung überstehen, weil der DAG danach zusammenläuft.
- Zwölf Raumversionen ausgeliefert und im laufenden Netz migriert.
- Skalierung im Feld bewiesen: Stream Writers, Instanzkarten, Redis-Replikation.
- Moderation in der Tiefe — Admin-API, Raum-ACLs, Medien-Quarantäne, ein MSC-Prozess.
- Fremdimplementierungen als Blackbox geprüft, von Complement.
- Wiederherstellung nach dem Verlust aller Geräte, über serverseitiges Schlüssel-Backup.
- Offen liegen eine
group_idund eine Epoche, und mehr braucht die Reihenfolge nicht. - Identität wird nicht vom Server ausgegeben: ein Wurzelschlüssel signiert eine Geräte-Attestierung, und jeder prüft sie lokal.
- Reihenfolge kostet eine Zeile — ein Compare-and-Set, gemessen mit 239 Anhängen pro Sekunde in einem Raum.
- Push trägt nichts. Ihres trägt eine
room_id, also erreicht der Raum den Push-Anbieter ohnehin. - Ein Anruf erbt seinen Raum: der Medienschlüssel kommt aus dem Epochengeheimnis, also nimmt das Entfernen eines Mitglieds es nebenbei auch aus den Medien heraus.
- Bots sind Blätter im Baum, kein Umweg über den Server — es gibt keine Stelle, an der für einen Bot Klartext liegt.
- Eine Beschwerde ist beweisbar: ein Nachrichtenbeweis zeigt die Urheberschaft. Megolm ist ein Gruppenschlüssel und beweist nichts.
- Geld, das die Gruppe gemeinsam hält — was bei Matrix überhaupt nicht vorkommt.
DIE FOLGEN
Was jedes Protokoll
nicht kann
Keine Punktetafel. Jede Zeile ist der Preis der Entscheidung darüber, und in beiden Spalten steht etwas, das die jeweilige Seite lieber nicht hätte.
Matrix
Compax
Nachrichtenrümpfe in einem verschlüsselten Raum
Geheimtext. Megolm — der Server liest sie nicht.
Geheimtext. MLS — dasselbe.
Ob Verschlüsselung an ist
Ein Schalter pro Raum, m.room.encryption. Öffentliche sind es meist nicht, und dort liest der Server alles.
Kein Schalter. Es gibt keinen unverschlüsselten Raum, in dem man sein könnte.
Raumzustand — Name, Thema, Mitgliedschaft, Einladungen, power levels
Klartext, immer, auch in einem verschlüsselten Raum. Kein Versehen: der Server wendet die Autorisierungsregeln an, also muss er sie lesen.
Im MLS-Baum. Der Server sieht group_id und die Epoche.
Wer mit wem in einem Raum ist
Für den Server sichtbar, immer.
Nicht sichtbar. Das, und nicht der Nachrichtentext, ist der wirkliche Unterschied.
Serverseitige Suche in einem verschlüsselten Raum
Funktioniert überhaupt nicht — das verschlüsselte Ereignis hat kein content.body zum Indizieren. Element sucht lokal.
Funktioniert auch nicht, und aus demselben Grund. Der Ausweg ist derselbe, den Element genommen hat: ein Index im Client.
Ein Commit, der während einer Netzteilung angenommen wird
Ja. Das Ereignis wird lokal angenommen und danach von der Zustandsauflösung zusammengeführt.
Unmöglich. Einen Commit anzuwenden zerstört die Geheimnisse der vorigen Epoche — zwei Commits in einer Epoche sind zwei unvereinbare Schlüsselzustände.
Verlauf nach dem Verlust aller Geräte
Serverseitiges Schlüssel-Backup unter einem Wiederherstellungsschlüssel — ebenfalls Ende zu Ende.
Weg. Eine Hülle, die die Phrase allein öffnen könnte, wäre ein dauerhafter Zugang, den niemand widerrufen kann; sie wurde mit Absicht abgelehnt.
Raumregeln, die der Server durchsetzt
Ja — power levels, und der Server weist ein Ereignis zurück, das sie bricht.
Nein. Die Richtlinie läuft im Schatten: sie zählt Abweichungen und weist nichts zurück, denn ein zurückgewiesener gültiger Commit verdirbt eine MLS-Gruppe nicht, er beendet sie.
Linkvorschauen, Moderation nach Inhalt, Push mit Text darin
Möglich, wo immer ein Raum nicht verschlüsselt ist.
Unmöglich. Das ist kein „noch nicht“ — das ist die Währung, mit der alles andere bezahlt wurde.
Geld, das die Gruppe hält
Nicht Teil des Protokolls.
Fünf Chains, der Schlüssel jedes Signierenden auf dem eigenen Gerät, und die Zahlung kommt als Nachricht an.
UND WO SIE SICH TREFFEN
Dasselbe, auf beiden Seiten
Postgres für das, was bleiben muss, und Redis für das, was schnell sein muss. Token-Buckets je Aktion. Verlauf auf einem zweiten Gerät — bei ihnen das Schlüssel-Backup, hier versiegelte Fenster und eine Übergabe per QR. Warteabstände beim erneuten Versuch an einem toten Peer. Viele Datensätze in einer Anfrage bündeln. Versionsankündigung über HTTP. Einen Anbieter blockieren. Entdoppelung beim Empfang. Anhänge außerhalb des Ereignisprotokolls. Prometheus und Alarmregeln. Und keine serverseitige Suche in einem verschlüsselten Raum, auf keiner der beiden Seiten.
WEITER
Die Fragen,
die zuerst kommen
Sechzehn davon, klar beantwortet — auch die zwei, bei denen die Antwort nicht die bequeme ist.