週次オープンソース: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 での
tscstrict モードのラチェットも加わった (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 の上にウォレットそのものを 作っていく。