4 ポイント 投稿者 GN⁺ 2025-04-27 | 1件のコメント | WhatsAppで共有
  • RetrOS-32 は、i386アーキテクチャを中心に作られた完全カスタムの32ビット趣味OSで、グラフィックス・マルチタスク・ネットワーキングを含む
  • カーネル・ユーティリティ・ビルドシステムは CとAssembly で書かれており、ユーザー空間アプリケーションは C++ で書かれ、ビルドには Make と Docker を使用する
  • 実機テスト対象には Lenovo x240、Asus Eee PC series、Dell Optiplex 780、Samsung N150 Plus、Samsung NP-NC10、IBM Thinkpad a21p が含まれる
  • 実行方法は QEMU、copy.sh の v86、実機ブートをサポートしており、実機では GRUB ISO を使って .iso ファイルを USB または CD に書き込んで実行する
  • ロードマップでは、ブートローダー、プリエンプティブなマルチスレッドスケジューリング、ファイルシステム、グラフィカルなウィンドウマネージャー、ネットワークスタック、ユーザー空間スレッド、TCPリモート仮想ターミナルなどが実装済み項目として整理されている

RetrOS-32 概要

  • RetrOS-32 は i386アーキテクチャに焦点を当てた32ビットの趣味OSプロジェクト
  • プロジェクト説明では、グラフィックス、マルチタスク、ネットワーキングを備えた32ビット趣味OSとしている
  • 開始日は 2022年5月12日 と記載されている
  • プロジェクトページは Project OSHub page にリンクしている

ログインとユーザー

  • デフォルトユーザーは systemadminguest の3つ
  • admin のパスワードは admin で、guest にはパスワードがない
  • 現在、admin と guest の違いはない
  • ユーザーは admin create <username> <password> コマンドで作成できる

実装言語とビルド構成

  • カーネル、ユーティリティ、ビルドシステムは CとAssembly で書かれている
  • ユーザー空間アプリケーションは C++ で書かれている
  • コンパイルには Make を使用する
  • クロスプラットフォームコンパイルには Docker を使用する

テスト済みハードウェア

  • テスト済みの実機ハードウェア一覧は以下の通り
    • Lenovo x240
    • Asus Eee PC series
    • Dell Optiplex 780
    • Samsung N150 Plus
    • Samsung NP-NC10
    • IBM Thinkpad a21p

ビルドと実行方法

  • クロスプラットフォーム環境では、イメージファイルのコンパイルに Docker、エミュレーションに QEMU が必要
  • ネイティブコンパイルの依存関係はプラットフォームごとに異なる
    • MacOS: i386-elf-gcc, i386-elf-ld, i386-elf-g++
    • Linux / WSL Ubuntu: build-essential, gcc-multilib
    • GRUB をブートローダーとして使うには grub2, xorriso, xxd も必要
  • Linux では、リポジトリのクローン、./debian.sh、Git サブモジュールの初期化、make compilemake imgmake qemu の順でビルド・実行する
  • MacOS はビルドツールが32ビット x86 コードに依存しているため、現状ネイティブコンパイルはできず、Docker が最も簡単な方法
  • Windows では Docker または WSL を使用する
  • 実行方法は3つある
    • copy.sh の v86 で .img ファイルをハードディスクイメージとしてアップロード
    • QEMU で make qemu または qemu-system-i386 <image name> を実行
    • 実機で .iso ファイルを USB または CD に書き込み、GRUB ISO を使用

プロジェクト構成

  • リポジトリ構成は、カーネル、ドライバー、グラフィックス、ネットワーク、ファイルシステム、ライブラリ、ユーザー空間アプリ、テスト、ツールの各ディレクトリに分かれている
  • boot にはカスタムブートローダーと multiboot.ld がある
  • kernel には主要なカーネルソース、アーキテクチャ別コード、カーネルスレッドのコードがある
  • apps にはユーザー空間アプリケーションと libcore.alibgraphic.alibnet.a がある
  • net にはネットワーキングコードがあり、fs にはファイルシステム関連コードがある
  • tools にはビルドツールとスクリプトが含まれる

