Discussion
Loading...

Post

Log in
  • About
  • Code of conduct
  • Privacy
  • Users
  • Instances
  • About Bonfire
洪 民憙 (Hong Minhee) :nonbinary:
洪 民憙 (Hong Minhee) :nonbinary:
@hongminhee@hollo.social  ·  activity timestamp yesterday

When I first started working with #ActivityPub, before #Fedify existed, it felt like writing web apps in Perl and CGI in the late '90s. Interesting, even exciting—but never comfortable. That era where your business logic and your protocol plumbing were just… the same thing:

print "HTTP/1.1 200 OK"
print "Content-Type: text/html"
print
print "Hello, world!"

Decades of web development have given us layers of abstraction we now take for granted. Nobody hand-parses application/x-www-form-urlencoded query strings anymore. Nobody writes their own JSON codec, or manually constructs HTTP request/response messages. These things just aren't your problem when you're building an app.

ActivityPub development still feels like they are your problem. What do you do when the https://www.w3.org/ns/activitystreams#actor property comes in as a string instead of an array? What about when https://www.w3.org/ns/activitystreams#object is an embedded entity rather than a URI? How exactly do you implement HTTP Signatures? And wait—what's Linked Data Signatures, and do you need that too?

The real issue isn't that ActivityPub is complicated per se. It's that you can't get away with understanding it at a high level. You have to know it the way an implementor knows it—every edge case, every inconsistency in how different servers serialize JSON-LD, every signature scheme that exists in the wild. That's a lot to learn before you can even start thinking about your actual app. And when developers understandably cut corners on the protocol to focus on their product, it quietly becomes an interoperability problem for the whole ecosystem.

What I want ActivityPub development to feel like: you spend a day understanding the big picture, and then you just… build your app. That was the goal when I started Fedify, and honestly, we're not fully there yet. But it's where I want to get.

#fedidev #fediverse

  • Copy link
  • Flag this post
  • Block
Marcus Rohrmoser 🌻
Marcus Rohrmoser 🌻
@mro@digitalcourage.social  ·  activity timestamp 24 hours ago

Hi @hongminhee,
I feel you, but more often than not I see complexity not warranted by functionality but by what Fred Brooks called design by committee (In "The Design of Design").
Take the signatures https://doi.org/10.17487/RFC9421. Brings 0 benefit over cavage, could have been a FEP formalising it. But brings a lot of complexity.
This is a burden for indie implementors and benefits corporate ones.

I personally like implementing the whole stack and keeping it simple. That's what goes under the bus first when doing abstractions.

P.S.: admitted, CGIs on one server won't serve billions. But is that a good idea anyway? You can still do sound tiered architecture in a CGI. I can't ridicule a hello world for not being MVC.

  • Copy link
  • Flag this comment
  • Block
洪 民憙 (Hong Minhee) :nonbinary:
洪 民憙 (Hong Minhee) :nonbinary:
@hongminhee@hollo.social  ·  activity timestamp 15 hours ago

@mro That's a fair point about design by committee, and I don't disagree that RFC 9421 added complexity without proportionate benefit. But I think it's a somewhat separate question from what I was getting at.

Even if every ActivityPub spec had been designed with ruthless simplicity—no committee sprawl, no redundant signature schemes—the DX problem would still be there. You'd still need to know what to do when a property arrives as a string instead of an array. You'd still need to handle embedded objects vs. URIs. The gap between “I understand ActivityPub conceptually” and “I can ship something that actually federates correctly” would still be wide.

My point isn't really about why the stack is complex. It's that the complexity, whatever its origin, currently falls entirely on the application developer. A framework should be able to absorb most of that—the same way web frameworks absorbed HTTP parsing and content negotiation—so developers can focus on what their app actually does.

(And yes, the CGI analogy was never meant to be architectural criticism! Just reaching for a feeling most of us remember.)

  • Copy link
  • Flag this comment
  • Block
quaff
quaff
@quaff@thecanadian.social  ·  activity timestamp yesterday

@hongminhee Is there no official reference SDK for AP?

  • Copy link
  • Flag this comment
  • Block
