Skip to main content
Modules / Tools / SBOM licence checker

SBOM licence checker

Paste a software bill of materials and see each component's licence class, the obligations for your distribution model and any conflicts or unknown licences.

Safety and securityFree to useHow it worksSourcesWhere it helps

Fills the inputs below with typical figures. Replace any of them with your own.

Bill of materials

Paste CycloneDX JSON, SPDX 2.x JSON or a CSV with name, version and licence columns. The format is detected from the text.

A licence may be an SPDX identifier or an expression with AND, OR, WITH and +. For OR, the tool takes the most permissive option and says so.

Your product

The same components ask different things depending on how they reach people.

The licence you give to the people who receive your product.

A simplification: one setting for every component.

CycloneDX can list more than one licence for a component.

Flags for legal review
0 conflicts, 0 to review
3 notes. Flags are prompts for a lawyer, not rulings
Components
10
CSV
Copyleft components
0
Weak, strong or network copyleft
Unknown or missing licences
0
Without a version
0
Read from loose names
0
Confirm the exact licence

This is a screening aid, not legal advice. A flag is a prompt for a lawyer or your open source programme office, and no flag does not mean clearance. The rules are simplified.

Check these

  • A CSV carries no supplier, identifier, author, time stamp or dependency data, so the NTIA coverage below will be low by design. Export CycloneDX or SPDX for the full set.

Sign in to save your inputs and come back to them later.

Components by licence class

The class of each component after OR has taken the most permissive option and AND the strictest.

  • public domain0
  • permissive990%
  • weak copyleft0
  • strong copyleft0
  • network copyleft0
  • proprietary or commercial110%
  • unknown0
Show the data as a table
Components by licence class
ItemComponents
public domain0
permissive9
weak copyleft0
strong copyleft0
network copyleft0
proprietary or commercial1
unknown0
Flags by level
  • Conflict0
  • Review0
  • Note3
Show the data as a table
Flags by level
ItemFlags
Conflict0
Review0
Note3
What each class asks of you: shipped in a product as a binary
ClassComponentsWhat it asks of you
permissive9Reproduce the copyright and licence notices with the product, for example in a documentation page or an about screen, and pass on any NOTICE file.
proprietary or commercial1Read the licence or contract: the right to redistribute or host, per-unit or per-seat fees, audit rights and any limit on use. Get the permission in writing before you ship.
Flags against a Proprietary (closed source) product
LevelComponentVersionWhy
Notembed TLS3.5.0Apache-2.0: pass on the NOTICE file and mark any changes you make.
NoteCMSIS5.9.0Apache-2.0: pass on the NOTICE file and mark any changes you make.
NoteBootloader (in house)2.4.0Confirm you hold the right to redistribute it in this product, and any per-unit fees.
Components and licences
ComponentVersionLicence as writtenUnderstood asClassFlags
FreeRTOS-Kernel10.6.1MITMITpermissivenone
lwIP2.1.3BSD-3-ClauseBSD-3-Clausepermissivenone
mbed TLS3.5.0Apache-2.0 OR GPL-2.0-or-laterApache-2.0 (chosen from Apache-2.0 OR GPL-2.0-or-later)permissiveNote
CMSIS5.9.0Apache-2.0Apache-2.0permissiveNote
TinyUSB0.16.0MITMITpermissivenone
littlefs2.8.1BSD-3-ClauseBSD-3-Clausepermissivenone
zlib1.3ZlibZlibpermissivenone
Vendor HAL1.2.0BSD-3-ClauseBSD-3-Clausepermissivenone
newlib-nano4.3.0BSD-3-ClauseBSD-3-Clausepermissivenone
Bootloader (in house)2.4.0LicenseRef-ProprietaryLicenseRef-Proprietaryproprietary or commercialNote
Coverage of the NTIA minimum elements in this document
FieldComponents with itShare
Component name10 of 10100%
Version10 of 10100%
Supplier name0 of 100%
Other unique identifier (purl or CPE)0 of 100%
Licence stated10 of 10100%
The licence classes
ClassIn short
public domainNo conditions, or almost none.
permissiveKeep notices; very few other conditions.
weak copyleftChanges to the component itself must be shared; your own code stays yours if you keep the boundary.
strong copyleftAnything combined with it into one program must be shared under the same licence when you distribute.
network copyleftAs strong copyleft, and the duty also applies when users reach a modified version over a network.
proprietary or commercialTerms set by a supplier or a custom licence: check redistribution, fees and use limits.
unknownLicence missing or not recognised: it cannot be assessed.

