世界を動かす技術を、日本語で。

HNに表示: Rustとx86アセンブリで書かれたDOS風の趣味OS

概要

rou2exOS Rusted Edition は、Rustで再実装された独自OS。 QEMUエミュレータやx86_64ベアメタル環境で動作確認済み。 ISOイメージ を使って簡単に起動・テスト可能。 SLIPによるネットワーク通信やICMPテストにも対応。 GitHubリリース や公式ブログで詳細情報・ISO配布。

rou2exOS Rusted Editionとは

  • rou2exOS Rusted Edition は、オリジナルのRoureXOSを Rust言語 で再構築したバージョン
  • 安全性・パフォーマンスを重視した RustによるOS開発事例
  • QEMUエミュレータ や実機(x86_64 USBブート)で動作検証済み
  • 公式ブログ記事 やGitHubリリースページで詳細解説・ISO配布
    • オリジナル RoureXOS(ブログ記事)
    • rou2exOS Rusted Edition(ブログ記事)

ビルドと実行手順

  • Rust本体と必要な依存パッケージ をインストール
    • Linuxの場合、dnfコマンドでxorriso・net-tools・grub2-tools・qemu関連を一括導入
  • ソースコード初期化
    • make init コマンド実行
  • カーネルとブートローダのビルド
    • make build でELFバイナリ生成・GRUB用ISOイメージ作成
  • QEMUでISOイメージを起動
    • make run_iso または make run_iso_floppy でエミュレーション
  • カーネル単体実行(bootloader依存追加時)
    • cargo bootimagemake run で実行

ICMP/SLIP通信テスト方法

  • QEMUでカーネルを実行し、pty番号を確認
    • make run 実行 → 出力例: /dev/pts/3 (label serial0)
  • SLIPパケット受信・sl0インターフェース作成
    • sudo slattach -L -p slip -s 115200 /dev/pts/3
    • sudo ifconfig sl0 192.168.3.1 pointopoint 192.168.3.2 up
  • tcpdumpによるパケットキャプチャ
    • sudo tcpdump -i sl0

試用方法・入手先

  • ソースコードから自分でビルド
    • ビルド手順に従い、最新機能を体験
  • GitHubリリースのISOイメージを活用
    • ISOをダウンロードし、QEMUで起動
  • 公式ブログ:https://blog.vxn.dev/rou2exos-rusted-edition
    • 詳細な解説・最新情報・ISO配布

Hackerたちの意見

メモリセーフな言語だね。x86_64で、Armも計画に入ってる。ネットワークスタックもあるし、CDから起動できてマルチブートにも対応。君の趣味プロジェクトはDOSを軽く超えてるよ。

おおっと。DOSと競うにはDoomとBASICを動かさなきゃね。それが公式に認められたDOS-カールマン線だよ。

Rustとx86アセンブリだね > メモリ安全な言語。何の意味があるの?今のRustは3Dプリンティングみたいな感じだね。何かを良くするかのように。プリンティングはプリンターの販売者やメーカーによって盛り上げられてたけど、結局お金が尽きちゃった。プロジェクトとしては、古いソフトと互換性があればクールだけど、そうでなければ教育やマゾヒズム向けって感じ。実用的になるまでには長い道のりだね、たとえ注目を集めても。

DOSっぽいけど、DOS互換ではないってこと?

その通り。最初のバージョンは16ビットで、互換性ではMS-DOSにかなり近いよ。それに、シンプルなディスクI/O操作ができるOSは、DOSシステムとも見なせるんじゃない?

つまり、MS-DOS互換ってことだね :) 具体的には、Alley CatやDune 2、Doomが動くってこと。

現在のUEFI環境やシェルより、こういうのが良かったな。FLOSSの64ビットDOSっぽいのがいいな。クールなレトロブートマネージャーや診断環境とか。これ、EFIシステムパーティションから起動できるかな? FAT12はサポートされてるみたいだけど、GPTはどうなの?

EFIシステムパーティションからのブートはまだテストされてないよ。サポートされてるファイルシステムはFAT12だけ(メモリディスクの実装もあるけど、今は動かない)。だからGPTも今のところはサポートされてないんだ。次に実装するのはFAT32を目指してるよ(フラッシュディスクは通常FAT32だし)。最後の質問については、OSはメモリ内のVGAバッファを直接利用/書き込んでるから、提供される解像度はGRUBによって80x25だよ。

ちょっと気になったんだけど、なんでx86なの?リソースが豊富だから?変な命令形式のせい?ブートシーケンスの複雑さ?それとも、特にDOSを模倣しようとしてるの? > ARMアーキテクチャ(aarch)へのサポートももうすぐ来るよ。すごい!DOS自体がプログラム、システムコード、アーキテクチャの相互作用に密接に結びついてるのに、どうやって複数のアーキテクチャでDOSっぽいOSをサポートするの?

このプロジェクトは見てないけど、私の予想では、x86は広く普及しているプラットフォームで、歴史的な背景と互換性の高さから、デバイスツリーを解析したり、MMUを設定したり、PCI(e)のような複雑なバスを扱ったりする必要がなく、非常にシンプルで薄いレイヤーの「DOS風OS」を実装できるレガシーインターフェースがたくさんあるんだ。ARMでシンプルなOSを立ち上げるのはずっと難しいし、x86よりもかなり多くの制限を受け入れない限り、シンプルさは保てないよ。(例えば、ARMではMMUがオフだとあまりできることがないし、セクターを読み込んだり、キー入力を待ったりするための便利なBIOSインターフェースもないから、アセンブリの数行で済ませるのは難しい。)

x86アーキテクチャが使われているのは、このシステムのバージョンが最初のものに由来していて、BIOSの割り込みやTurbo Cのインラインアセンブリに依存しているからだよ。MS-DOSを完全に模倣しようとしているわけではないけど、両方のシステムはそれに強くインスパイアされてると思う。個人的には、Rustコンパイラがターゲットアーキテクチャの指定を許可しているから、複数のアーキテクチャをサポートできると思う。だから、ビルドの前に特定のターゲットを構築することができるんだ。

SLIPとslattach(1)を使ってるのがめっちゃ好き!おもちゃのTCP/IPスタックで遊んでたんだけど、Linuxのpty越しにSLIPを使うのがカーネルと接続するのにすごく良い方法だと思ったんだ。残念ながら、macOSは昔はslattach(1)が付いてたみたいだけど、今はもうないみたい。macOSでSLIPを使って、シンプルでクロスプラットフォームなAPIをネットワークスタックに接続した人っているのかな?代わりにLinuxではtun/tap、macOSではutunを使う手もあるけど、SLIPの方がずっと良さそう。

これはRustでゼロからカスタムVGAドライバを作ってるの?

src https://github.com/krustowski/rou2exOS/tree/master/src/vga

まあ、そうだけど、俺の意見ではそのモジュールは単にビデオバッファのラッパーに過ぎないね。

非同期ランタイムをサポートするためにイベントキューが必要だね。

完全なイベントループについてはどうなの?

チェコ語のダイアクリティカルマークのサポートを追加する予定はあるの?

今のところそうじゃないよ。今回はこのバージョンを英語のままでいく予定なんだ。でも最初のバージョンはチェコ語だったけどね。

お疲れ様、OP!「ただの趣味だから、Linuxみたいに大きくてプロフェッショナルにはならないよ」って言うチャンスを逃したね(笑)

Crysisは動くの?(笑)