Fucking Christ the @protocol is the most obtuse crock of shit I've ever looked at. It is complex solely for the sake of being complex and still suffers from *all* of the same problems as Mastodon.

Your server goes down? Sorry, all of your followers are lost. Account portability is no better than Mastodon. 'DIDs' serve literally no purpose. And none of the API code that Bluesky uses in their own app validates ANY of the crypto they're doing on the server. NONE OF IT.

Not only that, but instead of just... making a simple Rest API spec or something simple, they REINVENTED THE FUCKING WHEEL and made 'XRPC' and 'Lexicon', AKA a shittier, less flexible version of OpenAPI and JSON Schema (respectively) that works with absolutely NO existing tooling.

The actual protocol itself is poorly confused and incredibly awfully designed. Because of the useless bullshit crypto they're putting into it, it requires you to write a server that's strongly consistent with other servers. THAT IS EXTRAORDINARILY HARD TO DO!! And BLUESKY'S OWN SERVERS DON'T HANDLE THE EDGE CASES!!!

It uses pull-based federation instead of push-based like Mastodon. You have to write a separate 'indexer' that has your 'feed' on it. That requires a LOT more resources.

And because things must be strongly consistent, AND because any user can REWRITE THEIR OWN FUCKING HISTORY AT ANY TIME, you have to, as an indexer, account for lots of different edge cases where your recorded history diverges.

The protocol for federation is built to make federation as difficult and painful as possible. It is built so that Bluesky, the private company that makes the protocol, is the only 'indexer', the only one with a whole view of the network.

WHY DOES A FEDERATION PROTOCOL NEED USER AUTH API METHODS IN IT???? WHY DOES A FEDERATION PROTOCOL NEED A CONCEPT OF 'INVITE CODES'??????

Oh wait, BECAUSE IT ISN'T A FEDERATION PROTOCOL!!! It's literally JUST the API for Bluesky. That's it.

It's quite literally impossible to use this in more flexible environments. You just can't. You cannot build anything on this because it is so poorly designed and isn't generic enough.

And I went into this with an open mind. I was like "I'll just make a simple alternative to the BlueSky server in Elixir". But it CAN'T be a simple implementation like ActivityPub can be, because it is extraordinarily complex and requires you to make guarantees about your storage and how your application works.

It turns out using Git, which is almost always used with a centralized 'remote', to do federation, which needs to be weakly consistent, IS A BAD IDEA!!!!!

What this comes back to is... who cares about any of the crypto bullshit? Having a private key and signing everything with it proves nothing because that private key must have a reputation.

You can verify a domain on Mastodon. You can point a domain to a Mastodon server. You can do that with Pleroma. You can make your own alternative to Mastodon that works exactly like how Bluesky works with domains, but it would take a 4th of the time because ActivityPub is simple to implement!!!!

The ONE thing that this protocol brings to the table is the idea of strong consistency in federation. The only issue is, it makes that strong consistency so resource intensive and so hard to implement that it decreases community servers' ability and ease of federation!!!!

And also, NOBODY CARES ABOUT STRONG CONSISTENCY IN SOCIAL NETWORKS!!! Social networks are built on the idea that we all have a different view of things. We care about seeing stuff from our friends, not seeing EVERYTHING.

The 'account portability' piece is bullshit! The way 'account portability' works is by having two separate keys, one for signing and one as a 'recovery' key. You're supposed to be able to use the 'recovery' key to rewrite history if your account gets hacked or some shit.

WE HAVE THE ABILITY TO DO THAT AS SERVER ADMINS!!! MASTODON HAS THIS ALREADY!!

Additionally, if a Bluesky server goes down, their way of keeping access to your data is by STORING ALL OF IT ON YOUR DEVICE!!!!

Imagine if I had to store the 50k+ tweets I've made on Twitter on my device, and upload ALL of them to a new server whenever a community server went down. Imagine being a server admin having to deal with people uploading tons of JSON data and media a whole bunch at a time. And if you're implementing the protocol correctly, EACH JSON BLOB REQUIRES VERIFYING THE SIGNATURE!! So you'd have to do 50K SIGNATURE VERIFICATIONS! WHICH IS CPU INTENSIVE!!! AND SLOWS DOWN THE SERVER!!!

Additionally, the domain name is NOT your identifier. If you have a custom domain, that is NOT your identifier. Instead you have a 'DID:PLC', which is a kind of 'DID' (invented by, not a surprise, CRYPTO PEOPLE).

