2026-09-06

週次オープンソース:6502 から Linux 起動まで進むエミュレータ、そしてスタックの上のコーディングエージェント

コミットの多い週で、その大部分が一つのリポジトリに入った。 先週の日曜日に始まったエミュレータ rsemu は、最初のまる一週間で、 単一の 6502 から、三つのアーキテクチャで無改変の Linux カーネルを 起動するボードまで登った。その周りでは、スタックの下の層が締まり 続けた:purecrypto はセキュリティ監査的な一掃を受け、新しい エンコーディングクレート charcode によって、rsemu がディスクに 使う fstool がサードパーティ依存の大半を落とせた。そして atelier が始まった:スタック自身の部品で組み立てた小さな AI コーディングエージェントだ。

rsemu:6502 から Linux まで

rsemu は、まず フレームワークを作り、マシンを .machine ファイルで記述する Pure-Rust のエミュレータだ。今週(600 コミット超)はそのフレーム ワークが仕事に就き、週末時点の README は CPU コア 10 個 を挙げ、 公開コーパスがあるものには測定した適合性の結果を添えている: 6502 はバストレース込みで SingleStepTests 2,560,000 / 2,560,000、 Z80 は 1,604,000 / 1,604,000 に加えて zexall 67/67、RV64GC は riscv-tests 409/409 と Sail モデルに対する riscv-arch-test 181/181、 8086/8088、MIPS R3000A は 55,000 / 55,000、68000 は 124 の命令 ファイルすべてを通過、Game Boy の SM83、ARMv5TE、ARMv7E-M、 そして AArch64——最後のものは、ダウンロードできるスイートが存在 しないため rsemu 自身が作るスイートに対して。

それらのコアの上に、マシンファイル 34 本:

  • ゲーム機 — NES(NTSC、PAL、Dendy)は PPU・APU・DMA の タイミング修正の長い連続の末、マシン全体の精度テスト AccuracyCoin 141/141 を、既知失敗の台帳を空にして通る。 Game Boy は blargg 12/12、mooneye 59/66 に到達。Sega Master System は、コアが汎用であることの二つ目の証明として入った。
  • 小さなコンピュータ — タイプできる Apple 1 と、1976 年の Woz Monitor を走らせる Ben Eater の 6502 ブレッドボード コンピュータ。
  • 他人が書いたソフトウェアを起動するボード — riscv-virt は 実体化したマシンから生成したデバイスツリーで OpenSBI を走らせ、 Linux 6.12 をシェルまで 起動し、EDK2 も UEFI シェルまで。 riscv-virt-smp は二つの hart を立ち上げる。arm64-virt は Debian の arm64 カーネルを busybox まで起動し、virtio ディスク から ext4 ルートをマウントする。x86 では、q35-linux が生成された ACPI テーブルを見つけて NVMe ネームスペースから読む素の Gentoo 6.6 カーネルを起動し、q35-uefi は OVMF を Shell> プロンプトまで 導き、pc-at は rsemu 自身が書いたレガシー BIOS の上で FreeDOS 1.3 を起動する。

その下では実行エンジンも育った:superblock 付きの変換 IR、 ソフトウェア TLB、x86-64 ホスト JIT(x86 コアでは Linux 起動の 99.3% が変換済みブロックの中で走るようになった)、ホストの シリコン上で Linux をユーザ空間まで起動する KVM バックエンド、 静的リンクおよび glibc の Linux バイナリ——SQLite、Lua、 coreutils——を実行するユーザモードランナー、そして GDB リモート スタブと VNC サーバ。ブラウザデモは Vue 3 で作り直され、いまは PC/AT が動く。ディスクイメージは fstool を通り、fstool が自身の 依存を削ったことで --all-features 時の依存リストは 33 クレート から 10 に減った。ロードマップは一つの問いにも決着をつけた: nixvm は rsemu に統合されるのではなく、rsemu に依存する。

purecrypto:監査的な一掃と AVX-512

スタック全体の下にある no_std 暗号ツールキット purecrypto は、96 コミットの大半を、監査報告を一行ずつ片付けていくような堅牢化に 使った:演算ごとに新しい RSA ブラインダ、小位数の Ed25519/Ed448 鍵の 拒否、ECDSA ノンスと DRBG 状態のゼロ化、Lucky13 イコライザから 秘密サイズのアロケーションを除去、TLS_FALLBACK_SCSV の尊重、 名前制約のワイルドカード SAN による迂回を閉鎖、CRL と PKCS#12 の 処理量に上限、Falcon 署名の可鍛性を固定、そしてランダムな シリアルで証明書を発行し、既定では CSR の SAN を写さなくなった CLI。QUIC はコネクションマイグレーション、0-RTT 再開、サーバの preferred address、graceful close を得て——その後 DoS 対策の上限を 一巡。速度面では ChaCha20(AVX2 比 1.9 倍)、BLAKE3、16 レーンの SHA-256、8 並列の Keccak の AVX-512 カーネルを、耐量子方式に 接続した。v0.8.0 と v0.8.1 としてリリースされ、rsurl と puressh が すぐに取り込んだ。

