2026-07-26

週次オープンソース:libwallet がすべて Rust に、AV1 エンコーダが埋まり、nixvm で Claude Code が動く

スタックの層が別々のリポジトリとして現れる週もある。今週は一つの 製品の中に現れた。TibaneApp を支えるマルチチェーンのウォレット ライブラリ libwallet が Go 実装を捨て、それを置き換える Rust 移植はこのプロジェクト自身のクレートの上で動く。HTTP に rsurl、 暗号に purecrypto、ストレージに graphitesql。ほかでは、 AV1 エンコーダ が仕様に残っていた符号化ツールを進め、 システムコール層のサンドボックス nixvm は本物の MMU を得て Claude Code を動かした。

libwallet:Rust が唯一のバックエンドに

libwallet は、 TibaneApp の土台になって いる、TSS ベースのマルチチェーン(Ethereum、Bitcoin、Solana) モバイルウォレットライブラリだ。ここ数週間、元の Go のコードの隣で、 振る舞いを合わせることを目指した Rust 移植が育っていた。今週の コミットの大半は「(match Go)」で終わる。ウォレットのバックアップの 形、組み込みネットワークの初期投入、Solana の SPL トークン送金、 OKX のスワップの流れ(決済確認、ネイティブ SOL のラップ、OKX の API 経由のブロードキャスト)。そしてコミット 「Remove the Go implementation; Rust is now the sole backend」 が来た。

その後の作業から、新しいバックエンドの依存関係が見える。HTTP は ureq から rsurl へ移り、 rustls と ring が外れた。データベース層は graphitesql 0.1.6 に なった。続いてライブラリ全体が層ごとに WebAssembly へ移植 された。DB(シングルスレッド、インメモリ)、環境、モデルと TSS、 リクエストのディスパッチ。暗号はホストのエントロピーを使って purecrypto 0.6.28 が担う。週は「real backend runs in the browser」 で終わった。GitHub Pages 上のクライアントサイドのウォレット Web アプリが、モバイルアプリと同じリクエスト API を動かしている。

oxideav-av1:残りの道具箱

oxideav-av1 の エンコーダは今週最多の 74 コミットだった。符号化ツールを加え続け、 今回もそれぞれに自前で符号化した適合ストリームが付き、コーパスは 64 から 112 ストリーム に増えた:

  • 動き: OBMC と warped-causal の動きモード、フレーム単位の グローバルモーション 推定、1/8 画素の高精度動きベクトル。
  • ループ内フィルタ: フレーム単位と 64×64 単位の CDEF の 強度、ユニットごとの ループリストレーション(Wiener と self-guided)。
  • レート制御: すべての RD 判断を端数ビットまで正確に見積もる 「rate twin」、スーパーブロックごとの delta-q、時間方向の セグメンテーションマップ。
  • GOP 構造: 適応的なミニ GOP を伴う、深い再帰的な B ピラミッド。従来の二層構造と比べた測定結果は −4.11%(深い構造)、 +0.16 dB で −2.85%(適応的)。
  • 形式のカバー範囲: 仕様にあるすべての色差形式とビット深度の 組み合わせが符号化できるようになった(22 ストリームの行列)。 ほかに、非可逆フレーム内に可逆セグメントを混ぜる機能、時間方向 スケーラブルなオペレーティングポイント、大規模タイルリスト、 Annex B のビットストリーム形式も加わった。

週の間に v0.1.16 がリリースされた。

nixvm:本物の MMU、そして Claude Code が動く

nixvm は、フラットな 恒等写像のメモリモデルを 本物の MMU に置き換えた。4 KiB の フレームアロケータを持つ物理 RAM プール、プロセスごとの本物の x86-64 ページテーブル、デマンドページング、そしてホストがページ テーブルを書き換えるとき(fork、CoW、munmap、mprotect)の TLB シュートダウン。デマンドページングを入れたコミットには、先週の V8 に 加えて「runs the full JSC engine」、つまり WebKit の JavaScriptCore が 丸ごと動くとある。

続いて新しい作業負荷が来た。ゲストの仮想空間を RAM プールから 切り離したところで、コミットに 「claude runs」 とある。Claude Code に実際のリクエストを最後までこなさせるには、さらに修正が 要った。SMP 下での共有アドレス空間の実行の直列化、fcntl による O_NONBLOCK、エッジトリガの epoll、そして接続が生きている間は デッドロックと判定せずにホストの I/O をポーリングすること。カーネルの 単一の大きなロックも、ネットワーク、パイプ、poll 系オブジェクト それぞれのロックに分割された。時計の読み取りは vDSO を通るように なり、clock_gettime はシステムコールを発行しない。そして 擬似端末 が入った。/dev/ptmx、/dev/pts/N、^C/^Z が フォアグラウンドのプロセスグループへ届く。

graphitesql:リリースごとに C ライブラリ

graphitesql は v0.1.4 から v0.1.6 までを出した。これまで兄弟クレートだった C-API と wasm のバインディングは、オプトインの機能としてメインの クレートに統合された。リリースのワークフローは CLI と並べて libsqlite3 互換の C ライブラリを出荷する ようになった。挿入も 速くなった。UNIQUE と主キーの競合はスキャンではなくシークで検出され、 WITHOUT ROWID の二次インデックスはインクリメンタルに維持されるので、 WITHOUT ROWID への挿入はいまや O(n·log n) だ。プロセスをまたぐ処理は PRAGMA busy_timeout を守り、DML や DDL が b-tree に触れる前に書き 込みロックを取る。残りのコミットは、外部キー、トリガ、ウィンドウ 関数、JSON サブタイプについて SQLite との一致を詰める修正だ。

今週その他

  • kataan は intlrs 0.5.1 を取り込み、檀紀暦とウンム・アル=クラー暦、区間の書式化に 対応した。正規表現の後読みキャプチャ、反復ごとの let、計算された キーの中での yield/await も直した。
  • oxideav-huffyuv は性能改善を重ねた。package-merge による符号長の計算は 577.7 µs から 20.7 µs に下がり、二シンボルを一度に引くルックアップテーブルと 64 ビットのビットライタが入った。インターレースのフィールドは 二つのワーカーで並列に復号・符号化される(720p で復号 1.33〜1.47 倍、符号化 1.72〜1.99 倍)。
  • Rust の Spot メッセージングクライアントである spotlib-rs は wasm32 で動くようになり、ブラウザのデモができた。 purecrypto は モジュール化した TLS とともに wasm に対応し、X.509 アナライザ付きの デモサイトができた。
  • fullrust は、 標準ライブラリが libc を通さずに Linux カーネルを直接呼ぶよう パッチを当てた Rust ツールチェーンだ。getrandom と socket2 の生の システムコールのバックエンド、そして任意のプロジェクトを libc の ない静的バイナリにビルドする Docker イメージが加わった。
  • teamclaude には、 セッションを意識したルーティング、上流の HTTP/1.1 接続のプール、 モデルのブロックリストが加わった(1.1.8、1.1.9)。

来週

libwallet がブラウザで動くようになったので、次は実際の利用者が 使えるウェブウォレットだ。AV1 エンコーダは仕様を網羅する段階から チューニングへ移る。nixvm は、まともな MMU と端末を得て、実際の 作業負荷に取り組み続ける。