COMPAX

COMPAX DAN MATRIX

Satu perbedaan,
dan yang menyusul

Matrix adalah messenger terfederasi yang matang, dan sebagian besar tulisan yang membandingkan keduanya ditulis oleh orang yang belum pernah memakai satu pun dari kedua basis kode itu. Yang berikut ini dibaca dari keduanya.

Diukur pada 27 Agustus 2026. Synapse: 246.976 baris Python — 71.349 di lapisan penyimpanan saja. Continuwuity, implementasi kedua dari jaringan yang sama, 95.220 baris Rust. Server ini: 17.041 baris. Kedua sisi bergerak, dan setengah dari yang di bawah ini soal hari ini, bukan soal sifat perkaranya; bagian yang memang soal sifat perkaranya ditandai.

TITIK PERCABANGAN

Siapa yang berwenang
atas apa itu sebuah ruang

Matrix — servernya
  • Sebuah ruang adalah DAG dari peristiwa, masing-masing membawa rantai otorisasinya sendiri.
  • Ketika para server tidak sepakat, state resolution v2 yang memutuskan.
  • Dari situ muncul state group, ujung maju dan mundur, outlier, backfill — dan 71.349 baris di lapisan penyimpanan saja.
  • Sebuah commit diterima secara lokal bahkan ketika jaringan terbelah, dan digabungkan setelahnya.
Compax — pohon MLS
  • Server adalah layanan pengantaran. Satu urutan, dipegang oleh rumah ruang itu.
  • Bandingkan epoch-nya, sisipkan di bawah kunci yang sama. Tidak ada yang bisa bercabang.
  • Jadi tidak ada DAG, tidak ada state resolution, tidak ada backfill.
  • Dan sebuah commit butuh perjalanan pulang-pergi ke rumah, dan mendapat 409 kalau ada balapan.

Pertukarannya jujur ke dua arah, dan MLS tidak memberi pilihan soal itu: menerapkan sebuah commit menghancurkan rahasia epoch sebelumnya. Tidak ada tempat untuk kembali.

SATU KLAIM YANG PANTAS DIRUMUSKAN DENGAN BENAR

“Server mereka membaca pesanmu”
salah ke dua arah

Di ruang Matrix yang terenkripsi, badan sebuah pesan adalah teks tersandi dan server tidak membacanya — Megolm, persis seperti MLS di sini. Yang benar itu lebih sempit dan, bagi kebanyakan orang, lebih buruk.

Apa yang sebenarnya terbuka
  • Enkripsi adalah sebuah sakelar pada ruang. Ruang publik biasanya tidak memilikinya, dan di sana semuanya bisa dibaca.
  • Keadaan ruang tidak pernah dienkripsi: nama, topik, avatar, keanggotaan, undangan, power levels — teks polos bahkan di ruang yang terenkripsi.
  • Itu bukan kelalaian. Server menerapkan aturan otorisasi pada peristiwa, jadi ia harus bisa membacanya.
Jadi perbedaan yang sebenarnya adalah grafnya
  • Siapa berada di ruang dengan siapa, siapa mengundang siapa, dan kapan — selalu terlihat oleh server mereka.
  • Di sini itu hidup di pohon MLS. Server melihat sebuah group_id dan sebuah epoch.
  • Dan satu akibat yang mudah terlewat: pencarian di sisi server dalam ruang terenkripsi sama sekali tidak jalan bagi mereka. Element mencari secara lokal — jadi soal pencarian, ini tertinggal dari Element, bukan dari Matrix.

KE MANA MASING-MASING MENCURAHKAN TENAGA

Ke mana tenaganya pergi

Matrix — jangkauan dan pengoperasian
  • Bertahan saat jaringan terbelah, karena DAG-nya menyatu kembali setelahnya.
  • Dua belas versi ruang yang dirilis dan dimigrasikan di jaringan yang sedang berjalan.
  • Skala yang terbukti di lapangan: stream writer, peta instans, replikasi Redis.
  • Moderasi yang mendalam — API admin, ACL ruang, karantina media, sebuah proses MSC.
  • Implementasi pihak ketiga diperiksa sebagai kotak hitam oleh Complement.
  • Pemulihan setelah kehilangan seluruh perangkat, lewat cadangan kunci di sisi server.
