はじめに
お疲れ様です。
10日間のお正月休みももうすぐ終わりですねーー。
私は、自作OSである、UmuOS0.1.1を必ず完成させようとお正月休みを楽しみにしていました!
上手く、事が運び、一旦完成で、今後のユーザーランド部分の開発や、UmuOS0.1.2とか機能拡張のベースOSとして
利用する予定です。
AIの Copilot(通称:ぴこたん)と GitHub Copilot(通称:ぴこぴん)と共に 相談、実装・トライ&エラー・レビューを
繰り返しながらなんとか実装できました。
以前から自作OSには興味があり、色々書籍を参考にしましたが、中々高度で、私には、スッと頭に入ってこなかったです。
おそらく、挫折した方もいらっしゃると思います。
今回のUmuOS0.1.1は、すでに完成した記事を投稿させて頂きましたが、説明書?的なものも必要かと思い、教科書的な?感じで
作りましたので、是非参考になればなーーーと思いました。
試行錯誤の最終として、失敗して分かったことや、ハマる処理とか、記載しましたので、参考にどうぞ!
※ 本記事は「Linuxを普段使っているが、起動の中身までは理解していなかった方」や
「自作OSに興味はあるが、どこから手を付けてよいか分からなかった方」を主な対象としています。
開発体制
本プロジェクトは、主に次の「1人 + AIツール」で進めました。
- 私(リーダー):設計・実装・検証・レビュー
- Copilot(通称:ぴこたん):全体の相談、進め方の整理、文章の構成検討
- GitHub Copilot(通称:ぴこぴん):技術相談、実装のアドバイス、レビュー観点の補助
この体制で「設計 → 実装 → レビュー → 思考整理」を何度も往復しながら進めました。
<重要> AIに手伝ってもらったが、設計・実装・レビューは、本当にトライ&エラーの連続です。何度もハマりました
また、今回 AI と共同で開発を進めて強く感じたのは、
「設計段階でのレビューが最も重要である」 という点です。
実装フェーズで AI に助けてもらうことは多々ありましたが、
設計が曖昧なまま進めると、後から必ず手戻りが発生しました。
設計フェーズ(基本設計、詳細設計)は、人の手でレビューしないと、かなり厳しい印象でした!
逆に、設計を言語化し、前提条件や非目的を明確にした上でレビューを行うことで、
AI とのやり取りも格段にスムーズになりました。
リポジトリ(git clone すれば全部あります)
研究開発環境
開発端末
- MiniPC (MEM 32GB)
- CPU: 12th Gen Intel(R) Core(TM) i9-12900HK (2.50GHz)
- OS: Windows 11 Pro (25H2)
- エディタ: Visual Studio Code 1.107.1
開発形態
- 上記、Windows 11 Pro 25H2マシンから自宅サーバー(RocyLinux9.7)上に仮想マシン(Ubuntu24.04LTS)にSSH接続して開発
- ビルド、ISO作成、disk.img 等、且つ QEMU 実行環境は、すべてUbuntu24.04LTSで完結
- 自宅サーバー:富士通 PRIMERGY(Xeon / MEM 32GB)仮想化基盤:QEMU-KVM
ドキュメント成果物
- README.md
- 01-導入(目的・非目的・用語の地図).md
- 02-成果物(何がどこにありどの段階が参照するか).md
- 03-起動フロー全体(UEFI→GRUB→kernel→initramfs→switch_root).md
- 04-GRUB設定とカーネル引数(root=UUID, console 等).md
- 05-kernel側の成立条件(devtmpfs, initrd, ext4, virtio-blk).md
- 06-initramfs設計(何を入れて何を捨てるか).md
- 07-initramfsの_init実装(init.c を教科書として読む).md
- 08-switch_root後のユーザーランド(sbin-init, inittab, rcS).md
- 09-永続ディスクdisk.img(作成・UUID・中身).md
- 10-ISO作成(iso_root と grub-mkrescue).md
- 11-QEMU起動と観測(umuOSstart.sh と ttyS0).md
- 12-再現手順(ビルド→起動→永続性確認).md
- 13-トラブルシュート(よくある詰まりどころ).md
- 14-用語集(最小の言葉で最大の説明).md
- 15-基本設計書-0.1.1.md
- 16-詳細設計-0.1.1.md
- 17-実装ノート0.1.1.md
最後に
普段LinuxやWindowsを使っていると、あまり気にしていなかった起動のメカニズムが、分かりました。
C言語も重要ですが、shellの理解も重要と思いました。
今後は、Coreutilsのコマンド解析をしながら、UmuOSに環境依存した、汎用的でないコマンドの本質を探りながら
実装していくことと、OSそのものの理解を深め、機能を追加し0.1.1、0.1.2とバージョンを上げていければ
楽しいかなーーと思いました。
本記事やドキュメントが、「OSはブラックボックスではない」と感じるきっかけになれば幸いです。