Hacker News new | ask | show | jobs
by spicybright 1861 days ago
It sucks there's no open source project that mimics discord well.

They all shoot themselves in the foot by over complicating the model. It confuses users, and makes creating stable clients hard.

I don't want a tool-box of primitives and a recipe book. I want a decentralized discord clone not owned by a giant company.

Let's start there and add the crazy stuff later.

3 comments

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).

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!
It’s funny you mention that — I just started such a project (three hosting modes: centralized, federated, fully decentralized) as an educational series to teach software development on multiple levels. It’s very early (read: non functional), and I’m still figuring out the best way to teach and build simultaneously, but constant weekly progress is being made.

Educational site (I’m backporting the previous sessions to the site, session 7 is the first one hosted right now): https://www.codewolfpack.com

Project repo: https://www.github.com/HowlerChat/Howler

There is an attempt named harmony with multiple clients. https://github.com/harmony-development

Disclaimer: one of my friend is involved in this project