COMPAX

COMPAX VE MATRIX

Tek bir fark,
ve ondan çıkanlar

Matrix, olgun federe mesajlaşma ağıdır, ve ikisini karşılaştıran yazıların çoğu, iki kod tabanının da hiçbirini kullanmamış insanlar tarafından yazılmıştır. Aşağıdakiler ikisinden de okundu.

27 Ağustos 2026’da ölçüldü. Synapse: 246.976 satır Python — 71.349’u yalnızca depolama katmanında. Continuwuity, aynı ağın ikinci bir uygulaması, 95.220 satır Rust. Bu sunucu: 17.041 satır. İki taraf da hareket ediyor, ve aşağıdakilerin yarısı işlerin doğası hakkında değil, bugün hakkında; işlerin doğasına ait olan kısımlar işaretli.

AYRIM NOKTASI

Bir odanın ne olduğuna
kim karar verir

Matrix — sunucu
  • Bir oda, her biri kendi yetkilendirme zincirini taşıyan olaylardan oluşan bir DAG’dir.
  • Sunucular anlaşamadığında, durum çözümlemesi v2 karara bağlar.
  • Bu yüzden durum grupları, ileri ve geri uçlar, outlier’lar, backfill — ve yalnızca depolama katmanında 71.349 satır.
  • Bir commit, ağ ikiye bölündüğünde bile yerelde kabul edilir, ve sonradan birleştirilir.
Compax — MLS ağacı
  • Sunucu bir teslim servisidir. Tek bir sıra, odanın evi tarafından tutulur.
  • Dönemi karşılaştır, aynı kilit altında ekle. Ayrışacak bir şey yok.
  • Yani DAG yok, durum çözümlemesi yok, backfill yok.
  • Ve bir commit’in eve gidip gelmesi gerekir, yarış durumunda da 409 alır.

Takas iki yönde de dürüst, ve MLS bu konuda seçenek bırakmıyor: bir commit uygulamak önceki dönemin sırlarını yok eder. Geri dönülecek bir şey kalmaz.

DOĞRU KURULMAYI HAK EDEN BİR İDDİA

“Onların sunucusu mesajlarını okuyor”
iki yönden de yanlıştır

Şifreli bir Matrix odasında mesajın gövdesi şifreli metindir ve sunucu onu okumaz — Megolm, tıpkı burada MLS olduğu gibi. Doğru olan şey daha dar, ve çoğu insan için daha kötü.

Gerçekte açıkta olan ne
  • Şifreleme, odanın üzerindeki bir anahtardır. Açık odalarda genelde yoktur, ve orada her şey okunabilir.
  • Oda durumu asla şifrelenmez: ad, konu, avatar, üyelik, davetler, power levels — şifreli bir odada bile düz metin.
  • Bu bir gözden kaçma değil. Sunucu olaylara yetkilendirme kurallarını uygular, dolayısıyla onları okuyabilmek zorundadır.
Yani asıl fark çizgedir
  • Kimin kiminle bir odada olduğu, kimin kimi davet ettiği ve ne zaman — onların sunucusuna hep görünür.
  • Burada bu, MLS ağacında yaşar. Sunucu bir group_id ve bir dönem görür.
  • Ve gözden kaçması kolay bir sonuç: şifreli odalarda sunucu tarafı arama onlarda hiç çalışmaz. Element yerelde arar — yani aramada bu, Matrix’in değil Element’in gerisindedir.

HER BİRİ EMEĞİNİ NEREYE KOYUYOR

Emeğin gittiği yer

Matrix — erişim ve işletme
  • Ağ bölünmesinden sağ çıkmak, çünkü DAG sonradan birleşiyor.
  • Çalışan bir ağ üzerinde yayımlanmış ve göç ettirilmiş on iki oda sürümü.
  • Sahada kanıtlanmış ölçek: stream writer’lar, örnek haritaları, Redis çoğaltması.
  • Derinlemesine moderasyon — yönetim API’si, oda ACL’leri, medya karantinası, bir MSC süreci.
  • Üçüncü taraf uygulamaların Complement ile kara kutu olarak sınanması.
  • Bütün cihazlar kaybedildikten sonra kurtarma, sunucu tarafında anahtar yedeğiyle.
