7 ポイント 投稿者 GN⁺ 2025-06-24 | 1件のコメント | WhatsAppで共有
  • Rustで開発された64ビットのDOSスタイルOSで、一部のx86アセンブリもカーネルのロードに使用
  • VGAテキストモード(80x25)、FAT12ファイルシステム、SLIPによるIPv4ネットワークスタック(ICMP/UDP/TCP/HTTP)を実装
  • QEMUベースの仮想マシン上で実行・開発されており、一部の実物フロッピーメディアにも対応
  • シンプルなテキストエディタ、TABによるファイル/ディレクトリ自動補完、Snakeゲームなどの基本ユーティリティを含む

アーキテクチャとブートローダー

  • 対象CPUはx86_64で、将来的にARM(aarch)アーキテクチャへの対応を予定
  • 初期バージョンでは自作のブートローダーでカーネルをメモリに読み込んで実行
  • 64ビットカーネルではGRUB2ブートローダーを活用し、Long Modeへの移行とProtected Modeの切り替えを処理
  • stage2ブートローダーがGDT、IDT、ページング設定およびMultiboot2ポインタの割り当てなどを実行
  • カーネルはシェルコマンド処理系とさまざまなカスタムコンポーネントで構成

QEMUでのエミュレーションとイメージ

  • QEMUによる仮想マシン環境で開発とテストを実施
  • ISOイメージの生成: grub2-mkrescueとxorrisoを使用
  • FAT12フロッピーイメージの生成およびマウントに対応し、実機またはQEMUフラグ(-fda fat.img)で利用可能

初期化手順

  • カーネル起動時にLong Mode、Multiboot2タグ、FAT12ファイルシステム、VGA状態などを確認
  • ASCIIアートのロゴを表示した後、シェルループに制御を移譲

ファイルシステム

  • FAT12ファイルシステムをサポート: ファイルの読み取り/書き込み/検索/削除、ディレクトリの作成/削除などに対応
  • テキストファイルの作成と上書き、サブディレクトリに対応
  • fsckツールによるファイルシステム整合性チェック機能を含む
  • 今後FAT32対応も計画

ネットワークスタック

  • SLIPプロトコルベースでIPv4パケットを送受信
  • イーサネットフレーム処理をサポート(テスト未完了)
  • ICMP Echo(Request/Reply)、UDP、TCP(SYN/SYNACKステートマシン)などをサポート
  • シンプルなHTTPサーバー: 静的HTMLページを配信

Snakeゲーム

  • Snakeゲームを内蔵し、将来的に**マルチプレイ(P2P TCP)**版も計画
  • ゲームデータ(レベル、スコア)はテキストファイルとして保存・読み込み可能
  • ESCでゲームを終了し、スコアに応じてハイスコアを保存

プロジェクトの価値と活用ポイント

  • Rustで書かれたOSの実例として、低レベルソフトウェア開発における安全性と生産性の向上を体感できる
  • SLIP/ICMPテスト、簡単な配布、実機対応などにより、OS実験やカスタム実装の学習に適している
  • Rustとx86アセンブリを組み合わせたDOSライクなシステム構造を直接体験できる