How it works

A software bill of materials lists the parts of a product, and every part carries a licence. This tool reads a bill of materials, works out each component's licence class, says what that class asks of you for the way you distribute the product, and flags clashes with the licence you plan to give your own product. It is a screening aid for engineers and a starting list for a lawyer. It is not legal advice.

  1. Read the document. The tool detects CycloneDX JSON, SPDX 2.x JSON or a CSV with name, version and licence columns (a header row is optional). From each component it takes the name, version, licence, supplier and identifier. In an SPDX document it uses the concluded licence and falls back to the declared one. The package the document describes (the product itself) is left out.
  2. Resolve the licence or expression. A licence field may be an SPDX identifier, an SPDX expression or a loose name. Identifiers are matched without regard to case. Deprecated GNU identifiers and the + suffix are read as only or or-later. Loose names such as BSD or GPLv2 are read as the likeliest identifier and marked approximate. Missing, NOASSERTION and unrecognised values are unknown.
  3. Evaluate AND, OR and WITH. WITH attaches an exception to a licence, AND binds tighter than OR, and brackets group. AND means every licence applies, so the strictest class decides. OR lets the recipient choose, so the tool takes the most permissive class and says which option it chose. A known linking exception, such as the Classpath exception, lowers a strong copyleft licence to weak copyleft.class order: public domain < permissive < weak copyleft < strong copyleft < network copyleft < proprietary or commercial < unknown; A AND B = the higher class; A OR B = the lower class
  4. Obligations for your distribution model. Copyleft duties are triggered by distribution, so the same component asks different things when you ship a binary, ship source, run a network service or keep the product inside the organisation. The obligations table gives the duties for each class that appears in your bill of materials, in plain words.
  5. Flags against the outbound licence. Each component is checked against the licence you will give your own product, the distribution model and the way components are linked. A flag is a conflict (the combination looks impossible as stated), a review (the answer depends on facts or on a boundary a lawyer should confirm) or a note (an obligation to remember). The rules are simplified: linking applies to every component alike, the kernel and applications are not told apart, and file-level facts are not seen.
  6. Gaps in the document. Components without a version, without a licence or with an unrecognised licence are listed. The tool also counts how many components carry the elements NTIA names as a minimum: supplier, name, version, a unique identifier, and, for the whole document, the dependency relationships, the author of the data and a time stamp.

Assumptions

  • The licence strings in the document are right. A tool that wrote the document may have guessed, and a dual licence may be written as one entry.
  • Several licence entries on one component are read as all applying, unless you choose to read them as alternatives.
  • Classes are the Hub's own screening judgement, not part of the SPDX list. Public domain here means the component says so, not that it has been checked.
  • One linking setting applies to every component. Real products mix static, dynamic and separate use, and the kernel, the libraries and the applications deserve separate answers.
  • SPDX identifiers and names follow the SPDX License List version 3.29.0 of 16 September 2026; an identifier added later is shown as not recognised.

Limits and warnings

  • This is a screening aid, not legal advice. A flag is a prompt for a lawyer or your open source programme office, and the absence of a flag is not clearance. Laws and licence readings differ between countries.
  • Whether linking creates a combined work, whether a plug-in is a separate program, and what counts as distribution are legal questions that depend on facts the tool cannot see.
  • File-level licences, embedded snippets, licence changes between versions, patent terms, export controls and the contents of a package that differ from its stated licence are not checked.
  • Dual-licensed components use the OR rule, which picks the most permissive option. You must be able to comply with the option the tool chose.
  • A bill of materials is only as complete as its generator. Components missing from it are missing from the check, and transitive or vendored code is often absent.

Sources

The methods and default figures rest on these public sources. The wording here is our own; read the source for its full text.

Where it helps

The lifecycle stages this tool serves: 3 stages in 2 lifecycles.

Method notev1Formula, ranges, sources and limits

