週次オープンソース: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-rsa と none メソッドを明示的 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.1 → v0.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.dll + quicktime.qts を事前ロード、そして
InitializeQTML と EnterMovies が両方 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
バックエンドをより大きな系へ向ける。