How Solid and ActivityPub complement each other best

This is a follow-up to Which links between ActivityPub and Solid project?.

Solid (discussed on their community forum) and the Fediverse have a lot in common. For the future of the Decentralized Web it is very important for there to be convergance of initiatives, instead of fragmentation.

I’d like to dedicate this thread to investigate the ways in which Solid and Fediverse can complement each other.

First note that there are already ActivityPub + Solid combined applications, like openEngiadina (@pukkamustard), Agora (@Smag0), SemApps, life-server and other work, like @aveltens Solid Group App (see also Groups implementation) lend themselves well to become compatible.

To kick this off here are some points where each initiative imho could learn from the other:

Fediverse 2 Solid:

  • Communication / messaging patterns at scale in production environments
  • Lessons-learned in production environment (e.g. performance-wise)

Solid 2 Fediverse:

  • Data storage strategies that are private-by-default (i.e. POD’s)
  • Enjoying the full richness + benefits of linked data (semantics, ontologies, etc.)

Common concerns

  • Identity (SSO, roaming identity), auth / authz
  • Compatibility (specs, semantics, ontologies)
  • Encryption

You probably have many more, and more detailed, additions to this list, so fire away :slight_smile:

PS: I created this exact same topic on Solid forum (with some links changed in context).

Edit: Note that there is also Encrypted Data Vaults which seems to have much in common with Solid.

6 Likes

Cross post about Agora https://forum.solidproject.org/t/discussion-solid-vs-activitypub/2685/32

@how, @cwebber the agenda point of Links between AP and Solid had been there for a while without anyone to discuss with, so I raised attention on the Solid forum and the External Interop Panel and just now received an extensive response from @csarven on github where he mentions potential areas of interop, and also ends with the invitation:

So, dive in - join and contribute to the W3C Social and Solid Community Groups, panels, specifications, implement servers and applications touching both projects.

I am just the communicator between socialhub and solid and not the expert to drive this further, but I hope based on this you’ll find common touchpoints :slight_smile:

Here is the full response by @csarven mentioned in the previous post, so you don’t have to run out to GH:

I hope an overview here can helpf to base things off because there wasn’t much to the Social Community Group’s agenda item beyond a mention of aligning efforts.

While the two projects may not have recently exchanged notes, there is respectable history of interest and work done to interop from early on eg. see the output of W3C Social Working Group (2014-2018): https://www.w3.org/wiki/Socialwg . As far as I know, not much has changed since the WG’s output given the state of work in W3C Social and Solid Community Groups. As base:

