Signed by hanna SSH key fingerprint: SHA256:4g9cWhkAAw8gwqhJUcVbSnGEvdGwklW+1Aa/fMUu59k
deny.toml +6 −5 docs/decisions.md +8 −8 deny.toml +6 −5 Expand 21 hidden lines 22 22 "Unicode-3.0" , 23 23 "Zlib" , 24 24 "CC0-1.0" , 25 - 26 - 27 - 28 - 29 - "OpenSSL" , 25 + 26 + 27 + 28 + "Unicode-DFS-2016" , 29 + "0BSD" , 30 + "bzip2-1.0.6" , 30 31 ] 31 32 confidence-threshold = 0.9 32 33
docs/decisions.md +8 −8 Expand 476 hidden lines 477 477 ## 2026-07-25 — SSH via russh; the OpenSSL license is admitted for the crypto backend 478 478 479 479 **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). 482 484 483 485 **Alternatives:** the `ring` backend (also carries OpenSSL-family terms and is not 484 486 allowlisted); not shipping SSH at all. 485 487 486 488 **Rationale:** SSH is not optional for a git server (the DoD requires push over 487 489 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. 494 494 495 495 **Implementation notes:** russh merged `russh-keys` into `russh::keys` and 496 496 re-exports `ssh-key` at a patch level distinct from the workspace's, so the two