There is NOTHING FUNDAMENTALLY USEFUL ABOUT THIS IN FEDERATION. Because this DID is never made visible to a user, it is not human readable (it's a hash), and it doesn't do anything!!!

And if you're wondering why this senseless overcomplication wreaks of the same crypto overcomplication, it's because THE CEO IS A CRYPTO PERSON!!!!

The entire protocol is just layering on top of a lot of some useless, bullshit standards that the crypto community built.

@sam Am I understanding it right, then that they are building an individualist kind of portability as compared to Mastodon's more collectivist kind? They want to make each user a kind of sovereign citizen who owns their own profile, while Mastodon is predicated on you being part of something, a community on a server?

@Loukas No, your data is stored in a server that can be a community or an individual person. But that doesn't store your feeds, like Mastodon does. So like your feed on here exists on your server, and it's built by people sending messages to and from your server.

On Bluesky, there is a single, more 'global' feed called an indexer. That builds your feed.

@sam and the indexer is the thing that seems to be controlled by the original bluesky people and you couldn't work around?
@Loukas It is just extraordinarily complicated and not immediately obvious how to build one. ActivityPub allows you to build a 'feed' however you want in your app, but Bluesky requires a certain structure and way of pulling information in. The way you get all the posts is extraordinarily resource intensive and complicated to write correctly (because it needs to be consistent), which will make it so that there are few community-based alternatives.
@sam @Loukas it's a little more complicated than that-- your data doesn't live on "servers" bound to instance-like clusters of moderation policies and federation decisions, it lives on personal data stores (closer to the Solid model) which are commodity interoperable dumb lockers where bits go, but because they're self-verifying and signed, they can be consumed en-masse by multiple servers over time. your data never moved, access rights to that data just gets authZd and de-authZd
@sam @Loukas you're definitely 100% right though that the main beef AT people had with AP was the instance/server collective. these are not mutual aid anarchists, these are hyperindividualists. their vision of a server is more like an adtech aggregator or a search engine (which AP doesn't really have on a scale that would work for silicon valley, ever!), not a manageable cluster of like-minded individuals cooperating :D
@by_caballero @sam so BlueSky data is bitcoin and Mastodon data is fiat currency;)
@Loukas @sam well, more like BSky data is ready to be dumped into data lakes and sold in a decentralized way to next-generation adtech that operates only on permissionless, self-certifying data, and ActivityPub data is EU, GDPR-friendly, consumer-centric non-commercial data that makes life hard for data barons.
@by_caballero I can imagine, though, that BS creators sell it as your blockchained data in those central vaults being more 'hard' and 'owned' because it's not linked to any messy social relationships or groups, paralleling the classic libertarian argument against fiat currency ;)
@by_caballero Huh, another point against Crypto Jack's new project, it seems.
@by_caballero @sam thank you, and how is this data legitimately accessed? What is required to have the key to these safe deposit boxes?
@Loukas @sam that's why each blog is signed, the signature would break if anyone futzed with it. if you're asking about authentication and authorization models, I couldn't tell you off the top of my head but I think as I understand it bsky is building on UCANs, which are like an ambitious OAuth alternative modeled more on object capabilities than ACLs exactly to enable this kind of permissionless layers and dumber lockers with smarter locks on them. https://ucan.xyz/
UCAN Distributed Auth

Auth tokens for a distributed, user-controlled world

@Loukas @sam The [BTC-friendly] fintech and neobank BLOCK, which has a great, well-funded open source department, is funding a pretty mature personal data store along very similar principles as well, if you're looking for docs and diagrams that make this sound less vapory.
https://developer.tbd.website/docs/web5/learn/decentralized-web-nodes/
Storage (DWNs) | TBD

3 minute read

@by_caballero I mean more in a political or legal way. Who decides who can access your data? Can you simply give or revoke access yourself, as a form of migrating providers? Do you apply to some decision-making body? I know none of this is happening yet, but what does AT so far imply?

@sam I had the opposite reaction. There is a huge potential in the long term benefit of having a large infrastructure of globally unique identifiers mapped to portable human names. This opens up the potential for strong public key verification and real authenticity to e2e communication.

DID potentially allows for better portability since you only are changing the human name, despite the problem of your archive. Yes, it is overkill for a social network, but it allows the AT protocol to be used for so much more. Imagine it combined with WhatsApp's new key transparency.

Yes, the AT protocol completely dodges the recovery problem, but so what? The recovery problem is hard and unsolved.

https://tech.facebook.com/engineering/2023/4/strengthening-whatsapp-end-to-end-encryption-key-transparency/

Strengthening WhatsApp's end-to-end encryption guarantees

WhatsApp's newest cryptographic security feature automatically verifies a secured connection based on key transparency.

