nixpkgs/doc/interoperability/cyclonedx.md
Emery Hemingway edc0b7727f
doc/interoperability: new chapter and section on CycloneDX (#316626)
* doc/interoperability: new chapter and section on CycloneDX
2024-07-29 12:57:30 +02:00

4.9 KiB

CycloneDX

OWASP CycloneDX is a Software Bill of Materials (SBOM) standard. The standards described here are for including Nix specific information within SBOMs in a way that is interoperable with external SBOM tooling.

nix Namespace Property Taxonomy

The following tables describe namespaces for properties that may be attached to components within SBOMs. Component properties are lists of name-value-pairs where values must be strings. Properties with the same name may appear more than once. Names and values are case-sensitive.

Property Description
nix:store_path A Nix store path for the given component. This property should be contextualized by additional properties that describe the production of the store path, such as those from the nix:narinfo: and nix:fod namespaces.
Namespace Description
nix:narinfo Namespace for properties that are specific to how a component is stored as a Nix archive (NAR) in a binary cache.
nix:fod Namespace for properties that describe a fixed-output derivation.

nix:narinfo

Narinfo properties describe component archives that may be available from binary caches. The nix:narinfo properties should be accompanied by a nix:store_path property within the same property list.

Property Description
nix:narinfo:store_path Store path for the given store component.
nix:narinfo:url URL path component.
nix:narinfo:nar_hash Hash of the file system object part of the component when serialized as a Nix Archive.
nix:narinfo:nar_size Size of the component when serialized as a Nix Archive.
nix:narinfo:compression The compression format that component archive is in.
nix:narinfo:file_hash A digest for the compressed component archive itself, as opposed to the data contained within.
nix:narinfo:file_size The size of the compressed component archive itself.
nix:narinfo:deriver The path to the derivation from which this component is produced.
nix:narinfo:system The hardware and software platform on which this component is produced.
nix:narinfo:sig Signatures claiming that this component is what it claims to be.
nix:narinfo:ca Content address of this store object's file system object, used to compute its store path.
nix:narinfo:references A whitespace separated array of store paths that this component references.

nix:fod

FOD properties describe a fixed-output derivation. The nix:fod:method property is required and must be accompanied by a nix:store_path property within the same property list. All other properties in this namespace are method-specific. To reproduce the build of a component the nix:fod:method value is resolved to an appropriate function within Nixpkgs whose arguments intersect with the given properties. When generating nix:fod properties the method selected should be a stable function with a minimal number arguments. For example, the fetchFromGitHub is commonly used within Nixpkgs but should be reduced to a call to the function by which it is implemented, fetchzip.

Property Description
nix:fod:method Nixpkg function that produces this FOD. Required. Examples: "fetchzip", "fetchgit"
nix:fod:name Derivation name, present when method is "fetchzip"
nix:fod:ref Git ref, present when method is "fetchgit"
nix:fod:rev Git rev, present when method is "fetchgit"
nix:fod:sha256 FOD hash
nix:fod:url URL to fetch

nix:fod properties may be extracted and evaluated to a derivation using code similar to the following, assuming a fictitious function filterPropertiesToAttrs:

{ pkgs, filterPropertiesToAttrs, properties }:
let
  fodProps = filterPropertiesToAttrs "nix:fod:" properties;

  methods = {
    fetchzip =
      { name, url, sha256, ... }:
      pkgs.fetchzip {
        inherit name url sha256;
      };
  };

in methods.${fodProps.method} fodProps