1 ポイント 投稿者 GN⁺ 2024-07-15 | 1件のコメント | WhatsAppで共有
  • Fusion OS は x86-64向けの趣味のオペレーティングシステムで、実装言語として Nim を使用
  • 現在実装されている機能は UEFIブートローダー、メモリ管理、タスク管理、システムコール、IPC、ハードウェアサポートに分かれる
  • メモリ管理とタスク管理には demand paging、プリエンプティブ・マルチタスク、優先度ベースのスケジューリング、ELFローダーが含まれる
  • 実行環境は現在 QEMU で、ビルドには Nim、LLVM の clang・lld、Just が必要
  • 今後の計画には capability ベースのセキュリティ、ディスク I/O、ファイルシステム、シェル、GUI、ネットワーキングが含まれる

Fusion OS 概要

  • Fusion は x86-64向けの趣味のオペレーティングシステムで、Nim で実装されている
  • 開発過程は 0xc0ffee.netlify.app に文書化されている
  • スクリーンショット項目には UEFIブートローダー、カーネルの起動および実行画面が含まれる
  • GUI のスクリーンショットは graphics ブランチの画面で、このブランチはまだ作業中

現在実装されている機能

  • ブート

    • UEFI Bootloader が実装されている
  • メモリ管理

    • Single Address Space 構造の Higher Half Kernel
    • Physical Memory Manager
    • Virtual Memory Manager
    • Demand Paging
  • タスク管理

    • Kernel Tasks
    • User Mode Tasks
    • Preemptive Multitasking
    • Priority-based Scheduling
    • Demand Paged および Relocation をサポートする ELF Loader
  • システムコール

    • System Call Interface
    • User Mode Library
  • IPC

    • Channel-based IPC
    • Message Passing
  • ハードウェア

    • PCI Device Enumeration
    • ACPI Configuration
    • Local APIC Timer
    • I/O APIC Interrupts
    • PS/2 Keyboard Driver
    • Bochs Graphics Adapter Driver

計画されている機能

  • Capability-based Security
  • Event-based Task State Machines
  • Disk I/O
  • File System
  • Shell
  • GUI
  • Networking

ビルドと実行

  • ビルドには NimLLVMclanglldJust が必要
  • clanglld のバイナリは PATH に存在している必要がある
    • PATH にない場合は .env ファイルで該当バイナリのパスを指定できる
  • ビルドコマンドは以下の通り
just build
  • Fusion は現在 QEMU 上で実行される
  • 実行コマンドは以下の通り
just run

ライセンス

  • ライセンスは MIT

