2026-09-13

週次オープンソース:rsemu に Amiga、日曜日にカーネルとアセンブラ

今週は二つに分かれた。月曜から土曜は既存のプロジェクトに充てられた ——Pure-Rust エミュレータの rsemu は Amiga 500 のチップセット 一式を得て STM32 ボードを埋め、purecrypto は長いセキュリティ レビューを通り、fstool はアロケータなしで動くようになった。 日曜日は違った。その日に新プロジェクトが二つ、それぞれ約百コミット で始まった:Rust のオペレーティングシステムカーネル kintane と、 多数の CPU アーキテクチャ向けアセンブラ rsasm だ。

rsemu:Amiga 500 と STM32 ボード

rsemu は「下から上へ」 作る Pure-Rust のマルチプラットフォームエミュレータだ:アドレス 空間、クロックドメイン、ワイヤ、バス、変換 IR が先に来て、マシンは コンパイルに組み込むのではなく .machine ファイルで記述する。 今週(約 250 コミット)は三方向に進んだ:

  • Amiga 500。 MOS 8520 CIA、Paula(割り込み、ディスク DMA、 pot ピン)、Denise(プレイフィールド、HAM、スプライト、衝突判定)、 Agnus、そして「A500 のチップセット全体が一緒に動く」ところまで。 続いて内蔵フロッピー(ADF イメージを trackdisk が読む MFM トラックにエンコード)と、キーボードのプロトコルとマウスの 直交信号:「見て、打って、指せる A500」。Kickstart はユーザーが 既に持っているメディアから読む。
  • STM32F407 ボード。 約二十のペリフェラル:EXTI と SYSCFG、 インプットキャプチャ付きタイマ、ウォッチドッグ、リクエスト マトリクス付き DMA、SDIO、RCC のクロックゲート、RTC、RNG、HASH プロセッサ、L4 の Firewall、PCROP と RDP を備えたフラッシュ インタフェース。加えて FPv4-SP 浮動小数点拡張と DWT サイクル カウンタ、外付け部品として ATECC508A/608 セキュアエレメント、 ST25DV NFC タグ、SSD1306 と ST7789 ディスプレイ、QSPI PSRAM、 マトリクスキーパッド。gdb スタブはフラッシュへの load が できるようになった。
  • 速度と正しさ。 aarch64 の JIT バックエンドが入り、x86-64 以外のホストでも jit-host が単なるインタプリタではなくなった。 x86、RISC-V、A64 でストアが変換ブロックを終わらせなくなった (RISC-V では「実際のブートの 29.3% に相当」)。QEMU との ベンチマークと、parallel モードでのリトマステストも加わり、 後者は torn load と、A64・RISC-V のアトミック命令が非アトミック だったことを見つけた。どちらも修正済み。

purecrypto:secp256k1-zkp と監査

スタックの下に座る no_std 暗号ツールキット purecrypto は、 約 230 コミットで v0.8.2 から v0.8.6 へ進んだ。新機能は Bitcoin 寄りだ。BIP340 Schnorr 署名、続いて secp256k1-zkp に倣った ゼロ知識モジュール群:ECDSA アダプタ署名、sign-to-contract、 Pedersen コミットメントと Confidential Assets のジェネレータ、 アセットの surjection 証明、Borromean リングの範囲証明(「リファ レンスとバイト単位で一致」)、Schnorr 署名の半集約、Elements/Liquid のリング署名ホワイトリスト。アロケーション不要の secp256k1 ECDSA も入り、zkp モジュールのいくつかは alloc を要さなくなった。

コミットの大半はレビューによる修正だ。QUIC はハンドシェイク完了前に 1-RTT パケットを処理しなくなり、認証が通ったパケットからしか鍵と 接続 ID を採用しない。TLS のセッションチケットはリスナーの信頼設定に 紐づけられた。偽装された DTLS のフライトでハンドシェイクが詰まる ことはもうない。RSA はブラインダに新しい乱数を混ぜる。新しく公開の zeroize モジュールが入り、クレート中の手書きの秘密消去を置き換えた。

fstool:ヒープなしのファイルシステム

fstool はディスク イメージやファイルシステムを作り、調べ、変換し、詰め直す。今週 (v0.4.27 から v0.4.31)はフォーマットごとの Cargo フィーチャと、 組み込みターゲット向けの no_std コアを得た。今や「no-alloc」が 床で、alloc は追加分だ。その上に「アロケータを一切使わない」 FAT12/16/32(クラスタチェーンの走査は上限付きで、ファジング済み)と、 共通のストレージ層に載ったアロケータ不要の exFAT と littlefs ドライバ。この no-alloc 化はもう使われている:CatCard の SD ドライバは「exFAT カードも受け付ける(fstool 0.4.31、やはり ヒープなし)」。残りは独立レビューによる長い正しさ修正の一巡で、 ext4、XFS、NTFS、APFS、HFS+、f2fs、exFAT、qcow2、DMG、LUKS、 ISO 9660、アーカイブ形式に及んだ。