Reads a software bill of materials, resolves each licence or SPDX expression to a class, and counts the obligations, conflicts and gaps for a distribution model and an outbound licence. A screening aid, not legal advice.

Formula

class order: public domain < permissive < weak copyleft < strong copyleft < network copyleft < proprietary or commercial < unknown; A AND B = the higher class; A OR B = the lower class

Inputs
InputUnitRange it holds forComes from
Distribution modelchoicebinary, source, service, internalYour figure
Outbound licence of your productchoiceproprietary, permissive, mpl-2.0, gpl-2.0-only, gpl-2.0-or-later, gpl-3.0-only, gpl-3.0-or-later, agpl-3.0-or-laterYour figure
Linkingchoicestatic, dynamic, separateYour figure
Several licences on one componentchoiceand, orYour figure

Outputs: Components (count); Permissive components (count); Copyleft components, weak, strong or network (count); Components with an unknown licence (count); Conflict flags (count); Review flags (count).

Assumptions

  • The licence strings in the document are right. A tool that wrote the document may have guessed, and a dual licence may be written as one entry.
  • Several licence entries on one component are read as all applying, unless you choose to read them as alternatives.
  • Classes are the Hub's own screening judgement, not part of the SPDX list. Public domain here means the component says so, not that it has been checked.
  • One linking setting applies to every component. Real products mix static, dynamic and separate use, and the kernel, the libraries and the applications deserve separate answers.
  • SPDX identifiers and names follow the SPDX License List version 3.29.0 of 16 September 2026; an identifier added later is shown as not recognised.

Uncertainty: The counting is exact for the document. The classes and flags are screening judgements with simplified rules, so a flag can be a false alarm and a missing flag is not clearance.

Known limits

  • This is a screening aid, not legal advice. A flag is a prompt for a lawyer or your open source programme office, and the absence of a flag is not clearance. Laws and licence readings differ between countries.
  • Whether linking creates a combined work, whether a plug-in is a separate program, and what counts as distribution are legal questions that depend on facts the tool cannot see.
  • File-level licences, embedded snippets, licence changes between versions, patent terms, export controls and the contents of a package that differ from its stated licence are not checked.
  • Dual-licensed components use the OR rule, which picks the most permissive option. You must be able to comply with the option the tool chose.
  • A bill of materials is only as complete as its generator. Components missing from it are missing from the check, and transitive or vendored code is often absent.

Where the method comes from

Follows SPDX Specification version 2.3, Annex D: SPDX license expressions (opens in a new tab). The platform's version departs from it as follows.

  • An OR expression is resolved by taking the most permissive option, and AND by taking the strictest class. Why: A screening count needs one class per component, and the SPDX grammar leaves the choice to the user.
  • Each licence is placed in a class of the Hub's own, and flags are raised against an outbound licence. Why: SPDX identifies licences but does not classify their obligations or judge compatibility.

Reference example, checked by test: The default firmware bill of materials in this tool, counted by hand: 10 components. Nine are permissive (FreeRTOS-Kernel, lwIP, mbed TLS taken as Apache-2.0 from its OR expression, CMSIS, TinyUSB, littlefs, zlib, the vendor HAL and newlib-nano) and one is the in-house bootloader under a proprietary reference. Nothing is copyleft or unknown, and there is no conflict or review flag. Components 10; Permissive components 9; Copyleft components, weak, strong or network 0; Components with an unknown licence 0; Conflict flags 0; Review flags 0.

Versions

  • v1 (2026-10-25): First version, built from the tool idea.

All models in the register

Terms on this page

SBOM
A machine-readable inventory of every component, version and licence in a shipped software image, expressed in formats such as SPDX or CycloneDX.
BOM
The structured list of every component, with part number and quantity, needed to build one unit of a product.
BSD
A function that monitors the adjacent lanes rearward and warns the driver, usually with a mirror-mounted indicator, when another road user occupies the area not visible in the mirrors.
Kernel
In GPU programming, a function launched across a grid of many threads on the device.
Export control
Government rules that restrict the export, re-export or transfer of specified goods, software and technology, including chips, design tools, manufacturing equipment and technical data.

The full glossary

Need help acting on this?

Tell us what you're after and leave your email: we'll connect you with the right person on the Hub.