This feels like a misattribution of cause and effect. Particularly, this bit stands out:
It’s not the protocol that brings the value; it’s the user base that you gain access to. Unfortunately, the way the protocol gets used currently (not ActivityPub) is not sufficiently defined, and brings with it too many constraints to be able to reach full potential. Access to the existing user base comes at a cost.
To share my own story, what drew me to ActivityPub was less ActivityPub itself, but rather that Mastodon claimed to use it.
I had flirted with distributed social networking in the past – identica, diaspora*, GNU Social – but ended up mostly active on Twitter, because that’s where “my people” were. But of course, Twitter was steadily getting to be uninhabitable, and the value of being on Twitter was eventually outgrown by the cost of being on Twitter:
- 2008: I join Twitter
- 2009: I have fun on Twitter and make friends
- 2010: ads were introduced in the form of “promoted tweets”
- 2011: trending hashtags became trending phrases
- 2012: API restrictions, limiting apps to 100,000 users, cutting off competitors
- 2014: a greater focus on “viral content” instead of talking to friends, which helped propel Gamergate
- 2015: shadowbans made some people invisible; quote tweets meant i started seeing a lot of toxic garbage due to dunking culture
- 2016: reverse chronological timeline is no longer the default; Twitter rebrands as a “News” app instead of a “Social Networking” app; entirely too many out-and-avowed Nazis harassing me; added to a transphobe’s blocklist which gets imported by Wil Wheaton and prominently advertised in his pinned tweet, leading to my account getting shadowbanned
- 2017: I stopped using Twitter
- 2018: CEO Jack Dorsey states during an earnings call that “We are not a social network. We do not benefit from social graphs. People come to us when they’re interested in events happening in the world […] We’ve been biasing a lot more of the service towards interest and topics.”; I deleted Twitter
Luckily, in November 2016, a comrade of mine posted about mastodon.social as basically “Twitter without Nazis”. So people moved there in waves; the April 2017 wave was a sort of cambrian explosion that brought a lot of cool people into the same space. In many ways, it was the peak era; this era lasted through 2019 or so.
Being what you might call a “power user”, I got involved on the Mastodon issue tracker, reporting bugs, making feature requests, and eventually writing the documentation at the tail end of 2019 (and revamping it in the latter half of 2022). And of course, Mastodon was powered by “ActivityPub”. So I looked into it.
There was a dream idea of multiple disparate services interoperating on a commonly shared set of social functionality. It sounded great! “What if you could use your Twitter account to follow a YouTube channel, comment on a YouTube video, and so on?” After the relative success of Mastodon in April 2017, Gargron was toying around with an ActivityPub-powered clone of YouTube called Cobalt. (It didn’t go anywhere, but PeerTube filled that niche soon after.) It felt like the App.net
dream might actually come true, on a far grander scale. Unfortunately, it didn’t quite end up playing out that way.
Maybe part of the disillusionment was that by several indications, Mastodon was going the way of Twitter… in a concerning way. It wasn’t as bad as Twitter by any means, since at the very least the quality of the service was still there. The moderation was still worlds better than Twitter. It was still “Twitter without Nazis”… but it felt like Mastodon was slowly repeating Twitter’s mistakes. In 2018, Mastodon added a “trending hashtags” feature, which was met warily by early users and eventually led to its removal… although it eventually got added back and expanded on with trending links (although concerns remained) and also trending statuses (although concerns remained).
So, what do you do when one “ActivityPub” project starts going in a direction you don’t like? Well, the promise of open decentralized networks is that you should be able to move to something else while still being part of the same network, right? …right? Unfortunately, the more I learned and the more I saw things (d)evolve, I grew concerned that the fundamentals were unsound. When SocialHub came about, I tried writing some SocialHub threads about some of these problems. When the FEP process came about, I tried writing some FEPs. Meanwhile, I was growing somewhat distraught that progress had frozen, the Social CG had gone inactive, Mastodon was refusing to take responsibility for the de facto protocol it could have stewarded… The reversal of course on many early decisions came slowly at first, then much faster after November 2022 and the Elon Musk stuff. The revival of the Social CG gave me some more hope for a bit, but that has been waning over the past couple of years.
I have had to grapple with bigger questions of general strategy and in developing a theoretical understanding of digital social communication, and I have come to realize that I just do not believe in social media platforms at all anymore. If anything, I was trying to make friends and understand the world. I have only ever been able to feel that kind of environment with early Twitter (2009-2011 mostly, but it was definitely over by Gamergate), and 2017-2019 fedi. By now, most of “my people” have quit fedi or been driven away by a growing sense of cultural shifts and alienation from the spaces we used to inhabit, the spaces we carved out for ourselves.
I think what it comes down to is the promise that because these projects are open source and because the spec describes an open protocol, that anyone can get involved, that anyone can change things for the better. The reality has unfortunately not delivered. There are simply too many missing stairs. The true implicit protocol has ossified and remains widely inconsistent and undescribed. The software that has been built is fundamentally untestable and unverifiable, because it does not fully and formally define correct behavior. And the UX gaps seem nigh unsolvable, because they are caused by protocol issues bubbling up all the way to the UX layer. The best you can hope for is quadratic combinatorial explosion as N devs need to talk to N-1 devs… some of which they might not be aware of. You can never be sure of how other systems will interpret your activities, because the semantics are being overloaded by everyone, and you not only have zero guarantees, but you also have zero signals.
It’s the sort of divide that I have called “fedi vs web” in a rambly thoughtpiece I wrote at the end of last year, though I never got around to continuing that series of articles because I wasn’t sure anyone would really take them to heart. Perhaps the most effective thing I can do with my time right now is to learn more and research more and develop those writings and theories into concrete models so that I can prove the concepts rather than describing them over and over. And more than anything, I want those models to “scale” in the sense that others can easily adopt those models for themselves, but the models also need to be self-justifying so that they can’t be captured, coopted, or compromised.
Ultimately, where I stand today is that connecting to the fediverse is valuable in that it brings access to users… but you have to give up a lot. Mainly, you are bound by the “lowest common denominator” user experience, where you can’t even remove a follower in some cases because there is no formally specified way to remove a follower, and the “follow state machine” is horrendously infamously buggy because it depends on both sides keeping track of follow state, instead of only the sending side. You are bound by having to squeeze everything you output into a shape that Mastodon will find acceptable, because without Mastodon, you don’t get to access most of those users that are probably the reason you’re bothering to connect with the fediverse in the first place… and if it’s not Mastodon, it’s some other ad-hoc compatibility target like Lemmy. You have to struggle with the vast inconsistency that comes with everyone using the same terms with different meanings, with every implementation having its own quirks and undeclared requirements, some of which conflict with each other. You have to deal with the knowledge that your own desired feature set is immediately compromised by your peers not understanding you, and even if they understand you, it comes at a great loss of fidelity. You have to deal with the paper cuts and bruises and little-deaths that are taken for granted; the ambiguity, the uncertainty, the lack of guarantees; the burden of having to implement an entire web browser from scratch and also implement an entire mail server from scratch, and then still having your application logic to worry about.
The reason I’m still on the fediverse is because I have nowhere else to go. Everywhere else has simply become inhospitable.
All of this sounds cynical, and it probably is, but I do think that we can build better software, provided that we share the same goals and principles. I think that “connecting services with other services” is on balance an improvement compared to a world where services aren’t connected to anything at all, but I would posit that we need to go further than that. We need to connect people and enable them to communicate more effectively. We need to build better avenues for self-expression. It turns out that you don’t need to adhere to the fediverse model to achieve this. Rather than distributing the content, you can federate the identity. You can give people more control over where their posts end up being syndicated. You can build explicitly managed reified spaces that people can intentionally participate within. There’s so much we can do, and we should be willing to evolve beyond a model where only services can exist. We should be willing to build a real Social Web, where the entire Web can participate.
(Somewhat ironically, I think that ActivityPub and ActivityStreams are better fit for actual “activity streams” rather than trying to manipulate a network of syndicated Notes. “Activity streams” have their place, but I don’t think you can unify all of digital social communications under this one paradigm. Rather, we should recognize that resources can belong to multiple classes at the same time – that Thing that’s an Article might also be a Post, an Asset, a Review, and so on.)