in which i attempt to explain urbit
Published:
urbit is a complicated topic. writing an explanation of a complex subject forces you to evaluate your mental model and make sure it’s coherent, which is probably something i could benefit from. there are probably around a dozen essays like this scattered across the internet, but there are a few things that aren’t always clearly explained that i thought i could do my part to elucidate. more than anything though, i thought i would write an explainer about urbit that i wish i could have read a few years ago, to link to my friends to explain why i bought my star. you will forgive me if i’m a little bit off with the really low-level stuff, though, as it’s a bit out of my league.
urbit is a mind-bogglingly ambitious project by a company called tlon meant to change the way we use networked computers. in order to achieve this, it throws out the software stack that has been katamari’d on top of unix for the last four decades, and begins anew with a few tiny pieces of code that are intended to cascade into a new kind of internet: an internet where you control all of your own data, centralized web services and advertising networks that spy on you are outmoded, and you can (but don’t have to) interact with everything on the net using a single identity.
urbit is a network, but every node is a general purpose computer. at the core of them is nock, a function. this is the mathematical definition of computing that every component of an individual urbit (a ‘ship’) is built on top of. this function is combined with an individual urbit’s event log to produce a deterministic state. (i’m going to be real with you, this is the part i understand the least as i’m not a computer scientist or even a programmer, but i think i get the gist.) because every urbit is deterministically produced from this core function, all software on it can be updated live over the network. on top of nock, urbit installs an operating system called arvo
, which has a native functional programming language called hoon
. once your ship is up and running with arvo and the accompanying set of basic utilities (a shell, a messaging bus, a secrets vault, a web server, a revision controlled filesystem, &c.), you can program it to do whatever you’d like – general purpose computing. for the moment, urbit runs as a *nix application, but the ultimate (very long term) goal is to be a primary operating system for your personal server, controlling your digital life. the networking between urbits is encrypted, peer-to-peer, and built into the foundations of the system, but ships can interface with the rest of the internet as well. we’ll get back to this in a bit.
every urbit has a network address, which also functions as an identity on the network. think of it as a combination of an IP, a domain name, and an email address in one. this address is a number, but it is converted to a human-pronounceable format. there are five tiers of addresses, and each tier has particular privileges. at the top are 8 bit addresses, called galaxies, which act like root nodes on the network and sign software updates for everyone else. since the address is an 8 bit number, there are 256 of them, and they have a tilde’d one-syllable name like ~zod
. galaxies can also issue ships of the tiers below them, stars and planets. stars are 16 bit addresses (so a little over 65,000 of them), and two syllables, like ~tamten
(my baby). stars, like galaxies, are network infrastructure that perform peer discovery for the tier below that they also issue, planets. planets are 32 bit addresses, and look like ~fadfun-mogluc
. there are 4.2 billion possible planets and they are the main point of urbit – individual personal servers for humans. because there are a finite number of planets, they have a value. this is meant to be some small but nontrivial sum – maybe $5-10, but ultimately up to the market. ships are cryptographic property, and as long as someone is the sole possessor of a ship’s private key, they are the only person who can control it.
two additional categories also exist – moons and comets. each planet can issue ships from a space of another 4.2b addresses under it, which are called moons. moons are permanently attached to the planet that issues them, and are envisioned alternately as urbits meant for an individual person’s IoT devices, or members of a family/group that jointly own the planet. comets are 128 bit addresses that are self-signed, that is not issued by a star or galaxy. for now they’re full citizens of the urbit network, but i’ve heard one of the devs mention in an interview that they’re not certain that comets will remain, so enjoy them while you can!
i mentioned that moons are ‘attached’ to planets; with the exception of moons, the tiers of ships in the urbit network’s hierarchy are bound by voluntary relationships. a galaxy or star issues a planet, and by default that planet uses the galaxy/star for peer discovery and receiving updates. implicit in this is some kind of business or personal relationship – as a star, you provide services to the planets under you. however, should someone decide you’re unreliable or for any other reason that they would prefer another star, they can very easily move to one. this is meant to incentivize stars to be good actors, in order to preserve their business. but this runs both ways; a star can stop routing for a planet for any reason as well, presumably for spamming. these incentives are meant to encourage good behavior and address the weaknesses that led to the current internet’s vulnerability to inexhaustible identities and sybil attacks. because the addresses are finite/have money value, and because there is someone holding you personally accountable for abusing the network, it only makes sense to behave. if you’re booted for spamming, you’re stuck trying to convince somebody else to route for a spammer (and they in turn will be accountable to others for allowing spam). urbit’s developers also envision some system(s) of reputation eventually arising organically, though they haven’t built one in.
the ability to trivially change your patron star (or galaxy) is probably the most political design decision that remains in urbit, but i think it’s a brilliant design. rules and norms are enforced in a decentralized manner, but personal or political disputes can be sidestepped cleanly. because the stars and galaxies are distributed across a wide variety of people, you should always be able to find a patron you’d get along with. in the distant future the network may splinter into mutually exclusive factions, but no single entity is meant to be able to control the whole network.
a common misconception about the design of the network is that planets are somehow only interfacing with the other ships under their star or galaxy, but this isn’t the case. routing and updates are federated to the tiers above you, but the network is fully peer to peer. stars and galaxies bounce requests for addresses between each other so that your urbit can speak directly with whichever ship it likes. with your urbit you get the decentralized network baked into the platform for free, so it’s straightforward to build decentralized webapps on top of urbit (relatively! assuming you can handle the arcane programming language). if you and your friends are already running ships, then you can all install software that adds twitter- or instagram-like functionality inside your urbit. the difference of course is that your twitter-like is speaking directly with your friends’ urbits to exchange feeds, and your own data is stored on your own computer instead of a corporate mainframe that spies on you.
the hard part of getting people onto a platform is the network effects of preexisting platforms, but tlon has a clever idea to surmount this. like i said near the beginning, your urbit can interface with the traditional internet. sometime in the mid-term future, urbit is meant to operate as an API aggregator, a mecha suit cockpit for all of your web accounts in one place. social networks exercise draconian control over other apps’ use of their APIs, but your urbit will use a personal API to scrape your personal data and feeds from the service – something that looks much more benign (in the short term) from the perspective of a twitter or fb, and much more difficult to quash should they decide to, since if it comes down to it your urbit app can just scrape web pages. (i should note that, for now, these gateways to other services are not available to you and i, though i believe they’re under development.) you can control everything in one place, and make them play with each other however you desire, since it’s all just data on a computer you can program. once your urbit is the most useful place for you and your friends to control your gmail/chat with friends/tweet at the same time, you’re already piloting your accounts from a decentralized network, so why not cut out the middlemen? develop or install another piece of software that provides the same functionality, but with your data controlled by you. chat on a reddit-style platform, install a decentralized git, use urbit’s messaging instead of email or DM, &c. i’m focusing on social networks because they’re most people’s primary use for the net, but the possible software is by no means limited to them (eg urbit has a basic web publishing server built into the core software that’s easy to use as a blog).
altogether it’s the old dream of a decentralized internet, suddenly possible; the big web corporations become obviated, because we don’t need to use their servers anymore. i bought a star because i really want to see this happen. when i was in middle school i learned about bittorrent and the piratebay’s infamous conflicts and technological challenges to IP law enforcement, which i thought was the coolest thing in the world (particularly the ingenuity invested in making it impossible to shut down), and decentralization tech has been something i’ve paid attention to ever since. the last five years or so especially has seen flourishing ideas and networks particularly growing out of the snowden revelations and cryptocurrency. urbit is not directly part of these software ecosystems (in development since 2002!), but it plays well with them. a point the CEO has made repeatedly in interviews is that decentralized networks don’t compete with each other in the same ways as traditional social networks, and in fact compliment each other. an urbit is a true computer, and in principle it can control your scuttlebutt and tumblr feeds together.
anyway, that’s the spiel. there’s a bit more i may come back and add sometime (eg governance, use of etherum as PKI, possible interplay with cryptocurrencies) but i think that’s a reasonable introduction. my girlfriend is surely sick of hearing me talk about this (but too polite to say so), so i’m putting it here for reference.