SPDX 3.0, explained: what changed for SBOMs

Last updated:

Key takeaways

  • SPDX 2.x described a software package as a single, mostly flat document: one file listing packages, files and their relationships in a fixed schema.
  • The Security profile is where SPDX 3.0 picks up ground CycloneDX had already staked out with VEX support.
  • Tooling support is uneven and worth checking per-tool rather than assuming.

SPDX 3.0, released 15 April 2024 by the Linux Foundation's SPDX Working Group, restructures the long-standing SBOM format around a graph-shaped data model and nine separate "Profiles" — Core, Software, Security, Licensing, Dataset, AI, Build, Lite and Extension — instead of the single flat tag-value or JSON document that SPDX 2.x used, and it adds purpose-built Security and AI profiles with VEX relationships and model/dataset metadata that 2.x never had.

What changed structurally from SPDX 2.x?

SPDX 2.x described a software package as a single, mostly flat document: one file listing packages, files and their relationships in a fixed schema. SPDX 3.0 rebuilds that as an RDF-based graph of Elements — independently identified nodes, each carrying its own IRI (spdxId) — connected by first-class Relationship objects that the spec defines as "a grouping of characteristics unique to an assertion that one Element is related to one or more other Elements in some way." Because the underlying model is RDF, SPDX 3.0 data can be serialized as JSON-LD (the format's canonical, most commonly used form), Turtle, N-Triples or RDF/XML — the spreadsheet and tag-value serializations that existed in 2.x are not carried forward into 3.0, and tooling that only speaks 2.x tag-value will need an upgrade path, not just a version bump.

What are the nine Profiles, and which one is mandatory?

SPDX 3.0's conformance page defines nine compliance points called Profiles: Core, Software, Security, Licensing, Dataset, AI, Build, Lite and Extension — with Core mandatory as the foundation every other profile builds on ("conformance to the Core Profile compliance point is mandatory for all other SPDX profiles"). In practice this means a given SPDX 3.0 document declares which profiles it conforms to, and a consumer can check for exactly the information it needs — software composition via the Software profile, licensing via Licensing, vulnerability data via Security — rather than parsing one undifferentiated schema for everything.

What's in the new Security profile?

The Security profile is where SPDX 3.0 picks up ground CycloneDX had already staked out with VEX support. Per the spec, it "captures security related information," and the project's own security page describes its purpose as "exchanging information about system vulnerabilities that may exist, the severity of those vulnerabilities, and a mechanism to express how a vulnerability may affect a specific element including if a fix is available." Concretely, it defines a Vulnerability class plus four concrete relationship types mapped one-to-one onto standard VEX statuses — affected, not_affected, fixed and under_investigation — alongside relationship types carrying CVSS v2/v3/v4 scores, EPSS scores, and CISA's Stakeholder-Specific Vulnerability Categorization (SSVC). That gives SPDX 3.0 roughly the same VEX expressiveness our guide to CSAF VEX for device makers covers for the CSAF/OpenVEX side of the ecosystem, now inside the SBOM document's own data model rather than a separate attached statement.

What does the new AI profile cover, and does it matter for embedded devices?

SPDX 3.0 also ships a dedicated AI profile, defined around an AIPackage class with properties including autonomyType, domain, hyperparameter, limitation, metric, modelExplainability, safetyRiskAssessment, standardCompliance and typeOfModel, plus EnergyConsumption fields for training, fine-tuning and inference energy use. A companion Dataset profile defines a DatasetPackage class for the training/validation data itself. For a device maker embedding a model in firmware, this is a genuinely new capability — SPDX 2.x had no standard place to declare "this component is a model, trained this way, with these limitations" — and it overlaps directly with the gap our guide to AI-BOM for embedded AI devices describes; whether a given toolchain actually populates these AI-profile fields today, versus treating an embedded model as an opaque binary blob, is still the practical question to check before relying on it.

Is SPDX 3.0 an ISO standard, and does it replace CycloneDX?

Not yet, on the ISO question: ISO/IEC 5962:2021 standardizes SPDX version 2.2.1, not 3.0, and a successor ISO draft covering 3.0 was still in ballot as of this guide's research date — worth re-checking the ISO catalogue directly before calling SPDX 3.0 "ISO-standardized" in a compliance document. On CycloneDX: the two formats coexist rather than one replacing the other. OpenSSF stated in October 2025 that "OpenSSF's strategic support for both standards – SPDX and CycloneDX – is vital for the entire ecosystem," citing translation tooling (Protobom, BomCTL) built specifically so organizations aren't "forced to choose between SPDX and CycloneDX." Our guide to CycloneDX vs. SPDX SBOM formats covers the practical tradeoffs between the two in more depth; SPDX 3.0's main effect on that comparison is narrowing the gap on vulnerability/VEX expressiveness, an area where CycloneDX previously had the more mature feature set.

What does this mean for adoption today?

Tooling support is uneven and worth checking per-tool rather than assuming. Microsoft's open-source sbom-tool can generate SPDX 3.0-conformant output, with Microsoft's Adrian Diglio quoted in the Linux Foundation's announcement saying the company has "been a long partner and contributor to the next gen SPDX schema" — but Anchore's widely used Syft scanner did not yet support SPDX 3.0 output as of this guide's research date, with 3.0 support tracked as an open feature request. A device maker asked for "an SBOM" today should confirm whether a counterparty specifically wants SPDX 3.0's profile-based JSON-LD, SPDX 2.x's tag-value or JSON, or CycloneDX — the formats are not interchangeable without a translation step, even within SPDX's own version history.

SoftWSP generates firmware SBOMs directly from binary images — without needing build-time source access — and can target the SBOM format (SPDX 2.x, SPDX 3.0 where a toolchain and counterparty both support it, or CycloneDX) a given customer or regulator actually asks for. See device & firmware security services for how that SBOM generation fits into a broader firmware assessment.

This guide is based on the official SPDX 3.0.1 specification pages (spdx.github.io/spdx-spec/v3.0.1/), the Linux Foundation's April 2024 announcement, the ISO catalogue listing for ISO/IEC 5962:2021, and OpenSSF's October 2025 blog post on SPDX/CycloneDX coexistence, all fetched directly for this guide. Tooling-support claims (Microsoft sbom-tool, Syft) reflect the state of each project's public repository as of the research date and may have changed since; check each tool's own documentation before relying on a specific format being supported.

Sources

  1. SPDX 3.0.1 Specification (official, Linux Foundation / SPDX project)
  2. SPDX 3.0.1 Conformance: the nine compliance Profiles
  3. SPDX 3.0.1 Security Profile model
  4. SPDX 3.0.1 AI Profile model
  5. Linux Foundation: SPDX 3 Revolutionizes Software Management in Systems with Enhanced Functionality and Streamlined Use Cases (press release, 16 April 2024)
  6. ISO/IEC 5962:2021 — Information technology — SPDX Specification V2.2.1
  7. OpenSSF: SBOMs in the Era of the CRA — Toward a Unified and Actionable Framework (22 October 2025)

Frequently asked questions

What is SPDX 3.0, and when was it released?

SPDX (Software Package Data Exchange) is an open SBOM data format maintained by the SPDX Working Group, which operates within the Linux Foundation. Version 3.0 was tagged on GitHub on 15 April 2024, with the Linux Foundation's announcement following the next day: 'The SPDX community, in collaboration with the Linux Foundation, is thrilled to announce the release of SPDX 3.0.' A patch release, SPDX 3.0.1, followed on 17 December 2024 specifically to support the format's OMG and ISO standard submissions, and that 3.0.1 text is the current finalized specification, published at spdx.github.io/spdx-spec/v3.0.1/.

Is SPDX 3.0 an ISO standard?

Not yet — this is a common point of confusion worth getting right. ISO/IEC 5962:2021, titled 'Information technology — SPDX Specification V2.2.1,' standardizes SPDX version 2.2.1, not 3.0. A successor draft covering SPDX 3.0 was active under ISO/IEC JTC 1 as a draft (tracked as ISO/IEC DIS/PRF 5962) as of this guide's research date, meaning SPDX 3.0 had not yet completed ISO ratification. Check the ISO catalogue directly for the current ballot stage before citing SPDX 3.0 as 'ISO-standardized' in a compliance context.

What actually changed between SPDX 2.x and SPDX 3.0?

Two structural changes stand out. First, SPDX 3.0 is built on an RDF-based data model of Elements (nodes, each independently identified by an IRI) connected by first-class Relationship objects (edges) — described in the spec as 'a grouping of characteristics unique to an assertion that one Element is related to one or more other Elements in some way' — replacing SPDX 2.x's single flat tag-value/JSON document structure. Second, the spec is now organized into nine 'Profiles' rather than one monolithic schema: Core (mandatory for all others), Software, Security, Licensing, Dataset, AI, Build, Lite and Extension. Because the data model is RDF-based, SPDX 3.0 data can be serialized as JSON-LD (the canonical form), Turtle, N-Triples or RDF/XML; the spreadsheet and tag-value formats available in 2.x are not defined for 3.0.

Does SPDX 3.0 have a Security profile with VEX support?

Yes. The Security profile 'captures security related information,' per the spec, and according to the SPDX project's own security page it supports 'exchanging information about system vulnerabilities that may exist, the severity of those vulnerabilities, and a mechanism to express how a vulnerability may affect a specific element including if a fix is available.' Concretely, it defines a Vulnerability class and four VEX-status relationship types that map directly onto standard VEX statuses: VexAffectedVulnAssessmentRelationship (VEX 'affected'), VexNotAffectedVulnAssessmentRelationship ('not_affected'), VexFixedVulnAssessmentRelationship ('fixed') and VexUnderInvestigationVulnAssessmentRelationship ('under_investigation'), alongside relationship types for CVSS v2/v3/v4 scores, EPSS scores and CISA's Stakeholder-Specific Vulnerability Categorization (SSVC).

Does SPDX 3.0 replace CycloneDX, or do they coexist?

They coexist, and the open-source ecosystem has been explicit about not forcing a choice between them. OpenSSF — a Linux Foundation project — wrote in October 2025 that 'OpenSSF's strategic support for both standards – SPDX and CycloneDX – is vital for the entire ecosystem,' pointing to translation tooling like Protobom and BomCTL that enable 'seamless, lossless translation between the two.' Government references (NTIA's SBOM minimum-elements guidance, CISA's SBOM FAQ) likewise name both formats as acceptable, generally without distinguishing SPDX 2.x from 3.0 by version number — so a device maker's practical format choice today is usually driven by what a specific customer, tool or regulator asks for, not by one spec superseding the other.

In this cluster

SPDX 3.0, explained: what changed for SBOMs