1件のコメント

 
GN⁺ 2024-07-15
Hacker Newsのコメント
  • 作者です。質問があれば答えます

    • Nimのガベージコレクタが難しさを生んだことはありますか?
      ないなら、Nim特有のstop-the-worldではないGCのおかげだと見ていますか?
      https://nim-lang.org/1.4.0/gc.html
    • プロジェクトでいちばん厄介だった部分は何でしたか? また、オペレーティングシステムをゼロから書く人への助言はありますか?
    • スクリーンショットはどこにありますか?
    • Nimは使っていませんが、興味深い言語だと思っています。昔のプロジェクトを再コンパイルするたびに修正が必要だったという不満を見たことがあるので、互換性を壊す変更がどのくらい頻繁に、どの程度の規模で起きるのか気になります
    • なぜSwiftではなくNimを選んだのですか?
      今では両者はかなり似て見えますが、Swiftのほうが実戦での検証は多いように思うので
  • ブログとドキュメントが素晴らしいです。見せることと説明することのバランスがとてもよく、このように共有してくれてありがとうございます

    • 文章を書く過程は、設計と実装を改善するうえで何度も役に立ちました。文章を書くと、自分の前提を疑い、読者がなぜこの判断をしたのか理解できるだろうかと自問するようになります
      やっていることすべてを正当化しなければならないので、不要な複雑さを取り除き、より重要な部分に集中する助けになります
  • Fusion作者の開発日誌:
    https://0xc0ffee.netlify.app/osdev/01-intro.html

  • こういうものを見るのはいいですね。ここ数年、Nimエコシステムに断続的に関わってきましたが、この小さくて楽しいプロジェクトが動き続けているのはうれしいです

  • すごいですね。ELFモジュールを開いてみましたが、読みやすくて面白かったです
    いつかNimでリアルタイムオペレーティングシステムを書いてみたいです。Nimで組み込みプログラムを書くのが好きなので、RTOSを作るのも楽しそうです

    • RTOSを作ることにしたら、ぜひ追いかけてみたいです
    • ELFは非常に単純なファイル形式です。読みにくかったら、むしろ驚いたと思います
  • Nimとは何で、Fusionの全体的な設計目標は何ですか?
    あまり初歩的な質問でなければいいのですが。背景知識がまったくないので、誰か説明してくれるとうれしいです

    • 他の方々が言っているように、Nimは静的型付けプログラミング言語で、C、C++、JavaScriptにコンパイルされます。Cとの相互運用性が高く、システムプログラミングをやりやすくしてくれます
      なぜNimなのかについては、一緒に作ったサイトでこう説明しました:

      なぜNimなのか? Nimは、決定的なメモリ管理、デストラクタ、ムーブセマンティクスを備えた低レベルのシステムプログラミングを可能にする数少ない言語の一つです。ガベージコレクタは任意です。静的型付けなので型安全性も高くなります。オペレーティングシステム開発に不可欠なインラインアセンブリもサポートしています。他の選択肢としてはC、C++、Rust、Zigがあります。いずれも優れた言語ですが、単純さ、優雅さ、性能のためにNimを選びました。
      Fusionの全体的な設計目標はかなり野心的で、同じページに列挙してあります。もう一つのUnix系オペレーティングシステムを作りたいわけではなく、単一アドレス空間や保護のためのケイパビリティベースセキュリティのような、オペレーティングシステム設計の根本的な問題を実験してみたいのです
      もう一つ探求しようとしているのは、プロセスとタスクをどうモデル化するかです。私は、これらは静的に型付けされたチャネルで相互に通信する状態機械としてモデル化されるべきだと考えています。新しいアイデアではなく、Singularity OSですでに試みられたことがあります
      カーネルにはチャネルと、ユーザー空間でチャネルを使うための基本的なサポートがありますが、まだ初期段階です
      [0] https://0xc0ffee.netlify.app/osdev/01-intro.html
      [1] https://en.wikipedia.org/wiki/Singularity_(operating_system)

    • NimはAdaとPythonから着想を得た感じの、すてきな言語です
    • プロジェクトのドキュメントに載っています:
      https://0xc0ffee.netlify.app/osdev/01-intro.html
  • Nimのプロジェクトがもっと見られるとうれしいです。主にPythonとJavaScriptを使っていますが、現代的で高速な静的型付け言語をもう一つ知っておく利点に関心があります
    Go、Rust、Zig、Nimの中ではNimがいちばん気に入っています。コードを読むときの構文上のノイズが少ないという意味で、最もPythonらしく感じます
    新しいコードをプロトタイプするときにREPLを使うのがとても好きなのですが、INimはそれをうまくやってくれます
    現在のNimの最大の問題は、コミュニティの規模が小さいことです。そのため、利用できて保守されているライブラリの世界が、他の言語コミュニティより小さくなっています。鶏と卵の問題ではありますが、私を含むより多くの開発者が「世の中に見たい変化に自分がなる」ことで解決できます

    • 正直なところ、コミュニティの規模が問題だと感じたことはありません。Nimフォーラムは活発で、助けを求めに行けば、たいてい素早く的確な答えが得られます
      言語も慎重に進化していて、Araqが率いている限り、長期的にはさらに良くなると思います
      エコシステムはPythonやRustほど大きくありませんが、驚くことに標準ライブラリに必要なものの大半が入っています。何かをするためにサードパーティパッケージを探すことはめったにありません
      もちろん、Nimがあまり知られていない言語の部類に入ることは認めます。それでも、やるべきことを非常にうまくこなす有望な言語だという長所は失われません
      コミュニティがもっと注力すべき部分はIDEサポートだと思います。VSCode拡張は悪くありませんが、粗いところがあります。私はJetBrains IDEのほうを好んでいますが、公式のNimプラグインは控えめに言ってもかなり不足しています
      Nim用のJetBrainsプラグインを作るサイドプロジェクトもありますが、まだあまり進められていません
      [0] https://forum.nim-lang.org
      [1] https://github.com/khaledh/nimjet
  • Nimは優れたシステムプログラミング言語で、もっと人気が出るべきです

    • 年を取ったからなのかもしれませんが、インデントをスペース2つに強制されると、Nimのコードは読みにくいです。コードブロックがほとんど目に入ってこず、言語を読みやすくするためにIDEに依存したくはありません