
2026/10/28 8:53
Moxnox 1.0:NT ライクで POSIX 互換の OS が Btrfs に搭載されたもの
RSS: https://news.ycombinator.com/rss
要約▶
日本語翻訳:
Moxnox v1.0 は、Windows NT アーキテクチャの堅牢性と POSIX 互換性の間に架け橋となることを目的として設計された愛好家向けオペレーティングシステムです。本プロジェクトは実質的なコードについては人間によって記述され(機械的作業には AI が補助された)、主に人間の手で書かれています。amd64 および ARMv8.1 アーキテクチャ(例:Raspberry Pi 5)で動作し、x86-64-v3 でコンパイルすることで ARM 上での AVX512 または LSE 原子操作を可能にします。システムは btrfs ファイルシステム上で自己ホストされており、これは戦術的強化を受けていない点です;具体的には、ユーザースペースのヒープアロケーターにおけるパフォーマンスボトルネックと、負荷が高い場合における固定された 64KB の TCP ウィンドウサイズという課題があります。インストールにはパーティションの作成(32 GB を推奨)、mkfs.btrfs によるフォーマット、リリースアーカイブタールの抽出、EFI ブートエントリーの設定が必要です。本プロジェクトは NVMe、SATA、SDHCI、virtio-block、複数のネットワークカード(virtio-net、RTL8168/RTL8125)、および複数のグラフィックス/入力オプションを含む広範なデバイスドライバーをサポートしています。ライセンスについては、カーネルは GPL、ファーストパーティ DLL は LGPL、モジュールは MIT です。現在、~49 の主要パッケージのポートをサポートしており(amd64 限定で bash、gcc、python、rust、vim、git などを含む)ますが、POSIX 2024 関数のうち ~1,200 件のうち 642 件のみをサポートしています。また、GUI、複数のユーザー/グループ、セキュリティ機能、および完全な Win32 サポート(特定の kernelbase 関数のみ実装され、バイナリは PE フォーマットで互換性が限定的)がありません。具体的な制限事項には、APC を通じた不完全な信号処理、1 つだけのローカル/キーボードレイアウト、および btrfs コードがまだ負荷の高いワークロード用に最適化されていないという事実が含まれます。
テキストを翻訳する
(必要に応じて;そうでない場合は元のものを繰り返す):
サマリー:
Moxnox v1.0 is a hobbyist operating system designed as a bridge between the robustness of Windows NT architecture and POSIX compatibility, written primarily by humans without AI assistance for substantive code (though AI aided mechanical tasks). It runs on amd64 and ARMv8.1 architectures (e.g., Raspberry Pi 5), compiling with x86-64-v3 to enable AVX512 or LSE atomics on ARM. The system self-hosts on the btrfs filesystem, which has not been battle-hardened; specifically, users face performance bottlenecks in the userspace heap allocator and a fixed 64KB TCP window size under heavy loads. Installation requires creating a partition (32 GB suggested), formatting with mkfs.btrfs, extracting release tarballs, and setting up an EFI boot entry. It supports extensive device drivers including NVMe, SATA, SDHCI, virtio-block, various network cards (virtio-net, RTL8168/RTL8125), and multiple graphics/input options. The project is licensed under GPL for the kernel, LGPL for first-party DLLs, and MIT for modules. It currently ports ~49 major packages (including bash, gcc on amd64 only, python, rust, vim, and git). While it supports 642 of ~1,200 POSIX 2024 functions, it lacks a GUI, multiple users/groups, security features, and full Win32 support (only specific kernelbase functions are implemented; binaries are PE format with limited compatibility). Specific limitations include incomplete signal handling (via APCs), only one locale/keyboard layout, and the fact that its btrfs code is not yet optimized for heavy workloads.
本文
Moxnox v1.0: Windows NT 系設計思想と POSIX 互換の趣味 OS
Moxnox は、Windows NT 様似のアーキテクチャを持ちながら POSIX 互換を実現した趣味のオペレーティングシステムです。 btrfs ファイルシステムを基盤とし、自己ホスト化(自身をビルド環境として利用)に対応しています。
システムの特徴
- 設計思想: システムコールの選択やアーキテクチャは Windows NT をモデルとしています。
- 互換性: 再コンパイルされたソフトウェアであれば Unix アプリも動作し、完全な GNU ベースシステムを搭載しています。
- 自己ホスト化: 十分に成熟しており、Moxnox 上で Moxnox 自身をビルドすることが可能です。
- ファイルシステム: Linux で愛されている btrfs を採用しています。
バージョン情報とプラットフォーム
- ソースコード規模: C++ で約 13 万行。
- 対応アーキテクチャ:
およびamd64
。aarch64 - ファイルシステム注意: btrfs コードは基本動作には問題ありませんが、実戦でしわ寄せされた状態(battle-hardened)ではないため、使い捨てのファイルシステムとしてマウントする以外はご遠慮ください。
起動方法
x86_64 (AMD64) アーキテクチャ
QEMU でテストするには、以下のファイルをダウンロードしてください。
moxnox-amd64-1.0.img.gzmoxnox-kernel-amd64-1.0.efi
まずイメージファイルを圧縮解除します:
gunzip moxnox-amd64-1.0.img.gz
その後、以下のコマンドを実行します(メモリ不足で動作しない場合は
-m 2048 など大きく設定してください):
qemu-system-x86_64 -M q35 -enable-kvm -cpu host -m 1024 \ -smp cores=4,threads=1 \ -kernel moxnox-kernel-amd64-1.0.efi \ -append "root=/dev/sda" \ -device ich9-ahci,id=ahci -drive id=disk,file=moxnox-amd64-1.0.img,if=none \ -device ide-hd,drive=disk,bus=ahci.0 \ -nic user,model=virtio-net-pci \ -device qemu-xhci \ -device usb-kbd,id=kbd \ -device usb-tablet,id=tablet \ -serial stdio
ARM (AArch64) アーキテクチャ
ARM 環境での起動コマンドは以下の通りです:
qemu-system-aarch64 -M virt -cpu cortex-a76 -m 1024 \ -smp cores=4,threads=1 \ -kernel moxnox-kernel-aarch64-1.0.efi \ -append "root=/dev/sda" \ -device ich9-ahci,id=ahci -drive id=disk,file=moxnox-aarch64-1.0.img,if=none \ -device ide-hd,drive=disk,bus=ahci.0 \ -nic user,model=virtio-net-pci \ -drive if=pflash,unit=0,file=/usr/share/qemu/edk2-aarch64-code.fd,readonly=on \ -device qemu-xhci \ -device usb-kbd,id=kbd \ -device usb-tablet,id=tablet \ -serial stdio
インストール方法
パーティション作成には
gparted などのツールを使用してください。32 GB 程度あれば十分です。
以下のパス /dev/nvme0n1p99 は例ですので、実環境に合わせて変更してください。
※古いバージョンの btrfs-progs ではサポートされていない設定があるため、最新版をご用意ください。
ルートドライブの準備
# mkfs.btrfs /dev/nvme0n1p99 # mkdir /mnt/moxnox # mount /dev/nvme0n1p99 /mnt/moxnox # cd /mnt/moxnox # wget https://github.com/maharmstone/moxnox/releases/download/v1.0/moxnox-amd64-1.0.tar.gz # tar -xvzf moxnox-amd64-1.0.tar.gz # rm moxnox-amd64-1.0.tar.gz # cd # umount /mnt/moxnox
カーネルのコピー
EFI ファイルをマウントしてダウンロードします:
# mount /boot/efi # cd /boot/efi # wget https://github.com/maharmstone/moxnox/releases/download/v1.0/moxnox-kernel-amd64-1.0.efi
ブートエントリーのインストール
EFI バイアスでブートエントリーを登録します:
# efibootmgr -c -d /dev/nvme0n1 -p 1 -L "Moxnox" \ -l '\moxnox-kernel-amd64-1.0.efi' \ -u 'root=/dev/nvme0n1p99'
注意点:
efibootmgr は起動順序を自動的に変更してしまいがちですが、望ましくないためご注意ください。Linux と Moxnox ではブロックデバイスの名前がほぼ一致します。
この EFI ファイルは多言語対応ファイル(polyglot)であり、Linux のブートプロトコルにも準拠しているため、非 EFI GRUB でも動作する可能性があります(未検証)。
ハードウェアサポート
amd64 向け
- コンパイル目標:
。2015 年頃以降の製品に対応しています。x86-64-v3 - AVX512: 自動的に検出・有効化を行います。
- QEMU 設定: 古すぎるデフォルト設定ではなく、
マシンタイプを指定してください(microvm も動作)。q35
aarch64 向け
- 要件: LSE アトミクスを使用するため、ARMv8.1 が必須です。Raspberry Pi 5 は対応、それ以前は非対応。
- ブートロадマップ: ACPI のみサポートし、Device Tree は対応しません。Raspberry Pi 5 の場合は rpi5-uefi も必要です。
- QEMU 設定:
マシンタイプはありませんが、raspi5
またはvirt
で動作します。sbsa-ref
デバイスサポート一覧
| カテゴリ | 対応デバイス |
|---|---|
| ブロックデバイス | NVMe, SATA, SDHCI (SD カード), virtio-block, USB ストレージ |
| ネットワークカード | virtio-net, RTL8168, RTL8125 |
| 入力デバイス | USB HID, PS/2 キーボード/マウス, virtio-input |
| グラフィックス | virtio-gpu, GOP フレームバッファ, VBE, VGA テキストコンソール |
| シリアルポート | virtio-console, x86 シリアルポート, PL011 ARM シリアルポート |
| USB | XHCI |
ビルド方法
最も簡単な方法は、クロスコンパイラが用意された Docker コンテナを使用することです。
# amd64 向け $ git clone https://github.com/maharmstone/moxnox-ci-amd64 # または aarch64 向け $ git clone https://github.com/maharmstone/moxnox-ci-aarch64
コンテナ内でソースを取得:
$ git clone https://github.com/maharmstone/moxnox $ cd moxnox
サブモジュールの更新
- 最小限:
$ git submodule update --init --depth 1 ports/acpica/repo ports/freetype/repo ports/gnu-efi/repo ports/harfbuzz/repo ports/libpng/repo ports/mingw-w64/repo ports/zlib/repo ports/musl/repo ports/tre/repo - すべて: (時間がかかります)
$ git submodule update --init --recursive
ビルド実行
**必ず Ninja ジェネレーターを指定してください。**C++ モジュールを使用しているため、
Unix Makefiles は動作しません。
# x86_64 向け $ mkdir build $ cd build $ cmake -DCMAKE_TOOLCHAIN_FILE=amd64.cmake -GNinja .. # aarch64 向け $ cmake -DCMAKE_TOOLCHAIN_FILE=clang-aarch64-native.cmake -GNinja ..
Moxnox 上で直接ビルドする場合は、ツールチェーンファイルを指定する必要はありません(
cmake -GNinja ..)。
注記: gcc、llvm、rust は明示的に要求されていない限りコンパイルされません。
とhexylは Rust に依存するため特別に必要です。 Moxnox 上でビルド中の CMake からripgrepの警告が出た場合は、Rust のサブモジュールをチェックアウトしていないことを確認してください。rust-libc
ライセンス構成
- カーネル・ファーストパーティプログラム: GPL
- ファーストパーティ DLL: LGPL
- modules ディレクトリ: MIT
- 各ポートサブモジュールの詳細については、それぞれのパッケージをご覧ください。
ポート済みソフトウェア (リスト)
現在対応している主要なソフトウェアツールです:
- 開発ツール: bash, binutils, cmake, gcc (amd64), git, make, ninja, rust
- システム utils: coreutils, findutils, grep, gzip, xz, tar, wget
- 言語・スクリプト: python, perl, gawk, bison, flex, m4
- ネットワーク: curl, openssh, netcat, libuv, openssl
- データベース/JSON: jsoncpp, libarchive
- グラフィックス/フォント: cairo, freetype, harfbuzz, mesa, pixman, zlib, zstd
- その他: bzip2, diffutils, expat, file, flex, gperf, hexyl, less, libiconv, libpng, librhash, mako, markupsafe, mpc, mpfr, patch, ripgrep, sed, vim
よくある質問 (FAQ)
Q: 何がまだ不足していますか?
現在のバージョン 1.0 で特に不足している機能です:
- GUI
- タイムゾーン・多言語キーボードレイアウト・ローカライゼーション(非 UTF-8)
- セキュリティ機能、複数ユーザー/グループサポート
- パフォーマンス: ヒープアロケータの低速、TCP 速度、LRU システムの不備など。
Q: Windows NT への互換性はどの程度ですか?
システムコールや低レベルインターフェースは NT と一致しますが、構造は異なります(ReactOS のような完全再現ではありません)。
- バイナリ形式: PE フォーマット (
,.exe
)。C++ エクセプションは SEH 経由。シグナルは APC で実装。.dll - 呼出規約: RCX, RDX, R8, R9 を使用(Windows と一致)。型サイズも Windows に準拠 (
など)。sizeof(long) - 制限: トークン、レジストリ、I/O 完了ポートは不足しています。仮想ファイルシステム (NtCreateFile の
,.
) は実装していません。..
Q: POSIX への互換性はどの程度ですか?
POSIX 2024 の約 1,200 機能のうち 642 を実装しています(gnulib で補完)。
- Windows 固有ライブラリ (
など) と POSIX 機能 (ucrtbase
) が分散配置。mnposix - Linux 由来の機能(dentry キャッシュ、大型フォリオ、evdev)を採用。
- 制限:
は半分完成(socketpair は動作)、AF_UNIX
の I/O バッファリング不足など。mkfifo
Q: sshd をどう起動しますか?
自動起動機能はありませんので、手動です。
- ホストキーを生成。
に公開鍵を追加(パスワード認証はまだ不可)。/root/.ssh/authorized_keys- 完全パスを使用して
を起動してください。sshd
Q: Windows プログラムを動かすことは可能ですか?
現状では不可能です。Win32 DLL は意図的に実装していません。将来的には Wine の DLL を移植する検討がありますが、wine サーバーや
ntdll 自体は不要です。
Q: これはどれほど雑ですか?
コードの半分近くを AI が書いたわけではありません。AI はツールの翻訳やテスト作成に利用しています。
- Claude: コミットレビューにおいて、メモリリークやデッドロックを指摘し、改善提案を行っています。
Q: なぜこれを作りましたか?
- 純粋な楽しさと、「物事がどう機能するかを理解する」ためです。
- NT カーネルの評価が不当に低く知られていないと感じたためです。
- Windows が POSIX 互換を避けてしまう現状に対し、イベント fd や pidfd などの現代機能を備えた「望ましい Windows」の姿を追求しました。