2026-05-24

週次オープンソース:fstool がファイルシステム行列を組む、univdreams がマルチアーキへ

また横に広い週。月曜に現れたディスクイメージツールキットが 日曜にはファイルシステム行列を動かしており、汎用デコンパイラは 新しいアーキ三つとプリエンプティブスケジューラを生やし、PHP の VM は委譲していた構文の大半を呑み込み、メディアフレームワークは 光ディスクを手に入れた。

fstool:一週間でファイルシステムツールキット

fstool は今週の新顔 ——月曜に作られ、日曜には v0.0.2v0.4.1。「ディスクイメージ /ファイルシステムイメージをビルド・検査・改変・repack する」 Pure-Rust のライブラリ+ CLI で、genext2fs の精神を継ぎつつ、 ディスク全体・複数 FS・フォーマット間の往復を、TOML スペック からでもコマンドラインからでも扱う。

七日で到達したファイルシステム行列:

  • 読み+書き+インプレース編集 — ext2 / ext3 / ext4、FAT32、 exFAT、XFS、HFS+/HFSX、NTFS、F2FS、GRF、qcow2。
  • 読み+書き(repack 専用) — tar、SquashFS、ISO 9660、zip、 cpio、ar。
  • 読み — dmg(UDIF v4、encrcdsa v2 暗号化を PBKDF2 アンロックで含む)。APFS のインプレース編集はまだ全ファイル 単位のみ。

書き込み可能な FS はすべて単一の Filesystem トレイトを実装する ので、CLI(build / repack / add / rm)も TOML スペックも 一本のコードパスを通る——--fs-typetype = "hfsplus" で ターゲットを選ぶだけ。ジャーナリング FS は「バイトを書く」以上の ことをやる:ext3/4 は本物の JBD2 トランザクション、XFS は XLOG、 HFS+ と NTFS はそれぞれのジャーナル経由でコミットする——だから 編集の途中でクラッシュしても、ホスト自身の fsck がリプレイ できるイメージが残る。

正しさの基準は自前チェックではなく実ツールだ:ext2 の出力は 同じ入力に対して genext2fs とバイト一致、書き込み側は xfs_repair -n / fsck.hfsplus / fsck.f2fs / unsquashfs の往復を通る。週の終わりには FUSE アダプタ(任意のバックエンドを ユーザ空間 FS としてマウント)、OCI 風 .wh.* ホワイトアウト付き のレイヤ repack、クラッシュ注入ブロックデバイス付きの lib レベル fuzz ハーネスも生えた。Ragnarok Online の GRF アーカイブ(permutation 暗号、CP949 ファイル名)も入っている ——唯一の純粋に個人的な痒み。

univdreams:BPF、Solana、WASM、そしてスケジューラ

univdreams ——先週 oxideav-vfw から切り出された汎用デコンパイラ/コンパイラ ——は W21 を、アーキで広げ、エミュレータで深掘りして過ごした。

新しいデコンパイル対象:

  • BPF / eBPF + Solana SBF — Linux eBPF + Solana SBF の デコーダ(バイト同一の往復)、続いて完全なリフトスタック: .rel.dyn 経由の syscall 名解決、関数発見、スタックスロット 命名、分岐ラベル、構造的 if-then-else / while 復元、引数と 戻り値型の推論、.rodata 文字列解決。ud solana <program-id> はデプロイ済み Solana プログラムをチェーンから取得して デコンパイルし、ハンドラごとに region バナーを付ける。
  • WASM — コンテナ往復、Code セクションの関数ごとの 逆アセンブル、CLI 自動検出。
  • アーキ非依存の SSA コアarch-codec トレイト背骨—— x86 と BPF がアーキごとのフォークではなく同じレジストリを 通ってリフトする。

さらに ブラウザプレイグラウンド(wasm-bindgen)も生えた: Upload / URL / Solana チェーンのタブと Helius RPC オーバライド 付き。エミュレータは六フェーズかけて本物のプリエンプティブ スケジューラを獲得した:ThreadState + TLS スロット、本物の コンテキストスイッチ付き非同期 CreateThread、Event / Mutex / Semaphore + WaitForSingleObject、クリティカルセクション、 スレッド優先度付きの quantum ベースプリエンプション、本物の CreateProcessA 付きプロセステーブル、子 PE のロード+実行。 コーデック側は v0.1.40.1.5 で 12/12 コーデック往復、 MagicYUV と HuffYUV がピクセル一致(SSE2 XMM、AVX/YMM、 Indeo 3 デコード)。

goro:PHP を VM へ降ろす

W20 の作業は PHP のエッジケースに対する VM の正しさだった。W21 はその カバレッジ ——構文を次々と AST 委譲から専用のネイティブ op へ移し、VM がツリーウォーカーへフォールバックしなくなるように した。

