From: stondo@gmail.com
To: openembedded-core@lists.openembedded.org
Cc: JPEWhacker@gmail.com, richard.purdie@linuxfoundation.org,
ross.burton@arm.com, marta.rybczynska@syslinbit.com,
benjamin.robin@bootlin.com, peter.marko@siemens.com,
adrian.freihofer@siemens.com, mathieu.dubois-briand@bootlin.com,
stefano.tondo.ext@siemens.com
Subject: [RFC PATCH 0/2] spdx30: Add OpenVEX standalone document generation
Date: Tue, 31 Mar 2026 16:19:54 +0200 [thread overview]
Message-ID: <20260331141956.608976-1-stondo@gmail.com> (raw)
From: Stefano Tondo <stefano.tondo.ext@siemens.com>
Hi all,
Back at the end of December 2025, I had a conversation with Adrian
regarding OpenVEX. Following my SPDX 3.0 enhancement series that was
merged recently [1], I would like to propose adding OpenVEX [2]
standalone document generation to the SPDX 3.0 workflow.
Context: current VEX landscape in oe-core
-----------------------------------------
Yocto currently has three VEX-related mechanisms:
1. SPDX embedded VEX (Joshua's recipe-level architecture in
create-spdx-3.0): VEX assessment relationships embedded inside SPDX
3.0 documents, controlled by SPDX_INCLUDE_VEX. This is the richest
VEX data source, now at recipe level after the package VEX
removal [3].
2. vex.bbclass (Marta Rybczynska): A standalone do_generate_vex task
that produces per-recipe JSON files and a rootfs manifest in a custom
Yocto JSON format. Used for CVE reporting and consumed by external
analysis tools.
3. sbom-cve-check (Benjamin Robin, under review [4]): Post-build CVE
analysis using an external tool that reads SPDX SBOMs + vex.bbclass
manifests, then re-exports enriched SPDX 3 data.
What is currently missing is output in the OpenVEX format (openvex.dev),
which is a lightweight, interoperable JSON format adopted by an
increasing number of vulnerability management tools.
Motivation
----------
The OpenVEX specification [2] is gaining adoption as the standard VEX
transport format. Several widely-used tools already consume OpenVEX
natively:
- Grype (Anchore): grype --vex openvex.json
- Trivy (Aqua Security): trivy image --vex openvex.json
- cosign/sigstore: VEX attestation support
Having standalone OpenVEX files alongside SPDX SBOMs would enable:
- Direct integration with the scanning tools listed above
- Separate distribution of VEX data without shipping the full SBOM
- Compliance with EU Cyber Resilience Act and US Executive Order 14028
requirements for machine-readable vulnerability assessments
- Decoupled VEX lifecycle: documents can be updated independently
when vulnerability status changes
This implementation does NOT replace or conflict with the existing VEX
mechanisms. It is an additional optional output format that reuses the
VEX data already produced by Joshua's recipe-level SPDX architecture.
Implementation
--------------
The approach hooks into the existing create-spdx-3.0 workflow. When a
recipe has CVE data, the implementation reads the VEX assessment
relationships already present in the SPDX output and generates a
standalone .vex.json file in OpenVEX format alongside the SPDX
document. The SPDX VEX statuses (patched, unpatched, ignored, unknown)
are mapped to their OpenVEX equivalents, and product identification
uses PURLs from the SPDX packages. The feature is disabled by default
and opt-in via a single configuration variable.
The series is two patches (generation logic + selftests), both included
below for anyone who wants to look at the details.
Open questions
--------------
1. Should the OpenVEX document ID scheme use a different namespace
than https://openvex.dev/docs/yocto/ ?
2. Is the SSTATE_ALLOW_OVERLAP_FILES += "${DEPLOY_DIR_SPDX}" approach
acceptable for VEX file sharing between recipe and package sstate
tasks?
Looking forward to your feedback.
[1] https://lists.openembedded.org/g/openembedded-core/message/213367
[2] https://openvex.dev/
[3] commit 6406240932 ("spdx30: Remove package VEX")
[4] https://patchwork.openembedded.org/project/oe-core/list/?series=&submitter=&state=&q=sbom-cve-check&archive=&delegate=
Stefano Tondo (2):
spdx30: Add OpenVEX standalone document generation
oeqa/selftest: Add tests for OpenVEX integration
meta/classes/create-spdx-3.0.bbclass | 19 +++
meta/classes/spdx-common.bbclass | 15 +++
meta/lib/oe/spdx30_tasks.py | 193 +++++++++++++++++++++++++++
meta/lib/oeqa/selftest/cases/spdx.py | 90 +++++++++++++
4 files changed, 317 insertions(+)
--
2.53.0
next reply other threads:[~2026-03-31 14:20 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-03-31 14:19 stondo [this message]
2026-03-31 14:19 ` [RFC PATCH 1/2] spdx30: Add OpenVEX standalone document generation stondo
2026-03-31 14:19 ` [RFC PATCH 2/2] oeqa/selftest: Add tests for OpenVEX integration stondo
2026-03-31 14:23 ` [RFC PATCH 0/2] spdx30: Add OpenVEX standalone document generation Richard Purdie
2026-03-31 14:46 ` [OE-core] " Marta Rybczynska
2026-03-31 15:04 ` Joshua Watt
2026-03-31 22:05 ` Freihofer, Adrian
2026-04-01 7:43 ` Benjamin Robin
2026-04-01 9:58 ` Freihofer, Adrian
2026-04-01 11:34 ` Benjamin Robin
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260331141956.608976-1-stondo@gmail.com \
--to=stondo@gmail.com \
--cc=JPEWhacker@gmail.com \
--cc=adrian.freihofer@siemens.com \
--cc=benjamin.robin@bootlin.com \
--cc=marta.rybczynska@syslinbit.com \
--cc=mathieu.dubois-briand@bootlin.com \
--cc=openembedded-core@lists.openembedded.org \
--cc=peter.marko@siemens.com \
--cc=richard.purdie@linuxfoundation.org \
--cc=ross.burton@arm.com \
--cc=stefano.tondo.ext@siemens.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox