Looking at the purl-spec, and think it might solve some of the challenges I've had with figuring out ways to join the software-supply-chain-ecosystem.
I was looking at how other projects in the ecosystem track EoL dates, and it's not very good:
While our API is good for custom usecases where you define your own rules and build your own tooling, it doesn't work well with existing tools. @hugovk wrote a cli for the API, but it also suffers from the same problem: it exists for the EoL project, not for the people who're writing scanning tools.
I think I have one possible starting point: PURL. PURL is a specification to define a URL that links to a package (loosely defined) with an optional version. Here's some examples (for products we support):
pkg:github/electron/electron
pkg:github/electron/electron@16.0.5
pkg:maven/org.apache.logging.log4j/log4j-core
pkg:maven/org.apache.logging.log4j/log4j-core@2.17.0
pkg:deb/debian/php@8.1.1
pkg:deb/ubuntu/php@8.1.1
Note that since the same package can be installed in multiple ways, there can be multiple URLs to the same "package". The spec is fairly readable.
Suggested Changes
- Add a new
purl key which lists out possible package names (without version numbers).
- Generate a list of
supported_versions in the API response which lists down complete PURLs for all possible combinations.
Not sure how to best expose this in the website.
Problems with this approach
-
Not everything we track maps cleanly to (one or more) PURLs. Devices, Operating Systems, Client Side Applications (especially closed source ones), Managed Services (EKS,GKE) don't fit any of the available types.
-
Most SBOM tooling looks for CVEs, so it's based on "no match=good". In our case, since we only provide "supported releases", these might need additional work to support the "match=good" usecase. We might have to generate "version ranges" as unsupported.
-
Our version numbers might not match the version numbers actually reported by tools. As an example, apache-log4j package on debian is at version 2.17.1-1.
Looking at the purl-spec, and think it might solve some of the challenges I've had with figuring out ways to join the software-supply-chain-ecosystem.
I was looking at how other projects in the ecosystem track EoL dates, and it's not very good:
While our API is good for custom usecases where you define your own rules and build your own tooling, it doesn't work well with existing tools. @hugovk wrote a cli for the API, but it also suffers from the same problem: it exists for the EoL project, not for the people who're writing scanning tools.
I think I have one possible starting point: PURL. PURL is a specification to define a URL that links to a
package(loosely defined) with an optional version. Here's some examples (for products we support):pkg:github/electron/electronpkg:github/electron/electron@16.0.5pkg:maven/org.apache.logging.log4j/log4j-corepkg:maven/org.apache.logging.log4j/log4j-core@2.17.0pkg:deb/debian/php@8.1.1pkg:deb/ubuntu/php@8.1.1Note that since the same package can be installed in multiple ways, there can be multiple URLs to the same "package". The spec is fairly readable.
Suggested Changes
purlkey which lists out possible package names (without version numbers).supported_versionsin the API response which lists down complete PURLs for all possible combinations.Not sure how to best expose this in the website.
Problems with this approach
Not everything we track maps cleanly to (one or more) PURLs. Devices, Operating Systems, Client Side Applications (especially closed source ones), Managed Services (EKS,GKE) don't fit any of the available types.
Most SBOM tooling looks for CVEs, so it's based on "no match=good". In our case, since we only provide "supported releases", these might need additional work to support the "match=good" usecase. We might have to generate "version ranges" as unsupported.
Our version numbers might not match the version numbers actually reported by tools. As an example,
apache-log4jpackage on debian is at version2.17.1-1.