this post was submitted on 16 Apr 2025
29 points (96.8% liked)

Technology

0 readers
5 users here now

Tech stuff that isn’t about programming—think gadgets, AI, privacy, the internet, and all the digital things shaping our world.

founded 1 week ago
MODERATORS
 

I know that title might seem controversial, so let's dive in. Right now, here’s the landscape of federated protocols:

  • ActivityPub - The shining star of this article.
  • OStatus - Mostly deprecated in favour of ActivityPub.
  • Diaspora - Exclusive to Diaspora, limiting interoperability.
  • Nostr - Infamous due to problematic user behaviour, unlikely to achieve significant interoperability.
  • Matrix - Could theoretically support social media use-cases but currently doesn't.
  • ATProto - Technically promising, yet hampered by corporate handling and mistrust from the open-source community.

Ultimately, that leaves us with ActivityPub. Everything else either lacks widespread adoption, doesn’t support common social media scenarios, or is effectively proprietary despite being open-source. For those who prioritize open-source solutions, ActivityPub is essentially the only viable option.

The Good

While I’m about to critique ActivityPub extensively, it undeniably has strong points:

  • Interoperability: The core idea is genuinely powerful. Using your Mastodon account to comment on a Lemmy post—or even reading this blog post on your preferred instance—is genuinely amazing. Different instances can display content uniquely, allowing users to interact in a way tailored to their platform.
  • Human-readable JSON: While some might underestimate this, JSON's human readability makes debugging and understanding ActivityPub interactions straightforward.
  • Extensible: Custom properties and types can extend functionality beyond initial design limitations, ensuring future flexibility.

The Bad

Most issues with ActivityPub stem from one critical flaw: much of its behaviour is undefined. The core types and activities allow interactions that make little practical sense. For instance, the Like activity should be simple—you like something. But, in ActivityPub, you can "like" another Like activity, creating infinite loops of nonsensical interactions.

This flexibility leads to a significant problem: no two implementations behave identically. Developers resort to hacks and guesswork to interpret undefined behaviour. Ideally, ActivityPub would strictly define interactions for core types, enabling implementations (Mastodon, Lemmy, Pleroma, etc.) to focus solely on presentation or extending functionality, knowing basic interactions remain consistent across platforms.

A practical example is the confusion around private messages. Two competing methods have emerged: a custom ChatMessage type not officially supported by ActivityPub (used by Lemmy, Pleroma and others), and an alternate "standard" using a Note object that excludes the public audience but explicitly mentions recipients (used by Mastodon and others). This ambiguity creates compatibility nightmares.

Another example I personally encountered was a frustrating issue while implementing ActivityPub for this blog: updating a post propagated to Lemmy but not Mastodon. Despite the Update activity being accepted, Mastodon silently rejected it unless the updated timestamp changed—a logical but unofficial requirement. Developers must track down subtle implementation details that aren't formally documented, significantly complicating adoption and usage.

The Ugly

Privacy is virtually non-existent. When another server federates with yours, it receives all public activities, which might seem harmless initially. However, what happens if you mistakenly share sensitive information publicly? In theory, deleting a post propagates across the network, but real-world scenarios vary greatly—from technical glitches to outright malicious actors ignoring delete requests. Ensuring robust privacy requires substantial protocol-level changes, such as introducing end-to-end encryption—something notoriously complex to implement, as evidenced by Matrix’s struggles.

Another significant flaw is impersonation vulnerability. ActivityPub itself has no built-in authentication mechanism, meaning anyone could theoretically impersonate any user. Although most implementations use the HTTP Signatures standard to address this, ActivityPub itself remains incomplete in terms of essential security features. The standard openly acknowledges:

Unfortunately at the time of standardization, there are no strongly agreed upon mechanisms for authentication.

Conclusion

ActivityPub, particularly its vocabulary rules (ActivityStreams), remains a half-finished protocol. Its effectiveness depends heavily on individual implementation choices, creating problematic discrepancies—such as the inability to reliably send private messages between Mastodon and Lemmy users. Moreover, simple human errors or software oversights can unintentionally expose private information, as recently demonstrated when new Fediverse software mishandled Mastodon-style private messages and displayed them publicly.

The solution? ActivityPub needs a clearly defined second iteration—an ActivityPub v2—that eliminates ambiguity, standardizes behaviour strictly, and provides essential security measures. Certain issues, especially privacy, may never be fully resolved within the protocol, but increased clarity and stricter rules would significantly mitigate existing risks.

This doesn’t mean we should abandon ActivityPub, but rather, we must work collectively to standardize it further, making it more secure and less error-prone.

What are your thoughts on ActivityPub? Have you developed something using it? Are you planning to? Let me know in the comments!

top 23 comments
sorted by: hot top controversial new old
[–] cronenthal@discuss.tchncs.de 9 points 1 week ago* (last edited 1 week ago) (1 children)

This comes to mind...

But on a more serious note: the chaotic development around ActivityPub might be just fine. Let the competing implementations figure out what sticks and whether they want to and can agree on common standards. Do we need to be able to send private messages on a federated social feed? Do we need encryption? It's there actually a real, tangible demand for the "missing" features? And who's stopping developers from creating a reference implementation that actually addresses these? I don't think discussion will solve issues that ultimately require implementation.

[–] dominik@chrastecky.dev 3 points 1 week ago* (last edited 1 week ago) (1 children)

One of my favourite xkcd images! And yeah, creating another competing standard would suck, what's needed is more of a slow evolution towards a sane standard.

