5.2 KiB
next | sort | title |
---|---|---|
true | 1 | Introduction |
Introduction
Urbit is a clean-slate system software stack defined as a
deterministic computer. An encrypted P2P network, %ames
, runs
on a functional operating system, Arvo, written in a strict,
typed functional language, Hoon, which compiles itself to a
combinator interpreter, Nock, whose spec gzips to 340 bytes.
What is Urbit for? Most directly, Urbit is designed as a personal cloud server for self-hosted web apps. It also uses HTTP APIs to manage data stuck in traditional web applications.
More broadly, Urbit's network tackles identity and security problems which the Internet can't easily address. Programming for a deterministic single-level store is also a different experience from Unix programming, regardless of language.
Architectural overview
A deterministic computer? Urbit's state is a pure function of its event history. In practice it uses a memory checkpoint and an append-only log. Every event is a transaction; Urbit is an ACID database and a single-level store. Urbit runs on Unix now, but it's easy to imagine on a hypervisor or even bare metal.
A purely functional OS? Urbit is pure -- no code inside it can make system calls or otherwise affect the underlying platform. Instead, the top-level event function defines an I/O protocol. It maps an input event and the current state to a list of output actions and the subsequent state. In Hoon:
$+([event state] [(list action) state])
Nock
Nock is a sort of nano-Lisp without syntax, symbols or lambdas. Most Lisps are one-layer: they create a practical language by extending a theoretically simple interpreter. The abstraction is simple and the implementation is practical; there is no actual codebase both simple and practical. Hoon and Nock are two layers: Hoon compiles itself to pure Nock. Since Urbit is defined in Nock, not Hoon, we can upgrade Hoon over the air.
The Nock data model is especially trivial. A noun is an atom or a cell. An atom is any unsigned integer. A cell is an ordered pair of nouns. Nouns are acyclic and expose no pointer equality test.
Hoon
Hoon is a strict combinator language that avoids mathematical theory and notation. It aims at a mechanical, imperative feel. Hoon uses ASCII digraphs instead of keywords; there are no user-level macros. The type system infers only forward and does not use unification, but is not much weaker than Haskell's. The compiler and inference engine is about 2000 lines of Hoon.
Arvo
Arvo is an event-driven OS written in Hoon. It can upgrade
itself and everything inside it over the network. The Arvo
kernel proper is 500 lines of Hoon, which implements a typed
event system with explicit call-stack structure. Arvo ships
it ships with modules that provide P2P networking (%ames
), a
revision-control system (%clay
), a web client/server (%eyre
),
a functional build system (%ford
), and an application engine
(%gall)
.
%ames
%ames
, the Urbit network, is an encrypted P2P protocol over
UDP. Its address space is semi-decentralized; 64-bit addresses
are hierarchically distributed, 128-bit addresses are
self-created. Addresses (or plots) are rendered in a phonemic
syntax for memorability. The scarcity of short plots helps
control spam and other Sybil attacks. The short plot hierarchy
is also reused as a supernode routing system for NAT traversal.
Apps
Urbit ships with two default applications: a REPL or shell
:dojo
, and a distributed user-level message-bus :talk
.
:talk
under the hood resembles NNTP; to the user, it looks like
a self-hosted Slack or persistent IRC.
The full Urbit stack (compiler, standard library, kernel, modules, and applications) is about 25,000 lines of Hoon. Urbit is patent-free and MIT licensed.
Status
Anyone can run the Urbit VM, of course. But the %ames
network
is officially invitation-only. Not that we're antisocial -- just
that we're under construction.
Right now, Urbit's only practical use is to (a) build Urbit and (b) talk about Urbit. Its performance is lamentable. Its documentation is inadequate. Its keys are test keys. Its planets explode on a regular basis. We reserve the right to reboot ("flag-day") the whole network.
However, Urbit is at least out of research mode and focused more or less exclusively on optimization and bug-fixing. So at least, whatever you learn will stay true. And bleeding edges are fun.
Getting involved
If you're interested in following Urbit, you can:
- Read our documentation at urbit.org
- Subscribe to our newsletter at urbit.org.
- Check out the urbit-dev mailing list.
- Follow @urbit_ on Twitter.
- Hit us up by email, urbit@urbit.org.
We're nice!
Code of conduct
Everyone involved in the Urbit project needs to understand and respect our code of conduct, which is: "don't be rude."
Pronunciation and etymology
Urbit is always pronounced "herb it," never "your bit." Not that it's not your bit! But "herb it" just sounds better. (Yes, we speak American and the 'h' is silent.)
The origin of the name is just the Latin urbi, meaning city.