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

Show HN: MyraOS – 私の32ビットオペレーティングシステム(C言語とアセンブリ言語で作成)(Hack Clubプロジェクト)

概要

MyraOSは、 x86アーキテクチャ 向けに 完全自作 されたUnixライクOS。 保護モード、仮想メモリ、プロセス管理、GUIなど多彩な機能を搭載。 Doomなどの 実アプリ も動作可能な本格派OS。 QEMUを使い、 Windows/Linux/macOS で簡単に起動可能。 開発体験や課題、学びについても詳述。

MyraOSの特徴と主な機能

  • x86アーキテクチャ 向けの自作UnixライクOS
  • 保護モード (GDT/IDT、ISRs/IRQs)実装
  • ページング と仮想メモリ管理
  • ヒープ管理 や動的メモリ管理
  • ユーザーモード (ring 3)と カーネルモード (ring 0)対応
  • プロセス管理 とスケジューリング
  • 各種デバイスドライバ (PIT、RTC、Keyboard、Mouse、Framebuffer、PATA)
  • ext2ファイルシステム 対応
  • GUIコンポジタ (ウィンドウ、ラベル、アイコン、ボタン、独自フォント)
  • ELFローダー 搭載、本物のアプリケーション実行可能
  • Doom移植版 をプリインストール、実際にプレイ可能
  • 実機や仮想環境で動作する 本格的なOS

MyraOSの起動方法

  • GitHubリリースページ から最新バージョンをダウンロード

  • QEMU (オープンソースエミュレータ)をインストール

    • macOS
      • 通常起動: qemu-system-i386 -cdrom MyraOS.iso -drive file=fs.img,format=raw,if=ide,index=0 -m 1024
      • フルスクリーン: qemu-system-i386 -cdrom MyraOS.iso -drive file=fs.img,format=raw,if=ide,index=0 -m 1024 -full-screen
    • Linux
      • 通常起動: qemu-system-i386 -cdrom MyraOS.iso -drive file=fs.img,format=raw,if=ide,index=0 -m 1024
      • フルスクリーン: qemu-system-i386 -cdrom MyraOS.iso -drive file=fs.img,format=raw,if=ide,index=0 -m 1024 -display gtk,zoom-to-fit=on -full-screen
    • Windows
      • 推奨はLinux/macOSまたはWSL
      • 通常起動: qemu-system-i386 -cdrom MyraOS.iso -drive file=fs.img,format=raw,if=ide,index=0 -m 1024
      • フルスクリーン: qemu-system-i386 -cdrom MyraOS.iso -drive file=fs.img,format=raw,if=ide,index=0 -m 1024 -display gtk,zoom-to-fit=on -full-screen

フィードバック・連絡先

  • 開発者Dvir へのフィードバックや要望、質問はメールで受付
  • 連絡先: dvirm.biton@gmail.com

開発の動機と学び

  • CPU知識不足 による面接不合格をきっかけにOS自作を決意
  • C言語とアセンブリ で基礎から独学
  • OSDev WikiOSTEP、オープンソースリポジトリ(MellOS、LemonOS)、DoomGeneric、経験者の友人から多くを学習
  • 理論理解後、 実装への移行 が最大の挑戦
  • ブートローダ 自作から始め、後にGRUBへ移行

実装ステップ

  • VGAドライバ実装で 文字表示 機能追加
  • 割り込み管理 (IDT、ISR、IRQ)実装
  • キーボードドライバ で入力対応
  • 物理メモリ管理 (PMM)実装
  • ページング/仮想メモリ管理
  • RTCドライバ で時計機能追加(任意実装)
  • PITドライバ で定期割り込み管理
  • ファイルシステム/物理HDDドライバ
    • PATAプロトコル採用(SATAは難易度が高いため回避)
    • ext2ファイルシステム 採用(情報豊富・拡張性・移植性)
  • システムコール 対応
  • libc実装
  • プロセス管理/スケジューリング
  • シェル実装 で機能検証
  • GUI追加 でウィンドウ表示・マウス対応

Hack Club Summer of Making(SoM)参加の影響

  • SoM参加 を機に、GUIやDoom移植、より本格的なOS構築に挑戦
  • 2ヶ月追加開発 で総開発期間7ヶ月に到達
  • ダブルバッファリングダーティレクト による高速なGUI描画
  • Doom移植 の実現

開発中の課題と解決策

  • デバッグの難しさ (特にメモリ関連)
    • GDB 活用による問題解決推奨
  • プロセス実装時のページング不具合
    • 既存コードの再設計・再テスト
  • Doom移植時のメモリ問題
    • ランダムなページフォルト・不安定動作
    • スケジューリング・libc・QEMUのメモリ割当量不足(128MB→1024MBへ)

