なぜ人は自作OSをするのか?自作OSとは何か? 〜自作OSのいまと昔 [第1回]

みなさん、自作OSという言葉をご存知でしょうか?
自作PCという言葉には馴染みがあっても、自作OSという言葉は初めて聞いたという方も多くいらっしゃると思います。本連載では、そもそも自作OSとは何か、という基本的なところから、自作OSのこれまでの歴史、現代のコンピューターにおける自作OSの難しさ、そして自作OSの将来的な可能性について、筆者の実体験を踏まえながらご紹介したいと思います。

身近にあるOSの例

自作OSというのは、OS, つまりオペレーティングシステムを自分の手でつくりあげることを指します。といっても、そもそもOSとは何か知らない方も多くいらっしゃると思いますので、最初はそもそもOSとは一体何なのか見ていきましょう。

さて、みなさんの知っているOSにはどんなものがあるでしょうか?下記の図は、2019年5月の、日本国内におけるOSのシェアを示したグラフです。

Operating System Market Share Japan - May 2019

最も多く使われているOSは、みなさんご存知Microsoft Windowsです。ほとんどのPCにプリインストールされていること、企業の大多数が採用していることなどもあって、PC向けの市場では圧倒的なシェアを誇っています。そのあとに続くiOS, macOS(旧OS X)は、Apple社の開発するモバイル向けOSとデスクトップ向けOSです。モバイル向けOSとしては、世界的には後述するAndroidのほうが優勢ですが、日本ではiPhoneをはじめとしたApple製のモバイルデバイスが多く普及しているため、iOSのシェアが大きくなっています。

AndroidはGoogleとオープンソースコミュニティによって開発されている、モバイル向けのOSです。これまで出てきたWindows, iOS, macOSはすべてクローズドソースという、OS本体のソースコードを一般向けに公開しない方式で開発が進められていますが、Androidはその大部分のソースコードが公開されており(これをオープンソースと言います)、一般の人でもそれを閲覧したり、変更を提案したりすることができます。Linuxはオープンソースコミュニティによって開発されているOSで、主にサーバーや組み込み向けに利用されています。シェアは0.4%と非常に低く見えますが、Androidも内部的にはLinuxを使用していたり、最近ではWindows上でLinuxを使うことができるWSL(Windows Subsystem for Linux)という仕組みもできてきているため、一般の人にも身近になりつつあるOSです。

というわけで、これらが世界のOSのほぼすべて、といっても過言ではないことはグラフを見ていただければわかると思います。しかも、これらのOSは非常にたくさんの人々や、名だたる大企業によって開発されているものばかりですから、「OSを自作するなんて無茶だ!個人レベルでできるわけがない!」と感じた方もいらっしゃると思います。ですが、そんなことはありません!OSの定義には「大企業が開発している」とか「多くの人が使っている」とかそんなことは含まれていないのです。では、一体どんなものを作ればそれをOSと呼ぶことができるのでしょうか?

そもそもOSとはなにか?

OSというのは、コンピューターシステムにおいて、ハードウエアとアプリケーションの橋渡しを行う、縁の下の力持ちです。より学問的に言えば、OSは

  • ハードウエアを抽象化して、アプリケーションにインターフェイスを提供する
  • 計算資源を複数のアプリケーションに分配する

という、大きく分けて2つの役割をもちます。逆にいえば、このような役割を果たすプログラムを書くことさえできれば、それは立派なOSと言えるのです!

計算資源の分配とハードウエアの抽象化

もう少し具体的な例を考えてみましょう。

たとえば、外部記憶装置にファイルを書き込む場合、その外部記憶装置はSATA接続のハードディスクかもしれませんし、NVMe接続のSSDかもしれませんし、はたまたUSBメモリかもしれません。しかも、各ディスクのファイルシステムは全部違うかもしれません。そんな状況でもアプリケーションは書き込み先のファイルをfopenしてwriteするだけで、書き込み先のデバイスが一体何なのかを気にせず書き込むことができます。これが「ハードウエアを抽象化して、アプリケーションにインターフェイスを提供する」ということなのです。

また、CPUは一般的に1コアで1つのアプリケーションしか動作させることができません。それでも、私たちはCPUのコア数より多くのアプリケーションを起動し、まるで同時に動いているかのように感じることができます。これは、OSがCPUの時間を細かい単位に分割し、各アプリケーションを切り替えつつ実行するよう調整しているからなのです。これが「計算資源を複数のアプリケーションに分配する」という機能の例です。

