What is actually missing from AT Proto to be usable in the way Doctorow describes? He writes:
Bluesky lacks the one federated feature that is absolutely necessary for me to trust it: the ability to leave Bluesky and go to another host and continue to talk to the people I've entered into community with there. While there are many independently maintained servers that provide services to Bluesky and its users, there is only one Bluesky server. A federation of multiple servers, each a peer to the other, has been on Bluesky's roadmap for as long as I've been following it, but they haven't (yet) delivered it.
Edit: looks like I'm probably not missing anything, and the protocol is fully capable of what Doctorow wants, it just doesn't have any other large instances yet: https://social.coop/@bnewbold/113420983888441504
Edit 2: I found a post that seems much more honest and informative about the actual limitations of AT Proto. In particular:
Relays cannot talk to Relays. If Bluesky Social, PBC decided to show ads (or do something else you don’t like), it would be very hard for you to switch to a different Relay and still be able to interact with all the other folks who stayed at the Bluesky Social, PBC Relay.
I’ve read over the documentation a few times and maybe I’ve missed it somewhere else but I’m not aware of any option to host a relay yet. As far as I know only self hosting PDS’s are an option now (which only handle your own data and authentication but still relies on a relay to serve you content from the rest of the network) and app views (which are the front ends that sort and show content)
So in a sense bluesky is distributed and portable within the ATProto network, but still centralized until other entities can host relays and interopt (or opt out of interoperability) within the network.