Twelve weeks, each introducing one more way to run something where it does not belong — and what that way costs.
Each week takes one approach seriously: what it is, what it buys, and the limit it runs into. The limit is usually what the following week exists to answer.
Several concerns recur in different contexts: processes, the filesystem, the network, performance. Week 5 gives a program a basic filesystem; week 7 addresses filesystem coherence when two runtimes need the same one. Your understanding of each deepens as the semester goes on.
Running code in the browser
Thirty years of running foreign code in a web page, almost all of it the same idea — and the option space that replaced it
Week 1 · 22 February 2027
Characterising a target
Everything is possible, so the interesting question is what a program actually requires — and how those requirements reduce the set worth attempting
Week 2 · 1 March 2027
Shims, polyfills and reimplementation
The cheapest option in the course — implement the interface instead of the machine — and the three very different things people mean by it
Week 3 · 8 March 2027
Compiling for the web
Pure computation compiles and always did. Everything that makes a program useful is an interface, and interfaces are what break a port
Week 4 · 15 March 2027
The web is not POSIX-compatible (i)
What a kernel-shaped surface has to provide, how much of it the web standards deliver, and what happens when a call is present but wrong
Week 5 · 22 March 2027
The web is not POSIX-compatible (ii)
A browser is not a multiprocessing operating system, and a runtime that is correct on your desktop will deadlock in a tab
Week 6 · 29 March 2027
The filesystem
Giving a guest a filesystem is easy. Giving two runtimes the same filesystem is where the design is, and where five good designs went to die
Week 7 · 12 April 2027
The network
There are no sockets, so you build one out of message passing — and then discover the wall was never TCP
Week 8 · 19 April 2027
Running "native" binaries
Take the source requirement away entirely — and find that most of the ways to do it are not emulation at all
Week 9 · 26 April 2027
Running a full OS kernel
Stop faking the kernel and bring one. Two quite different projects hide under that sentence, and only one of them is emulating a machine
Week 10 · 3 May 2027
Graphics
Of everything an approach quietly decides on your behalf, the rendering path is the least negotiable
Week 11 · 10 May 2027
Committing, and changing your mind
How to commit on evidence, and why changing your mind here is not an iteration — it is discarding an execution environment
Week 12 · 17 May 2027