PatchworkOS: An OS for x86_64, built from scratch in C and assembly

2025/12/07 8:33

PatchworkOS: An OS for x86_64, built from scratch in C and assembly

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

**PatchworkOS は、x86_64 向けの新興モジュラーオペレーティングシステムであり、従来の POSIX モデルを放棄し、Plan 9 スタイルの「すべてがファイル」という哲学を採用しています。
カーネルは C とアセンブリで最初から作成され、完全にプリエンプティブかつティックレスな EEVDF スケジューラ(O(log n))、細粒度ロック付き対称マルチプロセッシング、O(1) のページ単位メモリ操作、およびファイルベースの IPC を実装しています。また、デバイス API、さまざまな同期プリミティブを公開し、

/net/local
下でヘルパー関数(
sread
swrite
など)を使用してソケットをファイルとして実装します。
Unix スタイルの仮想ファイルシステムはマウントポイント、ハードリンク、プロセスごとの名前空間を提供し、グラフィックスにはカスタム
.fbmp
ビットマップと
.grf
フォントフォーマットを使用します。ユーザー空間にはカスタム C 標準ライブラリ、モジュラー共有メモリデスクトップ環境、および最小限のユーティリティ(
touch
cat
echo
ls
rm
)が含まれます。
POSIX との主な相違点は、
fork/exec
の代わりに
spawn()
を使用すること、ユーザー概念を持たないこと、モード/権限の代わりにファイルフラグを使用すること、および「すべてがファイル」という強いフォーカスです。現在の制約としては RAM‑ディスクのみでのストレージ(USB サポートは未実装)および x86_64 アーキテクチャ限定があります。
Lenovo ThinkPad E495 上で行ったベンチマークでは、PatchworkOS はメモリ割り当て/マッピングテストにおいて Fedora Linux を上回り、O(1) のページ操作を実現しています。同プロジェクトは ACPI/AML パースを最初から実装しており、PS/2 ドライバは
_CRS
エントリを通じてリソース探索を示しています。
将来計画には LUA ベースの動的設定、完全非同期 I/O(例:io_uring)、USB サポートが含まれます。ビルド/実行手順は、リポジトリをクローンし、
make all
を実行、QEMU で起動する(
make run
)です。ドキュメントは Doxygen 経由で利用可能です。

この改訂サマリーはすべての主要ポイントを網羅し、根拠のない推測を回避しつつ PatchworkOS の明確かつ簡潔な概要を提示しています。**

本文

PatchworkOS(パッチワークOS)

PatchworkOS は、x86_64 用に設計された初期段階のモジュール型非 POSIX オペレーティングシステムです。
「すべてがファイルである」という Plan 9 からインスパイアされた哲学を採用しています。
C とアセンブリ言語でゼロから構築され、教育的価値と実験的魅力の両方を備えています。


概要

項目内容
カーネル• 完全にプリエンプティブで tickless な EEVDF スケジューラ(Augmented Red‑Black Tree を用いた O(log n))
• SMP と細粒度ロック
• ページ単位のメモリ操作は O(1)、割り当て/マッピングは O(n)
• ファイルベースの IPC:パイプ、共有メモリ、ソケット、Plan 9 の “notes”
• デバイス API:フレームバッファ、キーボード、マウス 等
• 同期プリミティブ:ミューテックス、RW‑ロック、futex など
• 高度にモジュール化。SMP の起動もモジュールとして実装
ファイルシステム• Unix スタイルの VFS(マウントポイント、ハードリンク、プロセスごとの名前空間)
• カスタムイメージフォーマット
.fbmp
(高速フレームバッファロード)
• グレースケールラスターフォント
.grf
(アンチエイリアシングとカーニング付き)
ユーザー空間• 独自の C 標準ライブラリおよびシステムライブラリ
• モジュラー型共有メモリデスクトップ環境
• 設定ファイルでテーマ設定

POSIX との主な相違点

  • fork()/exec()
    spawn()
  • 「ユーザー」概念はなし
  • 非 POSIX 標準ライブラリ
  • ファイルベース API を重視
  • ファイルフラグが従来のモード/権限を置き換える

制約事項

  • RAM‑ディスクのみ(USB サポートは未実装)
  • x86_64 のみ対応

今後の計画

  • Lua を統合し、動的設定を可能にする
  • 完全非同期 I/O /
    io_uring
    風システムコール
  • USB サポート追加

ドキュメントとビルド方法

