0011 - Apache 2.0 license policy and third-party license allowlist
- Status: Accepted
- Date: 2026-04-19
- Deciders: nexus core team
- Tags: legal, supply-chain, licensing
Context and Problem Statement
Section titled “Context and Problem Statement”nexus is designed to ship into regulated environments, including air-gap installs on customer infrastructure. Customers in those environments require a clear license story for both:
- the nexus source itself (what can they modify, fork, redistribute), and
- every third-party dependency we pull in (transitive included), because their legal review will scan the final artifact.
Two things kill this story:
- a copyleft or source-available license on nexus itself (forks inherit onerous obligations), and
- an unreviewed transitive dependency introducing AGPL, SSPL, BUSL, or Commons Clause (poison-pill for redistribution).
We also need deterministic license gates — reviewers cannot be expected to catch license regressions by eye.
Decision Drivers
Section titled “Decision Drivers”- Customer-friendly distribution rights on the nexus codebase.
- Compatibility with the
vortex-*shared crates consumed by both Aegis and nexus (shared-crates contract). - Air-gap install bundles include every dependency text; unknown licenses must fail the bundler.
- Explicit, enumerable list of permitted / forbidden licenses — no “use your judgement” in release evidence or local checks.
Considered Options
Section titled “Considered Options”- Apache 2.0 + allowlist (chosen).
- MIT — permissive enough but lacks an explicit patent grant; Apache 2.0 is strictly stronger for enterprise customers.
- BSL / Commons Clause — rejected; contradicts air-gap and redistribution requirements.
- AGPL — rejected; would force customers to open-source their own applications built on nexus.
- Elastic License / SSPL — rejected for the same reason as BSL.
- Dual-license (e.g. Apache for OSS tier, commercial for enterprise features) — rejected for the initial open-source foundation; may revisit via its own ADR.
Decision Outcome
Section titled “Decision Outcome”Chosen option: Apache 2.0 for nexus, with a strict allowlist for third-party dependencies enforced by local checks and release evidence. CI/CD wiring is tracked separately.
Nexus source license
Section titled “Nexus source license”LICENSEcontains the full Apache 2.0 text.- Every first-party source file may carry the standard short Apache-2.0 header. It is not required (the
LICENSEfile at the repo root governs the whole tree).
Third-party allowlist (Apache-2.0-compatible)
Section titled “Third-party allowlist (Apache-2.0-compatible)”- Apache-2.0
- BSD-2-Clause
- BSD-3-Clause
- MIT
- ISC
- Unlicense, CC0-1.0
- Zlib
- Unicode-3.0
- 0BSD
- CC-BY-4.0 for browser capability data and similarly low-risk redistributable data
- CDLA-Permissive-2.0 for permissively licensed data bundles, especially root certificate data; arbitrary dataset use requires a follow-up ADR
- OFL-1.1 for redistributable font software bundled with UI artifacts; the font license text must ship with the font, and modified fonts must not use reserved font names unless the license permits it
Forbidden
Section titled “Forbidden”- AGPL-* (linked-only use requires a separate ADR)
- SSPL-*
- BUSL-*
- Commons Clause (any base license combined with this rider)
- Proprietary / source-available with redistribution or field-of-use restrictions
- GPL-2.0 / GPL-3.0 where copyleft would reach the nexus binary
Enforcement
Section titled “Enforcement”cargo deny checkuses adeny.tomlwhose[licenses].allowmatches the list above exactly and whose dependency-specific exceptions are documented in the license policy documentation.- Node packages (if any ship in release artifacts) are checked against the allowlist above.
- Dev-only dependencies are allowed broader licenses provided they never appear in a release artifact; see the license policy documentation for the rule.
- Adding a license to the allowlist requires a new ADR and security-team sign-off.
Consequences
Section titled “Consequences”- Customers can self-host, fork, embed, and redistribute nexus under Apache 2.0 terms.
- A dependency that switches to BUSL (industry-wide pattern in 2023–2026) triggers a CI failure on the next vendored-dep update, forcing an explicit ADR or a fork-to-a-permissive-version.
- The allowlist and dependency-specific exceptions are machine-readable; the same policy lives in
deny.tomland the license policy documentation. Changing it in one place without the other is an enforcement failure. - Contributors must be willing to grant the Apache 2.0 patent peace clause. This is consistent with the CLA-free model we intend to use; see the Contributing documentation for the current contribution terms.
