狠狠撸

狠狠撸Share a Scribd company logo
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
趣味としての翱厂自作
趣味としての翱厂自作
?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自作入門」を執筆中であると
明かされる
?原稿を読ませてもらえることに!
伝説の書籍
仕事としての翱厂自作
仕事としての翱厂自作
?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や言語処理系をがりがり作っている、
というわけではない
自作言語処理系
自作OS
仕事の例:OpeLaプロジェクト
?2020年後半~2021年前半
?自作OS上で自作言語処理系を動かし、
OSと言語処理系をビルドする
?というロマンあふれるプロジェクト
?言語処理系を作る途中で、路線変更
?OpeLaプロジェクトは凍結
今やってること
?「ゼロからの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, worldn");
}
extern "C" printf func(*byte, ...) int;
OpeLa言語で書いたハローワールド

More Related Content

翱厂を手作りするという趣味と仕事