wakest ⁂ FOSDEM
wakest ⁂ FOSDEM
@liaizon@social.wake.st  ·  activity timestamp 21 hours ago

@quaff @hongminhee nope, theres not an official anything...

  • Copy link
  • Flag this comment
  • Block
quaff
quaff
@quaff@thecanadian.social  ·  activity timestamp 21 hours ago

@liaizon @hongminhee speaks to the nature of truly open protocols. but would be cool if there was one that devs could rally behind because it's got the best coverage of the spec.

  • Copy link
  • Flag this comment
  • Block
wakest ⁂ FOSDEM
wakest ⁂ FOSDEM
@liaizon@social.wake.st  ·  activity timestamp 20 hours ago

@quaff @hongminhee thats the main issue, "the spec" doesn't have the coverage to have an implementation to cover it all. there are a ton of things that are under defined in it or that you need to point to some other spec that points to some other spec etc. thats sorta at the heart of this whole meta conversation thats been taking place recently

  • Copy link
  • Flag this comment
  • Block
silverpill
silverpill
@silverpill@mitra.social  ·  activity timestamp yesterday

@hongminhee Better developer tooling is the only correct answer to rising complexity. Getting 200 different servers to smoothly interoperate is impossible, but we can do that with 10 libraries.

  • Copy link
  • Flag this comment
  • Block
洪 民憙 (Hong Minhee) :nonbinary:
洪 民憙 (Hong Minhee) :nonbinary:
@hongminhee@hollo.social  ·  activity timestamp yesterday

@silverpill That's right. I think client-side abstraction will be necessary when ActivityPub C2S interactions become more widespread, too.

  • Copy link
  • Flag this comment
  • Block
silverpill
silverpill
@silverpill@mitra.social  ·  activity timestamp yesterday

@hongminhee Better developer tooling is the only correct answer to rising complexity. Getting 200 different servers to smoothly interoperate is impossible, but we can do that with 10 libraries.

  • Copy link
  • Flag this comment
  • Block
Ricardo
Ricardo
@rick@rmendes.net  ·  activity timestamp yesterday

With Fedify & Claude code it took me just 1 few hours to develop a indiekit plugin to exist on the Fediverse with @rick@rmendes.net
I spent more time on creating the AP reader to consume data from the Fediverse than anything else that's for sure! Thanks for your absolutely amazing foundational work with Fedify!

  • Copy link
  • Flag this comment
  • Block
洪 民憙 (Hong Minhee) :nonbinary:
洪 民憙 (Hong Minhee) :nonbinary:
@hongminhee@hollo.social  ·  activity timestamp yesterday

@rick Great work, Ricardo! And thank you for using Fedify!

  • Copy link
  • Flag this comment
  • Block
julian
julian
@julian@activitypub.space  ·  activity timestamp yesterday

@hongminhee@hollo.social I think you're completely right, and this is coming from somebody who went deep into the weeds of ActivityPub when building out his own implementation.

Generic C2S servers offload the server side aspects to a trusted third party.

Generic S2S frameworks (like fedify!) give you even more control.

We need both! We need fewer idiots like me who decided to implement the entire protocol from the ground up 🤣

Do it @hongminhee@hollo.social! DEPRECATE ALL MY HARD WORK ALREADY!!!

  • Copy link
  • Flag this comment
  • Block
洪 民憙 (Hong Minhee) :nonbinary:
洪 民憙 (Hong Minhee) :nonbinary:
@hongminhee@hollo.social  ·  activity timestamp yesterday

@julian Haha, most ActivityPub implementers have their own frameworks, they just haven't separated them out! It would be really great if there were full-featured ActivityPub frameworks for each of the major programming languages.

  • Copy link
  • Flag this comment
  • Block

bonfire.cafe

A space for Bonfire maintainers and contributors to communicate

bonfire.cafe: About · Code of conduct · Privacy · Users · Instances
Bonfire social · 1.0.2-alpha.34 no JS en
Automatic federation enabled
Log in
Instance logo
  • Explore
  • About
  • Members
  • Code of Conduct