License Policy
Third-party dependency license requirements for Nexus
Esta página aún no está disponible en tu idioma.
This document is binding on every third-party dependency pulled into the nexus codebase, including transitive dependencies. It is enforced by local license checks for Rust, TypeScript workspaces, and redistributable artifacts; CI/CD wiring is tracked separately.
nexus project license
Section titled “nexus project license”nexus itself is licensed under Apache License, Version 2.0. See ../../LICENSE.
The choice is backed by ../decisions/0011-license-policy.md.
Third-party dependency allowlist
Section titled “Third-party dependency allowlist”The following licenses are permitted for dependencies compiled into or distributed with any nexus artifact (binary, container image, Helm chart, air-gap bundle):
- Apache-2.0
- BSD-2-Clause
- BSD-3-Clause
- MIT
- ISC
- Unlicense / CC0-1.0 (public-domain equivalents)
- Zlib
- Unicode-3.0
- 0BSD
- CC-BY-4.0 (browser capability data and similarly low-risk redistributable data)
- CDLA-Permissive-2.0, limited to permissively licensed data bundles such as root certificate data. New dataset uses outside that scope require ADR-backed review.
SPDX identifiers are the source of truth. A dependency that declares multiple licenses via OR is acceptable if at least one is on this list; a dependency that declares AND must have every listed license on this list.
Dependency-specific exceptions
Section titled “Dependency-specific exceptions”aws-lc-fips-sysversion0.13.15may use theOpenSSLlicense as part of its conjunctive license expression. This exception applies only to that exact crate version for the FIPS build described by../decisions/0021-fips-build-support.md; it does not addOpenSSLto the general allowlist.khromaversion2.1.0is treated asMIT. Its publishedpackage.jsondeclares nolicensefield, sopnpm licenses listreports it asUnknown, which the enforcement script otherwise fails on. The license was validated by hand against the package’s upstream repository and thelicensefile in its published tarball, both of which carry the MIT text. This exception applies only to that exact package version, is enforced by thelicenseOverridesmap in../../scripts/check-node-licenses.mjs, and does not relax the rule that an unknown license text fails the check.khromareaches the console as a transitive dependency ofmermaidby way ofstreamdown; removing that path removes the need for this exception.victory-vendorversion37.3.6declares the compound licenseMIT AND ISC. BothMITandISCare independently on the allowlist above, so per this document’s own AND rule (“must have every listed license on this list”), the combination is already compliant; it is recorded here only because the exact-matchallowedExpressionslist in the enforcement script had not previously seen this specific string. This is enforced by an entry inallowedExpressionsin../../scripts/check-node-licenses.mjs, not thelicenseOverridesmap (no override of the reported license is happening; the reported string is accepted as-is).victory-vendorreaches the console as a transitive dependency ofrecharts. The enforcement script currently checks compound license expressions by exact string match rather than by decomposingAND/ORinto individual licenses and checking each against the allowlist; that generic-parsing improvement is tracked as follow-up work, not part of this exception.
Forbidden licenses
Section titled “Forbidden licenses”The following licenses are not permitted in any runtime or distributable artifact:
- AGPL-3.0 (and all AGPL variants). Linked-only use may be considered case-by-case with security-team approval and an ADR.
- SSPL-1.0 (Server Side Public License).
- BUSL-1.1 (Business Source License). Even after the Change Date, BUSL dependencies require an ADR.
- Commons Clause (any base license with this additional restriction).
- Proprietary / “source-available” licenses that forbid redistribution, forbid modification, or add field-of-use restrictions.
- GPL-2.0 and GPL-3.0 in a form that would subject nexus to copyleft obligations (dynamic linking from an Apache-2.0 binary is considered a compatibility problem we avoid by default).
A dependency that is GPL-compatible but introduces additional restrictions (patent retaliation beyond Apache-2.0, advertising clauses, etc.) requires an ADR before adoption.
Dev-time-only exceptions
Section titled “Dev-time-only exceptions”Tooling that is never shipped (e.g. a build-time code generator, a CI-only linter) may use any OSI-approved license, provided:
- The dependency is marked dev-only in the relevant manifest (
[dev-dependencies]in Cargo,devDependenciesin package.json). - CI verifies that the dependency does not appear in any release artifact.
- The dependency does not perform any network call that touches nexus source at build time.
Additions to the allowlist
Section titled “Additions to the allowlist”Adding a license to the allowlist requires:
- A short ADR under
../decisions/explaining the need, the risk, and the mitigations. - Sign-off from the security reviewer listed in
../../CONTRIBUTING.md. - An enforcement update to teach the local license checks about the new entry.
Local enforcement
Section titled “Local enforcement”Local checks:
cargo deny check licenses— thedeny.tomlallowlist is the Rust subset of this document’s list (0BSD and CC-BY-4.0 occur only in the Node graph and are enforced byscripts/check-node-licenses.mjs).- Node license checks (
scripts/check-node-licenses.mjs) run against each package that ships to production. - Redistributable artifact checks must fail on unknown license texts and on dev-only images entering a bundle.
A change that introduces a dependency whose license is not on the allowlist must do one of:
- drop the dependency,
- switch to a permitted alternative,
- open an ADR asking for an allowlist addition (as described above).
