Brussels / 3 & 4 February 2018


Urbit: the personal server

A clean-slate decentralized software stack.

The internet has failed to decentralize. What started as a network of nodes in people's homes turned into a network of server farms largely owned by a handful of tech giants. Flaws in the internet's design and implementation allowed for an online world to form where a few large services control nearly all users. Social networks don't put you in touch with your friends. They put you in touch with a server that helps with that... at the cost of privacy and community.

Urbit aims to solve this and many other problems by providing a decentralized network of personal servers. These come with a personal identity and an operating system that provides an immutable global namespace and all the infrastructure needed for making decentralized applications.

The internet has lost its way. What was promised to be an open cyberspace where digital communities could form and flourish has turned into a landscape of unmovable monoliths. It may not have wanted this, but flaws in the design of its infrastructure and software set it up to fail.

Security is hard, but the defaults aren't helping. Without diving into often complicated configurations and the inner machinations of your system, the best you're going to get is an unencrypted connection and passwords stored in plain text. Sysadmins can do this. Your parents probably can't.

Social networks don't put you in touch with your friends. They put you in touch with a server that helps you talk to your friends. It's difficult to form cohesive communities when you see everyone through a filtered stream of data, rather than getting to exchange content directly.

Wheels are being re-invented over and over again. WhatsApp, iMessage, Facebook Messenger, Telegram... can you still tell them apart? They fulfill nearly the exact same purpose, using practically identical interfaces. Why can't I message my friends on Twitter using Signal?

Everyone has a ton of accounts for all kinds of redundant services. You're just one person, and yet you're forced to juggle many different online identities. Password fatigue is at an all-time high precisely when people need to start caring more. Software isn't helping them care.

Trolls and spammers have no problem with creating many different identities though. They do their thing, and if they get banned, they just spin up a new account to continue their shady practices on.

What if the internet had been built with good, secure defaults? What if machines on that network could talk directly to each other, without requiring a sysadmin skillset? What if there was a general-purpose software stack for communication between individuals? What if everyone had their own, personal address on the network? What if the barrier to entry was just high enough to keep spammers out? What if we had Urbit?

Urbit is a re-imagining of the internet. It paves over all our existing infrastructure and builds its own brand-new stack on top of it, solving the problems it has seen arise at the root. In doing so, it aims to deliver generic infrastructure for a decentralized network of personal servers to grow on.

The Urbit virtual machine runs a sort of assembly language called Nock. Nock is so simple, its official specification fits on a t-shirt.

But just like nobody is expected to write raw assembly, nobody is expected to write raw Nock. Urbit has invented Hoon, a vaguely Lisp-like functional programming language. Though its syntax may seem alien at first, this up-front complexity is the price it pays for semantic simplicity. When it comes down to it, Hoon is quite a dumb language. It has recently been deemed mature enough to be handed off to the community for further development and maintenance.

The Urbit operating system, Arvo, is implemented entirely in Hoon. It uses a handful of kernel modules to give rise to a functional, decentralized network of personal servers. At all times, the state of these servers is the sum of all events they have ever received.

Arguably the most important of the kernel modules is Ames, the networking module. Packets it sends are encrypted by default, only readable by the intended recipients. The network it creates is hierarchically ordered, with higher-order nodes being responsible for peer discovery and software updates for their children. In the event a parent's child misbehaves, it can get kicked out. In the event a child is unsatisfied with the service its parent provides, it can find another node willing to adopt it. This way, digital cities can form. Not around centralized servers, but around communities on the network.

All of this already exists. Urbit is very much a functional piece of software. Though still operating on a testnet, it has managed to gather a vibrant community of users and developers alike who are fed up with the ever increasing centralization of the internet.

It's not yet ready to replace the internet, however. Things will start off a bit smaller than that. Urbit is starting to prove itself very useful for API aggregation: managing and mirroring all your existing online identities in one single place. Eventually, this can seamlessly transition into using Urbit's generic, decentralized messaging bus instead of the traditional services themselves. Personal publishing is another application you can use your Urbit for. People are already hosting blogs on their Urbits, and incoming changes are going to make this even better.

The internet has lost its way, so let's build it right this time.


Mark Staarink