2026-05-31

週次オープンソース:Pure-Rust の暗号/ネットワークスタックが公開

今週の主役はスタックだ。四つの部品が公開され、きれいに噛み合った: purecrypto(暗号の土台)、compcol(圧縮の土台)、 puressh(purecrypto の上の SSH)、rsurl(14 プロトコルを 話す curl、両者の上に乗る)。OpenSSL なし、C なし——塔は丸ごと Rust だ。別口で btmalloc も着地した:一つの変わった発想を 中心に組んだリサーチアロケータ。

Pure-Rust スタック

構図はこうだ:purecrypto があらゆる暗号プリミティブを供給し、 compcol があらゆる圧縮コーデックを供給し、puressh は purecrypto の上に SSH を組み、rsurl は purecrypto + compcol の上に curl 形のクライアントを組み、sftp://scp:// のために puressh に手を伸ばす。各層は下の層にしか依存せず、どれも C を リンクしない。そして fstool——先週のディスクイメージ ツールキット——が最初の重量級の下流消費者になった:C 製の 圧縮クレート五つを引き抜いて compcol に置き換え、暗号化 DMG 経路を purecrypto へ移した。

purecrypto

purecrypto ——「Pure-Rust の no_std 暗号ツールキット」——が v0.5.0 に到達。 表面は広い:RSA、ECDSA、Ed25519、NIST のポスト量子三兄弟 (ML-KEM、ML-DSA、SLH-DSA)、X.509 + CA + CRL、TLS 1.2/1.3、 DTLS 1.2/1.3、QUIC、その上に CLI。今週だけでも追加したのは RFC 9180 HPKE、Encrypted Client Hello の端から端まで、RFC 8879 証明書圧縮(compcol 経由)、RFC 7250 raw public key、OCSP ステープリング、P-384 と P-256 ECDHE、native な secp256k1 pseudo-Mersenne 体バックエンド、ristretto255(RFC 9496)、 しきい値処理向けの hazmat 低レベル API。

週の残り半分は堅牢化だった:並列セキュリティ監査が DTLS/QUIC/TLS/RSA/X.509/FFI 全体の修正を駆動した——QUIC の ACK レンジ処理を CPU 枯渇に対して上限化、ServerHello で 提示していない暗号スイートを拒否、秘密鍵インポート時に p·q == n を検証、RFC 5280 nameConstraints をチェーン全体で 強制、鍵素材を drop 時にゼロ化。

compcol

compcol ——「Pure-Rust の圧縮アルゴリズム集」、ランタイム依存ゼロ、 クレート全体で unsafe_code = "forbid"——も v0.5.0 に到達。 あらゆるコーデックを一つのストリーミングトレイトの裏に置く: モダン勢(deflate / zlib / gzip / LZMA / xz / Zstandard / Brotli / LZ4 / Snappy / LZW / LZO)、そして他では Pure-Rust で ほぼ存在しないレガシー形式の長い尾——RAR 1/2/3/5、LZX、 Amiga LZX、Quantum、PPMd、LZFSE、ADC、bzip2、Microsoft Xpress / Xpress Huffman、LZNT1、Deflate64、ZIP の Shrink/Reduce/Implode、 LZS、LZSS、そして三つの StuffIt メソッド(LZAH、method-13、 Arsenic)——いずれも実アーカイブに対して検証済み。by-name ファクトリで設定文字列や compcol CLI フィルタから任意に 選べる。これが rsurl(HTTP Content-Encoding)と purecrypto (TLS 証明書圧縮)両方の下にあるコーデックの床だ。

puressh

puressh は今週の 新顔——「libssh の精神を継ぐ」Pure-Rust SSH ライブラリで、 あらゆるプリミティブは purecrypto から来る、unsafe なし、 FFI なし。初期スキャフォールドから動くスタックまで一気に進んだ: クライアント、サーバ(権限ドロップ・PAM・コネクションごとの fork 付き sshd)、SFTP v3、SCP、ssh-keygen、TOFU 付き known_hosts、そしてフォワーディング一式——agent(-A)、 X11(-X/-Y)、ローカル(-L)、リモート(-R)、 direct / tcpip-forward。C ABI と、SIGWINCH + exit-status 付き の対話 PTY シェルもある。

ただし今週のコミットの大半は、一本の持続的なセキュリティパスだ ——数十件:CVE-2023-48795 向けの strict-KEX、userauth フィールド 長の上限化、SHA-1 ssh-rsanone メソッドを明示的 opt-in の 裏に、2048 ビット未満の RSA ホスト鍵を拒否、SCP 受信での O_NOFOLLOW、SFTP の jail-aware シンボリックリンク拒否、 Debug でのパスワード秘匿、FFI 境界をまたぐパスフレーズの ゼロ化。README のステータスは正直だ:スキャフォールドを埋めて いる途中だが、セキュリティモデルは後付けではなく最初から 組み込まれている。

