Skip to main content

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