@@ -1,137 +0,0 @@
1−---
2−next: true
3−sort: 1
4−title: What is Urbit?
5−---
6−
7−# What is Urbit?
8−
9−Urbit is a clean-slate system software stack defined as a
10−deterministic computer. An encrypted P2P network, `%ames`, runs
11−on a functional operating system, Arvo, written in a strict,
12−typed functional language, Hoon, which compiles itself to a
13−combinator interpreter, Nock, whose spec gzips to 340 bytes.
14−
15−What is Urbit for? Most directly, Urbit is designed as a
16−personal cloud server for self-hosted web apps. It also uses
17−HTTP APIs to manage data stuck in traditional web applications.
18−
19−More broadly, Urbit's network tackles identity and security
20−problems which the Internet can't easily address. Programming
21−for a deterministic single-level store is also a different
22−experience from Unix programming, regardless of language.
23−
24−## Architectural overview
25−
26−A deterministic computer? Urbit's state is a pure function of
27−its event history. In practice it uses a memory checkpoint and
28−an append-only log. Every event is a transaction; Urbit is an
29−ACID database and a single-level store. Urbit runs on Unix now,
30−but it's easy to imagine on a hypervisor or even bare metal.
31−
32−A purely functional OS? Urbit is pure -- no code inside it can
33−make system calls or otherwise affect the underlying platform.
34−Instead, the top-level event function defines an I/O protocol.
35−It maps an input event and the current state to a list of output
36−actions and the subsequent state. In Hoon:
37−
38− $+([event state] [(list action) state])
39−
40−### Nock
41−
42−Nock is a sort of nano-Lisp without syntax, symbols or lambdas.
43−Most Lisps are one-layer: they create a practical language by
44−extending a theoretically simple interpreter. The abstraction is
45−simple and the implementation is practical; there is no actual
46−codebase both simple and practical. Hoon and Nock are two
47−layers: Hoon compiles itself to pure Nock. Since Urbit is
48−defined in Nock, not Hoon, we can upgrade Hoon over the air.
49−
50−The Nock data model is especially trivial. A *noun* is an atom
51−or a cell. An atom is any unsigned integer. A cell is an
52−ordered pair of nouns. Nouns are acyclic and expose no pointer
53−equality test.
54−
55−### Hoon
56−
57−Hoon is a strict combinator language that avoids mathematical
58−theory and notation. It aims at a mechanical, imperative feel.
59−Hoon uses ASCII digraphs instead of keywords; there are no
60−user-level macros. The type system infers only forward and does
61−not use unification, but is not much weaker than Haskell's. The
62−compiler and inference engine is about 2000 lines of Hoon.
63−
64−### Arvo
65−
66−Arvo is an event-driven OS written in Hoon. It can upgrade
67−itself and everything inside it over the network. The Arvo
68−kernel proper is 500 lines of Hoon, which implements a typed
69−event system with explicit call-stack structure. Arvo ships
70−with modules that provide P2P networking (`%ames`), a revision-
71−control system (`%clay`), a web client/server (`%eyre`), a
72−functional build system (`%ford`), and an application engine
73−`(%gall)`.
74−
75−### `%ames`
76−
77−`%ames`, the Urbit network, is an encrypted P2P protocol over
78−UDP. Its address space is semi-decentralized; 64-bit addresses
79−are hierarchically distributed, 128-bit addresses are
80−self-created. Addresses (or *plots*) are rendered in a phonemic
81−syntax for memorability. The scarcity of short plots helps
82−control spam and other Sybil attacks. The short plot hierarchy
83−is also reused as a supernode routing system for NAT traversal.
84−
85−### Apps
86−
87−Urbit ships with two default applications: a REPL or shell
88−`:dojo`, and a distributed user-level message-bus `:talk`.
89−`:talk` under the hood resembles NNTP; to the user, it looks like
90−a self-hosted Slack or persistent IRC.
91−
92−The full Urbit stack (compiler, standard library, kernel,
93−modules, and applications) is about 25,000 lines of Hoon.
94−Urbit is patent-free and MIT licensed.
95−
96−## Status
97−
98−Anyone can run the Urbit VM, of course. But the `%ames` network
99−is officially invitation-only. Not that we're antisocial -- just
100−that we're under construction.
101−
102−Right now, Urbit's only practical use is to (a) build Urbit and
103−(b) talk about Urbit. Its performance is lamentable. Its
104−documentation is inadequate. Its keys are test keys. Its
105−planets explode on a regular basis. We reserve the right to
106−reboot ("flag-day") the whole network.
107−
108−However, Urbit is at least out of research mode and focused more
109−or less exclusively on optimization and bug-fixing. So at least,
110−whatever you learn will stay true. And bleeding edges are fun.
111−
112−## Getting involved
113−
114−If you're interested in following Urbit, you can:
115−
116−- Read our documentation at
117− [urbit.org](http://urbit.org/docs)
118−- Subscribe to our newsletter at [urbit.org](http://urbit.org).
119−- Check out the
120− [urbit-dev](https://groups.google.com/forum/#!forum/urbit-dev)
121− mailing list.
122−- Follow [@urbit_](https://twitter.com/urbit\_) on Twitter.
123−- Hit us up by email, <span class="mono">urbit@urbit.org</span>.
124− We're nice!
125−
126−## Code of conduct
127−
128−Everyone involved in the Urbit project needs to understand and
129−respect our code of conduct, which is: "don't be rude."
130−
131−## Pronunciation and etymology
132−
133−Urbit is always pronounced "herb it," never "your bit." Not that
134−it's not your bit! But "herb it" just sounds better. (Yes, we
135−speak American and the 'h' is silent.)
136−
137−The origin of the name is just the Latin *urbi*, meaning city.