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
- 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.
- 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
409kalau 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.
- 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.
- 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_iddan 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
- 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.
- Yang terbuka adalah sebuah
group_iddan 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.