History of ActivityPub

Fediverse history nerd here, and author of a hastily drafted blog post on the subject, which still gets referenced occasionally. I know your presentation was probably ages ago @phx, but for the record…

Love the diagram! Although I would put GNU Social and pump.io in the opposite order. It was partly due to Evan and identi.ca switching to pump.io that the GNU social project emerged, to continue an active fork of StatusNet (getting ahead of myself, see comments below).

Just for clarity, OStatus was developed by the same company as StatusNet, as a replacement for OpenMicroblogging. Not adopted from elsewhere.

Call me a completist, but I’d love to see both OM and Laconica in that diagram too. As mentioned by @melvincarvalho (and in my blog piece linked above), OM was the first protocol developed by Evan and his team, before they changed the name of their software from Laconica to StatusNet. It makes sense to me that the protocol change was the motivation for the software rename, to avoid any negative associations caused by the limitations of the older protocol.

It’s true that Evan developed the Pump API to replace OStatus. But AFAIK, it’s only ever been used in the pump.io software. Most notably when Evan used it to replace StatusNet on Identi.ca.

OStatus remained the dominant protocol in the fediverse until it was superseded by ActivityPub. After Evan pivoted to pump.io, StatusNet continued in maintenance mode until it was merged in with two of its forks - Free & Social and GNU social - into one project under the name GNU social. Pleroma, postActiv and Mastodon all used OStatus so they could federate with the early fediverse, formed mainly by GNU social servers.

Quite so. ActivitySteams is a social data format, which was used as the standard data format in the AP spec. The 1.0 version of AS used XML (as do XMPP and RSS) and preceded the Pump API, which as @macgirvin says, used a JSON version of AS as its data format. If memory serves, this work formed the basis of AS 2.0 and was standardised by the same W3C working group as AP (can anyone confirm or correct?).

One of the events leading to the ActivityPub standardisation was the decision by Christine Lemmer-Webber and the GNU MediaGoblin team to implement the Pump API, aiming to create something like PeerTube. Since Matt Lee of GNU FM and the rest of the GNU social team were still using OStatus, it seems likely that people from all 3 GNU projects (and maybe others) would have talked about cooperating on one social federation protocol. Christine and Jessica Tallon from MediaGoblin ended up doing a lot of the drafting work as part of the W3C working group on standardising AP.

I would add that the Diaspora project - both the app and the variant of OStatus developed for it - were also important precursors to AP, and deserve a place in your diagram. See my comments on Diaspora below.

Yes. As I say, pump.io replaced StatusNet on Identi.ca (which AFAIK still runs on it), and GNU social was a fork of StatusNet, as mentioned above.

Indeed. This is why Diaspora created their own variant of OStatus, to add support for federated DMs and the ability to add accounts from different servers to “aspects” (these worked kind of like “circles” in Goggle+ and might be where that idea came from). Diaspora is the only surviving fediverse project that has never implemented ActivityPub. It only connects to the rest of the fediverse via apps like Friendica and Hubzilla (both founded by @macgirvin’s), and SocialHome (founded by @jaywink), which I believe reverse-engineered Diaspora’s APIs before they were fully documented (can anyone confirm or correct?).

Yes. I believe Gargron originally set out to design a new web app for Mastodon.social, to work with a GNU social backend. As Hannes had done with Qvitter for the Quitter instances (I believe Maiyannah Bishop created postActiv by forking both GNU social and Qvitter). But I suspect Gargron found the GNU social client-to-server API too limiting, so he ended up writing a whole OStatus server backend from scratch in Ruby-on-Rails for Mastodon.social.

Gargron caused some panic early on when he didn’t consult other OStatus developers about adding Direct posts to Mastodon, resulting in Direct posts appearing on non-Mastodon servers as normal, public posts :confused: This created a perception that Gargron doesn’t care about privacy or user safety, which persists in some corners of the fediverse to this day. However, a lot of people liked the Mastodon.social web app so much that lots of independent Mastodon servers were set up. Especially after the first big influx of non-geeks from Titter in 2016 (which prompted my brief history blog piece).

Mastodon was the first fediverse project to implement the AP server-to-server API, which only helped it leave GNU social in its dust. But as @macgirvin mentioned, Mastodon continues to use its own AP client-to-server API, and Gargron has never implemented that part of the AP spec. With Mastodon servers dominating the fediverse since AP was published, the “Mastodon API” has become a de facto standard for apps due to network effects.

I’m not sure if @SeriousFun01 was referring to this, or the fact that smooth server-to-server federation with Mastodon requires a lot of extras to be implemented on top of the vanilla AP spec. Such as WebFinger for account searches, and the obsolete http-signatures that @macgirvin also mentioned. But either way, on top of the Direct post debacle mentioned above, all this has created a perception that Gargron doesn’t care about technical standards or cooperation with others implementers, which persists in some corners of the fediverse (like here) to this day.

I have thoughts about this, but I’ve done my best to report the history here, and keep the editorialising to a minimum. So I’ll post them in their topic ; )

1 Like