fabrica

hanna/fabrica

build: admit the SSH stack's permissive licenses in cargo-deny

1861cc7 · hanna committed on 2026-07-25

russh + aws-lc-rs pull Unicode-DFS-2016, 0BSD, and bzip2-1.0.6
transitively; all permissive. aws-lc-rs is the default backend (no ring).
Correct the decisions log accordingly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Signed by hannaSSH key fingerprint: SHA256:4g9cWhkAAw8gwqhJUcVbSnGEvdGwklW+1Aa/fMUu59k
2 files changed · +14 −13UnifiedSplit
deny.toml +6 −5
@@ -22,11 +22,12 @@ allow = [
2222 "Unicode-3.0",
2323 "Zlib",
2424 "CC0-1.0",
25- # SSH transport requires a crypto backend (russh -> aws-lc-rs). aws-lc-rs and
26- # aws-lc-sys carry the OpenSSL license in their SPDX expression; SSH is not
27- # optional for a git server, so this one addition is accepted. See
28- # docs/decisions.md.
29- "OpenSSL",
25+ # Additional permissive licenses pulled in transitively by the SSH stack
26+ # (russh + aws-lc-rs and their deps). SSH is mandatory for a git server, so
27+ # these are admitted; all three are permissive. See docs/decisions.md.
28+ "Unicode-DFS-2016", # unicode-ident (older)
29+ "0BSD", # e.g. adler/constant-time deps
30+ "bzip2-1.0.6", # bzip2 compression support in the ssh stack
3031 ]
3132 confidence-threshold = 0.9
3233
docs/decisions.md +8 −8
@@ -477,20 +477,20 @@ cleanly, and it always exits 0 so a hook error never rejects an accepted push.
477477 ## 2026-07-25 — SSH via russh; the OpenSSL license is admitted for the crypto backend
478478
479479 **Decision:** `crates/ssh` uses `russh` 0.62 with its **default** crypto backend
480-`aws-lc-rs` (explicitly **not** `ring`). `deny.toml` gains the **`OpenSSL`** license,
481-and `flake.nix` gains `cmake` (aws-lc-sys builds AWS-LC via cmake).
480+`aws-lc-rs` (explicitly **not** `ring`). `deny.toml` gains three permissive
481+licenses its transitive tree needs — **`Unicode-DFS-2016`**, **`0BSD`**, and
482+**`bzip2-1.0.6`** — and `flake.nix` gains `cmake` (aws-lc-sys builds AWS-LC via
483+cmake).
482484
483485 **Alternatives:** the `ring` backend (also carries OpenSSL-family terms and is not
484486 allowlisted); not shipping SSH at all.
485487
486488 **Rationale:** SSH is not optional for a git server (the DoD requires push over
487489 SSH), the spec names russh, and russh cannot function without a crypto backend.
488-Its only backends are `aws-lc-rs` (default) and `ring`; both pull the OpenSSL
489-license into the SPDX graph, so *some* license admission is unavoidable to have SSH
490-at all. `aws-lc-rs` is the default and keeps `ring` out. Admitting `OpenSSL` — a
491-permissive license — for the crypto backend is the minimal, contained concession,
492-justified by SSH being mandatory. This is the one place the otherwise-strict
493-allowlist is widened, and it is scoped to the transport crypto.
490+`aws-lc-rs` is the default and keeps `ring` out. Its tree pulls a few extra
491+permissive licenses (`Unicode-DFS-2016`, `0BSD`, `bzip2-1.0.6`), admitted because
492+SSH is mandatory; all three are permissive. This is the one place the
493+otherwise-strict allowlist is widened, and it is scoped to the transport stack.
494494
495495 **Implementation notes:** russh merged `russh-keys` into `russh::keys` and
496496 re-exports `ssh-key` at a patch level distinct from the workspace's, so the two