blog.8-p.info

The benefits and costs of writing a POSIX kernel in a high-level language

Go で POSIX なカーネルを書いてみたよ、という論文。研究目的で開発されて、高級言語で書かれたカーネルというのは色々あるけれど、それらには研究として新しいアイデアが盛り込まれていたりして、例えば性能の評価をするにしても、言語よりはアイデアの評価という側面が強い。対して、著者らが実装したカーネル Biscuit は伝統的なモノリシックの POSIX/Unix カーネルで、ベンチマークでも Nginx や Redis なんて見知ったプログラムが使われている。

GC があるのは当然なんだけど

Goroutine scheduling decisions and the context switch implementation live in the runtime, not in Biscuit. One consequence is that Biscuit does not control scheduling policy; it inherits the runtime’s policy.

Goroutine のスケジューリングが、そのままカーネルのスケジューリングになっているあたりは、Go らしさがあって面白い。

ちなみに、著者のうち2人は Russ Cox と共に xv6 の開発にも関わっていて、そのうちの1人 Robert Morris は、あの Morris ワームの Robert Morris です。