本書をお手に取っていただきありがとうございます。
本書は自作OS自動化のPoC*1としてMBR*2作成の自動化を行ってみる本です。
[*1] "Proof of Concept"の略。新たなアイディアの実現性を簡単なプログラムで示すこと。
[*2] "Master Boot Record"の略。UEFIではないレガシーBIOSが起動時にディスクから読み出して実行してくれるディスク先頭512バイトの領域。MBRに含まれる実行バイナリは「ブートストラップローダ」や「イニシャルプログラムローダ(IPL)」と呼ばれる。
当初は/dev/kvmを直接叩いてVMを作り、自作OSのテスト自動化のみの予定でしたが、「テストを自動化できるなら、テスト対象である実行バイナリの生成も自動化することで、理論上、自作OSを自動化できるのでは?」ということで、/dev/kvmを直接叩くところはあまり深く突き詰めず、むしろ手っ取り早く既存のコードを改造してテストツールを作り、テスト結果を遺伝的アルゴリズムで実行バイナリへフィードバックすることで自作OS自動化のPoCをしてみることにしました。
MBRにしたのはレガシーBIOSにはなりますが、PCへ電源を入れると直後に動き、なおかつバイナリサイズも512バイトとPoCには扱いやすいからです。
自作OS自動化には、自作OSの自動テストツールが必要です。しかし、そのようなものは無さそうなので、既存の比較的行数の少ないVMのサンプルコードを改造してMBRの自動テストツール(MBRテスター)を作ります。既存のものを改造するにしても仮想的なCPUまで全て面倒見るのは大変なので、Linuxカーネルが提供するVM支援機能であるKVMを使うサンプルを改造することにします。
ただ、既存のコードを改造するにしてもKVMを使ったVMがどのようにできているのかを理解していないと既存のコードを理解できません。そのため、改造を始める前に、/dev/kvmを直接叩く簡単なプログラムをいくつか作り、KVMを使うVMがどのようにできているのかを理解します。
そして、自動生成したMBRをテスターで評価し、その結果をフィードバックする仕組みとして「遺伝的アルゴリズム」を使います(遺伝的MBR)。
そのため、前著風なタイトルとすると、本著は「/dev/kvmを直接叩いてKVMのVMを理解し、既存のコードを改造してMBRテスターを作り、遺伝的アルゴリズムでMBRを自動生成する本」です。
本書は3章構成で、概要としては以下のとおりです。
なお、予め断っておきますが、第3章は「なるほど、そっちに進化してしまったか」というオチです。
筆者が開発や動作確認を行っている環境を以下に記載します。
言語としては、1章と2章ではC言語を、3章ではシェルスクリプトを使う程度なので、一般的なLinux環境であれば問題ないと思います。2章で1つライブラリのインストールが必要になりますが、パッケージ管理システムで提供されているものなので特に問題はないかと思います(2章で説明します)。
ただし、KVMを使うためPCとしてはCPUが仮想化支援機能を持っている必要があります*3。"/dev/kvm"というファイルが存在しない場合、CPUがこれらの機能を持っているか確認してみてください。確認方法は検索すると色々と出てくるのでここでは省略します。
[*3] IntelであればIntel VT(vmx)、AMDであればAMD-V(svm)という名前の機能です。
また、KVMを使うにはカーネル側でKVMが有効になっている必要もあるのですが、これに関しては比較的最近のディストリビューションであればデフォルトで有効になっているかと思います。これも検索すれば情報が出てくるので必要な場合は調べてみてください。
これまでの当サークルの同人誌同様、本書もPDF版/HTML版は以下のページで無料で公開しています。
扱うソースコードは各章でリポジトリごと異なるので、それぞれの章の中で紹介しています。