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.
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.