実装済み項目と残作業

  • ブート関連項目では、カスタムブートローダー、GRUB互換、Stage 2 ブートローダーが完了している
  • カーネルとシステム機能には以下が含まれる
    • マルチスレッドのプリエンプティブスケジューリング
    • GDT と TSS ベースのカーネル・ユーザー空間分離
    • 割り込み処理
    • IPC
    • システムコール
    • ユーザー空間スレッド
  • ドライバーとハードウェア関連機能には PS/2 キーボード・マウス、PIT、VESA 640x480x8、RTC、Serial、E1000、PCI が含まれる
  • ファイルシステムとストレージ関連では、ATA IDE ドライバー、Ext2ライクなファイルシステム、FAT16、読み書きが完了している
    • FAT16 は最大 32MBファイル をサポートする
    • Atapi は未完成
  • メモリ機能には32ビット仮想メモリ、カーネル kalloc/kfree、ユーザー空間 malloc/free が含まれる
  • グラフィックス機能にはウィンドウマネージャー、GFXLib、ダブルフレームバッファレンダリング、マウスイベント、動的リサイズ、フルスクリーン、ウィジェットライブラリが含まれる
    • Custom HTML to Widgets は未完成
  • ネットワークスタックでは Ethernet、IP、ARP、UDP、Socket API、Loopback インターフェース、DHCP、DNS、TCP、netcat スタイルのコマンドが完了している
    • Webserver、FTP、IRC、SSH、Telnet、HTTP、HTML は未完成
  • アプリケーションとツールには、ターミナル、ウィンドウサーバー、プロセス情報、Finder、Cコンパイラ/バイトコードインタープリタ、バイトコード実行用カスタムVM、シンタックスハイライトエディタ、電卓、3Dゲーム、テキストモードのSnakeゲーム、TCPリモート仮想ターミナル、LZ圧縮ライブラリが含まれる
  • 提案機能と既知の問題の全一覧は open issues にある

ライセンスとプロジェクトリンク

