Skip to content
CommonLayer
Documentation menu
On this page

Licensing

CommonLayer involves several layers of software, and each has its own license. Applying Apache-2.0 to a Dockerfile does not relicense what the image contains. This guide explains which license applies to the platform, the project template, a project's build configuration, its Helm chart, the components inside an image, and the upstream application, and how the repository records them.

This is an explanation of how the repository is set up, not legal advice.

The layers

LayerExampleLicenseWhere it is recorded
The platformcrates/, apps/, infrastructure/, docs/Apache-2.0root LICENSE and NOTICE; license = "Apache-2.0" in Cargo.toml
The project templatetemplates/project-template/Apache-2.0the template's own LICENSE and NOTICE
A project's build configurationDockerfile, entrypoint, scripts, tests, workflows of the project's repository (for example commonlayer-org/nginx)Apache-2.0the project's LICENSE; metadata.license in commonlayer.yaml
A project's Helm chartchart/ of the project's repositoryApache-2.0 (part of the build configuration)the project's LICENSE
The upstream applicationnginx, PostgreSQL, Valkeythe upstream's license (BSD-2-Clause for nginx, the PostgreSQL License, BSD-3-Clause for Valkey)upstream.license (SPDX) in commonlayer.yaml; the project's NOTICE and README; the license text in the image under /usr/share/licenses/
Bundled componentsmusl (MIT), BusyBox (GPL-2.0-only), OpenSSL (Apache-2.0), zlib, PCRE2, ICU, tzdata, CA certificateseach component's own licensethe SBOM; THIRD_PARTY_LICENSES.md generated per release; texts under /usr/share/licenses/

The decision to use Apache-2.0 for everything CommonLayer authors is ADR-0016.

What each project states

Every project README states the three layers separately: the license of the build configuration, the license of the upstream application, and the licenses of bundled components, pointing to the generated inventory. Each project's NOTICE carries upstream attribution. For example, templates/project-template/NOTICE names darkhttpd (ISC) and the base image's components (musl MIT, BusyBox GPL-2.0-only, ca-certificates MPL-2.0 AND MIT, tzdata public domain, cl-probe Apache-2.0).

Inside an image

  • /usr/share/licenses/ holds the upstream application's license file, BusyBox's own license, an SPDX expression per Alpine package and the SPDX reference texts. It does not hold the individual copyright notices of every Alpine package (WP-20 deviation).
  • The base image keeps the apk package database, so scanners and SBOM tools can identify every package and its declared license.
  • BusyBox is GPL-2.0-only. CommonLayer rebuilds it from Alpine's published source and patches (ADR-0020); the source comes from Alpine's aports at a pinned commit and from busybox.net. Distributors of images containing GPL components have source-availability obligations; how the operating entity meets them (for example by publishing the source archives used for each release) is not yet documented by a release process.

The license inventory and allowlist

scripts/generate-license-inventory.sh (in the template and every project; make licenses) derives THIRD_PARTY_LICENSES.md from the SPDX SBOMs and fails when a component has no license data or a license outside the project's allowlist:

  • security/license-allowlist.txt: one SPDX id per line; without it a default list applies (Apache-2.0, BSD-2-Clause, BSD-3-Clause, GPL-2.0-only, GPL-2.0-or-later, LGPL-2.1-only, LGPL-2.1-or-later, MIT, MPL-2.0, ISC, Zlib, OpenSSL, PostgreSQL, Unicode-3.0, Unicode-DFS-2016, curl, X11, 0BSD and public domain identifiers).
  • security/license-overrides.txt: <purl without version> <SPDX expression> lines for components built from source whose SBOM entry carries no license (for example pkg:generic/nginx BSD-2-Clause); overridden licenses are marked "(reviewed)".

The release workflow publishes the inventory with each GitHub release (THIRD_PARTY_LICENSES.md next to the SBOM archive).

Upstream licenses and candidates

Whether CommonLayer can build an application at all depends on its upstream license. The Bitnami migration catalog proposes this rule (awaiting governance confirmation): an OSI-approved upstream license is required for redistribution; SSPL, RSAL, Elastic License and BUSL lead to status blocked; an unmaintained upstream leads to not_suitable. See projects/bitnami-migration/README.md.

Contributions to this repository

Contributions to this repository are accepted under Apache-2.0 (see CONTRIBUTING.md). Do not copy Dockerfiles, chart templates, scripts, helper-library names, logos or wording from other image catalogs, including Bitnami; implementations derive from the upstream projects.