Best of Show

最優秀賞

受賞者:Gavin Barraclough

引用元:https://www.ioccc.org/2004/gavin.c

審査員・作者による説明:https://github.com/ioccc-src/winner/blob/main/2004/gavin.hint

動作

x86向けの32ビットマルチタスクOS。 PS2マウスやキーボードドライバを備えたGUI、ファイルシステム、ELFバイナリのロードと実行、テキストファイルビューアを備えている。

QEMU内で動作するOSの画面
図:QEMU内で動作するOSの画面

解説

このプログラムは、「x86向け32ビットマルチタスクOSのカーネルイメージ」を出力するプログラムになっている。 カーネルの実行にはx86が必要だが、このイメージ生成プログラム自体はポータブルに様々な環境で動く、というところが審査員にとても評価されている。

しかし皮肉にも、このイメージ生成プログラムはまったくポータブルに動いてくれない。 64ビット環境は正しいカーネルイメージが出力できず、-m32をつけても動作するイメージが生成されなかった。 比較的当時に近い環境であるDebian 3.1 (sarge)をQEMUでセットアップし、gcc 3.3でビルドして出力されたカーネルイメージをQEMUで起動したところ、どうにか動作が確認できた。

興味がある人のために、動作が確認できたkernelfs.tarを置いておく。 手元では次のように実行することで起動した。

$ qemu-system-i386 -m 32 -kernel kernel -initrd fs.tar

gavin.hintで審査員が書いている通り、起動後に画面をクリックしないと画面が更新されないので注意。 GUIは極端に遅い(数秒に1回程度しか画面が更新されない)。 また、マウスカーソル(画面内にXとして表示されているもの)はなかなか思うように動かず、上記のスクリーンショットを撮るのは非常に苦労した。

shとviのコマンドは作者が用意したもの。 primは審査員が用意したもので、素数を列挙するプログラム。