Edit: Didn't notice your edit before. Well, I think sending private messages has been part of social media when before it was called social media, so missing that functionality feels like it would unnecessarily hold the Fediverse back.

As for encryption, I believe it is needed in some form because stuff like GDPR and other privacy laws might as well destroy the Fediverse if some bureaucrat decides they want to look into it.

[–] cronenthal@discuss.tchncs.de 2 points 1 week ago (1 children)

I think that slow evolution is essentially happening. At least that's my hope.

[–] dominik@chrastecky.dev 2 points 1 week ago (1 children)

Kinda, but in a really weird way, nothing is getting standardized and everything is a de-facto standard (or not, especially Mastodon devs don't really care about the rest of Fediverse), which is not good for development.

[–] cronenthal@discuss.tchncs.de 1 points 1 week ago

It really depends on the goals of the various players in the field. I for my part don't use mastodon at all and would have no problem loosing all functional connectivity to it from lemmy, the same goes for pixelfed and peertube. Now, if the respective developers see value in having these applications functionally integrated, they can and will work towards this goal. If they don't, and apparently they do not, the implementations might diverge to the point of being incompatible. And this might be just fine, too.

[–] ChaoticNeutralCzech@feddit.org 4 points 1 week ago* (last edited 1 week ago) (2 children)

@SubArcticTundra@lemmy.ml Found another Czech on Lemmy!

Did you know about !prague@feddit.org?

[–] dominik@chrastecky.dev 3 points 1 week ago (1 children)

I didn't! But now I do :) Joined!

[–] ChaoticNeutralCzech@feddit.org 1 points 1 week ago (1 children)
[–] dominik@chrastecky.dev 1 points 1 week ago

Taky veselé Velikonoce! :)

[–] SubArcticTundra@lemmy.ml 1 points 1 week ago (1 children)

Noice. Musíme udělat někde seznam čechů na Lemmy

[–] ChaoticNeutralCzech@feddit.org 1 points 1 week ago (1 children)

Radši to přenechám tobě, nejsem moc pořádný a ztratil bych ho :/

Vynechal jsem někoho tady?

[–] SubArcticTundra@lemmy.ml 1 points 1 week ago (1 children)

Hmm myslím že ne, to je nejkompletnější seznam který tu bude

[–] dominik@chrastecky.dev 1 points 1 week ago

Asi bude lepší použít můj Lemmy účet (@rikudou@lemmings.world), tohle je můj blog a vesměs není použitelný na komentáře mimo moje vlastní příspěvky, nic jiného se mi tu nezobrazuje.

[–] movim@piaille.fr 3 points 1 week ago* (last edited 1 week ago) (1 children)

@dominik It's fun that #Matrix is quoted in the article and not #XMPP indeed.

We do have standardized interoperability, several working servers, and a couple of clients that can do chat and social-networking (that Matrix doesn't do... yet ?).

@debacle

[–] dominik@chrastecky.dev 2 points 1 week ago (2 children)

I must admit I always forget XMPP exists (which seems to be a common trend). It doesn't support e2e, right? That doesn't really make it useful in modern times anymore (in my opinion).

[–] erebion@chaos.social 1 points 6 days ago (1 children)

@dominik

Maybe Movim or debacle will correct me, but I'm seeing a trend towards more people adopting XMPP bc of better interoperability, clients and performance and recently also issues with Matrix. The XMPP stand volunteers at FOSDEM also said the same, mostly people that got frustrated with Matrix and wanted to leanr more about XMPP.

I myself got back into XMPP, as it wasn't reliable enough for me. For example my server's monitoring needs to notify me reliably.

@movim @debacle thoughts?

[–] debacle@framapiaf.org 1 points 6 days ago

@erebion @dominik @movim

I'm using Matrix only for public channels, same as IRC, both via #XMPP bridges, i.e. I'm totally ignorant about it.

TTBOMK, Matrix is more heavy-weight on resources, both server-side and communication, compared to #Jabber.

Also, the ecosystem evolved in recent years, making it more fun to use than ≈2014, when I started using Jabber. Onboarding got better, too.

XMPP isn't a competitor to AP, yet, but I see potential in #Movim and #Libervia. Let's see 🙂

@Goffi

[–] movim@piaille.fr 1 points 1 week ago* (last edited 1 week ago) (1 children)

@dominik There is something like 20 @xmpp clients that supports OMEMO E2EE https://xmpp.org/extensions/xep-0384.html 😋

https://omemo.top/

Movim have a basic support as well but not as advanced as stable as on @dino , @gajim , Conversations, @Monal , converse.js...

Plenty of choices! 😁

[–] debacle@framapiaf.org 1 points 6 days ago

@movim @dominik

Note, that #OMEMO has been taken directly from Signal, only adapted for #XMPP.

Most modern #Jabber clients default to OMEMO for one-to-one conversations nowadays. For private groups, I believe, users still have to enable it explicitely.

I'm not aware of any public Jabber server that would still accept non-TLS connections, so you have both transport #encryption and #e2ee.

[–] tetris11@lemmy.ml 3 points 1 week ago (1 children)

Good informative post, thanks for this.

I didn't know about Like-liking issue

[–] dominik@chrastecky.dev 3 points 1 week ago

Thanks! I'm not aware that any Fediverse software actually allows that, but hey, might be worth testing out what each software thinks about liking a like.

[–] debacle@framapiaf.org 2 points 1 week ago (1 children)
[–] dominik@chrastecky.dev 1 points 1 week ago

I'll check it out, thanks!