COMPAX

COMPAX EN MATRIX

Eén verschil,
en wat eruit volgt

Matrix is de volwassen gefedereerde messenger, en het meeste wat er ter vergelijking wordt geschreven, is geschreven door mensen die geen van beide codebases hebben gebruikt. Wat hieronder staat is in allebei nagelezen.

Gemeten op 27 augustus 2026. Synapse: 246.976 regels Python — 71.349 alleen al in de opslag. Continuwuity, een tweede implementatie van hetzelfde netwerk, 95.220 regels Rust. Deze server: 17.041 regels. Beide kanten bewegen, en de helft van wat hieronder staat gaat over vandaag en niet over de aard van de zaak; de delen die over de aard van de zaak gaan zijn gemarkeerd.

DE SPLITSING

Wie bepaalt
wat een kamer is

Matrix — de server
  • Een kamer is een DAG van gebeurtenissen, elk met een eigen autorisatieketen.
  • Als servers het oneens zijn, beslecht state resolution v2 het.
  • Vandaar de state groups, voorwaartse en achterwaartse extremiteiten, outliers, backfill — en 71.349 regels alleen al in de opslaglaag.
  • Een commit wordt lokaal aangenomen, zelfs als het netwerk uiteenvalt, en daarna samengevoegd.
Compax — de MLS-boom
  • De server is een bezorgdienst. Eén volgorde, gehouden door het thuis van de kamer.
  • Vergelijk het tijdvak, voeg toe onder hetzelfde slot. Er is niets wat uiteen kan lopen.
  • Dus geen DAG, geen state resolution, geen backfill.
  • En een commit heeft een heen-en-weer naar huis nodig, en krijgt bij een race een 409.

De ruil is naar beide kanten eerlijk, en MLS laat er geen keus in: een commit toepassen vernietigt de geheimen van het vorige tijdvak. Er is niets om naar terug te rollen.

EEN BEWERING DIE JE PRECIES MOET STELLEN

“Hun server leest je berichten”
is naar beide kanten onjuist

In een versleutelde Matrix-kamer is de inhoud van een bericht cijfertekst en de server leest die niet — Megolm, precies zoals MLS dat hier is. Wat wél waar is, is smaller en voor de meeste mensen erger.

Wat er werkelijk open ligt
  • Versleuteling is een schakelaar op de kamer. Openbare kamers hebben hem meestal niet, en daar is alles leesbaar.
  • De kamerstatus is nooit versleuteld: naam, onderwerp, avatar, lidmaatschap, uitnodigingen, power levels — leesbaar zelfs in een versleutelde kamer.
  • Dat is geen vergissing. De server past de autorisatieregels toe op gebeurtenissen, dus moet hij ze kunnen lezen.
Dus het echte verschil is de graaf
  • Wie met wie in een kamer zit, wie wie heeft uitgenodigd, en wanneer — voor hun server altijd zichtbaar.
  • Hier leeft dat in de MLS-boom. De server ziet een group_id en een tijdvak.
  • En een gevolg dat je makkelijk mist: zoeken op de server in versleutelde kamers werkt bij hen helemaal niet. Element zoekt lokaal — dus op zoeken loopt dit achter op Element, niet op Matrix.

WAAR ELK ZIJN MOEITE IN STEEKT

Waar de moeite heen gaat

Matrix — bereik en bedrijfsvoering
  • Een netwerksplitsing overleven, omdat de DAG daarna samenvoegt.
  • Twaalf kamerversies uitgebracht en gemigreerd op een draaiend netwerk.
  • Schaal in het veld bewezen: stream writers, instance maps, Redis-replicatie.
  • Moderatie in de diepte — admin-API, kamer-ACL’s, mediaquarantaine, een MSC-proces.
  • Implementaties van derden als zwarte doos getoetst door Complement.
  • Herstel na het verlies van elk apparaat, via sleutelback-up op de server.
