Solid + urbit: similarities and differences

Hi there,

I’ve been interested in Solid since I first heard of it a couple of years ago and have spent some time this weekend finally digging into the details. The project I know of that seems most like Solid is Urbit, and I wanted to write down some comparisons and brainstorm ways in which they can interconnect. I am very familiar with Urbit (I work on it), but very new to Solid, so I hope you can help to fill some of my gaps.

Solid seems to share much in common with Urbit - they are both frameworks for users to store their own data and run p2p applications. Here are the primary similarities and differences I see:

1 - Urbit is an entirely new operating system written with a new purely functional programming language, while Solid builds on top of existing software standards and uses existing languages. There is something called SolidOS, but besides the Github repo I haven’t been able to find a lot of public-facing documentation about it.

2 - User identities for Urbit (“Urbit ID”), called “planets” are handled with a decentralized public key infrastructure running on Ethereum (though it is not married to it nor to blockchains in general), while Solid utilizes the WebID standard and is linked to a domain name and thus the DNS system. Urbit also has “moons”, which may be analogous with WebID of devices owned by a human’s WebID, and “comets”, which are free self-signed ID’s outside of the PKI (but is expected to be primarily used by spammers and bots someday).

3 - Urbit has spam/Sybil protection built in by virtue of there being a finite number of ID’s (manifesting as non-fungible tokens on Ethereum) that run for about $10 each, making spam expensive. The number of ID’s is expected to be increased if that limit (2^32, or ~4B) is ever reached. I do not know Solid’s spam/Sybil protection methods, and as far as I can tell the number of ID’s is effectively unlimited.

4 - Both Urbit and Solid offer users the ability to self-host, but for technical and social reasons, it is expected that most people will depend on a provider to host for them. However, if a user wishes to transfer from a provider to self-hosting, that is permitted.

5 - Routing for Solid pods is the ordinary DNS system. Urbit peer-discovery utilizes a hierarchical routing system similar in structure to DNS, but separate. Peer discovery is not restricted to this method though, and there are people interested in doing e.g. DHT-based routing, or mesh networks in the case of things like radio-networked urbits. In both cases, once a peer’s IP is known, all communication is direct and e2e encrypted.

6 - Urbit is a deterministic operating system - the state of the OS is a pure function of the event log. I’m guessing SolidOS is not deterministic, just based off of the fact that it uses Node.

7 - In terms of data guarantees, an Urbit instance has the properties of an ACID database. I do not know what guarantees are made on data in Solid.

8 - Data on Solid follows the “linked data” paradigm - in particular, all data has a URI and so there is some kind of global namespace for data on Solid (I think?). Urbit has this as well, with the “global scry namespace”. I think there are probably some important differences here, but I don’t know Solid well enough to say what they are.

9 - Urbit instances can be interacted with from the outside via an API that treats the Urbit as an ACID database. There are affordances to write Urbit apps using Python, Haskell, Typescript, and Javascript in this fashion (with more in development). I presume the same thing can be done with Solid pods, but I don’t know the details - what languages can you do this in or are on the roadmap?

10 - Existing applications: Solid is listed here: https://solidproject.org/apps Urbit has minimal p2p versions of Slack, Reddit, blogging, collaborative drawing, flash cards, bit torrent, bitcoin node, chess.

11 - Solid is built for the semantic internet (does it require all data to be semantic)? Urbit could also be made semantic but it is not a major focus right now, though I think a combination of all data being produced by a user being cryptographically signed, along with zero-knowledge proofs, could do a lot to incentivize the creation of semantic data on Urbit.

This is just the low-hanging fruit. I think if I knew more about SolidOS, there would be a lot more that could be said, because it would be closer to an apples-to-apples comparison.

The most direct ways I can see Urbit and Solid interacting:

  • Someone has both an Urbit and a Solid pod. Then the Solid pod can interact with the Urbit via API, treating it as a social database. I presume this could also be done in the other direction, but that depends on a more complete answer to (9) above.
  • Urbit ID is used as a spam/Sybil protection method for Solid apps (maybe unnecessary - I am just basing this off of not being able to find anything googling for “Solid spam”, “Solid sybil”, etc). The Urbit OS is very tightly bound with its identity, so I don’t think you could really use WebID for Urbit.
  • Urbit and Solid pods running the same apps based on common protocols, e.g. bit torrent (there is a bit torrent tracker for Urbit, and I presume that is expected to happen someday for Solid if it hasn’t already) or Holochain apps.

Thank you for your interest - I’d be happy to answer any questions you have about Urbit and would appreciate some pointers on my unknowns about Solid. If you’d like to try Urbit, it takes just a few minutes to get a free self-hosted comet up and running: https://urbit.org/using/install/ and I would be happy to give any interested people here a free planet.

1 Like