1件のコメント

 
GN⁺ 2025-06-24
Hacker Newsのコメント
  • メモリ安全性が保証される言語を使い、x86_64ベースでArm対応も計画、自前のネットワーキングスタックを備え、CDおよびmultibootで起動可能ということで、自分の趣味プロジェクトがDOSを上回る体験を提供している
    • DOSと競うなら、DoomとBASICの実行サポートは必須で、これが事実上DOSスタイルの公式な基準線になる
    • Rustとx86アセンブリの組み合わせなので、メモリ安全性を目指すなら本当に実用的な価値があるのかと思ってしまう。今日のRustは、かつての3Dプリンティングのように過剰にマーケティングされている印象があり、普及の過程で実質的な利点は限定的だ。プロジェクトとしても、古いソフトウェアとの互換性があればよいが、そうでなければ教育用やマニア向けのプロジェクトに近く、実用までにはまだ遠いと感じる
  • ネットワーキングスタックでSLIPとslattach(1)を使っている点が本当に気に入った。自分で簡単なTCP/IPスタックを作ったときも、Linuxでpty経由のSLIP接続を使ってカーネルと連携させたことがある。macOSにも以前はslattach(1)があったが、今は削除されたようだ。macOSでSLIPを使ってクロスプラットフォームなネットワーキングAPIを作った人がいるのか気になる。代替としてはLinuxではtun/tap、macOSではutunがあるが、SLIPのほうがはるかにシンプルだ
  • なぜx86を選んだのか気になる。情報源が多いからなのか、独特な命令フォーマットのためなのか、ブートシーケンスの複雑さのためなのか、あるいはDOSをそのままなぞる戦略なのか。ARMアーキテクチャもまもなく対応予定とのことだが、DOS自体がハードウェアとソフトウェアの結びつきが強いのに、複数アーキテクチャでどう対応するのか気になる
    • このプロジェクト自体は見ていないが、自分の予想では、x86プラットフォームは歴史的なレガシー互換性のおかげで本当に多様なインターフェースが組み込まれており、非常に薄くシンプルな「DOS系OS」を実装しやすい。デバイスツリーの解析やMMUのセットアップ、PCI(e)のような複雑なバス処理などが不要で、単純に始められる。ARMはブートストラップ自体が難しく、シンプルさを保つにはさらに制約を受け入れる必要があり、MMUなしでできることも限られるし、BIOSインターフェースもないので、x86のように簡単にセクタを読み込んだりキー入力待ちをしたりしにくい
    • x86を選んだ理由は、このシステムがTurbo CでBIOS割り込みとインラインアセンブリを基盤に作られた最初のバージョンから派生しているため。MS-DOSだけを模倣しようとしているわけではなく、多くの着想を得ている。複数アーキテクチャ対応については、Rustコンパイラのターゲットアーキテクチャ指定機能のおかげで可能性がある。ビルド前にターゲットを指定すれば、ビルド工程にそのまま反映できる
  • 今のUEFI環境やシェルの代わりに、こうしたFLOSSベースの64ビットDOS形式ソリューションのほうが良かったのではと思う。レトロ風のブートマネージャやシステム診断ツールとして格好よさそうだ。これがEFIシステムパーティションから実行できるのか気になるし、fat12対応は確認できるが、gpt対応はどうなのか、映像ハードウェアを直接制御しているのか、それともターミナル風の出力なのかも気になる
    • まだEFIシステムパーティションからの起動はテストしていない。FAT12ファイルシステムのみを公式にサポート中で(メモリディスク機能はあるが現在は動作していない)、gptは現時点で未対応。FAT32対応を優先候補として検討中(通常フラッシュディスクはFAT32を使うため)。最後の質問については、OSがVGAメモリバッファに直接書き込む方式で、GRUBが80x25の解像度を提供する
  • 今回のプロジェクトは素晴らしいと思う。「ただの趣味ですし、Linuxみたいに大きくてプロフェッショナルなものにはならないでしょう」という名文句を逃したのが惜しい
  • チェコ語の発音記号をサポートする予定があるのか気になる
    • 今回のバージョンでは英語のみをサポートする予定。最初のバージョンは当初チェコ語で作られていた
  • Rustで完全に新規実装したVGAドライバを使っているのか気になる
  • DOSスタイルだがDOSとの互換性はない、という理解で合っているのかという質問
    • その分析で合っている。最初のバージョンは16ビットで、MS-DOSとほぼ互換になるよう設計されていた。そして、簡単なディスクI/Oだけでも扱えれば、広い意味ではDOSシステムに含めてもよいと思う
    • つまりMS-DOS互換性、Alley CatやDune 2、Doomが動くレベルを意味する
  • 非同期ランタイムをサポートするにはイベントキューが必要では、という意見
    • 完成度の高いイベントループ実装についてはどうか、という意見
  • Crysisが動く可能性についての愉快な質問