Compax — wat de server niet kan
  • In de open lucht liggen een group_id en een tijdvak, en meer heeft de volgorde niet nodig.
  • Identiteit wordt niet door de server uitgegeven: een hoofdsleutel ondertekent een apparaatattest en iedereen controleert het lokaal.
  • Volgorde kost één rij — een compare-and-set, gemeten op 239 toevoegingen per seconde in een kamer.
  • Push draagt niets. De hunne draagt een room_id, dus de kamer bereikt de pushaanbieder toch.
  • Een gesprek erft zijn kamer: de mediasleutel komt uit het tijdvakgeheim, dus iemand verwijderen haalt hem er als bijeffect ook uit de media uit.
  • Bots zijn bladeren in de boom, geen omweg via de server — er is geen plek waar leesbare tekst voor een bot blijft liggen.
  • Een klacht is aantoonbaar: een berichtbewijs toont het auteurschap. Megolm is een groepssleutel en bewijst niets.
  • Geld dat de groep samen houdt, wat in Matrix helemaal niet voorkomt.

DE GEVOLGEN

Wat elk protocol
niet kan

Geen scorebord. Elke regel is de prijs van de keuze erboven, en in beide kolommen staan dingen die de betreffende kant liever niet had.

Matrix

Compax

Berichtinhoud in een versleutelde kamer

Cijfertekst. Megolm — de server leest die niet.

Cijfertekst. MLS — hetzelfde.

Of versleuteling aan staat

Een schakelaar per kamer, m.room.encryption. Openbare kamers zijn het meestal niet, en daar leest de server alles.

Geen schakelaar. Er is geen onversleutelde kamer om in te zitten.

Kamerstatus — naam, onderwerp, lidmaatschap, uitnodigingen, power levels

Leesbaar, altijd, zelfs in een versleutelde kamer. Geen vergissing: de server past de autorisatieregels toe, dus moet hij ze lezen.

In de MLS-boom. De server ziet group_id en het tijdvak.

Wie met wie in een kamer zit

Voor de server zichtbaar, altijd.

Niet zichtbaar. Dit, en niet de berichttekst, is het echte verschil.

Zoeken op de server in een versleutelde kamer

Werkt helemaal niet — de versleutelde gebeurtenis heeft geen content.body om te indexeren. Element zoekt lokaal.

Werkt ook niet, en om dezelfde reden. De uitweg is dezelfde die Element nam: een index in de client.

Een commit die tijdens een netwerksplitsing wordt aangenomen

Ja. De gebeurtenis wordt lokaal aangenomen en daarna door state resolution samengevoegd.

Onmogelijk. Een commit toepassen vernietigt de geheimen van het vorige tijdvak — twee commits in één tijdvak zijn twee onverenigbare sleuteltoestanden.

Geschiedenis na het verlies van elk apparaat

Sleutelback-up op de server onder een herstelsleutel — ook end-to-end.

Weg. Een omhulsel dat de zin alleen kon openen, zou permanente toegang zijn die niemand kon intrekken; dat is met opzet geweigerd.

Kamerregels die de server afdwingt

Ja — power levels, en de server weigert een gebeurtenis die ze breekt.

Nee. Het beleid draait in de schaduw: het telt afwijkingen en weigert niets, want een geweigerde geldige commit bederft een MLS-groep niet, hij beëindigt hem.

Linkvoorbeelden, moderatie op inhoud, push met tekst erin

Mogelijk overal waar een kamer niet versleuteld is.

Onmogelijk. Dit is geen “nog niet” — dit is waarmee al het andere is betaald.

Geld dat de groep houdt

Geen onderdeel van het protocol.

Vijf ketens, de sleutel van elke ondertekenaar op het eigen apparaat, en de betaling die als bericht binnenkomt.

EN WAAR ZE ELKAAR TREFFEN

Hetzelfde, aan beide kanten

Postgres voor wat moet blijven en Redis voor wat snel moet zijn. Token buckets per handeling. Geschiedenis op een tweede apparaat — bij hen de sleutelback-up, hier verzegelde vensters en een overdracht via QR. Oplopende wachttijd bij opnieuw proberen op een dode peer. Veel records in één verzoek bundelen. Versieaankondiging over HTTP. Een aanbieder blokkeren. Ontdubbeling bij ontvangst. Bijlagen buiten het gebeurtenissenlogboek. Prometheus en alarmregels. En geen zoeken op de server in een versleutelde kamer, aan geen van beide kanten.

HIERNA

De vragen
die het eerst komen

Zestien ervan, ronduit beantwoord — ook de twee waar het antwoord niet het aangename is.