このような機能をもつソフトウエアを作ることができれば、それは「OSを作った」ことになります。どうですか?できそうな気がしてきませんか?
…いやいや、やっぱり難しいのでは?という皆さんのために、これまでに作られてきた自作OSをいくつか紹介しておきたいと思います。

日本におけるOS自作の歴史

残念ながら、日本におけるOS自作の過去の歴史は、多くが散逸してしまって原典となる情報があまり残っていません。もし、記述の裏付けとなるような情報をご存知の方がいらっしゃいましたら、筆者まで教えていただけると大変ありがたく思います。

日本におけるOS自作は、1992-1996年頃に最初のブームを迎えていたようです。記録によれば、BTRON系のOSとしてのBTRON386, B-Free OSなどがこの時代に開発されていました。ちなみに、1991年にはLinuxの最初のリリースが発表されています。今はオープンソースコミュニティによって維持されているLinuxも、当初は開発者Linus Torvaldsの自作OSに過ぎなかったのです。

2000-2005年頃には、自作OSという取り組みがかなりの盛り上がりをみせます。2000年には、川合秀実氏がOSASKの最初のリリースを行いました。そして、2002年には、インターネット掲示板2chから発祥した、higepon氏によるMona OSの最初のリリースが発表されています。これを皮切りとして、2ch上では自作OSに関する情報交換が活発に行われるようになり、NWSOS, MEG-OS など、様々な自作OSが多数開発されはじめました。

OSASK動作画面

