週次オープンソース: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 と端末を得て、実際の 作業負荷に取り組み続ける。