I heard often about activityPub being challenging to implement.

Now I know part of this is because, if you are building on activityPub, you want interop with existing platforms such as mastodon, and they do their own thing.

But ignoring that aspect, what is so hard about activityPub? What could have been done better?

I am a software developer, so feel free to use software dev concepts and terms when explaining. Thanks!

    • @[email protected]
      link
      fedilink
      English
      1016 days ago

      the protocol doesn’t define how to ensure activities propagate to every server.

      Outboxes are kinda that, but as I understand it mastodon’s implementation is deliberately defective.

    • JackbyDev
      link
      English
      115 days ago

      Unless two instances had the exact same set of servers they’re federated with then I wouldn’t expect any given content to have the same number of likes/comments/etc when viewed from different instances.

    • @[email protected]
      link
      fedilink
      English
      114 days ago

      What were some of the reasons as to why you “found it impossible to set up everything properly” re: C2S implementation? I’ve been trying to figure out why the C2S isn’t being adopted, as I think it solves many of the fediverse’s current UX challenges

  • AlexanderESmith
    link
    fedilink
    1016 days ago

    I’ve been in tech for multiple decades, and when I looked at the structure of the JSON and the developer documentation, my eyes glazed over and I bounced off of it. It’s worse than “not elegantly designed”, it’s (in my opinion) kinda slapped together without much thought or testing. This is a thing seems to me to have been a side-project that had some anemic interest for a long time, then became spontaneously exponentially popular on accident (because of a dying bird and a terribly handled forum API), and now it’s just sunken cost.

    https://www.w3.org/TR/activitystreams-vocabulary/#actor-types : this is a fucking nightmare, and almost all of the decisions here are completely arbitrary. Like, seriously, what the hell is this?

    There’s also no real reference implementation, so it’s almost guaranteed that various apps won’t be able to talk to each other without some kind of translation layer (See: Mbin’s implementation of a Mastodon-like microblog). Mbin/Lemmy/Mstodon/etc don’t even have agreement on how likes, votes, or boosts work. User addresses are also wacky; Is it @someuser@server.tld or server.tld/u/someuser ? Both?

    Why is it hard to implement? It’s not really a standard, it’s a college dorm data-structure fan-fic that wished it was RSS with a like button (and a bunch of other buttons that apparently no one needs or wants, since no one uses them). I’m utterly flabbergasted that the w3 published this. Like, there’s literally a section on Spam that just kinda says “figure it out yourself”. This is a useless document, which also hilariously contains an entire section of self-congratulation for a “standard” that hand-waves things like how to handle a DOS and doesn’t even bother suggesting a method of authentication since their “years of hard work and experience by a number of communities exploring the space of federation on the web” couldn’t agree on one.

    What could have been done better? Having consensus from a larger group of better developers during the protocol phase (mostly to weed out silly crap that isn’t useful, and actually defining - you know - a standard), and some decent time in the oven for server implementations before millions of people flooded into a series of barely connected instances that are running software that isn’t really ready for production (many of which are really close, but are hamstrung by this awful protocol).

    • JackbyDev
      link
      English
      215 days ago

      Not even more than ~one page in and I see this

      IntransitiveActivity

      Inherits all properties from Activity except object.

      ??? That’s not how inheritance works in any language I’ve worked with lmao. One of the most basic types in the language and I’m already debating the pros and cons of different designs. Should I make the inheritance work with the type system and just return null for or should I add my own dummy types that aren’t in the spec so that it’s impossible to get an object property from IntransitiveActivities?

  • distant plant
    link
    fedilink
    415 days ago

    I think the biggest issue is HTTP Signatures - they’re not part of the standard, they’re not well-documented, and without them your server won’t federate with anything and so you have no idea whether it works.

    Plus sometimes an implementation works with Mastodon but not something else. I think Mastodon just uses certain headers when calculating the signature, but Bridgy Fed also includes the URL or something. The C# code I’d copied was programmed to exclude the URL always, so I had to change that, but it took a while to figure out that that was the issue.

    @[email protected] @[email protected]