CS 498MC • Martian Computing
Neal Davis • Department of Computer Science
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).
Audience
My target audience for the course consists of graduate students in computer science and neighboring fields interested in sound computing and functional operating system design (functional-as-in-language). (Seniors are welcome to email me and apply as well.) The course assumes an interest in functional programming but no specific experience.
Resources
What | When and Where |
---|---|
Discussions | Wed/Fri 14h00–15h15 • Online (active discussion) |
Labs/Office hours | Mon 14h00–14h50 • Online by appointment |
Instructor email | cs498mcadmin@illinois.edu |
Class URL | go.illinois.edu/cs498mc |
Class forum | ~magbel/martian-computing |
Access
The use of Urbit requires an Urbit ID. While I intend to arrange for students participating in the course to obtain an Urbit ID as part of their enrollment, you can also 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.
Agenda
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 | Aura | |||
2 | 09/07 | (no lab) | |||
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 Philosophy | 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 | mp3 |
||
9 | 10/26 | 25 | Gall II State | ||
10/28 | 26 | Gall III Landscape | |||
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 |
MPs
MP | Description |
---|---|
mp0 |
Write naked generators. |
mp1 |
Write %say generators. |
mp2 |
Write %ask generators. |
mp3 |
Write basic Gall apps. |
mp4 |
Write intermediate Gall apps. |
mp5 |
Produce a Landscape tile for a Gall app. |
mp6 |
Interpret Nock code. |
bonus |
A proposed scoped project, such as writing a jet. (See below.) |
Grading
As this is a graduate course, we expect but do not promise that you will get an A in the course. Assignments are simply graded pass/fail with feedback but can be resubmitted if necessary. (Read "completion" in the table below as receiving a passing grade.)
A requirements
- Completion of at least 6 of 7 MPs.
- Completion of at least 11 of 13 labs.
- Regular participation in course discussions.
B requirements
- Completion of 5 of 7 MPs.
- Completion of 9 of 13 labs.
- Regular participation in course discussions.
C requirements
- Completion of 4 of 7 MPs.
- Completion of 7 of 13 labs.
There is no final exam; the bonus project, if elected, is due by the end of finals week.
Bonus Project. To obtain an A+ in the course, you must meet the requirements for an A and complete a specific scoped project. This project should be proposed to the instructor and worked on with frequent feedback from him.