OSASK (Retrieved from http://osask.net/d/pictures.html)

ここで注目したいのは、これらの自作OSをしていた人々の多くが、10代20代という非常に若い世代の人々であったということです。時間があり、そして熱意をもった学生や若い年代にとって、自作OSは夢があって取り組みたくなる魅力的なテーマだったのでしょう。2003年ごろにはブームが最盛期を迎え、osdev-j (のちのdev-j)や、それから派生したOS-Wiki のような、自作OSに関する情報をまとめようという取り組みが始まりました。しかし、2005年頃になるとブームは下火となり、多くの自作OSのリリースが停滞したり、開発終了になったりしました。

そのような状況に転機が訪れたのは、2006年2月28日のことでした。この日、川合秀実氏著「30日でできる!OS自作入門」が発売され、この本から自作OSに入門した人々が、新たに自作OSを始めるようになったのです。さらに、この本で作るOS「はりぼてOS」を拡張したOSを開発する開発者のコミュニティとして「はりぼて友の会」が発足しています(2006年10月14日にはすでに活動していた形跡あり。2013年に新規会員の募集を停止し、現在ウェブサイトは消滅している)。2007年には、はりぼて友の会のメンバーに対するインタビュー記事が公開されました。記事からもわかる通り、メンバーの主体はやはり20代前後から30代までの若い人々で、共通APIの仕様策定の試みや、発展的課題としてマウスホイールの情報取得方法など技術情報の集積も行われていました。しかし、2007年中にはりぼて友の会の活動は停滞、さらに前のブームから開発が続けられていたMona OSの開発も停滞し、活発に活動する自作OSプロジェクトは数が減少する一方となりました。

その後、いくつかのOSが開発再開を試みましたが、自作OSブーム全体の盛り返しとはならず、2009年にはOSASKの一般公開も停止されるなど、コミュニティの崩壊が進みました。その結果、情報が集積されていたWikiにも荒らしが目立つようになり、もはや自作OSの火はここで風前の灯火となってしまったのです。

ところが年月は経ち2016年、OS自作を趣味としているuchan, liva, hikalium(筆者)の3人が偶然出会い、自作OSコミュニティの復活を目指してosdev-jpが結成されました。主な活動は、隔月で「自作OSもくもく会」と呼ばれるイベントを開催することでしたが、これを聞きつけて過去に自作OSを開発していた開発者も数名集まり、自作OSは再び日の目をみるようになったのです。

自作OSの楽しみ方

先ほど「そもそもOSとはなにか?」の項で話した通り、OSというのは

  • ハードウエアを抽象化して、アプリケーションにインターフェイスを提供する
  • 計算資源を複数のアプリケーションに分配する

という機能を提供するソフトウエアのことを言うのでした。しかし、初心者がいきなり「じゃあこういうものを作ってね!」と言われても、なかなか簡単にできるものではありません(ベテランのプログラマでも簡単なことではないと思います)。それではなぜ、「日本における自作OSの歴史」でも見てきた通り、ほとんど初心者とも言える若い世代の人々に、自作OSは人気を博したのでしょうか?

理由のひとつとしては、自作OSをすることで「他人が知らないコンピューターの裏側を知ることができる」という点が挙げられるでしょう。つまり、自作OSは知識欲を満たしてくれるのです。
筆者の実例を紹介しましょう。私は、小さい頃から祖父のPCでゲームをするのが好きでした(「レミングス」とか「インクレディブルマシーン2」というゲームをやっていました)。 当時のOSはまだ不安定で、時に「赤い丸に白いX」のアイコンとともに「このプログラムは不正な処理を行ったので強制終了されます」という怖いメッセージが出てきたり、はたまた画面が真っ青になって謎の英文が表示される、俗に言うブルースクリーンという事象がよく発生しました。そんなことが起こる度に、私は怖くなってPCの前から逃げ出したものです。
そんな中、祖父が「500円でわかるエラーメッセージ」という薄い冊子を買ってきたのですが、私はこわいもの見たさでそれをパラパラとめくって、どうやらそれらの怖いメッセージはOSというものが出している、ということを知りました。というわけで、どういう仕組みでそのエラーが出るのか知りたくなったわけですが、どの本にも抽象的な内容しか書かれていなくてがっかりしていました。そんな中、偶然本屋さんで見つけた「30日でできる!OS自作入門」を読んだところ、「不正な処理」というのはどうも一般保護例外というものが起きたことを指すらしいということがわかり、とてもスッキリしました。

上はあくまで私の場合の一例ですが、最近よく面接で聞かれると噂の「ブラウザにURLを入力してEnterを押してからページが表示されるまでの流れを教えてください」という問題にも、OSを自作していればより深い視点で答えることができますし、そもそも目の前にあるコンピュータがどのように動作しているのか知ることは、多くの人にとっても楽しい経験になるはずです。

また、知識欲が満たされるという利点に似ていますが、自作OSはコンピュータの全てを思いのままに操ることができる唯一の方法です。というのも、通常のアプリケーションはOSの上で動き、OSはハードウエアを抽象化してアプリケーションに対して隠蔽しますから、通常のアプリケーションがハードウエアを直接操作することは非常に難しいためです。つまり、自作OSはみなさんの支配欲を満たしてくれるかもしれないわけです。

いやいや、知識欲も支配欲もないから私は自作OSなんてしなくていいや、と思ったそこのあなたに、実用的な自作OSの利点をご紹介しましょう。それは、データ構造とアルゴリズムの勉強になる、という点です。
OSは、多種多様なアルゴリズムとデータ構造の集合体と言っても過言ではありません。キューの実現方法としてのリングバッファ、radix treeの一種としてのページテーブル、様々な場所で使われるスタック、双方向・単方向リンクリスト、探索木…これらを各アルゴリズムの特性に合わせて使い分ける豊富な実例が、OSの中には含まれています。通常、大学などでコンピューターサイエンスを学んでいても、各アルゴリズムの仕組みや計算量、応用範囲などを学ぶことはあっても、それらを実際に活用して何かを作るということはあまり多くありません。しかし、理論的背景だけでなく自作OSもすることで、学んだアルゴリズムがなぜその場面で役立つのか、逆に他のアルゴリズムはなぜ適さないのか、を実際に身をもって感じることができます。これを、たったひとつの「自作OS」で一度に得ることができると考えれば、魅力的に見えてきませんか?

もちろん、理由なんてなくて、ただ楽しいから自作OSをする、それだけでもよいのです。プログラミングが好きだから、ハードウエアと戯れるのが好きだから、分厚い仕様書を読むのが好きだから、どんな理由でもよいのです。もし少しでも面白そう!と感じる部分があったのなら、ぜひ自作OSをしてみることをおすすめします。

自作OSが直面している課題

しかし、現代における自作OSでは、ひとつだけ超えなければならない大きな壁があります。それは、いま世の中に出版されている「自作OS」関連の情報は、時代が進むにつれて次第に陳腐化しつつあるという現状です。13年前に出版された「30日でできる!OS自作入門」は、現代でもプログラミングとOSの入門書として大きな地位を占めています。しかし、現代のPCで動作させられるような、そして現代のPCの能力を十分に活かせるようなOSを書くには、この本に記載されている内容だけでは不十分になりつつあります。
次回の記事では、現代における自作OSがどのような点で難しいのか、どのような変更が必要とされているのかについて、具体例を挙げて説明してゆきたいと思います。

参考文献