rsurl

rsurl ——「Pure-Rust の curl 実装」、TLS は purecrypto 経由、OpenSSL なし——も新顔で、プロトコルリストが見出しだ:HTTP/HTTPS、 HTTP/2、HTTP/3、WS/WSS、FTP/FTPS、IMAP、POP3、LDAP、MQTT、DICT、 GOPHER、RTSP、TFTP、FILE。ライブラリ・C FFI・CLI として出荷し、 curl パリティのフラグ(-d/--data-*-F multipart、 -T アップロード、-x プロキシ、Netscape 形式の cookie jar) 付き。

今週は難しいプロトコルを埋めた:HTTP/2 のフロー制御、ストリーム 多重化、HPACK Huffman + 動的テーブル、プロセス全体の コネクションプール;HTTP/3 の QPACK 動的テーブルデコードを dispatch に配線;WebSocket の双方向フレーム+ permessage-deflate; IMAP の STARTTLS + SASL;LDAP の substring / presence / extensibleMatch フィルタ;FTP のアップロード+レジューム; RTSP のセッションフロー;そして sftp://scp:// を puressh 経由で。flate2 を compcol に差し替え、Content-Encoding (gzip、deflate、br、zstd、compress/LZW まで)が自前スタックを 通ってデコードされるようにした。他と同様、専用のセキュリティ パスも入った——プロトコル横断の CRLF インジェクション、 解凍爆弾の上限、C ABI をまたぐ panic unwind バリア。

fstool

fstool——先週着地した Pure-Rust のディスクイメージ/ファイルシステムツールキット——は W22(v0.4.1v0.4.9)をスタックの実証の場になることに 費やした。圧縮の移行が通底するテーマだ:flate2、lzma-rs、 lz4_flex、minilzo-rs、bzip2-rs をすべて抜き、唯一のコーデック バックエンドとして compcol に置き換え(zip/DMG/HFS+ の zlib+deflate、LZMA、lz4+lzo、DMG の bzip2+LZFSE)、暗号化 DMG 経路を purecrypto へ移した。

その移行が読み取り専用アーカイブ形式の行進を解禁した——いずれも compcol 経由:Microsoft CAB(preset 辞書付きのマルチブロック MSZIP)、RAR5(store +圧縮、solid アーカイブ含む)、Amiga LZX、 7-Zip(Copy/LZMA/BZip2/Deflate)、StuffIt classic SIT!、 SEA ARC、LHA/LZH。ディスク側では classic HFS リーダ(DiskCopy 4.2 フロッピー、System ≤ 8)、DiskCopy 4.2 コンテナバックエンド、 Apple Partition Map、HFS リソースフォークの読み/目録/抽出、 --path-style {unix|native}、シェルの ls -R + readline 編集を 追加した。自前のセキュリティパスも入った:あらゆるリーダ (ext/xfs/ntfs/hfs+/apfs/f2fs/exfat/fat/iso9660/squashfs/tar/grf) と GPT/DMG/qcow2 ヘッダパーサで、悪意あるイメージに対して 信頼できない確保を上限化しジオメトリを検証する。

btmalloc:主キーとしてのコールサイト

btmalloc は リサーチ用の malloc/free/realloc 置き換え(C 製)で、 プロダクションのアロケータが手をつけない一つの発想を中心に 組まれている:コールサイトを主キーにする。あらゆる確保は hash(__builtin_return_address(0)) でパーティションにまとめられ、 配置・ライフタイムコホーティング・回収がすべてそこから導かれる。 週のうちに mmap-per-alloc のベースラインからフェーズ A〜G まで 進んだ:スレッドごとのリージョンキャッシュ、ライフタイム コホーティング、空スラブの decommit、io_uring 裏打ちの非同期 madvise、memfd 裏打ちの Mesh 風コンパクション、freelist の safe-linking、コールサイトヒーププロファイラ。

README は七つの他アロケータ(glibc、jemalloc、mimalloc、 tcmalloc、snmalloc、ffmalloc、hardened_malloc)との直接対決を 報告している:クロススレッド free は最速で snmalloc と統計的に 同着、そして断片化チャーン下で八つ中もっともタイトなメモリ フットプリント(live バイトの 2.4 倍、メインストリームの性能 アロケータが 16〜18 倍に居座って返さないのに対して)。

