Hacker News new | ask | show | jobs
by Arathorn 1861 days ago
To build an open source decentralised Discord alternative you need a tool-box of primitives - that’s what Matrix is. Then clients like Element (https://element.io) sit on top to fill in the rest.

We don’t think the model for Spaces is overcomplicated. In fact it’s simpler than Discord (no role-based permissions; just power levels).

2 comments

Is there any documentation detailing power levels, or that decision was made to only offer power levels but not role-based permissions? FWIW, the reason most major platforms offer role-based permissions is because enterprises demand it, and it’s become the de facto primitive for authorization. User type based permissions also make sense, but are often used in conjunction with (not in lieu of) roles.
Power levels feels like the most IRC answer possible, and breaks down as soon you want mutually exclusive abilities.

Why is this the preferred model?

Because the decentralised ACL implementation (state resolution) relies on power levels as a simple comparator for determining merge conflict resolution. State resolution is the academically novel bit of Matrix and hard to get right, and while we can swap it out for role based ACLs in future, this is orthogonal to Spaces. Meanwhile it honestly hasn’t come up as a requirement, even from enterprisey folks, given we push power levels as hard as possible.

https://matrix.org/docs/guides/implementing-stateres and https://matrix.org/blog/2020/06/16/matrix-decomposition-an-i... give more info on how state res works and why you wouldn’t rush to jump to role based ACLs.

It’s nothing whatsoever to do with IRC or chanserv style behaviour, beyond coincidence.

I should also add that there are at least two matrix spec change proposals flying around to add role based ACLs, and one of the main reasons for switching spaces to be built on rooms is that they will automatically inherit the ACL model when it lands :)
And neither of those two proposals have figured out how to solve the mess of the conflict resolution.
Solving conflict resolution should be doable - it's just that it's literally the most critical and important bit of the entire Matrix ecosystem, and any changes have to be done very deliberately and carefully, ideally with formal proofs that it's not going to break stuff. It's the equivalent of switching out Git's merge algorithm (https://github.com/git/git/blob/master/Documentation/technic...) or switching out for a new kernel scheduler implementation. Any bugs or thinkos there mean that the whole fabric falls apart, hence wanting to consider it separately to Spaces.
Great response, thanks!