The underlying infrastructure of modern networked computing—namely Unix and its derivatives—is approaching fifty years of age. What will come to replace it? A strong competitor is the clean-slate “operating function” approach of Urbit. Jocosely branded as “computing for Martians,” Urbit provides a fresh and updated vision of what Internet computing could come to look like in future years. Featuring end-to-end encryption and true peer-to-peer routing built on a network-first operating system, Urbit fosters decentralized digital societies and stable user identities.
Our primary objectives in this course are for you to be able to explain and navigate the technical layout of Urbit, as well as construct novel applications for Arvo, the Urbit operating function, using the Hoon programming language.
- Understand the schematics and technical implementation of the Urbit OS kernel (Arvo and vanes).
- Navigate and utilize the Urbit ID public-key infrastructure (Azimuth).
- Program literately using the Hoon language, including source code conventions and interoperability.
- Construct userspace apps to run on the Urbit OS platform (Gall, Landscape).
Since January 2022, I have been working with the Urbit Foundation to produce more up-to-date developer education resources. This course has largely been superseded by the Hoon School and App School guides. I will leave it up for historical documentation, but you shouldn't rely on any part of the presentation without checking contemporary developments.
My target audience for the course consists of graduate students and seniors in computer science and neighboring fields interested in sound computing and functional operating system design (functional-as-in-language). The course assumes an interest in functional programming but no specific experience.
What | When and Where |
---|---|
Instructor email | cs498mcadmin@illinois.edu |
Class URL | go.illinois.edu/cs498mc |
Class forum | ~magbel/martian-computing |
The use of Urbit requires an Urbit ID. You can purchase an ID on a third-party site like urbit.live or OpenSea. You can also use a transient ID (called a "comet") as a permanent ID; these are free and can be generated on your own machine.
Lessons focus on conceptual or architectural aspects of Urbit, including technical discussions of Urbit’s behavior and internals. Labs are hands-on tutorials to familiarize students with operations and language features.
Wk | Date | Number | Lecture | Lab | MP |
---|---|---|---|---|---|
0 | 08/26 | 00 | Prospectus | ||
08/28 | 01 | Dojo | |||
1 | 08/31 | 02 | Azimuth I | ||
09/02 | 03 | Generators | |||
09/04 | 04 | Auras | |||
2 | 09/09 | 05 | Syntax | ||
09/11 | 06 | Cores | mp0 |
||
3 | 09/14 | 07 | %say Generators |
||
09/16 | 08 | Subject-Oriented Programming | |||
09/18 | 09 | Clay I | |||
4 | 09/21 | 10 | Libraries | ||
09/23 | 11 | Ford I | |||
09/25 | 12 | Debugging Hoon | mp1 |
||
5 | 09/28 | 13 | %ask Generators |
||
09/30 | 14 | Types & Molds | |||
10/02 | 15 | Standard Library | |||
6 | 10/05 | 16 | Common Containers | ||
10/07 | 17 | Gall I | |||
10/09 | 18 | Kernel (Chat with ~rovnys-ricfer ) |
mp2 |
||
7 | 10/12 | 19 | Data & Text Parsing | ||
10/14 | 20 | Ames | |||
10/16 | 21 | Behn | |||
8 | 10/19 | 22 | Clay II | ||
10/21 | 23 | Polymorphism | |||
10/23 | 24 | Urbit Foundation (Chat with ~wolref-podlex ) |
mp3 |
||
9 | 10/26 | 25 | Gall II | ||
10/28 | 26 | Gall III | |||
10/30 | 27 | Buffer | |||
10 | 11/02 | 28 | Eyre & Iris | ||
11/04 | 29 | Gall IV | |||
11/06 | 30 | Boot Process | mp4 |
||
11 | 11/09 | 31 | CLI | ||
11/11 | 32 | Arvo I | |||
11/13 | 33 | Hoon I | |||
12 | 11/16 | 34 | Hoon II | ||
11/18 | 35 | Vere I | |||
11/20 | 36 | Vere II | mp5 |
||
13 | 11/30 | 37 | Arvo II | ||
12/02 | 38 | Nock I | |||
12/04 | 39 | Nock II | |||
14 | 12/07 | 40 | Azimuth II | ||
12/09 | 41 | Final Thoughts | |||
12/11 | mp6 |