Compax — sunucunun yapamadıkları
  • Açıkta bir group_id ve bir dönem var, ve sıralamanın ihtiyacı bu kadar.
  • Kimliği sunucu vermez: bir kök anahtar cihaz beyanını imzalar ve herkes onu yerelde doğrular.
  • Sıra bir satıra mal olur — bir compare-and-set, bir odada saniyede 239 ekleme olarak ölçüldü.
  • Push hiçbir şey taşımaz. Onlarınki bir room_id taşır, yani oda push sağlayıcısına zaten ulaşır.
  • Bir arama odasını devralır: medya anahtarı dönem sırrından gelir, dolayısıyla bir üyeyi çıkarmak onu yan etki olarak medyadan da çıkarır.
  • Botlar ağacın yapraklarıdır, sunucu tarafında bir sapak değil — bir bot için düz metnin durduğu hiçbir yer yoktur.
  • Bir şikâyet kanıtlanabilir: bir mesaj kanıtı yazarlığı gösterir. Megolm bir grup anahtarıdır ve hiçbir şey kanıtlamaz.
  • Grubun birlikte tuttuğu para — ki bu Matrix’te hiç yoktur.

SONUÇLARI

Her protokolün
yapamadıkları

Bir skor tablosu değil. Her satır, üstündeki tercihin bedelidir, ve iki sütun da kendi tarafının olmasını yeğlemeyeceği şeyler içerir.

Matrix

Compax

Şifreli bir odadaki mesaj gövdeleri

Şifreli metin. Megolm — sunucu onları okumaz.

Şifreli metin. MLS — aynısı.

Şifrelemenin açık olup olmadığı

Oda başına bir anahtar, m.room.encryption. Açık odalarda genelde kapalıdır, ve orada sunucu her şeyi okur.

Bir anahtar değil. İçinde bulunulacak şifresiz bir oda yok.

Oda durumu — ad, konu, üyelik, davetler, power levels

Düz metin, her zaman, şifreli bir odada bile. Gözden kaçma değil: sunucu yetkilendirme kurallarını uygular, dolayısıyla onları okumak zorundadır.

MLS ağacında. Sunucu group_id ve dönemi görür.

Kimin kiminle bir odada olduğu

Sunucuya görünür, her zaman.

Görünmez. Mesaj metni değil, asıl fark budur.

Şifreli bir odada sunucu tarafı arama

Hiç çalışmaz — şifreli olayın dizinlenecek bir content.body’si yoktur. Element yerelde arar.

Burada da çalışmaz, ve aynı sebeple. Çıkış yolu Element’in seçtiğiyle aynı: istemcide bir dizin.

Ağ bölünmesi sırasında kabul edilen bir commit

Evet. Olay yerelde kabul edilir ve sonradan durum çözümlemesiyle birleştirilir.

İmkânsız. Bir commit uygulamak önceki dönemin sırlarını yok eder — bir dönemde iki commit, birbiriyle bağdaşmayan iki anahtar durumu demektir.

Bütün cihazlar kaybedildikten sonra geçmiş

Bir kurtarma anahtarı altında sunucu tarafında anahtar yedeği — o da uçtan uca.

Gider. Yalnızca ifadeyle açılabilen bir sargı, kimsenin geri alamayacağı kalıcı bir erişim olurdu; bile isteye reddedildi.

Sunucunun uyguladığı oda kuralları

Evet — power levels, ve sunucu onları çiğneyen bir olayı reddeder.

Hayır. Politika gölgede çalışır: uyuşmazlıkları sayar ve hiçbir şeyi reddetmez, çünkü reddedilen geçerli bir commit bir MLS grubunu bozmaz, bitirir.

Bağlantı önizlemeleri, içeriğe göre moderasyon, metin taşıyan push

Bir odanın şifreli olmadığı her yerde mümkün.

İmkânsız. Bu bir “henüz değil” değil — geri kalan her şeyin bununla satın alındığı şey bu.

Grubun tuttuğu para

Protokolün parçası değil.

Beş zincir, her imzacının anahtarı kendi cihazında, ve ödeme bir mesaj olarak geliyor.

VE BULUŞTUKLARI YER

İki tarafta da aynı olanlar

Kalıcı olması gerekene Postgres, hızlı olması gerekene Redis. Eylem başına jeton kovaları. İkinci bir cihazda geçmiş — onlarda anahtar yedeği, burada mühürlü pencereler ve QR ile aktarım. Ölü bir eş için artan bekleyişle yeniden deneme. Çok sayıda kaydı tek istekte toplama. Sürüm duyurusunun HTTP üzerinden yapılması. Bir sağlayıcıyı engelleme. Alımda yineleme ayıklama. Ekleri olay günlüğünün dışında tutma. Prometheus ve uyarı kuralları. Ve şifreli bir odada sunucu tarafı arama — iki tarafta da yok.

SIRADA

İlk gelen
sorular

On altı tanesi, dolambaçsız yanıtlarıyla — cevabın rahat olanı olmadığı o ikisi dahil.