アセンブリ言語でゼロから開発されたホームブリューOS「Snowdrop OS」
(sebastianmihai.com)- Snowdrop OSはIBM PCアーキテクチャ向けの16ビットリアルモードOSで、x86アセンブリ言語だけでブートからアプリ実行まで直接実装したホームブリューOS
- 配布版は1.44MBフロッピーイメージとCD-ROMイメージで提供され、ブートローダー、カーネル、シェル、ユーティリティ、テストアプリ、TetrisクローンのaSMtrisを同梱
- 512バイトのブートローダーがカーネルを探してメモリに読み込み、カーネルはアプリ用の割り込みベクタを設定したうえで起動アプリをロードする
- ファイルマネージャー、テキストエディタ、グラフィックアプリ、BASICインタプリタ、x86アセンブラとデバッガまで含み、OS内で開発と実験が可能
- ソースコードは利用・改変の制限なく公開されており、OSの低レベルな動作を自分で追いたいプログラマーにとって参考資料になる
ブートからアプリまで直接実装した構造
- Snowdrop OSは、PCの電源を入れたときに何が起きるのか、ブート可能なディスクとOS内部がどのように動作するのかという好奇心から始まったプロジェクト
- 対象はIBM PCアーキテクチャ向けの16ビットリアルモードOSで、x86アセンブリ言語だけでゼロから書かれている
- 配布イメージは2つの形式で提供される
- フロッピーディスクの1.44MBイメージ
- CD-ROMイメージ
- イメージには自作の主要コンポーネントがまとめて含まれている
- カーネルをメモリにロードするブートローダー
- ユーザーアプリ用の割り込みベクタを設定したあと、起動アプリをロードするカーネル
- シェル、ユーティリティ、テストアプリ、TetrisクローンのaSMtrisなどのユーザーアプリ
- ブート中にハードディスクを検出するとインストールするか尋ね、Snowdrop OSをハードディスクにインストールできる
- 同梱アプリとツールは、ファイルマネージャー、テキストエディタ、グラフィックアプリケーション、BASICインタプリタ、x86アセンブラ、x86デバッガにまで広がっている
- Snowdrop OSとアプリのソースコードは、利用・改変の制限なく公開されている
読んでみる価値のあるソースコード領域
- Boot loader: 512バイトに収まり、カーネルを探してロードする
- kernel: アプリケーションに基本サービスと抽象化を提供する
- Graphics and GUI framework: グラフィックとマウスベースのアプリケーションを作るための基盤
- x86 assembler: Snowdrop OS内で低レベルアプリケーションを直接作れるようにする
- BASIC interpreter: 高レベルアプリケーションをすばやく作るためのツール
- x86 debugger: アセンブラと併用できる
- Dynamic data structure libraries: 連結リスト、ツリー、BSTなどの動的データ構造の操作を支援する
- All applications: ゲーム、テキストエディタ、ファイルマネージャー、ツール、テストアプリケーションを含む
バージョンごとに増えてきた機能
- バージョン履歴は、v1のシングルタスク、シェル、aSMtrisから始まり、機能を継続的に追加してきた流れ
- v2: PS/2マウスドライバとマウステストアプリ
- v3: 基本的なマルチタスクと仮想ディスプレイ対応
- v4: FAT12の書き込み・削除ドライバ、ファイルマネージャー、テキストエディタ
- v6: シリアルポートベースのマルチプレイヤーSnakeゲーム
- v16: GUIフレームワーク
- v18: BASICインタプリタとリンカ
- v19: ハードディスクインストール
- v22: x86アセンブラ、マルチディスク対応、ファイル閲覧ユーティリティ
- v23: x86デバッガ
- v25: 動的メモリとデータ構造
- v28: 高解像度GUI、ドローイングアプリ、デスクトップアプリ
- v31: ランタイムライブラリとBASICインタプリタRTL
1件のコメント
Hacker Newsの意見
90年代半ばに同じように32ビットの趣味用GUI OSを作っていたが、この本は本当に必読だった
https://www.amazon.com/Developing-32-Bit-Operating-System-Cd...
https://web.archive.org/web/20140704223135/https://www.ipdat...
Sensory Publishingが権利を取得した後、タイトルを変更して1,000部を追加印刷したが、今は200部ほどしか残っておらず、もう販売していない。この本は現在パブリックドメインで、残った本はGreat Alexandria Library用に保管されるとのこと
こうしたプロジェクトに興味があるなら、MenuetOSとKolibriOSも見る価値がある。KolibriOSはかなり前にMenuetOSから分岐したフォーク
MenuetOSにはSMP対応のx64版もあるが、こちらはクローズドソース
趣味用OS以外に、実際にマルチコアx64マシンでそんなものを使う人がいるのだろうかと思う
ユーザー視点とOSハッカー視点で、最近のOS設計における最新のクールなアイデアには何があるのか気になる
https://github.com/oro-os/kernel
ユーザーもcapabilityも持たないマイクロカーネル設計で、カーネルのエンティティ階層を通じてアクセス制御を強制する。複数の安全性レベルを持つ共有メモリポートが主なIPC方式で、カーネルレベルで型付けされている
現在はカーネルの有用性を検証する後半段階。設計を実証できれば、より正式に記事を書くつもり。頭の中のプロジェクトとしては8年、エディタ上では4年ほどになる
https://doc.cat-v.org/plan_9/3rd_edition/rio/rio_slides.pdf
https://rtic.rs/は組み込みRTOSに近い領域でかなり興味深いアイデア
正直に言うと、Linuxよりはるかに先を行くPlan 9の機能もまだある。例えば https://9p.io/sys/doc/lexnames.html
[1] https://genode.org
https://redox-os.org/
似た文脈で、ロボティクス用の高性能RTOSにはどんな進展があるのか気になる。この分野は比較的注目が少ないように見える
ROS/ROS2はオペレーティングシステムではなく、大多数は高性能ソフトウェアと呼べるものでもない
組み込みの世界にはFreeRTOS、Zephyr、ThreadXのようなOSが多く、Nvidia DriveOSのような独自ソリューションもいくつかある
ただし組み込みOSはLinuxのような汎用OSに比べてかなり制限されている。タスクスケジューラはあるが、プロセス、ファイルシステム、動的ファイルロード、バイナリツールなどは存在しないか、オプションであることが多い
https://rtic.rs
関連記事にはこういうものがある。他にもあるだろうか?
Homebrew an OS from Scratch? Snowdrop Shows How It's Done - https://news.ycombinator.com/item?id=39005640 - 2024年1月(1件のコメント)
Snowdrop OS – a homebrew operating system from scratch, in assembly language - https://news.ycombinator.com/item?id=28090574 - 2021年8月(3件のコメント)
正確に言うとx86アセンブリ
作られたツールとアプリのコレクションが印象的。それでもセルフホスティングの誘惑には乗っていないようだ
アセンブラをnasmレベルに合わせるには、さらに作業が必要か、ソースコード全体をSnowdrop ASMにもっと近づける必要がありそう
V32、BASICコンパイラもあるといい
機能リクエストはできそう
こういうものをesp32に移植した姿を見てみたい。例えばttgo vga32ボードに載せるような形
SDカード、VGA、サウンド、キーボード/マウス、WiFi、Bluetoothを備えた基本的なGUIとシェル型OSだといい。現代的なCommodore 64という感じで、WiFi印刷はテキスト専用でもよく、lynx風ブラウザ、メール、IRC、gopherなどもあるとよい
Snowdrop OSのビルド要件が印象的
Works on: Windows XP 32bit, Windows 98, Windows 95