uchan note

プログラミングや電子工作の話題を書きます

『ゼロからのOS自作入門』に込めた思い

2021 年 3 月 22 日に『ゼロからの OS 自作入門』を出版する予定です。 本書は OS を手作りする本で、現代のパソコンでちゃんと起動する点が特長です。

15 年前の 2006 年に出版された『30 日でできる!OS 自作入門』を読んで育った私(uchan)が その後継となるだろう本を書いたということで、執筆の裏話を記してみたいなと思います。

書籍の概要

  • タイトル:ゼロからの OS 自作入門
  • 著者:内田公太(uchan)
  • 出版予定日:2021 年 3 月 22 日
  • ページ数:768(最大。実際はもっと少なくなる予想)
  • ISBN:978-4-8399-7586-9
  • 出版社の書籍ページ:ゼロからのOS自作入門 | マイナビブックス

本書は OS 作りに関する知識がないところから始め、オリジナルの OS「MikanOS」を作る一通りの過程を説明します。 パソコンの電源を入れ、他の OS の助けを借りずに自分で起動するような OS が作れます。 OS なんて作れるのか?と思うかもしれませんが、そうです、作れるのです!

f:id:uchan_nos:20201201071550p:plain
『ゼロからのOS自作入門』で作成するMikanOSの動作写真

MikanOS は UEFI BIOS で起動して Intel 64 モード(x86 の 64 ビットモード)で動作します。 メモリ管理は 4 階層ページングで行います。 USB3.0 ドライバを搭載していて、USB マウスとキーボードが扱えます。 プリエンプティブマルチタスクで複数のタスクを同時並行に動かせますし、 ファイルシステムの読み書きも実装します。

このように、MikanOS は現代的な OS として基本的な機能を備え、それでいて小さくて学習しやすい OS になっています。 さらに、各章ごとに機能を小さく付け足すステップバイステップ方式で構成されていますので、無理なく学習できます。 最終形のプログラムをどーんと掲載し、各部を説明していく方式とは対照的に、機能を付け足したらすぐ動かして確かめられるため、ある機能が OS にどんな影響を与えるかがとても分かりやすいです。

2005 年頃の話

「川合さん、僕も OSASK みたいな OS を作ってみたいです!」 当時高校 1 年生だった私は川合さんにチャット(IRC)で話しかけました。 川合さんは当時、OSASK という国産 OS を作っていて、私は OSASK コミュニティでアプリを作ったりしていました。

「実は、そんな人のための本を今ちょうど書いているところなんだ。読んでみる?」 そう言って川合さんは私に『30 日でできる!OS 自作入門』の原稿を送ってくれました。 私は紙に印刷し、夢中で読み、分かりにくいところを質問しまくりました。

これが、私が『30 日でできる!OS 自作入門』に「高校生代表の uchan さん」と記されている理由です。 高校 2 年生の夏になり、受験に向けて忙しくなってきたので校正作業は途中で抜けてしまいましたが、大変良い経験になりました。 川合さんのサインが入った「初版第 1 刷」の書籍は私の宝物です。

ちなみに、第1刷のものは、今売ってる本の装丁(カバー)よりも柔らかい発色をしています。 初期はお高い印刷をしているとか言う話を聞いたような。

『30 日でできる!OS 自作入門』のすごいところ

この本はすごいです。画期的です。 何がすごいのかというと、もちろん OS を作るというテーマ自体もすごいですが、 なんと言っても 段階的に OS を作る過程が全部説明されている というところでしょう。

すごいプログラマの完成形のソースコードを見ると圧倒されてしまいますよね。 こんなの自分には作れなさそうだと感じます。

でも、そんなすごいプログラマも最初はどこかの 1 行から作り始めているわけです。 どこから、どんな順序で開発を進め、機能を付け足しているのか、という情報は非常に貴重なものです。 この本は、まさに OS でそれを解説しているのが画期的だと私は思います。

2016 年に osdev-jp を設立

無事大学に進学した私は、教養科目の勉強で忙しい日々を送っていました。 線形代数はすごい難しかった記憶があります。

2009 年にセキュリティ&プログラミングキャンプ 2009 の OS 自作組のチューターをやり、OS 自作に燃える若者が多いことに気付かされました。 もう自作 OS ブームが終わったと思っていた私は驚きました。 ただ、大学生活の方が忙しかったため、自分の OS をがんがん作るということはしませんでした。

時が流れて 2014 年、Twitter で知り合いがふと「あー、だれかx86エミュレータの作りかたって本をだしてくれないかなー」とつぶやいたのを見つけました。 しばらくやりとりした後、私が「共著します?」と提案し、共著が決まりました。 これが私の初めての執筆経験です。 出版されたのは 1 年後の 2015 年夏です。 自作エミュレータで学ぶx86アーキテクチャ