# クローンしてビルド
git clone https://github.com/KaiNorberg/PatchworkOS
cd PatchworkOS
make all            # bin/PatchworkOS.img を作成
make run            # QEMU で起動

追加ターゲット:

ターゲット説明
make clean
ビルド成果物を削除
make DEBUG=1
デバッグシンボル付きでビルド
make TESTING=1
単体テスト有効化(iasl が必要)
make doxygen
API ドキュメント生成
make compile_commands
IDE 用

例:Hello‑World モジュールの作成

/* src/kernel/modules/hello/hello.c */
#include <kernel/module/module.h>
#include <kernel/log/log.h>
#include <stdint.h>

uint64_t _module_procedure(const module_event_t *event)
{
    if (event->type == MODULE_EVENT_LOAD) {
        LOG_INFO("Hello, World!\n");
    }
    return 0;
}

MODULE_INFO(
    "Hello",          /* 名前 */
    "<author>",       /* 作者 */
    "A simple hello world module",
    "1.0",
    "MIT",
    "BOOT_ALWAYS"     /* ブート時にロード */
);

ビルドへの追加:

ps2.mk
をコピーして
hello.mk
とし、ビルド&実行。
/dev/klog
でメッセージを確認。


「すべてがファイル」実装例

ソケット(Plan 9 スタイル)

/* シーケンパケットソケットの作成 */
char *id = sreadfile("/net/local/seqpacket");
swritefile(F("/net/local/%s/ctl", id), "bind myserver && listen");
/* 接続を受け入れる */
fd_t fd = open(F("/net/local/%s/accept", id));

フラグと権限

/* 非ブロッキングソケットを開く */
open("/net/local/seqpacket:nonblock");

/* 読み書き可能なファイルを作成 */
touch("file.txt:read:write");

ベンチマーク(メモリアロケーション)

ページ数PatchworkOS (ms)Fedora 40 (ms)
11571138
30748637660

PatchworkOS はページテーブルにメタデータを埋め込むことで O(1) ページ操作を実現し、性能が向上しています。


シェルユーティリティ

ユーティリティ説明
touch
ファイル/ディレクトリ作成
touch mydir:create:directory
cat
ファイル読み書き、プロセス終了ステータス取得
cat /proc/1234/wait
echo
標準出力またはファイルへ書き込み
echo "hi" > file.txt
ls
ディレクトリ内容一覧
ls mydir:recursive
rm
ファイル/ディレクトリ削除
rm mydir:dR

リポジトリ構成

PatchworkOS/
├── meta/          # ドキュメント、スクリーンショット
├── lib/           # サードパーティライブラリ
├── root/          # 画像ルート用ファイル
└── src/
    ├── kernel/
    ├── modules/
    ├── programs/
    ├── libstd/
    └── libpatchwork/

Grub のループバック(任意)

/etc/grub.d/40_custom
に追加:

menuentry "Patchwork OS" {
    set root="[GRUB identifier]"
    loopback loop0 /PatchworkOS.img
    set root=(loop0)
    chainloader /efi/boot/bootx64.efi
}

GRUB 設定を再生成し、

.img
/boot
にコピー。


トラブルシューティング

  • QEMU 起動失敗 – QEMU 9.2.3 を使用(10.x 系列は問題あり)
  • その他のエラー – GitHub の Issue で報告

コントリビュート

バグ修正・性能改善・新機能・ドキュメントの PR は歓迎です。
アイデアがあれば TODO リストを確認してください。


同じ日のほかのニュース

一覧に戻る →

2025/12/07 10:17

Using LLMs at Oxide

## Japanese Translation: ## 改訂要約 大型言語モデル(LLM)は、文書の高速解析、コード生成、テキスト作成などで強力なアシスタントとなりますが、人間の判断や責任を置き換えるべきではありません。LLM の強みには、長文の即時要約、コーディングエラーの検出、プローズ提案などがあります。しかし、これら同様にプライバシーリスク(アップロードされたデータでのトレーニングからオプトアウトする必要性)、過度な奉承的表現、クリシェが多い出力による真実感の低下、不安定なデバッグ支援なども伴います。実際の例では、ChatGPT、Claude、Gemini へのデータ共有ポリシーで「全員のモデル改善」を無効化するようユーザーに求められ、Oxide は強力なライターを採用し完全な LLM コンテンツ作成を避ける方針を取っています。ソフトウェアチームは LLM の支援を受けながらも、人間によるコードレビューに依存しています。今後、エンジニアは迅速な反復のために LLM を使用し続けますが、責任と真実感を維持するためにピアレビュー前に厳格な自己レビューを強制します。企業は明確なプライバシー設定とガイドラインを設置し、ライターは独自のスタイルを保持し、開発者は機械出力を検証するプロセスが必要です。この効率向上と人間監督のバランスこそが、将来の業界標準を決定づけるでしょう。