今週ネイティブに降ろしたもの:match()switch()、enum 宣言、 非 by-ref ターゲットへの foreachtry/finally(ハンドラ ごとの pending 制御+エスケープ時チェーン、PHP bug65784 修正)、 nullsafe のプロパティ/メソッド/dyn-var 読み($obj?->…)、 可変変数($$name / ${expr})、静的プロパティ書き込み (Foo::$bar = v)、拡張 clone()、参照生成(&$expr)、 リスト分割代入、単純コンテナへの isset() / empty()unset()、静的メソッド呼び出し。加えて mb_convert_variables の循環配列に対する再帰検出修正。

OxideAV:光ディスクとコンテナの深掘り

W19 でコーデック行列が埋まり、W20 は細かい改善、W21 は コンテナとディスクの層が育った。

光ディスクoxideav-dvd が新顔:読み取り専用の DVD-Video リーダ、ECMA-267/268 + OSTA UDF 1.02 のクリーンルーム——ISO 9660 + UDF マウント、 VIDEO_TS ウォーク、IFO パーサ(VMGI/VTSI、プログラムチェーン テーブル、パレット LUT)、nav-pack サブストリームルータ付きの MPEG-PS 上の VOB デマクサ、そして convert_dvd_to_mkv mux パイプライン。Blu-ray の読み取り側 sibling も並走中(BDMV ウォーク、CPI EP_map シーク)だが、実際にテストできるディスクに向けてまだ作業中。

コンテナは box / atom の深いカバレッジを得た: mov(QuickTime/ISO-BMFF box をラウンド 125 まで)、 mp4(サンプルグループ、 編集リスト、字幕/タイムドテキストトラック)、 mkv(RFC 9559 ContentEncodings、ヘッダストリッピング、CRC-32 検証、fuzz ターゲット)、 avi(OpenDML super-index、 ストリームごとの LANGID、SMPTE タイムコード)。

フレームワーク配管scribe(フォント ラスタライザ/シェイパ)が GSUB 置換ルックアップ+ ccmp / caltshape_text に配線; generator が synth モード追加(DTMF、ADSR エンベロープ、リングモジュレーション、 chirp/FM、ビデオ zoneplate); sourceconcat://data:(RFC 2397)、mem:// ドライバとファイルスコープ allow-list; pipeline に メモリ上限付きパケットキュー(トラックごとのチャネル予算)。

ClawdWallet:実機経路

先週の「来週」は ClawdWallet のペアリングフローを実機に乗せる ことだった。作業はそこへ向かった。

TibaneApp はビルド 51 から 55 へ(libwallet 0.4.380.4.44):トランザクション 履歴をウォレットごとにスコープ、作成時のウォレット命名、 ダッシュボードのトークンロゴ、トークン/アクティビティの タブ分割、ドリフトするオンチェーン状態を読む画面の pull-to-refresh、ウォレットシートのコピー可能アドレス、 アンロック時にデバイスシェアが欠けている場合の 2FA リカバリ経路。

clawdwallet は しきい値署名コアを作り直した:eddsatssFROST(Ed25519)DKLs23(secp256k1) に置き換え、share スキーマの往復テスト、 カバレッジ CI。

libwallet v0.4.33v0.4.44 が支えを運んだ:iOS/Dart フレームワーク 修正の連続(static_framework 下で Go ランタイムを二重に 初期化しない、dlsym 向けにブリッジシンボルを公開)、swap アグリゲータを OKX DEX API V6 へ切り替え、Solana tx 履歴の バックフィル、クロスデバイスインポートのリカバリ文書化。

今週その他

  • chiefstaker — Solana のステーキング/報酬プログラムが監査パスを通った: PDA 事前資金供給グリーフィングに対するプール初期化の堅牢化、 unstake クールダウン中のコイン凍結、フル unstake 時に常に アカウントを閉じて未払い SOL を全額支払う、必須メタデータ PDA による正確な member_count
  • origami — RNA の 弧が続いた:CHARMM27 核酸の原子タイピング+力場パラメータ、 NeRF の base-ring +水素ビルダ、monomer-aware な RNA トポロジ グラフ、そして build → minimize → dynamics が RNA 鎖で 端から端まで動くように。タンパク質は出力側、核酸は組み立てる 側だ。
  • vpnetd-sgx — VP.NET SGX エンクレーブにビルド+リリース CI(バージョンタグで エンクレーブバイナリを公開)。

来週

fstool は v0.5 と安定パブリック API へ向かう。univdreams は マルチアーキのリフトと Win32 スケジューラを押し進める。DVD リーダはデマクサから再生へ移る。goro の VM はデフォルトを 切り替えられるまでネイティブ降ろしを点けていく。