だが、コールサイトを主キーにするという前提そのものが、同時に 落とし穴でもある。その二つの勝ち(どのスレッドが free しても スロットがホームパーティションに戻る、起点でのコホーティングが フットプリントをタイトに保つ)を買う一方で、リターンアドレスを ハッシュして所有パーティションを解決する処理が 毎回 かかり、 これはメインストリームのアロケータが背負っていないオーバーヘッド で、共通経路を引きずる。今週の性能作業の多くはこの owner-resolve コストを追うものだった(差し替え可能な解決エンジン、プロファイル 誘導のホットパス削り)が、完全には消えない。それが結論だ: 発想は良いが、中心の機構が高くつきすぎて汎用のドロップインには ならない。btmalloc はリサーチプロジェクトのままだ——価値は実験 が示すものであって、生まれるアロケータではない。

univdreams:本物の QuickTime ランタイム

univdreams は 今週、Win32 エミュレータ上で本物の QuickTime エンジンを起動させる ことに費やした。連鎖はこうだ:MSI の cab ストリームを展開して 実ファイルのバイトを VFS に乗せ、InstallExecuteSequence を 歩いて CustomAction を実行(DLL キュー+ dispatch)、 qtmlclient.dllquicktime.qts を事前ロード、そして InitializeQTMLEnterMovies が両方 noErr を返す——QuickTime ランタイムが、立ち上がった。そこから VfW の encode/decode ハーネス が QT 内蔵のコーデックコンポーネントを叩く。支えの作業:古い インストーラ向けの大きな Win9x 期 user32/gdi32 サーフェス、 仮想レジストリ越しの RegOpenKeyEx/RegQueryValueEx、合成した 環境ブロック、PE インポートの VFS ルックアップで駆動する動的 LoadLibraryA

goro:さらにネイティブ降ろし

VM は PHP を呑み続けた。今週の降ろしは複合代入と inc/dec を AST 委譲から外した:ローカル配列への $arr[k] OP=$arr[k]++$obj->prop OP=/++、動的名のプロパティと静的 プロパティの複合/inc-dec($obj->$x OP=Cls::${$x}++)、 可変変数代入($$name = v)、オブジェクトプロパティへの unset/isset/empty、そして nullsafe の $obj->prop ?? default。 加えて bug44660 の inc/dec エラー動詞修正と、配列複合の リグレッションに対する OP_ARRAY_PRE_CHECK_LOCAL 修正。

origami:MD エンジンが GPU へ

origami——分子動力学 エンジン——が GPU バックエンドを生やした。Langevin インテグレータ全体が WGPU 経由で GPU 上を走るようになった: LJ + Coulomb + GB Born 半径項を融合カーネルで、最後の O(N²) 内ループを潰す Verlet-list ノンボンドカーネル、bond/angle/ dihedral/improper を一つのカーネルに融合、xoshiro128++ RNG 付きの BAOAB 積分、dt = 2 fs を解禁する SHAKE 制約。今週は GPU 経路が Shrake-Rupley SASA を獲得し——まず dot-density の 面積とエネルギー、続いて smooth-coverage の力——インテグレータ に配線され、端から端までの RNA 動力学が GPU 上で動くに至った (CHARMM27 の 5 項二面角修正付き)。RNA 側では:A 型ヘリックス ビルダ(anti-glycosidic 修正、4D バックボーン捩れグリッド探索で 求めた正準ツイスト)、X 線 RNA 構造の水素化、UUCG と GNRA テトラループに対する native-PDB 検証。

相変わらず個人的な興味のトラックだ。タンパク質も核酸も、いずれ 読めるようになりたい機械の出力側だ。

OxideAV:Blu-ray remux +コンテナの深掘り

フレームワークは週次のマルチエージェントスイープを走らせた (ラウンド 177 → 193、各回がコーデック/コンテナ/3D クレート への fan-out)。実質的な着地は:MultiTitleSource 経由の bluray:// remux fan-out(タイトルごとの %s.<ext> 出力)、 そして小さな統合——oxideav-aiff が作られ、そのまま oxideav-iff::aiff に畳み込まれた(同じ週に ILBM の 24 ビット true-colour と ANIM の vertical-delta デコードも生やしている)。

今週その他

  • chiefstaker — 先週の監査パスのフォローアップ:CI の締め直しと required-metadata テストの更新。
  • azusa-opensource-recipes — AzusaOS のパッケージ群でビルドレシピの手入れ。

来週

スタックは落ち着いていく:purecrypto と compcol は安定 API へ、 puressh はスキャフォールドの先で状態機械を埋めていき、rsurl は HTTP/3 の残りの穴を塞ぐ。fstool は v0.5 の安定サーフェスへ。univdreams は立ち上がったランタイムを通して 本物の QuickTime コーデックを駆動する。origami は GPU バックエンドをより大きな系へ向ける。