2025/12/07 12:03

Z2 – Lithographically fabricated IC in a garage fab

## Japanese Translation: > 著者は、DIYで低コストのポリシリコンゲートプロセスを用いてIntelの最初のプロセッサ技術を模倣し、2.4 mm² のダイに10×10配列(合計100トランジスタ)を製造しました。以前のZ1テストチップ(6トランジスタ)に続き、新しいZ2チップは完全な電気特性評価が可能です:Vth ≈ 1.1 V、Cgs < 0.9 pF、立ち上がり/落下時間 < 10 ns、オン/オフ比 ≈ 4.3 × 10⁶、漏れ電流 932 pA(Vds = 2.5 V)(環境光下では約100倍高い)。これらの数値は、2.5–3.3 V のロジックレベルで信頼性ある動作を示しています。 > 製造は自己整列型「ゲートファースト」プロセスであり、イオン注入を省略し、水・アルコール・アセトン・リン酸・フォトレジスト・デベロッパー・N‑タイプドーパント・HF/CF₄/CHF₃ RIE・HNO₃ などの一般的な実験室化学物質のみを使用し、クリーンルームは不要です。約10 nm のSiO₂ゲート酸化膜と300 nm のポリシリコンを有する25 × 200 mm ウェーハを約45ドルで購入しました。製造には15チップ(1,500トランジスタ)が関与し、少なくとも1チップは完全に機能し、2チップが「ほぼ機能」しているため、推定トランジスタ歩留まりは80 %です。最も頻繁な欠陥はソース/ドレインがバルクシリコンと短絡していることです。 > 今後の作業にはテスト自動化、歩留まり向上、およびオペアンプやメモリアレイなどより複雑なデジタル/アナログ回路への技術拡張が含まれます。成功すれば、このDIY手法はホビイストや小規模ラボの参入障壁を低減し、ニッチなイノベーションを促進し、少量プロトタイプ用に商業製造所への依存度を削減する可能性があります。

2025/12/07 6:55

Screenshots from developers: 2002 vs. 2015 (2015)

## Japanese Translation: 記事は、グラフィカルインターフェイスの台頭にもかかわらず、Unix/Linux ユーザーが10年以上にわたり主にターミナル中心のワークフローを維持していることを示しています。2002 年初頭の最小限デスクトップ(xterm、fvwm、Gnome 2)のスクリーンショットと 2015 年までのユーザー報告はほぼ変化がないことを確認しています:多くの人がまだ軽量ウィンドウマネージャやコンソールエディタ(Emacs や Vim)に依存しています。ある回答者は、fvwm を使用していた FreeBSD から Linux(Lubuntu)と LXDE に移行しつつもコマンドライン中心を維持しました。彼は Firefox、Gimp、Wireshark、VLC などの GUI ツールを追加しましたが、シェル、Perl、および C でスクリプトを書き続け、mutt を使ってローカルでメールを処理しています。別の OS X ユーザーは、Mail.app、Safari、Calendar、Slack の 6 つの仮想デスクトップと専用ターミナルデスクトップを運用しています。数人の参加者はハードウェアアップグレード(例:スマートフォンが初期の Pyramid 90x を上回る)について言及しましたが、classic Unix プリミティブ(`open`、`close`、`fork`)に満足しているようです。 記事ではまた、Pine から Thunderbird または mutt へのメールクライアントの進化と、職務変更後の VirtualBox、LibreOffice、および Wine を介した Windows 互換性についても追跡しています。Hacker News と Reddit(/r/programming、/r/linux)のコミュニティディスカッションはさらに文脈を提供します。 総じて、グラフィカルデスクトップが進化しているにもかかわらず、ターミナル中心のワークフローは継続しています。legacy ウィンドウマネージャ(fvwm)と軽量環境(LXDE、LXQt)は、新しい GUI と共存し続けています。この持続的なミニマリズムは、ソフトウェア開発者がコマンドライン機能を前面に押し出し、ユーザーコミュニティおよび産業界の両方で継続的に求められるターミナルフレンドリーなツールへの需要を満たすべきだという示唆です。

PatchworkOS: An OS for x86_64, built from scratch in C and assembly | そっか~ニュース