I just had that problem when you browse to a Mastodon post and ⭐️ it, or try to follow someone. The choreography is clumsy, and the kind of thing that will hinder mainstream adoption of ActivityPub.
acct
is IANA official and used behind the scenes with webfinger. It’d be dead-simple to enable browsers looking up an app to handle acct:
URLs: an ActivityPub client.
It’s trickier to think of how to handle posts, given the discussion about Lemmy/Mastodon interop… and the ActivityStreams spec has a dozen object types! But I think I’m going to want only as many clients as necessary, and one sounds great, so I’m interested to hear what people are thinking at an infrastructure level
ActivityPub uses the
acct
URI to kickstart itself and then uses LD-JSON to span the network. The JSON contains fields and lists that can be dynamically expanded into whatever representation you need, with default schemas ready for use through ActivityStreams.I think it’s difficult to set up a URI standard for ActivityStreams objects because there is no standard identifier, nor is there a guarantee that these identifiers will be URI-safe. Objects do contain references to (unique) URLs that identify them, but the data is linked either by value (written out completely) or as URLs.
Setting up a URI scheme can be difficult to do comprehensively. How do you represent a link to a repost of an edit of a Location object? You can’t exactly expect the URL to indicate the type, so you’ll probably end up with “ap:server.com/1234”, but at that point you’re leaving out the important part (“where do I go to fetch this object”). You can’t just assume that there are standard endpoints because ActivityPub doesn’t standardise any. Soms apps break on showing Lemmy content for this reason; they were written for Mastodon and Mastodon alone, so their URL generation breaks.
I think an URI scheme would just become one of those unimplemented or useless specifications. It would only distract from what I consider to be the much better solution: fixing up and implementing ActivityPub’s client-server protocol.
The CS protocol lacks important things (like “how do I log in”), but it exposes ActivityPub directly. Your server will expose a bunch of lists (timelines? communities? Up to the server!) and all the app needs to do is render those. Dig down a level and you get a bunch of objects; posts, notes, comments, whatever you can think of, and they too can be rendered by the client in any way you may want.
The protocol is rather freeform but importantly, the server takes care of any references and dereferencing. Clients shouldn’t need to deal with that mess of they’re connected to a server that handles everything for them already.
You can write a super generic ActivityPub CS client that operates somewhat like a file browser, and then it should work with any type of ActivityPub content. A smarter app could detect the type of server responsible for managing certain things (i.e. when you’re following a Lemmy community, treat posts in it as such, and not as a flat timeline), and the protocol extensions that every server adds should help with that.
The only limitation, in my opinion, is the fact that so few servers actually implement the ActivityPub CS protocol, and that in turn there are only a few applications that make use of it. I think this comes down to the vagueness of things like “how do I tell whay user this is in a standardised way” and if we can improve that part of the protocol, we may be able to get the “one single super app” for ActivityPub.
Thanks for the thoughtful response.
Yes, this seems like one of the bigger hitches. I’ve never investigated, but I wonder if the
git+ssh
plan is formalized, and whether it is an optionSeems a mistake to me too imagine that the future of ActivityPub is servers limited to specific certain content types?
Need to think more about the client/server parts of your post, but again, thanks for taking the time
In practice, that’s what the Fediverse is doing already. The Threadiverse (Lemmy and Kbin) are using ActivityPub but use objects and behaviour that’s nothing like Mastodon’s. Mastodon, in turn, doesn’t implement the objects Lemmy uses as posts, which causes tons of “why are all Lemmy posts a title and a link” comments when the two interact.
I have no idea how Friendica and its Facebook-like model implement ActivityPub but I’m sure it’ll have differences and incompatibilities of its own.
Furthermore, a big problem in the current iteration of the Fediverse is that the ActivityPub part of it mostly consists of incompliant servers. Try running the ActivityPub/Streams test suite on your favourite Fediverse server, and try to find one that actually passes. Most servers seem optimised to only use the ActivityPub/Streams parts that make basic federation work and not much else.
Honestly, trying to unify all of these different apps is rather pointless. I don’t think Mastodon users want their apps to suddenly become Reddit clones and I don’t really see the point in adding a general timeline to Lemmy either. Then you need to start thinking deeper about functionality that goes beyond “a bunch of text and links”. What does Lemmy do with “Question” or “Travel/Move” objects? Do Lemmy apps need to embed map software now? And how about “Offer”, are we adding market place support to Lemmy? And dear lord, how would a Lemmy app even deal with being informed about stuff like “John is Alice’s brother”.
I think we can make usable apps that implement the various representations used in ActivityStreams, but based on how apps like Fedilab are solving these problems, I think a generic approach will just be a worse experience for everyone. Right now, everything is either a Twitter clone, a Reddit clone, a Facebook clone, or something bespoke that few other platforms can interact with.