Compax — yang tidak bisa dilakukan server
  • Yang terbuka adalah sebuah group_id dan sebuah epoch, dan hanya itu yang dibutuhkan untuk mengurutkan.
  • Identitas tidak diterbitkan oleh server: sebuah kunci akar menandatangani atestasi perangkat dan setiap orang memeriksanya secara lokal.
  • Urutan berharga satu baris — sebuah compare-and-set, terukur 239 penambahan per detik dalam satu ruang.
  • Push tidak membawa apa-apa. Milik mereka membawa sebuah room_id, jadi ruangnya toh sampai ke penyedia push.
  • Sebuah panggilan mewarisi ruangnya: kunci media berasal dari rahasia epoch, jadi mengeluarkan seorang anggota juga mengeluarkannya dari media sebagai efek samping.
  • Bot adalah daun pada pohon, bukan jalan memutar lewat server — tidak ada tempat di mana teks polos tergeletak untuk sebuah bot.
  • Sebuah keluhan bisa dibuktikan: bukti pesan menunjukkan siapa penulisnya. Megolm adalah kunci grup dan tidak membuktikan apa-apa.
  • Uang yang dipegang grup bersama-sama, yang sama sekali bukan bagian dari Matrix.

AKIBATNYA

Apa yang tiap protokol
tidak bisa lakukan

Ini bukan papan skor. Tiap baris adalah harga dari pilihan di atasnya, dan kedua kolom berisi hal-hal yang lebih baik tidak dimiliki oleh pihaknya masing-masing.

Matrix

Compax

Badan pesan di ruang yang terenkripsi

Teks tersandi. Megolm — server tidak membacanya.

Teks tersandi. MLS — sama saja.

Apakah enkripsi menyala

Sakelar per ruang, m.room.encryption. Ruang publik biasanya tidak, dan di sana server membaca semuanya.

Bukan sakelar. Tidak ada ruang tanpa enkripsi untuk ditinggali.

Keadaan ruang — nama, topik, keanggotaan, undangan, power levels

Teks polos, selalu, bahkan di ruang yang terenkripsi. Bukan kelalaian: server menerapkan aturan otorisasi, jadi ia harus membacanya.

Di pohon MLS. Server melihat group_id dan epoch-nya.

Siapa berada di ruang dengan siapa

Terlihat oleh server, selalu.

Tidak terlihat. Inilah, bukan teks pesannya, perbedaan yang sebenarnya.

Pencarian di sisi server dalam ruang terenkripsi

Sama sekali tidak jalan — peristiwa terenkripsi tidak punya content.body untuk diindeks. Element mencari secara lokal.

Juga tidak jalan, dan karena alasan yang sama. Jalan keluarnya sama dengan yang diambil Element: sebuah indeks di klien.

Sebuah commit yang diterima saat jaringan terbelah

Ya. Peristiwanya diterima secara lokal lalu digabungkan oleh state resolution.

Mustahil. Menerapkan sebuah commit menghancurkan rahasia epoch sebelumnya — dua commit dalam satu epoch adalah dua keadaan kunci yang tidak bisa didamaikan.

Riwayat setelah kehilangan seluruh perangkat

Cadangan kunci di sisi server di bawah sebuah kunci pemulihan — juga ujung ke ujung.

Hilang. Sebuah pembungkus yang bisa dibuka oleh frasa saja akan menjadi akses permanen yang tak bisa dicabut siapa pun; itu ditolak dengan sengaja.

Aturan ruang yang ditegakkan oleh server

Ya — power levels, dan server menolak peristiwa yang melanggarnya.

Tidak. Kebijakannya berjalan di bayangan: ia menghitung ketidaksepakatan dan tidak menolak apa pun, karena commit sah yang ditolak tidak merusak sebuah grup MLS, ia mengakhirinya.

Pratinjau tautan, moderasi berdasarkan isi, push yang membawa teks

Mungkin di mana pun sebuah ruang tidak terenkripsi.

Mustahil. Ini bukan “belum” — inilah yang dipakai untuk membeli semua yang lain.

Uang yang dipegang grup

Bukan bagian dari protokol.

Lima rantai, kunci tiap penanda tangan di perangkatnya sendiri, dan pembayaran yang datang sebagai pesan.

DAN DI MANA KEDUANYA BERTEMU

Sama, di kedua sisi

Postgres untuk yang harus bertahan dan Redis untuk yang harus cepat. Ember token per tindakan. Riwayat di perangkat kedua — pada mereka cadangan kunci, di sini jendela tersegel dan pemindahan lewat QR. Jeda yang membesar saat mencoba lagi ke peer yang mati. Menggabungkan banyak catatan ke dalam satu permintaan. Pengumuman versi lewat HTTP. Memblokir sebuah penyedia. Penyaringan duplikat saat penerimaan. Lampiran di luar log peristiwa. Prometheus dan aturan peringatan. Dan tidak ada pencarian di sisi server dalam ruang terenkripsi, di kedua sisi.

BERIKUTNYA

Pertanyaan
yang datang lebih dulu

Enam belas di antaranya, dijawab terus terang — termasuk dua yang jawabannya bukan jawaban yang nyaman.