1件のコメント

 
GN⁺ 2025-04-27
Hacker News のコメント
  • こういうプロジェクトはつまらない AIよりずっと見ていて気持ちがいい。売り物にはならないだろうけど、技術者が創造的に自分の技術を発揮している姿だと思う。
    10代後半に趣味の OS 開発をたくさん勉強したけど本当に面白かったし、今でもたまに小さなカーネルを作ってみる。最後に作ったのは、パートナー向けにメッセージを表示する小さな RISC-V カーネルだった。

    • 売ることやマーケティングを心配しなくていいのは本当に解放感がある。新しいアイデアが出るまで車輪を再発明していればいい。
    • AI をまとめて「つまらない」と呼ぶのは変だと思う。賢いユーザー体験として包装されるまでは、ほとんど金にならない学術的探究、つまり職人的な作業に近かった。
    • 小さな趣味用デバイスが、人類史上最も馬鹿げた技術よりずっと興味深いと言っているように聞こえる。
  • デフォルトのシステムフォントはもっと幅の狭いバリエーションのほうがいいと思う。そうすればシステムがずっと洗練されて見えそうだし、文字に横方向のスペースがもっと必要そうな箇所もかなりある。
    各文字の幅を縮め、文字間もできるだけ詰めるべき。今のフォントサイズと解像度なら、1ピクセルの間隔で十分に見える。
    フォントシステムのことはよく分からないけど、等幅ビットマップフォントだと仮定した。コードベースで変更するのが難しすぎるなら気にしなくていい。
    自分も少し前から Web OS サイトをゼロから作っていて、最近フォントクラス全体を書き直したので、この部分が特に目に入った。

    • 今のフォントがあまり最適でないという点には同意する。始めたときに最初に動かした初期フォントをほぼそのまま使っている。
      きちんとしたフォントレンダリングも調べたし ToDo リストにはあるけど、ずっと後回しにしていた。
    • 空気がきついな。
      「OS を作りました!」
      「うーん、フォントがいまいちですね」
      これぞ HN の極みって感じ。
  • すごい。今日やり直すなら何を変えるのか気になる。
    低レベル部分にはどの言語が適していると考えているのかも気になる。C にこだわるのか、単純な C++ のサブセットを使うのか、それとももっと新しい言語を検討するのか、という点。
    資料がとにかく多い中で、他人のコードをコピーするのではなく、プロジェクトへの興味を保ち続けた方法も知りたい。

    • 一番大きく変えるとしたら計画を立てること。最初は基本的な hello world OS を作るのが目標だったのに、機能を追加し続け、同時にいろいろ手を出した結果、今も返済中の技術的負債が生まれた。
      UNIX への依存も減らそうとしたと思う。
      言語については、基本的な構文とすぐ本題に入れるスタイルが好きなので C が好き。ユーザー空間アプリケーションには別の言語も検討できる。
      最初からすべてを自分で書きたかったし、ソフトウェアを移植しないことがこのプロジェクトの核だった。おおむね「コードではなくアイデアをコピーせよ」というルールを守った。
  • 1977年に Commodore PET 2001 を使っていた者から見ても本当に素晴らしい。KolibriOS と MenuetOSx64 を触っていたところで、自分でも OS を作ってみたくなった。やり遂げたのがすごい。

  • プロジェクトが本当に印象的で、お祝いを言いたい。10代の頃からOS 開発が好きだったので、こういう成果が実際に実装されているのを見るとうれしい。
    グラフィックスサブシステムがどのように初期化されるのかも少し気になる。うまくいくことを願っている。

  • 自分もこういう情熱プロジェクトに時間を割けたらいいのに。
    実用性は忘れて、市場参入戦略も忘れて、ターゲット市場との適合性も忘れて、ただ作って学ぶだけ。

    • 実際に「使われるか」や市場のことを考えなくていいのは本当に清々しい。純粋に楽しみと学習のための作業だ。
    • なぜ時間を作れないのか気になる。子どもの頃から趣味プロジェクトがなかったら、かなり道に迷っていたと思う。
      その一つがトイ OS だったけど、低レベル OS 開発が実際の仕事になって、そのプロジェクトは止まった。
  • この分野に何十年もいて、OS 開発を学ぼうとしている。FASM、NASM、FASM-G はある程度分かる。
    ただ、アセンブラプログラムの出力を調べて、OS がバイナリレベルで実際にどう動くのか理解したい。
    特定アーキテクチャの命令コードを学んだのか、デバイスドライバのプログラムはどうしたのか、自分で OS を開発する手順を整理してもらえるのかが気になる。

    • 学ぶのに一番いい場所は osdev フォーラムosdev Wikiだと思う。始めるのに役立つ資料が本当に多い。
      チュートリアルもいくつかあるが、バグがあることが多く、実質的に彼らの OS を作り直す形になりがちだ。
      命令コードはそこまで深く掘り下げておらず、C コンパイラを作るときに調べた程度なので、最も一般的な基本命令しか知らない。
      https://forum.osdev.org/
      https://wiki.osdev.org/Expanded_Main_Page
  • 本当に素晴らしい。アプリケーションレベルよりもコンピュータそのものをいじることが多かった初期コンピューティングの精神が、もっと戻ってきてほしい。
    長期の趣味プロジェクトとして個人用コンピュータを作ってみようかと考えていた。ソフトウェアスタック全体を自分で作り、システム内のすべてのビットの出所が分かるコンピュータだ。
    ハードウェアは、FPGA で全体を動かせるだけの性能を得られない限り同じレベルで制御するのは難しいだろうけど、少なくともソフトウェアなら可能そうだ。
    これまでは非現実的に見えていたが、可能だと示してくれた。趣味用の C コンパイラも実装中のようだ: https://github.com/joexbayer/C-Compiler

    • ユーザー空間の上層からドライバまで全部自分で書いたと分かっているのは本当にいい気分だ。同時にデバッグ地獄でもある。
      C コンパイラはこの OS 用に作ったもので、OS 内で動作する。プロジェクトが大きくなりすぎたので OS のリポジトリから分けたかったし、特に Linux でも動くからだ。
  • このコンパイラが OS とどう相互作用するのか、もっと説明してほしい。特に構造体のような機能をどう扱うのか、この領域の現在の制約と予定されている改善点が気になる。

    • コンパイラと OS の間に魔法のような相互作用はない。単に同じ**機械語(i386)**にコンパイルし、システムコールには割り込みを使う。
      構造体はメンバーに応じてサイズが決まるメモリ領域として扱い、メンバーアクセスはその領域内のオフセットで処理する。
      現在は int と char しかなく、switch 文もないなど制約が多い。標準 C との最大の違いは、構造体内の関数を許可していること、そして構造体関数なら構造体を関数に暗黙的に渡す点だ。詳しくはこちらで見られる:
      https://github.com/joexbayer/C-Compiler
  • ここで見た情熱プロジェクトの中でも、かなり久しぶりに最も印象的なものの一つだ。なぜ自作 C コンパイラを使うことにしたのか気になる。

    • すべてを自分で書きたいというルールがあったし、コンパイラを作ることもずっと自分の「目標」の一つだった。だから自然に噛み合った。