Nimで実装された趣味のOS、Fusion
(github.com/khaledh)- 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
ビルドと実行
- ビルドには Nim、LLVM の
clang・lld、Just が必要 clangとlldのバイナリはPATHに存在している必要があるPATHにない場合は.envファイルで該当バイナリのパスを指定できる
- ビルドコマンドは以下の通り
just build
- Fusion は現在 QEMU 上で実行される
- 実行コマンドは以下の通り
just run
ライセンス
- ライセンスは MIT
1件のコメント
Hacker Newsのコメント
作者です。質問があれば答えます
ないなら、Nim特有のstop-the-worldではないGCのおかげだと見ていますか?
https://nim-lang.org/1.4.0/gc.html
今では両者はかなり似て見えますが、Swiftのほうが実戦での検証は多いように思うので
ブログとドキュメントが素晴らしいです。見せることと説明することのバランスがとてもよく、このように共有してくれてありがとうございます
やっていることすべてを正当化しなければならないので、不要な複雑さを取り除き、より重要な部分に集中する助けになります
Fusion作者の開発日誌:
https://0xc0ffee.netlify.app/osdev/01-intro.html
こういうものを見るのはいいですね。ここ数年、Nimエコシステムに断続的に関わってきましたが、この小さくて楽しいプロジェクトが動き続けているのはうれしいです
すごいですね。ELFモジュールを開いてみましたが、読みやすくて面白かったです
いつかNimでリアルタイムオペレーティングシステムを書いてみたいです。Nimで組み込みプログラムを書くのが好きなので、RTOSを作るのも楽しそうです
Nimとは何で、Fusionの全体的な設計目標は何ですか?
あまり初歩的な質問でなければいいのですが。背景知識がまったくないので、誰か説明してくれるとうれしいです
なぜNimなのかについては、一緒に作ったサイトでこう説明しました:
https://0xc0ffee.netlify.app/osdev/01-intro.html
Nimのプロジェクトがもっと見られるとうれしいです。主にPythonとJavaScriptを使っていますが、現代的で高速な静的型付け言語をもう一つ知っておく利点に関心があります
Go、Rust、Zig、Nimの中ではNimがいちばん気に入っています。コードを読むときの構文上のノイズが少ないという意味で、最もPythonらしく感じます
新しいコードをプロトタイプするときにREPLを使うのがとても好きなのですが、INimはそれをうまくやってくれます
現在の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は優れたシステムプログラミング言語で、もっと人気が出るべきです