1.6K Views
November 14, 21
スライド概要
uchanと「OS自作」との出会いから、それを仕事にするまでを紹介します。中学2年のときに「OS自作」という概念に出会い、今では「OS自作」がお仕事になりました。
サイボウズ・ラボ株式会社で教育向けのOSやCPU、コンパイラなどの研究開発をしています。
OSを手作りするという 趣味と仕事 2021年11月14日 サイボウズ・ラボ株式会社 内田公太
自己紹介 ⚫内田公太 @uchan_nos ⚫サイボウズ・ラボ株式会社 ◼ 教育用OS、言語処理系の研究開発 ⚫趣味1:自作OSコミュニティ「osdev-jp」の運営 ◼ 「自作OSもくもく会」をたまに開催 ◼ 「自作OSアドベントカレンダー」の設置 ⚫趣味2:「uchanの電子工作ラボ」運営 ◼ 電子回路のはんだ付けや計測の設備 ◼ https://uchan.net/lab/
OSとは ⚫Operating System Microsoft Windows 11 のスクリーンショット Google Android
OS自作とは ⚫ほかのOSの力を借りずに起動する ソフトウェアを作る ⚫各ハードウェアを制御し、アプリが 動くようにする ⚫ハードウェアに近い世界 ⚫パソコンを支配する感覚 ⚫「大きな組み込みマイコン」と評す る人もいる ※「OS自作」により作られたソフトが「自作OS」 パソコンを支配する人と 支配されるパソコン
私とOS自作との出会い:OSASK ⚫2000年に初リリース ⚫2005年頃まで開発されていた ⚫国産OS ⚫川合氏が主担当 ⚫100KB以下の極小OSイメージ ⚫ウィンドウシステム ⚫プリエンプティブ・マルチタス ク OSASKのスクリーンショット
私とOS自作との出会い:初めてのML投稿 ⚫中学2年生の11月 ⚫OSASKと川合氏に出会って しばらく後 ⚫インターネットコミュニティ に初めて触れた瞬間 ◼ 2003年というのは、各家庭に 常時接続インターネットが普 及し始めた頃 ◼ 皆さんには想像し難いでしょ うが…… OSASK-MLに私が送った初めてのメール ※ML(メーリングリスト)とは、今でいうDiscordサーバーやLINEグループみたいな感じ
私とOS自作との関わり ⚫2000年 小5:「OS」に出会う ◼ パソコンのOS再インストールがきっかけ ⚫2003年 中2:OSASKに出会う ⚫2005年 高1:「30日でできる!OS自作入門」に出会う ◼ 執筆途中の原稿を読ませてもらった ⚫2007年 高3:「はりぼて友の会」として活動 ⚫2009年 大2:OS自作の演習講義の補佐 ◼ セキュリティ&プログラミングキャンプ2009のOS自作組チューター ⚫2013年 修2:OS自作熱が再燃 ⚫2016年 社2:osdev-jpを立ち上げ ⚫2021年 社7:「ゼロからのOS自作入門」を出版
MikanOS:私の自作OS ⚫「ゼロからのOS自作入門」のサ ンプルOS ⚫現代のPCで起動 ⚫64ビットモードで動作 ⚫USBマウス、キーボード対応 ⚫プリエンプティブ・マルチタスク ⚫FAT32ファイルシステム 30章後のMikanOS ⚫ページングによるメモリ管理
趣味としてのOS自作
趣味としてのOS自作 ⚫2000年 小5:OSに出会う ◼ パソコンのOS再インストールがきっかけ ⚫2003年 中2:OSASKに出会う ⚫2005年 高1:「30日でできる!OS自作入門」に出会う ◼ 執筆途中の原稿を読ませてもらった ⚫2007年 高3:「はりぼて友の会」として活動 ⚫2009年 大2:OS自作の演習講義の補佐 ◼ セキュリティ&プログラミングキャンプ2009のOS自作組チューター ⚫2013年 修2:OS自作熱が再燃 ⚫2016年 社2:osdev-jpを立ち上げ ⚫2021年 社8:「ゼロからのOS自作入門」を出版
「OS自作」に触れる前 ⚫小学3年の頃:自分専用のパソコンを手に入れる ⚫小学5年の頃:パソコンが壊れ、OSの再インストールに挑戦 ◼ このときに「OS」というものの存在をうっすら認識 ⚫小学6年の頃:親と一緒にPICマイコンを学ぶ ⚫中学1年の頃:C言語に入門、のちにDelphiも ◼ DelphiはGUIソフトを作れるという触れ込みで学んだ ⚫中学2年の頃:フリーソフト探しに熱中 ◼ 「フリーソフト」とは無料で使えるソフト • この頃(2000年頃)は「オープンソース」は流行前 ◼ Linuxをインストールしたのもこの頃 フリーソフトの宝庫 Vectorのバナー
「OS自作」との遭遇前夜 ⚫中学2年の頃、フリーソフト探し中に「OSASK」と出会った ◼ Vectorを徘徊していたら、偶然「OSASK」を発見 ◼ 国産OSということで興味を持つ ⚫OSASK作者(川合氏)へ連絡を取った ◼ Vector登録版は少々古く、最新版を使う方法を聞いた気がする ◼ 当時の最新版は「OSASK/AT 4.5」とかだった気がする 今でもVectorには当時のまま登録されている
「OS自作」との遭遇 ⚫OSASKコミュニティでしばらく活動 ⚫OSASKのIntroシリーズでプログラミングを学ぶ ◼ Introシリーズ:C言語でOSASKアプリを作る教材 ◼ 標準Cから飛び出した本格的なアプリ開発ができる ◼ 文字の表示から始まり、キー入力、サウンド、グラフィック、… ⚫そのうち、自分でもOSを作ってみたくなる ⚫川合氏にチャット(IRC)で相談 ⚫「30日でできる!OS自作入門」を執筆中であると 明かされる ⚫原稿を読ませてもらえることに! 伝説の書籍
仕事としてのOS自作
仕事としてのOS自作 ⚫2000年 小5:OSに出会う ◼ パソコンのOS再インストールがきっかけ ⚫2003年 中2:OSASKに出会う ⚫2005年 高1:「30日でできる!OS自作入門」に出会う ◼ 執筆途中の原稿を読ませてもらった ⚫2007年 高3:「はりぼて友の会」として活動 ⚫2009年 大2:OS自作の演習講義の補佐 ◼ セキュリティ&プログラミングキャンプ2009のOS自作組チューター ⚫2013年 修2:OS自作熱が再燃 ⚫2016年 社2:osdev-jpを立ち上げ ⚫2021年 社8:「ゼロからのOS自作入門」を出版
サイボウズ・ラボでの仕事 ⚫2014年にサイボウズへ新卒入社 ⚫2020年にサイボウズ・ラボへ転籍 ⚫サイボウズ・ラボではOSや言語処理系(≒コンパイラ)を軸とし た教育活動が仕事のテーマ ◼ 「ゼロからのOS自作入門」の執筆 ◼ サイボウズ・ラボユースのメンター ◼ セキュリティ・キャンプの講師 ⚫実製品に搭載されるようなOSや言語処理系をがりがり作っている、 というわけではない
仕事の例:OpeLaプロジェクト ⚫2020年後半~2021年前半 ⚫自作OS上で自作言語処理系を動かし、 OSと言語処理系をビルドする ⚫というロマンあふれるプロジェクト 自作言語処理系 ⚫言語処理系を作る途中で、路線変更 ⚫OpeLaプロジェクトは凍結 自作OS
今やってること ⚫「ゼロからのOS自作入門」サポート ◼ 質問掲示板(GitHub Issues)に来た質問に回答 ◼ 毎週土曜日の夜に雑談会を開催し、質問を受け付け ⚫新たな教材づくり ◼ 「Cコンパイラの自作」あたりを軸に ◼ 「OS自作」ではないけど、関連した技術 ◼ FPGAと戯れたりもしている ◼ 詳細はまだ秘密 先日開催したFPGA勉強会
何か質問ありますか?
OS自作の何が楽しいの? ⚫普段使っている「OS」の役割、仕組みが分かる ◼ ブラックボックスの中を解明する楽しみ ◼ 例:ファイルシステムって具体的に何をしているのか ◼ 例:複数のアプリを同時に動かす仕組みとは ⚫PCを自分で操れる ◼ 他のOSに邪魔されず、CPUの全機能が使える ◼ USBコントローラも自分で制御する ◼ マイコン組み込み開発が好きな人はハマるかも ⚫他の人にはない開発経験を得られる ◼ OS自作している人は少数派、希少な存在
OSとは ⚫定義はいろいろ ⚫https://e-words.jp/w/OS.html ⚫「OSとは、ソフトウェアの種類の 一つで、機器の基本的な管理や制 御のための機能や、多くのソフト ウェアが共通して利用する基本的 な機能などを実装した、システム 全体を管理するソフトウェア。」 https://en.wikipedia.org/wiki/Operating _system#/media/File:Kernel_Layout.svg
OSとは ⚫『30日でできる! OS自作入門』の定義 結局のところ、それぞれの作者が 「これはOSなんだ」と言い張っ て、周囲の人も「まあそうかな」 と思えばどんなソフトでもOSな んです。
osdev-jpの立ち上げ ⚫時は過ぎて2012年、サイボウズへインターンに行く ◼ 「サイボウズ・ラボユース」というインターン制度 ◼ お金をもらって好きなものを開発できるという神制度 ⚫2014年、サイボウズへ入社 ◼ インフラ基盤のソフトを開発する部署へ ◼ 毎年3月に、ラボユースの卒業式&成果発表会に出席 ⚫2016年の成果発表会に自作OSメンバーが集結→osdev-jp結成 ◼ hikaliumさん、Livaさん、そして私 ◼ その場に川合氏もいた
言語処理系とは ⚫プログラミング言語を実行するための基盤 ◼ C言語の世界で説明すると…… ◼ コンパイラ:C言語で書いたプログラムをアセンブリ言語に変換 ◼ アセンブラ:アセンブリ言語プログラムをオブジェクトコードに変換 ◼ リンカ:オブジェクトコードをつなぎ合わせて実行ファイルを生成 ◼ ライブラリ:よく使う関数などを提供 ◼ CPU:実行ファイルに含まれる機械語を実行 C言語 プログ ラム コンパイラ アセンブラ ライブラリ 言語処理系 リンカ 実行 ファイ ル CPU
OpeLaはどこまで作ったの? ⚫OpeLa言語のコンパイラを途中まで作った ⚫四則演算はもちろん、if文やfor文、関数などをサポート ⚫ジェネリクスも若干サポート func main() int { printf("hello, world\n"); } extern "C" printf func(*byte, ...) int; OpeLa言語で書いたハローワールド