1 ポイント 投稿者 GN⁺ 2025-01-26 | 1件のコメント | WhatsAppで共有
  • 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件のコメント

 
GN⁺ 2025-01-26
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用に保管されるとのこと
  • こうしたプロジェクトに興味があるなら、MenuetOSKolibriOSも見る価値がある。KolibriOSはかなり前にMenuetOSから分岐したフォーク
    MenuetOSにはSMP対応のx64版もあるが、こちらはクローズドソース

    • アセンブリ言語を学びたいが、Courseraでは完全な初心者向けの講座を見つけられなかった。Javaの経験はあり、ハードウェアにもっと近づくためにC/C++講座を受けているところ
    • 2025年にそんなものをクローズドソースで作る理由が分からない
      趣味用OS以外に、実際にマルチコアx64マシンでそんなものを使う人がいるのだろうかと思う
    • もっと狂った方向を望むならTempleOSもある
  • ユーザー視点とOSハッカー視点で、最近のOS設計における最新のクールなアイデアには何があるのか気になる

    • ひっそり公開している状態だが、新しいカーネル設計に取り組んでいる。今回が12回目で最後の書き直しで、開発してから約1年
      https://github.com/oro-os/kernel
      ユーザーもcapabilityも持たないマイクロカーネル設計で、カーネルのエンティティ階層を通じてアクセス制御を強制する。複数の安全性レベルを持つ共有メモリポートが主なIPC方式で、カーネルレベルで型付けされている
      現在はカーネルの有用性を検証する後半段階。設計を実証できれば、より正式に記事を書くつもり。頭の中のプロジェクトとしては8年、エディタ上では4年ほどになる
    • Plan 9のクールなアイデアの多くは、今でもおおむね超えられておらず、きちんと再実装もされていない
      https://doc.cat-v.org/plan_9/3rd_edition/rio/rio_slides.pdf
    • Fuchsiaにはかなり大胆なアイデアが多い。マイクロカーネル、capability、独特なアプリインストールシステムなどがあり、アプリをWebサイトに近づけようとしているように見える
      https://rtic.rs/は組み込みRTOSに近い領域でかなり興味深いアイデア
      正直に言うと、Linuxよりはるかに先を行くPlan 9の機能もまだある。例えば https://9p.io/sys/doc/lexnames.html
    • Genode [1] は、フレームワークであるという点でOS設計のアプローチが興味深い。ただしアセンブリがどれほど入っているかは分からない
      [1] https://genode.org
    • 広く捉えた両極端を考えると、最良の答えはRedox OSだと思う
      https://redox-os.org/
  • 似た文脈で、ロボティクス用の高性能RTOSにはどんな進展があるのか気になる。この分野は比較的注目が少ないように見える
    ROS/ROS2はオペレーティングシステムではなく、大多数は高性能ソフトウェアと呼べるものでもない

    • x86RTOSは、SMMや複雑なキャッシュといった要素のため相性が良くない。高性能な処理があるなら、別の組み込みMCUを1つ、あるいは複数接続して制御する方向を望む可能性が高い
      組み込みの世界にはFreeRTOS、Zephyr、ThreadXのようなOSが多く、Nvidia DriveOSのような独自ソリューションもいくつかある
      ただし組み込みOSはLinuxのような汎用OSに比べてかなり制限されている。タスクスケジューラはあるが、プロセス、ファイルシステム、動的ファイルロード、バイナリツールなどは存在しないか、オプションであることが多い
    • 真剣にやっている人たちはQNXVxWorksを使っているようだ。残念ながら、ほとんどのロボティクスプロジェクトはそれほど真剣ではなくUbuntuを動かしている
    • 一般に理解されているRTOSではないが、RTICは悪くない。もともとロボティクス用に開発されたものだと認識している
      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アセンブリ

    • さらに正確に言うと16ビットリアルモード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