35 Creating a Software Bill of Materials

Once you are able to build an image for your project, once the licenses for each software component are all identified (see “Working With Licenses”) and once vulnerability fixes are applied (see “Checking for Vulnerabilities”), the OpenEmbedded build system can generate a description of all the components you used, their licenses, their dependencies, their sources, the changes that were applied to them and the known vulnerabilities that were fixed.

This description is generated in the form of a Software Bill of Materials (SBOM), using the SPDX standard.

When you release software, this is the most standard way to provide information about the Software Supply Chain of your software image and SDK. The SBOM tooling is often used to ensure open source license compliance by providing the license texts used in the product which legal departments and end users can read in standardized format.

SBOM information is also critical to performing vulnerability exposure assessments, as all the components used in the Software Supply Chain are listed.

The OpenEmbedded build system generates such information by default (by inheriting the create-spdx class in INHERIT_DISTRO).

If needed, it can be disabled from a configuration file:

INHERIT_DISTRO:remove = "create-spdx"

SPDX version 3 support is available on Yocto Scarthgap, but disabled by default. To enable it, add the following statements from a configuration file:

INHERIT_DISTRO:remove = "create-spdx"
INHERIT_DISTRO:append = " create-spdx-3.0"

The following documentation will make the assumption that SPDX3 is used.

Upon building an image, you will then get the compressed archive IMAGE-MACHINE.spdx.json file in tmp/deploy/images/MACHINE/ inside the Build Directory.

The create-spdx class offers options to include more information in the output SPDX data:

Though the toplevel SPDX output is available in tmp/deploy/images/MACHINE/ inside the Build Directory, ancillary generated files are available in tmp/deploy/spdx too.

See also the SPDX_CUSTOM_ANNOTATION_VARS variable which allows to associate custom notes to a recipe. See the tools page on the SPDX project website for a list of tools to consume and transform the SPDX data generated by the OpenEmbedded build system.

See also Joshua Watt’s presentations Automated SBoM generation with OpenEmbedded and the Yocto Project at FOSDEM 2023 and SPDX in the Yocto Project at FOSDEM 2024.