Writing Hypervisor in Zig をやっているという記事を前に投稿したが、そこからも少しずつ開発を進めて先日ついに完走した。自作ハイパーバイザ上で Linux が最後まで起動した瞬間はもう感無量だった。

今年の4月にスタートし、6月にカーネルパートが終わり、そこからつい先日まで VMM パートをやっていた。VMM パートは以前の記事にも書いたけど自分が使っている CPU が Intel ではなく AMD だったので、Writing Hypervisor in Zig の進め方に沿いつつも実装部分は AMD64 Architecture Programmer’s Manual (APM) とにらめっこしながら進めた。当然別ものではあるのだけど、何もかもが違っているわけではなくて共通している部分も当然多くあるので、そこまで苦労することなく進めることができた。

内容の理解や実装はだいたい数日で終わるんだけれど、そこから始まるデバッグにやはり一番時間がかかった。長いときで一週間以上同じ箇所のデバッグをしていた気がする。特に最後の最後に遭遇した Linux が起動はするものの途中で入力を受け付けなくなってしまうという事象はものすごく骨が折れた。この辺のどこでハマったか話は供養のために別でブログに書きたい。だいたい原因は自分のミスでしかないけど。

おかげさまで、自分の中で完全にブラックボックスだったハイパーバイザの動いている仕組みが少しではあるけどわかるようになって嬉しい。せっかく作ったのでこの先も続けていきたいと思っていて、実機で動かす、Rust で書き直す、他の CPU に対応する、などを考えている。あとは、ゲスト Linux の GDB によるデバッグがほとんどできなかった (ブレークはギリできるけどステップ実行やバックトレース表示ができなかった) ので、そこができるようにがんばるのも楽しそう。

仕事とは別のサイドプロジェクトとして、というか現実逃避の趣味として非常に楽しく取り組ませていただいた。ステップバイステップで進めることができ、特に最後の方のチャプターは実装するたびに徐々に Linux が起動に近づいていくのでワクワクしながら進めることができた。こんなに素晴らしいコンテンツを無料で公開してくれている作者の方に感謝。