Repository navigation
Description
Overview
We should explore generating a Software Bill of Materials (SBOM) to describe ITK components and dependencies at build time. This could extend or replace the existing NOTICE file to describe third party dependencies / supply chain components and their respective licenses.
Background
An SBOM is a human- and machine-readable description of component dependencies that can be used for software supply chain tracking, allowing customers to identify licenses and vulnerabilities in software components. Industry support for SBOM standards has grown following the related 2021 “Executive Order on Improving the Nation’s Cybersecurity.”
Supply chain discovery, i.e. the ability to trace through third party dependencies and their components, is important for several scenarios:
- Research partners and commercial entities want to be able to trace through licenses involved with a given ITK distribution and understand potential impact on downstream licensing and distribution (i.e. copyleft, closed source)
- Not all components will be included with every build. For instance, standard ITK distributions are not built with FFTW since it is licensed under GPL (copyleft), but developers may create custom ITK builds with FFTW that would in turn be subject to copyleft licensing.
- In the event that a vulnerability is discovered in an upstream dependency, developers should be able to backtrace and understand what ITK distributions are affected.
Existing Efforts
ITK's NOTICE document serves as a legal notice of all of ITK's third party dependencies and their licensing. While this is a good start and likely sufficient from a legal perspective, there are several pain points for supply chain discovery:
- Not generated at build time: no document exists that exactly describes the configuration of a given build (i.e. if FFTW is turned on, etc)
- Not machine readable: no existing SBOM tools can parse the ITK NOTICE for supply chain review.
- No versioning information: developers must manually trace through ITK (specifically CMake) to understand what dependency versions are retrieved, and the information is not packaged with a build distribution.
Proposed Efforts
We should pursue efforts to align with an existing SBOM standard. VTK has recently adopted SPDX. For maintainability it would be reasonable for ITK to follow suit.
A migration plan could follow a structure similar to the following:
- First, replace
NOTICEwith ansbom.jsondocument reflective of third party dependencies and their licenses that could possibly be built with a fully configured ITK distribution. - Then, explore adding SPDX headers to ITK source files to describe licensing on build generation.
- Then, implement config/build integration with a CMake-configurable
sbom-build.json.insuch that building ITK generatessbom-build.jsondescriptive of ITK dependencies.sbom-build.jsonmust include a) each dependency component that is enabled at build time, b) the version of the component, and c) the license of the component.
This migration is unlikely to happen overnight, but is in the best interest of long term ITK adoption as SBOM documentation continues to gain traction in supply chain security.
Additional Information
It is unclear how building ITK with remote modules may impact SBOM validity. It would be good to explore that effort and possibly introduce CMake mechanisms to allow remote modules to extend SBOM components description before sbom-build.json is generated in the ITK build.
Activity
STYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
hjmjohnson commentedon Apr 15, 2026
SPDX/SBOM Progress Update (2026-04-15)
Three PRs address all three phases of the original roadmap:
Phase 1+3: Build-time SBOM — PR #5817 (draft, CI running)
itk_generate_sbom()itk-module.cmake(all 23 ThirdParty modules)UpdateFromUpstream.shitk_sbom_register_package()Phase 2: SPDX file headers — PR #6063 (draft, CI running)
// SPDX-FileCopyrightText: Copyright NumFOCUS+// SPDX-License-Identifier: Apache-2.0added to 5,503 ITK source files/*===block)Utilities/Maintenance/AddSPDXHeaders.pyPhase 2 extension: Remote modules — skill created, not yet applied
Remaining work
reuse-lintpre-commit hook for ongoing enforcementSTYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
STYLE: Add SPDX license identifiers to all ITK source files
ENH: Add SPDX 2.3 SBOM generator at configure time
hjmjohnson commentedon Apr 18, 2026
I reviewed this roadmap and the companion PRs — #6084 (bulk SPDX tagging) and #5817 (SBOM infrastructure) — and researched the case for including this infrastructure. My conclusion: this substantially lowers the friction for ITK's commercial audience (FDA/EU regulatory burden) while simultaneously strengthening the open-source tree for every user (automated CVE tracking, clearer licensing, REUSE compatibility). Net effect hoped for: more commercial adoption → more commercial support cycling back into ITK maintenance → more resources for the whole community.
Evidence, citations, and community-benefit analysis are in the collapsible sections below — read only what interests you.
🏥 Regulatory drivers make SBOM + SPDX a hard requirement
ITK's own FDA guidelines page positions the toolkit as off-the-shelf software for FDA medical-device submissions. Three converging regulations make SBOM + SPDX a legally required artifact for that audience:
SPDX_VERSION/SPDX_LICENSE/SPDX_DOWNLOAD_LOCATIONfields we emit are the verbatim SOUP fields required for every vendored dependency.The NTIA minimum elements document (PDF) restricts SBOM formats to SPDX, CycloneDX, or SWID. SPDX (ISO/IEC 5962:2021) is what VTK already chose — adopting it keeps the ITK/VTK stack aligned for shared downstream consumers.
💼 Commercial-user evidence from ITK Discourse
The 2019 ITK community survey (link) documented 32% commercial users and 74% medical-imaging focus. Real incidents showing these users already pay the friction tax this PR series eliminates:
rpoly.fburied 19 years deep in VNL. Per-file SPDX +reuse lintin CI would have caught this at import time.osv-scanner sbom ...and answers "is my ITK build affected?" in seconds.reuse lintprevents this class of drift going forward.The vocabulary the community already uses — "license infection," "not commercial-friendly," "V&V hassle" — maps one-to-one onto what this infrastructure automates.
🌱 Open-source adoption benefits (not just a regulatory tax)
The infrastructure benefits every ITK user, not only commercial ones:
sbom.spdx.jsoninto OSV-Scanner / Trivy / Grype / Anchore Syft and get a security report in seconds. Today this is manual per-module work.rpoly.f-class drift. A future ThirdParty update that accidentally imports GPL-tainted code is caught by REUSE lint or SBOM review, before it becomes a 19-year-old buried problem.None of this is "just for the commercial users."
🚀 Expected benefits to the ITK community
Concrete outcomes I expect from this infrastructure landing:
osv-scanner sbom ... | grep <cve>instead of Discourse threads asking "is ITK affected?" manually.REUSE.toml. The tree stops accumulating license-provenance ambiguity.None of these depend on every ITK user being commercial. They accrue to the community as a whole.
📚 Supporting documents and full-detail references
The two PRs (#6084 + #5817) are stacked and bound — neither functions without the other. Merge order: #6084 first onto main, then #5817 rebased onto the new main.
Local validation of the combined stack:
pip install spdx-toolsfor the reference-validator test)pre-commit run --all-filespasses every hook on 5,700+ filesreuse lintreports 0 non-ThirdParty compliance gapsspdx-tools validate_full_spdx_document()passes on the generated SBOMPhase mapping to the original 3-phase roadmap in this issue:
All three roadmap phases are addressed together.
Full supporting materials (validation reports, code review, regulatory citations with URLs):
.claude/worktrees/pr-6063-spdx-support/CLEANUP-PHASE-1-PLAN.md,validation-report.md,justification-expanded.md,code-review.md