Tech at Meta
@sam Granted, yes, the XRPC and Lexicon stuff is a weird and unnecessary choice. But the crypto stuff is not overly complex. It is not all that useful now, true, but I see it is laying the groundwork for the long term goal of greater independence from the server, strong authenticity, and all kinds of applications that don't even look like social networks at all. Yes, most of the ideological drive behind the decentralization from blockchain people is fueled by libertarian fever dreams about destroying society and only having individuals, but we do need stronger guarantees around identity and stronger controls over our data, both things that the AT protocol is thinking about more deeply than the very limited-in-scope ActivityPub

@elijah The crypto stuff *is* overly complex because human beings just don't care that much about cryptographically verifying that you have access to a private key. Keybase tried solving that problem, it was unprofitable and failed.

The AT protocol *is not a protocol*. It is API documentation for how to get your backend server to work with the Bluesky apps. If it was a protocol for federation, it wouldn't include 'invite codes', hard-coded authentication requirements, or any of the other shit.

@sam keybase tried to solve an important unsolved problem in the worst way possible and rightly failed. But saying no one cares about verifiable binding of human names is to say no one cares about certificate authorities or TLS
@elijah @sam That might be true if they’d actually implemented the DID feature they said was absolutely essential, required for truly nomadic user accounts and the reason why they couldn’t just adopt ActivityPub. They never got proper distributed DIDs to work and instead have a “placeholder” implementation. Pretty sure it’s a central directory operated by Bluesky. I presume they issue new ones to people with invite codes?

@MetalSamurai @elijah This is correct, DID:PLC is basically DNS for DIDs. Then they layer DNS (domain names) on top of that. That is now two ways of doing effectively the same thing.

This is a pattern with the entire thing. Instead of using an OpenAPI spec, they invent XRPC (objectively useless). Instead of using JSON schemas, they invent Lexicon.

Each layer does barely anything and does not exist for a good reason. The sole function is increasing confusion and making it harder to implement.

@sam @elijah It looks like it was really important for everyone’s data to be in an append only public ledger so it could be easily scraped/indexed/searched, but nobody seems to be complaining about the privacy implications beyond vaguely wondering when they’ll get DMs (never) and realising their blocklist is public.
@MetalSamurai @elijah It's not exactly like this. An 'indexer' is basically just like Google. The issue is that sometimes entire trees of conversation might disappear at random because it's literally a cryptographic chain of links that can break at any time. It's incredibly inconvenient and mastodon's / ActivityPub's way of dealing with that is much easier. If you delete a post, all servers are notified of the delete. That's it.
@sam @elijah I don’t have an invite, so I haven’t tried playing with any of the sample code, just reading the docs. The PDS merkle tree is just repurposed blockchain stuff, right? So it’s easy to add records, but not remove them, or are you saying anyone can just delete the tree any time and start again? Or just with a recovery key?
It also looks like a hypothetical AT/ActivityPub gateway would have to construct a PDS for every AP user passing through.
@MetalSamurai @elijah It's not actually, it's sorta copied from IPFS. Just about the only thing IPFS is good for is for making it easier to pirate stuff, which is completely good by me. They tried to make it into something more "Web3" but it doesn't work that well. The largest use of it right now is LibraryGenesis, which makes it easy and fast to download any book you want. You can also contribute storage to the pool (Anna's Archive is looking for volunteers).
@sam @elijah Ah, ok. Still looks like they’re prioritising syncing big blobs of data around, rather than sending individual messages. Maybe their secret plans for monetising this rely on it.
All feels backwards - a very specific data store and commands to manipulate it, rather than a message passing protocol and letting implementations store that state internally however you like.
@sam @MetalSamurai @elijah funny cause I use IPFS pretty often and I've never even heard of the one thing you say it's useful for...
@pg @sam @elijah It looks like it’s really good for quickly checking you’ve got a good copy of synchronised data, just by comparing the hashes at the top of the tree.
That’s only really useful if that’s the sort of thing you’re doing a lot. Which you aren’t in most social networks, but makes sense if you’re keeping your own copy for data mining.

@elijah @sam Elijah, I'm curious how this will play out for BlueSky with some fundamental human readability vs. decentralization tradeoffs such as the ICN naming tradeoff and Zooko's triangle. (Often folks point to biometric binding for DID's to get around Zooko's triangle, which is problematic from a privacy/trust standpoint.)

Mastodon avoids running into these problems because of its direct and implicit use of DNS for its namespace. (And use of DNS embedding in DIDs ends up undermining the value of flat naming.)

@elijah @sam

“so much more”… I think this is exactly the reason AT is the way it is. Bluesky is going to prove to be just a platform for spreading Dorsey’s plans for cryptocurrency to a wider audience. It’s a Trojan Horse, and it’s got Bitcoin inside.