atelier:スタックの部品で作るコーディングエージェント

atelier は「Rust で 書かれた最小限 TUI の AI コーディングハーネス」だ:OpenAI 互換の モデル API と話し、プロジェクトディレクトリの中でツールを走らせ、 MCP を話し、毎ターン新しいコンテキスト——git status、diff、 レイアウト、cargo check の診断——を自分に与えるエージェント ループ。インターフェースは意図的に小さい:入力行一つとステータス 帯、それ以外はすべてターミナルのスクロールバックに追記される。 スタックを再利用している——HTTP に rsurl、設定に tomlproc ——そして node ツールは kataan の上で JavaScript を走らせる: スクリプトはプロジェクトディレクトリに閉じ込められ、ネットワーク アクセスはゲートされ、暴走したスクリプトは、kataan が同じ週の v0.0.9 リリースで加えた協調的なホスト割り込みで止められる。 権限は閉じ込めに従う——プロジェクトに閉じたファイルツールは確認 なしで走り、bash、MCP ツール、ネットワークを使うスクリプトは 確認を求める。週末までに、自ら永続化しローリング要約へ圧縮する セッション、トークン予算付きのコンテキスト、画像入力、multiedit ツール、stdio と Streamable HTTP の MCP、--print ヘッドレス モードを備えた。

charcode:エンコーディング、そして軽くなった fstool

charcode は Rust の 文字エンコーディング変換だ:WHATWG Encoding Standard—— ブラウザが実際に使うエンコーディング、ラベル、エラー挙動——を、 依存なし、unsafe なし、no_std 対応で、iconv 風の CLI 付きで。 そして標準より先へ進んだ:標準は shift_jis や big5 のような ラベルを意図的に上位集合へ対応づけるので、charcode はそれらの ラベルが実際に指す文字集合——Shift_JIS と EUC-JP そのもの、 ISO-2022-JP、-JP-2、-KR、-CN、GB 2312、Big5、本物の ISO-8859-9 と TIS-620、UTF-7、SCSU——を、それぞれ独自のフィーチャの後ろに加え、 ブラウザ向けの置換は別のルックアップの後ろに置いた。

すぐに使われた。fstool は encoding_rs を charcode に置き換え、thiserror、crc32fast、 crc32c を落とし、APFS の case-folding を intl に移し、 tomlproc に切り替えた:codecs ビルドはいまや 7 クレートで、 うち 3 つが自前(compcol、charcode、intl)、残るサードパーティの 名前は uuid だけだ。

今週その他

  • teamclaude — マルチアカウントプロキシが、リクエストごとのコスト記録、 ヘッドレスマシン向けのコピー&ペースト OAuth、レート制限や 5xx での一回限りのフェイルオーバー、期限圧によるアカウント選択、 MITM モードでの Codex の傍受を得た。
  • kataan — ホスト 割り込み付きの v0.0.9、加えて配列・regex・組み込み・パーサに わたる百余りの test262 修正と、二つの O(n²) 経路の除去 (Array.prototype.sort、for-of)。
  • pktkit-rs — WireGuard と OpenVPN が暗号をすべて purecrypto に移し、rustls を 落とした。L2 ハブに VLAN のアクセス/トランクポート。
  • nixvm — 公平な 仮想実行時間スケジューリング、本物のジョブ制御、setuid の権限 降格、SCM_RIGHTS の fd 受け渡し、clone3 のフラグ一式。
  • catcard — Coldcard ファームウェアに、手描きの猫のブートスプラッシュ、フォント非依存の テキスト層、PIN ログインシーケンス。
  • selecard — 新規: 販売終了した文化シヤッターの SeleCard II と III のシャッター リモコンを、電波を聞くだけでリバースエンジニアリングしたもので、 HackRF と YARD Stick One で OPEN / STOP / CLOSE を復号・再現する Python ツール付き。
  • rsurl — 匿名の一時 ストレージへのダウンロード、libc なしの fullrust ターゲットでの CI。
  • z3rs — CAD の フォールバックとして QF_NRA 上のモデル構築型 nlsat 探索、 get-consequences、root-obj 項。
  • oxideav — oxideav-midi は MIDI 2.0 にネイティブ対応(UMP、Clip File、MIDI-CI、ノートごと のコントローラ)し、SoundFont の LFO とモジュレータも。 oxideav-tiff は JPEG-in-TIFF 用に自前の JPEG エンコーダを育てた。 oxideav-ac3 はエンコーダを 磨き、E-AC-3 の放送ストリーム復号を直した。

来週

rsemu には文書化された停止点の長いリストがある——各ボードは どこまで行けるかだけでなく、どこで止まるかを記録している—— それが JIT のさらなる作業とともに作業キューだ。atelier は マイルストーンのロードマップを進め続ける。purecrypto とそれに 依存するクレートは、堅牢化したリリースへと落ち着いていく。