kintane:多くの種類の機械のためのカーネル

kintane は「MMU の ないマイコンからマルチソケットの SMP マシンまでを対象にした、Rust 製のモジュラーなオペレーティングシステムカーネル」だ。中心にある 考えは、プリプロセッサではなく型システムによる移植性。アーキテクチャ の違いはトレイトと関連定数で表すので、ページをマップするコードは MMU のないターゲットでは #ifdef で外されるのではなく、そもそも 存在しない。ビルドは専用ツールの kbuild が担う(cargo はビルド システムではない)。ネイティブ ABI はケーパビリティベースで、 プロセスごとの Linux personality で未修正の Linux バイナリを動かす 計画だ。名前は 欽(敬い、心を配る)と 種(種、種類)から:「多くの 種類の機械に心を配るカーネル」。

初日は設計文書をはるかに越えて進んだ:一つのソースから x86-64、 i686(PAE 付き)、aarch64、続いて MMU なしの riscv32 と、MPU で 守りつつフラッシュ上で直接実行する Cortex-M3 ポート。プリエンプ ティブなスレッド、バディアロケータ、コピーオンライトとヒュージ ページ付きのデマンドページング、W^X、ケーパビリティハンドルと チャネルも既にある。その上に、x86-64 ではローカル APIC と INIT-SIPI、aarch64 では PSCI による SMP、ACPI と PCI の列挙、独自の BIOS と UEFI ローダ、ローダブルモジュール、そして最後に「ブート時に 実行され採点される、最初のネイティブユーザ空間プログラム」。

rsasm:一つのアセンブラ、多数の CPU

rsasm は Rust 製の アセンブラで、「人が実際に持っている asm テキストを受け付け、多くの CPU を対象にし、一つのソースファイルから複数の CPU 向けのコードを 出す」ことを目指す。すべてのエンコーディングは独立したアセンブラ (GNU as、llvm-mc、NASM、vasm)とバイト単位で照合され、リファレンス のアセンブラはチェックサムで固定されている。初日に x86-64 の骨組み から十四のバックエンドまで進んだ:

  • MMX から AVX-512 までの SIMD を含む x86、AArch64、ARM A32/Thumb、RISC-V RV32/RV64 IMAFDC、PowerPC、MIPS、SPARC
  • 6502、Z80、8080、そして Motorola と GNU の両構文による 68000 から 68020 までの m68k
  • SuperH、Renesas RX と RL78、V850/RH850、NEC の 78K0、Renesas CC-RX / CC-RL / CC-RH のソース方言

出力は ELF32 と ELF64 のオブジェクトとフラットバイナリで、GNU 風の マクロ(.macro、.rept、.irp)もある。クロスアセンブラの 差分ハーネスが CI で走る。

今週その他

  • Coldcard ハードウェアウォレット向けのクリーンルーム Rust ファームウェア CatCard は全体を purecrypto に移し、本物の USB を得た:OTG デバイス ドライバ、HID トランスポート、USB 経由でステージする更新、ログ リング。「信頼するのではなく診断できるように」書いた SD カード スタック(カードからファームウェアを入れられる)、mk5 ボード対応、 ライブの RNG アナライザも入った。
  • Claude Code と Codex のマルチアカウントプロキシ teamclaude は 堅牢化の一巡を経た:ループバック免除、MITM トンネル、OAuth コールバック、設定の書き込み、TUI。ghcr.io に公開する Docker イメージと、CI での tsc strict モードのラチェットも加わった (1.1.17 から 1.1.20)。
  • puressh も独自の セキュリティレビューを受けた(sshd の接続数管理、known_hosts の 失効、strict KEX、FFI)。v0.1.7 でプロトコル層は puressh::hazmat の下に移った。
  • rsurl の上に作ったミニマル TUI の AI コーディングハーネス atelier は apply_patch、todo リスト、web_fetch、MCP のリソースと プロンプト、JSONL のリクエストトレースを加えた。
  • oxideav-mod は FastTracker 2 の XM 再生をブラックボックスのオラクルに対して 固めた:エンベロープ、ビブラート、アルペジオ、オーダーの流れ、 ピンポンループ。
  • Go の SQL ビルダ兼 ORM psql は方言のフィーチャフラグと、PostgreSQL/CockroachDB の高度な機能 を加えた。intlrs は ECMA-402 の数値書式との食い違いを八つ解消した。

来週

一日ずつしか経っていない kintane と rsasm には進むべき道が最も 多い:カーネルはドライバとユーザランドへ、アセンブラはさらに多くの ターゲットとオブジェクト形式へ。rsemu は共通コアの上にマシンを 足し続ける。CatCard は動く USB と SD の上にウォレットそのものを 作っていく。