Essence: 制御とシンプルさのためにゼロから作られたデスクトップOS
(nakst.gitlab.io)- カーネル、ドライバ、アプリケーション、デスクトップ構成要素を一体で作るフルスタック デスクトップOSプロジェクトで、単なるカーネル実験より広い範囲を扱う
- テストは nightly ビルドの
Essence.tar.xz、VirtualBox向けEssence.ova、QEMU実行コマンドから始められる - 公開ビルドはテストのしやすさのためエミュレータ専用で提供されており、実機向けビルドはまだ提供予定の段階
- カーネルにはファイルシステム非依存キャッシュマネージャ、メモリマネージャ、TCP/IPネットワーキングスタック、仮想ファイルシステム、ウィンドウマネージャといった中核要素が含まれる
- デスクトップはカスタムUIライブラリ、ソフトウェアベクターレンダラ、タブ付きウィンドウ、FreeType・Harfbuzzベースの多言語テキストレンダリングまで備える
実行と参加の経路
- Essenceはオペレーティングシステムプロジェクトであり、2021年10月時点で実機上で動作する動画デモがある
- 議論チャンネルはDiscordサーバーとフォーラムに分かれている
- Discord: https://discord.gg/skeP9ZGDK8
- フォーラム: https://essence.handmade.network/forums
- 開発支援はPatreonで受け付けており、Essenceは2021 Icculus Microgrant受領プロジェクト
- Patreon: https://www.patreon.com/nakst
- Icculus Microgrant: https://icculus.org/microgrant/
テストとビルド
- 最新の nightly ビルドはbuild-essence releasesから入手できる
Essence.tar.xzをダウンロードして展開する- VirtualBoxでは
Essence.ovaをインポートする - QEMUでは以下のコマンドを実行する
qemu-kvm -drive file=drive,format=raw -m 2048 -smp 2 || qemu-system-x86_64 -enable-kvm -drive file=drive,format=raw -m 2048 -smp 2
- 現在提供されているビルドは、テストのしやすさを目的としたエミュレータ専用構成
- ビルドとテストの方法は
help/Building.mdにある
OS構成要素
-
カーネル
- ファイルシステム非依存キャッシュマネージャ
- 共有メモリ、メモリマップドファイル、マルチスレッドのページ zeroing、working set balancingをサポートするメモリマネージャ
- TCP/IPネットワーキングスタック
- 複数の優先度レベルと priority inversion を扱うスケジューラ
- オンデマンドのモジュール読み込み
- 仮想ファイルシステム
- ウィンドウマネージャ
- オーディオミキサー
- 書き直し中
- オプションのPOSIXサブシステム
- GCCと一部のBusyboxツールを実行できる
-
アプリケーション
- File Manager
- Text Editor
- IRC Client
- System Monitor
-
移植済み構成要素
- Bochs
- GCCとBinutils
- FFmpeg
- ソフトウェアレンダリングOpenGL向けMesa
- Musl
-
ドライバ
- 電源管理: ACPICAベースのACPI
- 補助記憶装置: IDE, AHCI, NVMe
- グラフィックス: BGA, SVGA
- 読み書き対応ファイルシステム: EssenceFS
- 読み取り専用ファイルシステム: Ext2, FAT, NTFS, ISO9660
- オーディオ: HD Audio
- NIC: 8254x
- USB: XHCI, bulk storage devices, human interface devices
-
デスクトップ
- カスタムユーザーインターフェースライブラリ
- 複雑なアニメーションをサポートするソフトウェアベクターレンダラ
- タブ付きウィンドウ
- FreeTypeとHarfbuzzベースの多言語テキストレンダリングとレイアウト
1件のコメント
Hacker Newsのコメント
最初はカスタムウィンドウマネージャを載せた、また別のLinuxディストリビューションだと思ったが、実際には独自のオペレーティングシステムだった
カスタムカーネルまであり、本当に土台から作られている。オペレーティングシステムやブラウザをゼロから作るプロジェクトは、広く一般に使われなくても大きな価値があるし、開発者たちに拍手を送りたい
ほかのディストリビューションも多くの努力をしているが、KDEアプリが1つのオペレーティングシステムの標準アプリのようにうまく溶け込んでいる様子が特に良い。逆にWindowsにはこうした統一感がほとんどなく、古い方式が混在していて主要アプリの一貫性に欠け、だんだん寄せ集めのLinuxオペレーティングシステムのように見えてくる。MicrosoftがマーケティングチームにWindowsの方向性を左右させず、オペレーティングシステムの磨き込みに集中していたら、とてつもなく優れた製品になっていたと思う
Essenceはゼロから作られていて、すっきりしつつも「Linuxっぽくない」UIを備えている点がかなり印象的だ。既存のディストリビューションの上に、より見栄えがよく親しみやすい外観を載せるケースとは違い、これはずっと珍しい方向に見えるし、ChromeOSの後を追えるかもしれない
ランディングページが本当に素晴らしい。知りたい情報をほぼすべてすぐに教えてくれる
きれいなスクリーンショット、省電力ハードウェア対応、30MB未満のストレージとさらに少ないRAMで起動可能、バックグラウンドタスクなし、優れた性能、MITライセンスのコード公開、デモ動画までそろっている。主流のデスクトップOSがカバーできていない領域で人気を得そうな用途がいくつもすぐに思い浮かぶ。開発者向けツールチェーンと始め方についてもっと知りたいが、Discord/Patreonリンクである程度扱われているようだ。タッチインターフェイスのような機能をファーストクラスサポートとして打ち出せば、既存のデスクトップOSとの差別化がさらにしやすそうだし、UIを必要とするIoTデバイスも想像できる
ウィンドウ管理APIがまともなら、組み込み制御システムとしても十分使えそうだ。WASMにコンパイルすれば、擬似ウィンドウシステムを活用したかなり良いWeb UIも作れそうだ
2022年4月以降は、作業の大半が止まっているように見える: https://gitlab.com/nakst/essence/-/graphs/master?ref_type=he...
自分でジャンボジェットを作ると言うのと似ている。粗末な複葉機くらいは組み立てられても、エンジンや実物大の機体は作れず、整備士も工場もないのだから、結局そのジェット機を使う人はいないだろう
アセンブラのブートブロックコード末尾の構造が気に入った
times (0x1B4 - ($-$$)) nop、disk_identifier: times 10 db 0、4つのpartition_entry_*: times 16 db 0、dw 0xAA55へと続く形が優雅だ。ディスク識別子と古典的な4つのMBRパーティションが、ブートコードとともに最初の512バイト内でどのように共存するかを示している。ブートブロックをディスクにコピーした後、外部プログラム、たとえばfdiskのようなツールがパーティション値を設定することを前提にした構造だ。ブートブロックコードはたくさん見てきたが、こういう構成は初めて見たLinuxのあらゆる後方互換性やサーバー機能は不要で、MicrosoftやAppleも避けたい人たちに、こういうオペレーティングシステムが居場所を得るといい
ChromeOSに似ているが、あそこまで閉じていない形が欲しい
今日の人々が直面している最大の問題なのに、私の知る限り、オペレーティングシステムレベルの新しいアプローチを試そうという実質的な関心はあまりなさそうだ
ハードウェア販売に依存するApple式モデルや、広告に依存するAndroidおよびますますそうなっているWindows式モデルではなく、オペレーティングシステムだけで成り立つビジネスモデルがあれば違ってくるかもしれない。いつか経済的に独立できれば可能かもしれない
BIOSからデスクトップまで0.7秒起動は印象的だ
自動車向けの事例で、アクセサリ電源が入った直後にインフォテインメントや計器盤のような機能をすぐ使える必要がある状況を想定していた
OS が高品質な GUI をどのように描画しているのか気になっていました
ベアメタル開発で線形フレームバッファに簡単なグラフィックを描いたことはありますが、こうした UI や Windows のような画面で UI コンポーネントを表す画像がどのように生成されるのかは気になります。ウィンドウ枠用の PNG ファイルは見当たらず、テーマに合わせてピクセル色を設定するコードは見えます。OS の UI コンポーネントは普通、画像エディタで作ってからタイル表示するのではなく、プログラムで描画する方式なのか気になります
一方で描画 API があれば、それに対応する描画命令を呼び出す形のベクターグラフィックのエンコードをマッピングするほうが簡単です。同時に拡大縮小の問題も解決され、ベクターグラフィックのアセットは通常、はるかに少ない容量で済みます
なので、ラスター画像を使う代わりに UI をどう描くかについての説明だと見ればよいです
関連記事: Essence: Desktop operating system built from scratch - https://news.ycombinator.com/item?id=29950740 - 2022年1月、コメント290件
たいてい新しい OS の試みは、あまりにも大海を沸騰させようとするような感じで非現実的に見えますが、これは気に入りました。すぐに可能性がありそうに見えます
アドバイスするなら、まず仮想化を早めに追加すれば、他の OS と慣れ親しんだアプリを実行できます。長期的には Parallels Coherence に似たシームレスな仮想化を探り、外部アプリをそのホスト OS 上で実行できるようにすれば、新しい OS を悩ませる「アプリがない」問題の短期・中期的な解決策になり得ます。次に、System76、Framework のような Linux 志向のノート PC メーカーや Raspberry Pi など、いくつかのターゲットプラットフォームにハードウェアサポートの範囲を絞るとよいでしょう。さらに、Linux や BSD のドライバーを互換 API 経由で取り込んで使う方法を検討すれば、サポートが悪名高いほど難しい Wi-Fi カードのようなデバイスに対応できるかもしれません
Essence の作者である nakst のホームページ https://nakst.gitlab.io/ を見ると、こんな文句があります
nakst's webpage // This site works best with JavaScript disabledとは、素晴らしい人です世間は狭いですね