As an example implementation, dokieli ( https://dokie.li/ , https://github.com/linkeddata/dokieli ) is a Solid application that also conforms to ActivityPub Client-to-Server Client ( https://activitypub.rocks/implementation-report/ ) requirements.

So far Solid specifications and implementations focused primarily on server-client and client-client (data interop for applications). Solid server-server interaction is within the scope of the project: solid/specification#36 , solid/specification#49 , solid/node-solid-server#621 , solid/solid#242 , https://github.com/solid/notifications-panel … ActivityPub’s fediverse is primarily (but not solely) on server-server communication. I think that’s the general area to focus on for interop.

As well as other areas for interop eg. WebID enables loose coupling of identity, identification, authentication, authorization, and storage. AP servers share social activities on behalf of actors. Or even identifying relatively small areas to interop eg. a recent chat on CORS and using proxies in IRC #social ( https://chat.indieweb.org/social/2020-05-04 ) mentioning Solid’s CORS requirement and use case requiring the discovery of user’s preferred (or trusted) proxy endpoint(s): solid/vocab#26 - that is a shared UC within the scope of ActivityPub. See also: tootsuite/mastodon#10400 .

So, dive in - join and contribute to the W3C Social and Solid Community Groups, panels, specifications, implement servers and applications touching both projects.

1 Like

I linked an as:outbox from my Solid WebID Profile:

The outbox is both, a LDP container as well as a as:OrderedCollection and links to some pages containing some activities. I handcrafted the data, but I guess a Solid Server could easily implement native support for activity streams collections in addition to LDP.

1 Like

@aveltens nice work

So a major problem right now is that said outbox does not serve json-ld

curl -H “Accept: application/ld+json” https://angelo.veltens.org/public/outbox/1
Error translating between RDF formats

Its unfortunately quite difficult to get fixes upstream at the moment. But local patches could be applied to create the interop that was promised

1 Like

In theory this should work, but I guess it is a Bug in NSS. After digging a bit deeper into ActivityPub I think it should be no big deal to make a Solid Server compatible.

I stumbled upon this post describing how to do a ActivityPub post manually and going to try it out some time next week using Solid.

I was reading that post too and I came to a similar conclusion

I’d like to see a server that works with both systems

Either NSS patched to work with AP and JSON-LD

Or, say, a mastodon server patched to work by giving JSON-LD in the profile page and also including public key material

There is a slight difference between how public keys are displayed in AP/Solid in that AP uses publicKeyPem and Solid uses modulus/exponent. But modulus/exponent failed to catch on and if I was starting again, I’d probalby align to the way the fediverse does it

I see great potential at the intersection of both worlds to have a server that can post activities to other servers. And to have a profile that can log in to any solid pod, use solid apps, use it for cloud storage etc.

2 Likes

Also check out the wiki post on this forum Guide for new ActivityPub implementers

I recently wrote a long post on the Solid forum:

The TL;DR of it boils down to consideration of two questions that involve the Solid community itself:

  1. Focus on Killer App vs. Killer Technology?
  2. Be a Community of Interest vs. Community of Action?

Just like I am gauging interest to organize for more community empowerment of SocialHub I just created a Poll on the Solid forum to see if their community has a similar interest:

Hi @codenamedmitri ,

Unfortunately I couldn’t join the SocialCG. Reading the meeting minutes now. Very interesting stuff you are working on.

I will add life-server to the AP apps watchlist mentioning ‘planning AP support’.

Did not find AP mentioned in XR3ngine repo yet, so will wait to add. Very cool project, btw! I assume you are aware of Immers Space already?

In terms of advocacy I’ve spent a lot of time to get Solid and AP communities more aware of each other, with some limited success. The complementary nature of both has great untapped potential. Here at SocialHub the #fediversity:fediverse-futures ideation space is for posting ideas that would require to focus more on the Linked Data aspects of AS/AP and beyond the Microblogging domain. I invite you to use this space to brainstorm for both projects.

You might help bring Solid / AP closer together, by deliberately cross-reffing topics and/or crossposting. See the post above for some of my effort to make Solid community more active (there seems zero interest or time available from Inrupt for this, and tagged staff didn’t even respond).

Update: Life-server was already added to the watchlist by @strypey :slight_smile:

@srosset81 just posted an exciting project: ActivityPods combines ActivityPub and Solid. I’ll cross-reference the corresponding topic on SocialHub community here:

1 Like

An exciting new piece of this stack have recently emerged, namely Rauthy, a self-hostable OIDC provider. In the last day it added support for DPoP:

This in turn paves the way for Solid-OIDC, which I think is how we finally bridge the gap between Solid and ActivityPub.

The opening post of this topic already calls out identity as a key commonality. The same point has been made by former Solid developers:

…and these ideas have been swirling around in this community for a long time.

Quite recently @djsf has been exploring a Solid and Mastodon integration, eventually arriving at the need to properly grok OIDC in order to progress further.

I’m also excited about the existence of ActivityPods, but I’ve yet to understand how it works with identity. The extent to which it wants to interoperate with OIDC is an open question.

In summary:

  • I want my root digital identity stored in a Solid pod.
  • I wanna log into all fediverse platforms via my Solid OAuth login.
1 Like

In this Kitsune issue musing about minimal user agency, I’m trying to imagine how the fediverse model of identity could change if we relegate the fediverse instance to a second-order identity manager as opposed to first-order, primary identity manager.

minimal definition of user agency:

  • Own your ID
  • Own your content
  • Own your contacts

https://subconscious.substack.com/p/the-minimal-definition-of-user-agency

I wonder if it’s possible to accomplish this in a way that doesn’t require [Nomadic Identity] upfront.

Just having Domain names as usernames and Multiple domain support would already be a minimal version of ID ownership.

The usage of a domain ID by an apub server just needs to be something that can be revoked, I.e. by not having your DNS be pointing there any longer. Could be reinforced further by Add support for IndieAuth authentication · Issue #24066 · mastodon/mastodon · GitHub

Minimally owning ones content and contacts is just a matter of having these backed up in a third party storage (like Noosphere or Solid), right?

Powered by the likes of Rauthy for full-fledged OIDC capabilities, Solid could be that primary.

Here’s an approximation of what I’d like:

  • I’m running Rauthy on erlend.sh (actually hosted at id.erlend.sh or whatever) as my primary identity manager.

  • I sign up for joinkitsune.org to start microblogging.

    • I authenticate with my erlend.sh domain via IndieAuth. (Neither Mastodon nor Kitsune supports this yet, but it’s just an extension of OAuth.)
    • I start posting on a custom apub.erlend.sh domain.
  • All of my actions on the joinkitsune.org server/pipes are mediated through erlend.sh as the authorizer of each action.

  • joinkitsune.org is a trusted keeper of my follows and other meta-data, but I have my own copy in something like a rauthy-activitypub extension. This extension will also notify me if Kitsune has quietly removed some of my follow-connections as a result of defederation.

  • Should joinkitsune.org disappear in a puff of smoke one day, I can shift apub.erlend.sh to another Kitsune host (e.g. my own) without needing any kind of forwarding in place at joinkitsune.org .

The persistent granting of access might depend on DPoP:

The primary aim of DPoP is to prevent unauthorized or illegitimate parties from using leaked or stolen access tokens, by binding a token to a public key upon issuance and requiring that the client proves possession of the corresponding private key when using the token. This constrains the legitimate sender of the token to only the party with access to the private key and gives the server receiving the token added assurances that the sender is legitimately authorized to use it.

That, along with storage of data such as contacts, is what Solid is made for.

This could be a big deal for Solid. As a protocol it has struggled to find its footing in a mainstream use case. Unlike apub and Matrix, Solid doesn’t yet have a flagship use case. Nomadic Digital Identity (and just that, to start with) compatible with the fediverse could be it.

1 Like

10 posts were split to a new topic: Introducing Solid-Lite and relation to ActivityPub