経験を通じて得たこと

  • 低レイヤー開発 の知識・スキル向上
  • 課題解決力継続力 の強化
  • SoM参加 でモチベーション向上と新たな挑戦
  • プロジェクトの思い出と成長実感

リポジトリ・プロジェクト情報

  • GitHubリポジトリ: https://github.com/dvir-biton/MyraOS
  • SoMプロジェクトページ: https://summer.hackclub.com/projects/5191
  • コメントや議論も歓迎

Hackerたちの意見

すごいプロジェクトだね、ブラボー!ISOファイルを提供したり、copy.shと協力してみるのはどうかな?あそこはブラウザで起動したり遊んだりできるISOファイルがたくさんあるよ!今日もIBMのISOをいじってみたんだけど、新しいオペレーティングシステムを見るのはいつも楽しいよね!もしできれば、copy.sh/v86チームと協力してあなたのISOも含めて、GitHubリリースにISOファイルを提供してくれると嬉しいな。 ソース: https://copy.sh/v86/ 彼らのGitHubページ: https://github.com/copy/v86

ありがとう!ちょっと調べてみるね。

これはマジで素晴らしいね。これでどこでも仕事が見つかるんじゃない?

本当にそう願ってる! :)

デモ付きの良いYouTube動画を作ることをおすすめするよ。

そうだね。動画は技術的にするべきかな、それともただのショーケースにするべき?

これは新鮮な空気を吸った気分だね。「4時間でこれをコードした」とか言うのとは全然違う。バイブコーディングにも意味はあるけど、こういうプロジェクトは珍しくなってきた気がする。

ありがとう!それを聞いて嬉しいよ :) こういう学ぶためのプロジェクトって、雰囲気を楽しむのが大事だけど、逆に難しくなっちゃう気がする。

これはかなりすごいね。俺はC言語の真剣なコーダーじゃないし、ASMも試したことないけど、高級言語で「ファイルシステム」を書いたことはあるよ(単なるデータのバインにディレクトリ構造やメタデータを課したもの)。だから、君のコードの一部をランダムに見てたんだけど、あのトリプルポインタのdir_entry_t*で頭が爆発しそうになった。素晴らしいコードだね、誇りに思っていいよ。

ありがとう!数年前に高レベルのファイルシステムを作ったことがあって、それが今回のプロジェクトにも役立ったよ。ここでの主な違いは、ディスク操作ごとにドライバを扱う必要があるってことかな。

すごい作品だね!ここまで来る趣味のOSプロジェクトを見るといつも感心するよ。だけど、2025年に向けてOS開発者を目指す人たちのために、最新のリソースが必要だって改めて思った。32ビットx86や数十年も「普通」じゃないレガシーデバイスをターゲットにするのは、osdev wikiみたいなリソースの影響が強いと思う。時々役立つけど、現代ではどんどん古くなってきて、初期の段階で疑問のある選択をさせることが多い。自分のOSプロジェクトを何度も繰り返す中で、osdevのリソースをほぼ無視して、基本原則のデザインや正しいレイヤリング、現代のプラットフォーム(x86_64や他のもの)に基づいて構築する方が価値があると感じるようになった。PITやPS2のようなレガシーデバイスは無視してもいいと思う。そういうことを反映した良い入門ドキュメントがあればいいのに。古いリソースが検索エンジンやAIの「要約」で圧倒的に表に出てくるのも残念だね。これらはOPの素晴らしい成果や、osdevコミュニティの長年の努力を否定するつもりは全くないよ。

そうだね。この内容はx86_64(EFIでも)やARMに再ターゲットする必要があるよ。もちろん、i386のレガシーBIOSをサポートするのもOKだけど、電源を入れたときにコンピュータが何をしているのかの本質にはあまり触れていないと思う。

お二人ともお疲れ様!12ヶ月経って、あなたたちの役立つTODOリストの1/4しか終わってないよ。armv8のIRQベクターテーブルを設定するのに手間取って、アセンブリスキルをリフレッシュするために大きく寄り道しちゃった。だから、あなたたちの旅の一部を感じてるよ。根気が必要だけど、すごくやりがいがあるね。おめでとう!

ありがとう、頑張ってね!

わお!すごくいいね!https://oshub.org/ をチェックしてみるといいよ。似たような趣味のOSがたくさんあるから。

なんて素晴らしいプロジェクトなんだ!彼らは何を逃したのか分からないね。

いいね!また新しい趣味のOSだね!既存のやつを維持する方に力を入れた方がいいんじゃない?ちなみに、ダンとトムはクソだね :)