In this very limited case, then no, there aren’t really any implications that I’m aware of that are worth noting. Piefed is not doing anything wrong, hacky, or even particularly unusual by having proxy actors. The use of proxy actors is a broadly-implemented design pattern that is used for all manner of things, like flagging/reports, HTTP signing, and so on. Using proxy actors for voting is a natural way to separate the PII of the voter from the actual voting behavior itself. There isn’t really anything that “ActivityPub” needs to do to support this use case – it is already supported. There is no need to define an AnonymousLike
when you could simply decide to drop as:Public
from your addressing and/or use proxy actors. I suppose you could even just not declare a value for actor
, but this is probably going to trip up activity validators.
This aggregating necessarily happens within at least one origin, no? And that origin may or may not be replicated across one or more peers. There doesn’t need to be a single global network. Currently, each “instance” has a localized view of whatever it is aware of. Nothing is stopping instances from peering with each other in a similar way to IRC networks, except for a lack of implementation. This peering could be managed at a “relay” level by having either a central actor that distributes activities to its constituent peers, or by having a many-to-many relationship where every peered “instance” follows some actor from every other “instance”. This allows for as wide a view as you want – want it wider? Just follow more actors!
The syncing would happen before displaying anything to the user, in the same manner that a Web browser must fetch a Web resource before displaying it to the user. This is how any user agent works. What a lot of people don’t realize is that under the “instance” model, your “instance” is your user-agent, and is operating like a Web browser or ActivityPub client – it is not strictly or purely an S2S server. It is a monolithic application that elides out the C2S API in favor of internal mechanisms.
A more practical example: your “instance” could fetch a collection of objects, and then fetch the likes
collection for each object to get the totalItems
count. Or the authoritative origin could inline-embed a partial representation of the likes
collection, like so:
id: <some-object>
likes:
- id: <some-object/likes>
- type: OrderedCollection
- totalItems: 47
- first: <some-object/likes/page-1>
All of this is inherent to the way the Web works. The data model of ActivityPub is Activity Streams 2.0, which defines activities and objects and collections, which are resources, and those resources are Web resources, and are also described via the Resource Description Framework (RDF), serialized as JSON-LD. ActivityPub uses all these building blocks to provide a pubsub mechanism for being notified of activities that occurred somewhere.
ActivityPub “supports” this use case but is not designed (solely) for this use case. The Activity Vocabulary can certainly be used to describe the primitives that make up a Reddit-like experience – the submission of Link
s and/or Note
s, with some being potentially inReplyTo
other objects or threaded/grouped within a context
, where objects can have a likes
collection and by extension you could similarly define a dislikes
collection. Frankly, I’m not sure what shortcomings you see in the protocol here – what about it is not “very suited” for this purpose? To me, it seems like any lack of fitness-for-purpose can be addressed by thinking more generally in terms of Web resources. After all, a Reddit-like content aggregator is just one of the many specific ways you can present the same generic data. There isn’t actually as tangible of a split between “microblogging” and “content aggregation” as one might think – it’s all just the Web. You publish resources and other actors can subscribe to those resources. What you do with those resources after-the-fact is up to you. Browsing the likes
collection and calculating some score, then presenting a bunch of Objects or Links in a Collection? That’s just one of the many things you can do.