Federating servers
So, one part of the popular imagination about ActivityPub I've seen is the idea of server federation.
I think the idea is that if two servers have interacted in some way, all (?) public (?) content from one server will be sent to the other server, and vice versa.
This comes up a lot with new servers; people ask to have a post shared broadly so that their server rubs shoulders with others, getting the federated feed flow going.
ActivityPub does in fact have a mechanism defined for this:
> Additionally, if an object is addressed to the Public special collection, a server MAY deliver that object to all known sharedInbox endpoints on the network.
As far as I've seen, most (?) servers don't implement this; it would overwhelm small servers pretty quickly.
However, some (?) servers do implement it for some (?) activities, especially profile update and delete activities.
Is this the origin of the idea that new servers need to have their content shared around? Are people misunderstanding the way that relays work? Is it just a trick to get your content shared?
41 replies
In FEP 1b12, that is what occurs (most of the time) - as soon as an instance has a dozen users their interests will be varied enough that almost every active community in the threadiverse is subscribed to and they'll be receiving almost all the traffic.
It works out ok at our current scale (small).
@evan At Friendica we have a third way. When configured, we distribute posts to other servers that subscribed to the hashtags that the item contains.
But anyway: I would like to have got something like the AppView in the Atmosphere. Means: not a dumb relay but something like tags.pub, but much more sophisticated.
@[email protected] like a public firehose of sorts?
Suppose there's no reason why not, you would just get yelled at constantly for "scraping" posts.
@julian To which point do you refer? For my first mentioned one we have got a special document at
.well-known/x-social-relaythat every Friendica server publishes that contains information about the subscribed hash tags.And concerning the second point, I imagine some relay service that does not simply forward everything, but that knows which content you you are interested in. So when you subscribed to user A and user B posted something in a thread that user A started, then the relay would forward it to you, although you never subscribed to B. And when then the account B got deleted or blocked, then of course you would be notified as well.
@heluecht @julian
This can be done with inbox forwarding or special activities (FEP-171b or FEP-1b12).
Selective relays may be used for other things though. There is https://github.com/dtp-mstdn-jp/selective-relay that apparently can filter activities by hashtags, domains and number of attachments
@silverpill @julian Currently there is no ActivityPub relay available that could do what Atmosphere's AppView is capable of.
@heluecht @julian I concur, but what capabilities you're interested in?
Almost everything in ActivityPub could be done peer to peer, without a relay in the middle.
@silverpill @julian When A follows B and C comments in a thread from A, but on the server from B no one follows C, how will then A be notified by comments or edits from C? And what happens when C got banned for spam. How does this information reach A? On C's server you can see where the now banned contact wrote comments. But you don't see, that comments from C where distributed (or fetched) from A.
And it gets worse, when you simply fetch messages, that hadn't been pushed to you. Then you won't get any updates, except when you would pull it from time to time.
And of course some "give me all posts with that specific hashtag but only in these languages" will not work quite well, when you are on a stand alone server.
@heluecht @julian I am not sure if I understood your example correctly, but here is how it all works with FEP-171b / Conversation Containers:
- A follows B
- C comments on B's post (
Createactivity)- B generates
Add<Create>activity and sends it to A- A receives
Addand adds C's comment to their copy of the conversationIf C is banned for spam (and their comment removed):
- B removes C's comment (
Deleteactivity)- B generates
Add<Delete>activity and sends it to A- A receives activity and removes C's comment from the conversation
Another possibility is that when someone asks to have their content shared, that will result in a few Follow requests, which does result in their future content being distributed to other servers (and public content goes to Fediverse and hashtag feeds).
So, it seems like the sharing is what got the distribution going, even though it is indirect (sharing causes following causes appearing in the Fediverse feed).
@evan I think - reviewed it given that you corrected my misapprehension the other day - that other than for those who live'n'breathe protocol, the nitty-gritty details are really not spelled out in the platform documentation for users or admins.
Or even those of us who understand enough to read along (I did remember that I "knew" this, just not that expert in expressing), it's more detail than we can articulate when there's a new user or instance showing up.
@evan personally I think "server federation" is best achieved through relays.
The distribution model fits best, and the technology already exists, even if not broadly implemented.
One could be able to plug a server instance actor in to subscribe to its relay.
@julian yes, I agree. This is a different idea -- that somehow interaction between actors on different servers will make their servers connect and share data. It's incorrect, but it's interesting.
@evan oh I see what you mean... that a server merely discovers another, and that kickstarts a mutual sharing of activities.
I'm afraid that would be a bit of a scaling challenge π
@julian here's an example I found with a search:
https://f.bumblebee.systems/@bumblebee/113834766747645985
@evan I think it is a misunderstanding of the current activity distribution styles... and it's entirely understandable isn't it? You install some software, it knows nobody, nobody knows you, and somehow you're supposed to kickstart content discovery.
I don't know what the solution is, but I did mentally note while implementing relay support that it would be simple to turn NodeBB into a relay itself, and have all NodeBBs just use a central NodeBB (aka mine) as a source of content.
Here's another:
https://mstdn.kevinthetechguy.ca/@kevinlovestech/112873393455953967
In the streams repository a few years back, we implemented a mechanism where "site actors" could follow each other, and this would result in sharing local public content with selected other sites, regardless of personal connections between actors. This scales so you can build small or large "clusters" or cooperating servers. The keyword being that this is server sharing which is "consent" based.
There was little or no interest in this ability from anybody, so the feature languished. I think it's still implemented, but there's no motivation to pursue it further. I'll just mention it if somebody else feels like dying on hills today.
A similar feature exists in Pleroma. I actually find it useful, my server follows a couple of Pleroma instances in addition to relays
@[email protected] really? How does it work?
It's a LitePub relay actor, located at
/relay. Announces all public posts if relaying is enabled in config.That makes sense.
When I implemented the Litepub style relay logic I figured it would immediately work the same way as well (since two-way relay communication uses the Follow-Accept flow as well.)
It did not work immediately with NodeBB, have yet to figure out why π
Does it use the relay method? I always thought that if I implemented something like that I'd be the first. Cool to know Pleroma already supports.
@julian @technical-discussion @evan pleroma ships a /relay actor turned on by default that follows back other relays, this server subscribes to a thousand or so of them, announces get turned into remotefetches for efficiency, and the network is filled effortlessly without follow for follow botting
wish the network had some sort of shared as:public /outbox too for backfill
@[email protected] @[email protected] @evan NodeBB now also ships with /actor that can be followed. It will act as a relay :+1: