Keeping the “maintain X forever” box checked is always the toughest one and it’s a top focus for me on this project.
I am intentionally designing the “include SBOM” mechanism to be as simple as possible, essentially having the documents catch a mostly-free ride in archives. I don’t expect a heavy lift to implement anything in installers, for example.
SBOM standards evolving likely won’t have any effect on existing code (aside from package indexes, which might need to adopt new “major” SBOM standard versions). The design of the mechanism defers completely to SBOM standards about contents, we only provide a few basic rules about the primary component to make the semantics work out. SBOM scanning tools are incentivized to support whatever Python package tools emit (lest they start dropping information on the floor), so long-term backwards compatibility is incentivized across the toolchain.
This is why I think spending my paid time on this project will be useful.
I am hoping that by providing a mechanism to have SBOM information included in Python packages at all (and as a solution to a named problem “phantom dependency” where Python is the unfortunate star) we’ll see increased interest and contributions from users who need SBOMs.
As it stands today, if a company wanted to improve projects’ SBOMs that they depend on they would need to start where I am now with packaging PEPs and a plan to contribute to a bunch of Python tools and then advocate for projects they care about to accept their contributions. My goal with the PEP is to at least unblock the first few things in the way of those types of contributions.
The areas which will need continuous human-touch are primarily “upstream” SBOM documents, likely from dependencies which are in their source tree. I have some plans to replicate some of the work I did for CPython in having a tool that provides automation and shoulder-taps to update SBOMs when checked-in dependencies change. Many projects, even ones with binary dependencies, won’t need to do this if they’re using auditwheel/cibuildwheel or an ecosystem with an easier software ID story like Rust or JS.
With some luck I’ll hopefully being around for a while to help track down ecosystem compatibility issues. I am also planning on creating patches for many of the mentioned projects like auditwheel
, maturin
, vendoring
, etc ahead of a PEP going for review so that “implementations” are ready ahead of time. For example, I already have a local patch for auditwheel
which generates and includes an SBOM into a repaired wheel. This SBOM document alone means that scanning tools can detect vulnerable versions of libwebp in Pillow, for example.
This makes sense to me, in a way I am providing this sort of support to CPython with their SBOMs. Maybe I can work this into the framing of “how to contribute SBOM data to your upstream projects”. I do plan on talking about this whole project mostly as “opening a new data distribution path, it’s up to you, dear user, to contribute to keep the data up to your standards”.