2026-10-11

週次オープンソース:60 か国の法律を git に、そしてプローブの下のハードウェアウォレット

今週は二本の流れがあり、ツールチェーンの着実な作業がそれに加わった。 日曜に新しい GitHub 組織 LawCodex が一度に 61 のリポジトリを 得た:法令をプレーンな Markdown で git に収めるもので、法域ごとに リポジトリが一つ。それに先立つ週の大半は、Ledger Nano X の ハードウェア調査に充てられた。基板はマップされて KiCad で再構成され (ledger_nano_x_pads)、そのバスをデコードするために新しい ロジックアナライザのドライバが書かれ(visgrok)、ゼロから書かれた HDL ツールチェーン reticle はデバイスの MCU の代わりを務める FPGA 設計を作った。並行して、puressh と Lode がそれぞれ大きな 作業の塊を仕上げた。

LawCodex:法令を Markdown で、国ごとに一リポジトリ

LawCodex は「すべての国の法律を Markdown で git に」集める。各リポジトリは ISO 3166-1 のコードで 名付けられる(fr、de、jp、…、それに eu)。中身は現行の憲法、 法典、法律で、一つの文書につき一ファイル。YAML フロントマターに 表題、公式識別子、日付、出典 URL を持ち、再実行できる取得・変換 コードが scripts/ に入る。どの README も、何を収録し、何が欠けて いてなぜか、元の文書にどんなライセンスが付いているかを明記する。 日曜に 61 のリポジトリが作られ、合わせて約 470 コミットと、 今週どのプロジェクトよりも多かった。

そのうち二つが、この作業の中身を示している:

  • be(40 コミット)は ベルギーで、ベルギー官報の Justel データベースから取っている。 憲法と法典から各地域・共同体の decree まで、現行の統合版を フランス語(fr/)とオランダ語(nl/)の両方で収める。 スクリプトと憲法を入れた最初のコミットの後、取り込みは三十分ごとの バッチで、毎回数百ファイルずつ入ってきた。
  • ua(12 コミット)は ウクライナで、最高会議(Verkhovna Rada)の法令データベースから 公式のオープンデータ API を通じて取得している:憲法、法典、 そして法律をバッチで。週の一部は変換に充てられた。改正法の中で 引用された文はもう見出しにならず、深い階層は Markdown の 六段階の見出しに収められる。取得スクリプトは LawCodex を名乗り、 リダイレクトには決して従わない。

文書は忠実に再現されているが、公式の刊行物ではない。README は 読者を引用元の出典へ案内している。

Ledger Nano X、パッドごとに

ledger_nano_x_pads (新規、57 コミット)は「Ledger Nano X のメイン基板の対話的な マップ:40 個のテストパッド、それらとチップの間の銅配線、そして 基板全体の KiCad 再構成」で、GitHub Pages で公開されている。始まりは 写真の表裏切り替えビューアと、編集できる配線オーバーレイだった。 ログはそこからネットを一本ずつ追っていく:USB、電源、Bluetooth RF、 OLED の SPI 線、水晶、SWD と I²C、USB-PD コントローラ STUSB4500L、 そして充電器。ネットを追い終えると、基板はグラウンドのベタ、 ステッチングビア、3D モデル、チップの刻印まで含めて KiCad で 組み直され、three.js のビューアで見られるようになった。README は、 これがメーカーの設計ではなく写真からの再構成であり、? の付いた 名前はおそらく正しいが未確認だと明言している。SWD パッドが レガシーであることも書かれている:STM32 はいまロックされて出荷 されるからだ。週の終わりには 3D ビューアに二つのインプラント標本 A と B のオーバーレイが加わり、その外形とはんだ接合部は Tibane Labs の接写に合わせてある。

visgrok(新規、47 コミット、v0.1.1)はこのために使われた計測器だ。Sipeed SLogic ロジックアナライザのための、ゼロから書かれた Rust ドライバで、 rawusb の上に作られ、 ディスクへのストリーミング、TUI、ブラウザ UI を持つ。独自の圧縮 .vgk 形式を持ち、sigrok の .sr、VCD、生ダンプとの間で相互に 変換できる。デコーダはこの基板に流れる信号のために書かれた: 自動ボーレートの UART、D/C 付き SPI と SSD1306 ディスプレイの デコーダ、SD カードバスのデコーダ、ISO 7816-3、そして最後に、 認証ハンドシェイクを含む ISO 7816 上の Ledger の SEPROXYHAL プロトコル。クエリコマンドは、スクリプトからキャプチャを分析する 「人とエージェントのため」のものだ。

reticle:MCU の席に座る FPGA

reticle は今週も 最も忙しいリポジトリで(222 コミット、v0.0.5 と v0.0.6)、その 多くが同じ方向を向いていた。Basys 3 ボード(Xilinx 7 シリーズ)で、 reticle はいま CARRY4 チェーン、内容付きの RAMB18E1 ブロック RAM、 PLLE2_BASE、DSP48E1 の乗算、トライステートのパッドを配置・配線・ 構成できる。それを使って IP ブロックの一式を作った:本物のカードと 話す ISO 7816-3 のキャラクタ層と端末、部品が描くものを受け取る SSD1306 互換のディスプレイ スレーブ、そして「Ledger の SEPROXYHAL リンクの MCU 側」である seph_mcu。これらを 2 Mbaud のコンソールの 背後に一つのビットストリームとしてまとめ、デバイスのボタンも そのコンソールから押せるようにすると、FPGA は「セキュアエレメントを PIN 画面まで走らせ」、その画面を読み戻す。

同じ週にはほかにも、ビットストリームを書き出して ZCU104 で実行する UltraScale+ のファブリックモデル(uray)、カーネル自身のドライバが bind する単一ポートの USB 2.0 ハブと USB トランザクションプロキシ、 Cynthion の USB シリアルポートの背後に置いた SHA-256 と ChaCha20 の コア、ECP5 のキャリーチェーンと DP16KD ブロック RAM、そして compcol のコーパスと突き合わせて検査される予定の inflate ブロックが 入った。

puressh:OpenSSH の置き換え

purecrypto の上の Pure-Rust SSH スイート puressh(65 コミット)は、 実際のシステムで OpenSSH と入れ替えられるよう、残る差を詰める一週間を 過ごした。いまはどんな OpenSSH の ssh_config も読める:Include、 Match、トークン、あらゆるオプションへの -o、sftp/scp での接続 共有。sshd は OpenSSH のロギング(syslog とその auth.log の行)、 utmp/wtmp/lastlog、すべての authorized_keys オプション、 AuthorizedKeysCommand と AuthorizedPrincipalsCommand、そして SSH_CLIENT/SSH_TTY の環境変数を得た。ssh-keygen はより多くの鍵 形式、KRL、SSHFP レコードを扱い、scp と sftp は ssh 上で動く 置き換え品になった。OpenSSH のクライアントプログラムを差し替える puressh-client Debian パッケージがあり、Ansible との相互運用が CI で 走り、ある perf: 変更はクライアントとサーバの両方から往復ごとの 遅延を取り除いた。

Lode:アロケーション、破棄、アリーナ

前の週に始まった言語 Lode (41 コミット)は、アロケーションを扱うマイルストーン M8 を完了した。 deinit を持つリソース型はスコープのあらゆる出口で破棄され、 ムーブ後の使用はどの経路でもエラーになる。アロケーションは シグネチャで宣言され(uses alloc throws(AllocError))、uses alloc のない関数はアロケートする関数を呼べない。Box、List、String は アロケータのコンテキストを通じて得られ、ルートのヒープアロケータ 自体も Lode で書かれている。アリーナとメモリ不足時のポリシー (@oom(abort))がこのマイルストーンを締めくくる。abort ポリシー の下では、アロケーションへの try は何にもコンパイルされない。 シグネチャや構造体フィールドに事実を載せる「refinement」によって、 標準ライブラリは境界の再チェックを省けるようになった。その下で latticefoundry はバルクメモリ操作、SROA、レジスタでの構造体返却、 サイズを考慮するインライナを加えた。

今週のその他

  • rustygo — Go→Rust コンパイラはワーカースレッド上の goroutine を得た(stop-the-world 付きの M:N スケジューラ)。競合を追い詰める間は、デフォルトの ワーカー数を一つにして出した。ほかに TLS 上の HTTP/2、 reflect.MakeFunc が入り、Go 自身のテストのうち 127 本が通り、 gRPC、protobuf、Prometheus、pgx がコンパイルできるようになった。
  • catcard — TSS ウォレット がデバイス上の「使用中のウォレット」になれるようになった。他の メンバーと一緒にトランザクションと BIP-322 メッセージに署名し、 セッションコードは SD カードか QR(BC-UR または BBQr)で運ばれる。
  • rsasm — x86 APX、 32 ビット Mach-O オブジェクト、macOS のコンパクトアンワインド、 PE/COFF 向けの CodeView 行情報、そして最新の AArch64 命令群 (MOPS、CMPBR)。
  • dnsbox — TKEY の鍵共有、 ドラフト段階のレコード型、そして CI での BIND 9 との相互運用 (署名、ゾーンツール、named、dig、nsupdate)。
  • mcptk(新規)— プロトコル 自体を tokio の上に実装した MCP サーバのツールキット。ハンドシェイク 型の各リビジョンと並んでリビジョン 2026-07-28 に対応し、stdio、 OAuth 付きの Streamable HTTP、WebSocket の上で動き、tasks 拡張と MCP Apps も実装している。
  • teamclaude — 1.1.24。OAuth トークンを複数のインストール間で揃えて保つ。

来週

LawCodex は最初の 60 の法域から残りへと広がり、ベルギーとウクライナは 完成に向かう。Ledger の作業は続く:片側に基板マップと visgrok の デコーダ、もう片側に reticle の FPGA による代役。Lode は M8 の先へ 進み、puressh は OpenSSH を一つずつ置き換えていく。