A major problem in distributed systems is names. one solution is to do what dns did, you can have nice names but you only get to pick them under the part of the hierarchy you control. another solution is to do what git or ipfs does. nobody gets useful names but at least you don't need any sort of central name database.
mastodon went the dns/email route, which makes sense people want nice names. but now your name is stuck on your domain. perhaps someone could have setup a central name server to avoid name collisions, but who would you trust to run it? what happens when it goes down? might as well just use dns.
Off tangent opinion on names in a federated system.
Unfortunately mastodon adopted the twitter style "@user" but because this only make sense in the context of a single domain mastodon mainly uses the awkward form "@user@domain" I think the email/xmpp form "user@domain" would have been better, but if they felt the @ prefix was critical to the experience of a twitter like micro blog than they probably should have adopted the form "@user.domain"
That seems like a very, very poor choice. I have the same concern with Matrix.
the question actually challenges all sorts of assumptions we make about how the internet works. in this regards it reminds me of IPFS.
And while ipfs has some very cool tech the main thing it has problems with are names. ipfs has no names, which sucks. there is a name system ipns but it does not help much.
ipfs does a publish/subscribe subsystem which I find one of the most compelling parts. it is however considered experamental and inefficient.
this did not stop me from writing a distributed video streaming system using it. which turns out to suck, no names, and, even on my local network I was getting ~ 2 minutes of lag, no one would put up with that for streaming.
https://nl1.outband.net/fossil/ipfs_stream/doc/tip/readme.md
By all means, enlighten us to the better one. It seems like they made a tradeoff here, and one that’s most in line with keeping everything distributed.
ENS (https://ens.domains/) solves this problem rather elegantly. A single source of truth that is decentralized so any app can use it without trusting anyone. It wasn't around when Mastadon was being built unfortunately but is useful for developers of new apps and protocols.
Only the top level namespaces require a purchase. Names for services (e.g. james.mastadon.eth) are free. A live example of this is Coinbase which gives users (name).cb.id for free. Once your service claims a namespace you have full control over it.
There's no central server, and not all of the instances talk to each other.
Where... where would you put the account data?
Then I saw someone do something I hadn't seen before...
They made their own mastodon insance: toot.firstlastname.example and their identity was @[email protected]
Joey could make his own toot feed of social media posts that anyone at any community could subscribe to.
Joey could then subscribe to the entire community at federatedplumbers.example, or he could follow just one user: @[email protected]. Then @[email protected] could follow @[email protected] and so on.
It doesn't matter where you start an account. You can join a community that you really like or start from scratch with your own instance and go and make friends in other communities. The real advantage with starting your own is that you have control over your content and aren't in danger of having your account shut down if a community decides it can no longer maintain the server.
There is already support for basic migration of followers but it would be nice to see fully instance-independant accounts. Probably something based on cryptography so your account is a key and you can publish from any server. However a protocol like this would be a lot more complicated than ActivityPub.
Is this all just a consequence of keeping user data private-ish? I understand the data has to be stored somewhere, and if user data were distributed to the entire network, it obviously wouldn't be private. Couldn't e2e + public key encryption be used to work around this somehow?