COMPAX

COMPAX E MATRIX

Uma diferença,
e o que vem dela

Matrix é o mensageiro federado maduro, e quase tudo o que se escreve comparando os dois é escrito por gente que não usou nenhuma das duas bases de código. O que vem abaixo foi lido nas duas.

Medido em 27 de agosto de 2026. Synapse: 246.976 linhas de Python — 71.349 só no armazenamento. Continuwuity, uma segunda implementação da mesma rede, 95.220 linhas de Rust. Este servidor: 17.041 linhas. Os dois lados se mexem, e metade do que vem abaixo é sobre hoje e não sobre a natureza das coisas; as partes que são sobre a natureza das coisas estão marcadas.

A DIVERGÊNCIA

Quem é a autoridade
sobre o que é uma sala

Matrix — o servidor
  • Uma sala é um DAG de eventos, cada um carregando a própria cadeia de autorização.
  • Quando os servidores discordam, a resolução de estado v2 resolve.
  • Daí os grupos de estado, as extremidades para a frente e para trás, os outliers, o backfill — e 71.349 linhas só na camada de armazenamento.
  • Um commit é aceito localmente mesmo quando a rede se parte, e mesclado depois.
Compax — a árvore MLS
  • O servidor é um serviço de entrega. Uma ordem só, mantida pela casa da sala.
  • Comparar a época, anexar sob a mesma trava. Não há o que divergir.
  • Então não há DAG, não há resolução de estado, não há backfill.
  • E um commit precisa de uma ida e volta até a casa, e recebe um 409 se houver corrida.

A troca é honesta nos dois sentidos, e o MLS não deixa escolha quanto a isso: aplicar um commit destrói os segredos da época anterior. Não há para onde voltar.

UMA AFIRMAÇÃO QUE VALE ACERTAR

“O servidor deles lê as suas mensagens”
está errado nos dois sentidos

Numa sala criptografada do Matrix o corpo de uma mensagem é texto cifrado e o servidor não o lê — Megolm, exatamente como MLS é aqui. O que é verdade é mais estreito e, para a maioria, pior.

O que está de fato aberto
  • A criptografia é um interruptor da sala. Salas públicas em geral não a têm, e ali tudo é legível.
  • O estado da sala nunca é criptografado: nome, tópico, avatar, participação, convites, power levels — texto simples mesmo numa sala criptografada.
  • Isso não é um descuido. O servidor aplica as regras de autorização aos eventos, então precisa conseguir lê-los.
Então a diferença real é o grafo
  • Quem está numa sala com quem, quem convidou quem e quando — sempre visível para o servidor deles.
  • Aqui isso vive na árvore MLS. O servidor vê um group_id e uma época.
  • E uma consequência fácil de deixar passar: busca no servidor dentro de salas criptografadas não funciona para eles de jeito nenhum. O Element busca localmente — então, em busca, isto está atrás do Element, não atrás do Matrix.

ONDE CADA UM PÕE O ESFORÇO

Foco

Matrix — alcance e operação
  • Sobreviver a uma partição da rede, porque o DAG mescla depois.
  • Doze versões de sala lançadas e migradas numa rede em funcionamento.
  • Escala provada em campo: stream writers, mapas de instâncias, replicação de Redis.
  • Moderação em profundidade — API de administração, ACLs de sala, quarentena de mídia, um processo MSC.
  • Implementações de terceiros verificadas como caixas-pretas pelo Complement.
  • Recuperação depois de perder todos os aparelhos, via backup de chaves no servidor.
Compax — o que o servidor não consegue fazer
  • À vista há um group_id e uma época, e é disso que a ordenação precisa.
  • A identidade não é emitida pelo servidor: uma chave raiz assina uma atestação de aparelho e cada um a verifica localmente.
  • Ordenar custa uma linha — um compare-and-set, medido em 239 acréscimos por segundo numa sala.
  • O push não carrega nada. O deles carrega um room_id, então a sala chega ao provedor de push de qualquer jeito.
  • Uma chamada herda a sala: a chave de mídia vem do segredo da época, então remover um membro o remove da mídia como efeito colateral.
  • Bots são folhas da árvore, não um desvio pelo servidor — não existe lugar onde texto simples fique parado para um bot.
  • Uma reclamação é demonstrável: uma prova de mensagem mostra a autoria. Megolm é uma chave de grupo e não prova nada.
  • Dinheiro que o grupo guarda junto, o que não faz parte do Matrix de forma alguma.

AS CONSEQUÊNCIAS

O que cada protocolo
não consegue fazer

Não é um placar. Cada linha é o preço da escolha logo acima dela, e as duas colunas contêm coisas que o lado de cada uma preferiria não ter.

Matrix

Compax

Corpos de mensagem numa sala criptografada

Texto cifrado. Megolm — o servidor não os lê.

Texto cifrado. MLS — o mesmo.

Se a criptografia está ligada

Um interruptor por sala, m.room.encryption. As públicas em geral não estão, e ali o servidor lê tudo.

Não é um interruptor. Não existe sala sem criptografia para se estar.

Estado da sala — nome, tópico, participação, convites, power levels

Texto simples, sempre, mesmo numa sala criptografada. Não é descuido: o servidor aplica as regras de autorização, então tem de lê-las.

Na árvore MLS. O servidor vê group_id e a época.

Quem está numa sala com quem

Visível para o servidor, sempre.

Não visível. Isto, e não o texto das mensagens, é a diferença real.

Busca no servidor dentro de uma sala criptografada

Não funciona de jeito nenhum — o evento criptografado não tem content.body para indexar. O Element busca localmente.

Também não funciona, e pelo mesmo motivo. A saída é a mesma que o Element tomou: um índice no cliente.

Um commit aceito durante uma partição da rede

Sim. O evento é aceito localmente e mesclado depois pela resolução de estado.

Impossível. Aplicar um commit destrói os segredos da época anterior — dois commits numa época são dois estados de chave incompatíveis.

Histórico depois de perder todos os aparelhos

Backup de chaves no servidor sob uma chave de recuperação — ponta a ponta também.

Perdido. Um invólucro que a frase sozinha pudesse abrir seria acesso permanente que ninguém conseguiria revogar; foi recusado de propósito.

Regras da sala aplicadas pelo servidor

Sim — power levels, e o servidor rejeita um evento que as quebre.

Não. A política roda na sombra: conta discordâncias e não rejeita nada, porque um commit válido rejeitado não estraga um grupo MLS, encerra ele.

Prévias de link, moderação por conteúdo, push levando texto

Possível onde quer que uma sala não esteja criptografada.

Impossível. Isto não é “ainda não” — é aquilo com que todo o resto foi comprado.

Dinheiro guardado pelo grupo

Não faz parte do protocolo.

Cinco cadeias, a chave de cada signatário no próprio aparelho, o pagamento chegando como mensagem.

E ONDE OS DOIS SE ENCONTRAM

O mesmo, dos dois lados

Postgres para o que precisa durar e Redis para o que precisa ser rápido. Baldes de fichas por ação. Histórico num segundo aparelho — o backup de chaves deles, janelas seladas e uma transferência por QR aqui. Espera crescente entre tentativas num par morto. Juntar muitos registros numa requisição só. Anúncio de versão por HTTP. Bloquear um provedor. Deduplicação no recebimento. Anexos fora do log de eventos. Prometheus e regras de alerta. E nenhuma busca no servidor dentro de uma sala criptografada, de nenhum dos lados.

A SEGUIR

As perguntas
que vêm primeiro

Dezasseis delas, respondidas sem rodeios — incluindo as duas em que a resposta não é a confortável.