@elijah @sam

Seems to me ActivityPub (or, at least, the Mastodon flavor) has all the ingredients for decentralized identities.

- Use your own domain for your identity, that should go without saying
- Under your actor objects, nothing prevents you from having inbox and outbox on other servers that will act as "storage boxes"
- Clients sign the content with a private key accessible on a https url, so that the request can be forwarded

To migrate hosting servers, change your inbox and outbox urls. Your identity and you domain remain the same.That's about it.

@rakoo @elijah @sam Would love to see this as a reality. Right now the usernames thing gets to folks but because there's a second @. They don't complain about the Bsky ones cause there's no second @, so it's like a domain. Doing some sort of repeat lookup starting from the first . in order to split the username/domain would be neat!

Would almost want to try crafting this; masto server at one domain, put a webfinger on another manually pointing, and create account manually that IDs as remote DNS

@ceralor @elijah @sam

Nothing says activitypub actors must start with an @; in fact, actors must be urls, and the @ is part of the username but as an artifact. It would be perfectly valid for me to be known as https://blah.rako.space and nothing else.

If you try that with Mastodon I'd love to hear the results of your experiment !
blablabla

@rakoo @ceralor @elijah @sam Actually I think you're conflating WebFinger with ActivityPub. But if you're curious to see some detailed prototyping-in-public on decentralized identity, Pleroma (rust) is the github repo to explore. See [FEP-521a](https://codeberg.org/fediverse/fep/src/branch/main/fep/521a/fep-521a.md)
fep

Fediverse Enhancement Proposals

Codeberg.org
@sam I learned a lot reading this and also you're making a pretty strong case for raising the character limits on urbanists.social posts
@pleaseclap I might make a write.as instead possibly!
@pleaseclap @sam Please, No. Mastodon needs to implement support for "Article" objects, because otherwise, rest of fediverse apps are force to shoehorn every kind of content into "Note".
@sam shocking, unexpected and unbelievable are three words I wouldn't use to describe finding this out 😌🙃
@sam I appreciate this very yelly analysis.

@sam The whole thing reminds me a lot of that "Web5" slide deck that was making the rounds last year.

https://bestpitchdeck.com/tbd?ref=medium

TBD Pitch Deck — Best Pitch Deck

The original TBD pitch deck for Web5: An extra decentralized web platform (2022). Draw inspiration 790+ pitch deck examples from winning startups to craft your perfect presentation!

Best Pitch™

@cmiles74 @sam oh. my. heck.

So it turns out that the biggest difference between a fellow like Jack and me is that, while we both think about these things a lot, I look at the prior art and say, "Oh yeah, that's entirely possible with existing technology, so the problem is clearly meatspace."

Jack just thinks he can engineer a solution that will allow him to take investor dollars/make investors buckets of cash.

@sam this is why they try to reinvent the wheel, because they won't allow anyone in their circles who will tell them otherwise. I have seen this time and time again.
@sam just to clarify when you type "CRYPTO" do you mean cryptography or cryptocurrency? It feels like you're referring to these interchangeably and I can't tell which is which.
@sam quite a damning evaluation, but I'm not particularly surprised. Thanks for saving me the time to look into it!
@sam world-class infuriated ranting, my hat's off to you!

@sam They like to keep repeating that they are not a blockchain and not built on a blockchain.

But, yeah, at any point in time where a design decision had to be made, they choose the option that was most closely tied to the cryptochain bros while retaining the ability to deny any *overt* blockchain connections.

DID is one of the most awful W3C specs (and if you like bad specs, look into DIDcomm). And the hero image on https://ipld.io/ speaks for itself.

IPLD - The data model of the content-addressable web

The data model of the content-addressable web. It allows us to treat all hash-linked data structures as subsets of a unified information space, unifying all data models that link data with hashes as instances of IPLD.

IPLD

@sam Not my field, but does it have be visible? It’s my understanding DIDs solve the problem of encrypting the ownership of data, so anything a user publishes (and most sub-pieces of it) are always linked to their unique user dID? Is there something inherently bad about that concept in your view? Couldn’t it solve a lot of different problems for a renewed and more open web?

(I have no dog in any related hunts. Just looking for clarity).

@sam I actually really like the idea of local history for posts.

Storing lots of data on your phone can be expensive, but it's also expensive for server admins!

If everyone is responsible for storing their own toots as a backup, that gives a lot of resiliency to the network.

@SirLich Yeah I don't think it's a bad thing, but the more I've used Mastodon the more I've questioned whether I really need that? There's some posts like this that I'm proud of and want to keep archived, but there's others where I could do without. And I don't know if I'd want to import the good ones into a new server or not. Kinda on the fence.