そして 2016 年春、サイボウズ東京オフィスで開かれた「第5期サイボウズ・ラボユース成果報告会」で事件が起きました。 参加者 20 名ほどの中に自作 OS 関連の人が 4 人も集合するという事態が発生し、 私を含めた若者 3 人で自作 OS の将来を話し合い、この界隈を引っ張っていくぞという決意で osdev-jp を結成したのです。

『ゼロからの OS 自作入門』の着想

osdev-jp 結成当時、自作 OS の分野ではマスターブートレコードブートローダーを書き、レガシー BIOS で起動し、入力は PS/2 マウスとキーボードで、というような構成が一般的でした。 この構成は情報量が多く、ハードウェアの制御も比較的簡単なので人気があったのだと思います。

しかし世間では UEFI BIOS 搭載のパソコンばかりになり、PS/2 は廃れて USB に取って代わられました。 『30 日でできる!OS 自作入門』ではもちろんそれらの技術は説明されておらず、OS 自作を楽しんでいる人たちは独自にそれらのサポートをしようと頑張っていました。 私もその一人で、PCI バスの認識やら UEFI での起動やらを探求していました。

osdev-jp 結成からまもなく、2016 年夏に私はセキュリティ・キャンプ全国大会の講師を務めました。 選択コースで「USB メモリから起動してみよう」という講義を開講しました。 UEFI アプリとして画面にメッセージを出すような簡単なプログラムを作り、USB メモリに書き込んで起動させるという演習ベースの講義で、結構な人気がありました。

翌年の 2017 年からは単発講義ではなく、3 日間連続の講義を担当するようになりました。いずれの年も、主テーマは OS 開発です。 2017 年、2018 年と開講する中で共通するのは、x86-64 の 64 ビットモードや UEFI BIOS を用いた開発テーマを希望する受講生が毎年必ず居ることでした。 例えば Rust で開発している自作 OS に対し、x86-64 のページングを用いたメモリ管理を追加しようとする受講生、xv6 を UEFI 起動に対応させようとする受講生、など。

そんな状況でしたので、新しい教科書が必要なことは明白でした。誰か書く人いないかなと周りを見ると、最も書きそうな人はやはり川合さんですよね。 でも、川合さんはそのころ、CPU エミュレータ(OSECPU)とか BASIC 風のインタプリタ言語とかの開発を頑張っていて、OS からは興味が離れているようでした。

「私が書くしかないんじゃないか。」そんな思いがだんだん強くなっていきました。 現代のパソコンでちゃんと起動する、それでいてコンパクトで全体像を理解しやすい OS とその解説書の作成。 「新しい数学の教科書」ならぬ「新しい OS 自作入門」です。

『ゼロからの OS 自作入門』に込めた思い

そこからは(どのような形で出版するかはさておき)、現代のパソコンのアーキテクチャに準拠した OS の作成を本格的に始めました。 最初に、最も難しいことが予想される USB ドライバの作成に着手しました。 最終的にこの予想は当たっており、USB ドライバの作成だけで 1 年半を費やすことになりました。

OS の主要な要素についての技術探求は、それだけでも価値がありそうだと思ったので、 技術書典 4、5、6 では USB ドライバ、C++ 標準ライブラリを自作 OS で使う方法、各種のタイマーハードウェアについて、同人誌にして刊行しました。

技術書典 4 で USB ドライバの書籍を出した後くらいから『ゼロからの OS 自作入門』の本文を書き始めました。 それからは OS 開発と本文の執筆を並行して進めました。 そして、ときどき本文の一部を利用して同人誌として出版する、ということをやりました。

本書は、OS が自作できるって聞いて興味があるけど、やり方がぜんぜん想像できない、という方や、プログラミングを学んだので少し大きな物を作ってみたい、という方に向けて書いています。 OS の作り方に関する知識を仮定せず、 ゼロから 順に説明することを心がけました。 本書を片手に(いや、片手で持てる重さではありませんが)、OS 自作の世界を探検してみませんか?

本書は 700 ページを超える大作ですが、ステップごとに解説、実装、実行を繰り返す方式で進みます。 まったく理解できなかった、という可能性が極力少なくなるような構成になっていますから、 自分には理解できるか不安だ、という方も、とりあえず最初の何章かだけでもチャレンジしてみてはいかがでしょうか。

本書の対象読者としては、セキュリティ・キャンプに応募してくるような若い方(小中高大生)を念頭に置いていますが、大人の方も楽しめるでしょう。 プログラマとして仕事しているけど、コンピュータがどうやって動いているのか、その根っこを覗いてみたい、という方には最適です。 CPU や OS の仕組みに関する知識は、ソフトウェアシステムのボトルネック解析などの実務で役立つかもしれません。

本書を書く間にサイボウズ本社からサイボウズ・ラボへ転籍したり、東京工業大学の特任助教になったり、婚約したりと、いろいろな出来事がありました。 自画自賛ですが、力を込めて書いた自信作ですので、ぜひお役立てください。

本書は全国の書店や Amazon で購入できます→

本書に関する追加情報

Twitter でつぶやいた本書の情報をまとめてありますのでご覧ください。

togetter.com