A few years ago, back when Matrix was originally implementing end-to-end encryption, we asked Moxie (the project lead for Signal) whether heβd ever consider connecting Signal (then TextSecure) to Matrix. After all, one of Matrixβs goals is to be an interoperability layer between other communication silos, and one of the reasons for us using Signalβs Double Ratchet Algorithm for Matrixβs encryption was to increase our chances of one day connecting with other apps using the same algorithm (Signal, WhatsApp, Google Allo, Skype, etc). Moxie politely declined, and then a few months later wrote βThe ecosystem is movingβ to elaborate his thoughts on why he feels he βno longer believes that it is possible to build a competitive federated messenger at all.β
At the time we didnβt respond via a blog post; instead we ended up talking it through a few times in person to see how misaligned we really were. The conclusion was that we agreed to disagree and Moxie said heβd be happy to be proved wrong, and wished us good luck. However, the subject has come up again thanks to Moxieβs talk on the same subject at 36C3 last week, and we keep getting asked to write a formal response on the Matrix side. So, hereβs an attempt to do so. (Moxie didnβt want the 36C3 talk recorded, and I havenβt watched it, so this is responding to the original blog post).
From my perspective, the main points proposed in βThe ecosystem is movingβ boil down to:
-
Decentralised systems are harder to design and build than centralised ones, as coordination is harder if you donβt have a single authority to trust.
-
Decentralised systems are harder and slower to evolve than centralised ones, as you canβt force participants to rapidly roll out (or even agree on) new features.
-
Users in federated systems tend to coalesce around the best/biggest server that the bulk of people use - which means that server typically gets to see a disproportionate amount of communication metadata (whoβs talking to who, and when), and has disproportionate power over the network, which could bully others away from running their own deployments.
-
If users donβt trust their app provider, they can always go switch apps, which gives them freedom.
-
Open systems are less secure because you have no control over the quality of the implementations - if anyone can bring their own client or server to the table, all it takes is one bad implementation to compromise everyone in the vicinity.
Now, all of these points are valid to some extent.
Itβs absolutely true that decentralised systems are harder than centralised ones. Prior to Matrix we built centralised comms systems - we literally can do a side-by-side comparison for the same team to see how easily and fast we built our centralised comms system relative to Matrix. Empirically It took us around 6 times longer to get to the same feature-set with Matrix.
Itβs also true that decentralised systems are harder to evolve than centralised ones - you canβt just push out a given feature with a single app update, but you have to agree and publish a public spec, support incremental migration, and build governance processes and community dynamics which encourage everyone to implement and upgrade. This is hard, but not impossible: weβve spent loads of time and money on Matrixβs governance model and spec process to get it right. Itβs still not perfect, but we havenβt seen much fragmentation so far, and when weβre pushing out a feature empirically we can and do go just as fast as the centralised alternatives. (E2E by default is a bit of a special case because weβve had to go and reimplement many features users take for granted today in an E2E-capable manner, but weβre sprinting to get it done in the coming weeks). A bigger problem is that there are hundreds of spec change proposals which folks would like to see in the protocol, and finding a way to manage expectations and parallelise spec progress is hard - something weβre looking to improve in 2020 (although still figuring out how!)
Itβs also fair that in a multi-server federated model, users naturally tend to sign up on the most prominent server(s) (e.g. the matrix.org homeserver in the case of Matrix). In practice, the matrix.org homeserver currently makes up about 35% of the visible Matrix network by active users. Itβs also true that Matrix servers currently store metadata about whoβs talking to who, and when, as a side-effect of storing and relaying messages on behalf of their users. And without an adequate protocol governance system in place, a large server could start pushing around smaller ones in terms of protocol behaviour. In practice, weβre looking into solving metadata protection in Matrix by experimenting with hybrid P2P / Client Server models - letting users store their metadata purely clientside if they so desire, and potentially obfuscating whoβs talking to who via mixnets of blinded store & forward servers (more about this coming up at FOSDEM). Combined with nomadic accounts, this would let us eventually turn off the matrix.org server entirely and eliminate the pseudo-centralisation effect - the default βserverβ would be the one running on your client.
Itβs true that if a user doesnβt trust (say) Telegram, they are free to go switch to Signal or WhatsApp or whatever insteadβ¦ at the massive expense of having to persuade all their friends to install yet another app, and fragmenting their conversation history across multiple apps.
Finally, itβs also true that because anyone can develop a Matrix client or server and connect to the global network, thereβs a risk of bad quality implementations in the wild. There are many forks of Riot on the app stores - we simply canβt vouch for whether they are secure. Similarly there are Matrix clients whose E2E encryption is partial, missing, or unreviewed. And there are a wide range of different Matrix servers run by different people with different agendas in different locations, which may be more or less trustworthy.
HOWEVER: all of this completely ignores one critical thing - the value of freedom. Freedom to select which server to use. Freedom to run your own server (perhaps invisibly in your app, in a P2P world). Freedom to pick which country your server runs in. Freedom to select how much metadata and history to keep. Freedom to choose which apps to use - while still having the freedom to talk to anyone you like (without them necessarily installing yet another app). Freedom to connect your own functionality - bots, bridges, integrations etc. Freedom to select which identifiers (if any) to use to register your account. Freedom to extend the protocol. Freedom to write your own client, or build whole new as-yet-unimagined systems on top.
Itβs true that if youβre writing a messaging app optimised for privacy at any cost, Moxieβs approach is one way to do it. However, this ends up being a perversely closed world - a closed network, where unofficial clients are banned, with no platform to build on, no open standards, and you end up thoroughly putting all your eggs in one basket, trusting past, present & future Signal to retain its values, stay up and somehow dodge compromise & censorshipβ¦ despite probably being the single highest value attack target on the βnet.
Quite simply, that isnβt a world I want to live in.
We owe the entire success of the Internet (let alone the Web) to openness, interoperability and decentralisation. To declare that openness, interoperability and decentralisation is βtoo hardβ and not worth the effort when building a messaging solution is to throw away all the potential of the vibrancy, creativity and innovation that comes from an open network. Sure, you may end up with a super-private messaging app - but one that starts to smell alarmingly like a walled garden like Facebookβs Internet.org initiative, or an AOL keyword, or Googleβs AMP.
So, we continue to gladly take up Moxieβs challenge to prove him wrong - to show that itβs both possible and imperative to create an open decentralised messaging platform which (if you use reputable apps and servers) can be as secure and metadata-protecting as Signalβ¦ and indeed more so, given you can run your server off the grid, and donβt need to register with a phone number, and in future may not even need a server at all.
--Matthew
(Comments over at HN)