All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation
       [not found] <17224368BE5A21CF.6604@lists.yoctoproject.org>
@ 2022-10-28 15:10 ` michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 1/5] ref-manual: terms.rst: add SBOM and SPDX terms michael.opdenacker
                     ` (4 more replies)
  0 siblings, 5 replies; 6+ messages in thread
From: michael.opdenacker @ 2022-10-28 15:10 UTC (permalink / raw)
  To: docs; +Cc: JPEWhacker, mikko.rapeli, Michael Opdenacker

From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Even though the create-spdx class has been available
for several versions, it wasn't documented at all
until very recently.

This is a first version, which could be expanded
thanks to your feedback or later.

In particular, I'd be interested in references
to outside SPDX tools to consume (in particular
browsing or analysing) the SPDX we generate.

I wouldn't be surprised if there are inaccuracies,
so thank you in advance for your reviews!

Changes in V2:
- Rebase against the newest master-next
- In description of the "spdx-create" class,
  put the output in tmp/deploy/images first.
  (Reported by Joshua Watt)
- Improve wording with respect to license
  compliance as suggested by Mikko Rapeli.

Michael Opdenacker (5):
  ref-manual: terms.rst: add SBOM and SPDX terms
  ref-manual: variables.rst: document spdx-create class variables
  dev-manual: common-tasks.rst: add section about SPDX / SBOM generation
  ref-manual: classes.rst: expand documentation of create-spdx class
  ref-manual: terms.rst: add reference to new SBOM/SPDX section in dev
    manual

 documentation/dev-manual/common-tasks.rst | 101 ++++++++++++++--------
 documentation/ref-manual/classes.rst      |  22 ++++-
 documentation/ref-manual/terms.rst        |  28 ++++++
 documentation/ref-manual/variables.rst    |  82 ++++++++++++++++++
 4 files changed, 196 insertions(+), 37 deletions(-)

-- 
2.34.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

* [PATCH v2 1/5] ref-manual: terms.rst: add SBOM and SPDX terms
  2022-10-28 15:10 ` [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation michael.opdenacker
@ 2022-10-28 15:10   ` michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 2/5] ref-manual: variables.rst: document spdx-create class variables michael.opdenacker
                     ` (3 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: michael.opdenacker @ 2022-10-28 15:10 UTC (permalink / raw)
  To: docs; +Cc: JPEWhacker, mikko.rapeli, Michael Opdenacker

From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 documentation/ref-manual/terms.rst | 26 ++++++++++++++++++++++++++
 1 file changed, 26 insertions(+)

diff --git a/documentation/ref-manual/terms.rst b/documentation/ref-manual/terms.rst
index 40209528ba..4711d7df7b 100644
--- a/documentation/ref-manual/terms.rst
+++ b/documentation/ref-manual/terms.rst
@@ -321,6 +321,23 @@ universal, the list includes them just in case:
       :term:`build host<Build Host>` and other components, that can
       work on specific hardware.
 
+   :term:`SBOM`
+      This term means *Software Bill of Materials*. When you distribute
+      software, it offers a description of all the components you used,
+      their corresponding licenses, their dependencies, the changes that were
+      applied and the known vulnerabilities that were fixed.
+
+      This can be used by the recipients of the software to assess
+      their exposure to license compliance and security vulnerability issues.
+
+      See the `Software Supply Chain <https://en.wikipedia.org/wiki/Software_supply_chain>`__
+      article on Wikipedia for more details.
+
+      The OpenEmbedded Build System can generate such documentation for your
+      project, in :term:`SPDX` format, based on all the metadata it used to
+      build the software images. See the ":ref:`dev-manual/common-tasks:creating
+      a software bill of materials`" section of the Development Tasks manual.
+
    :term:`Source Directory`
      This term refers to the directory structure
      created as a result of creating a local copy of the ``poky`` Git
@@ -381,6 +398,15 @@ universal, the list includes them just in case:
      ":ref:`overview-manual/development-environment:repositories, tags, and branches`"
      section in the Yocto Project Overview and Concepts Manual.
 
+   :term:`SPDX`
+      This term means *Software Package Data Exchange*, and is used as a open
+      standard for providing a *Software Bill of Materials* (:term:`SBOM`).
+      This standard is developed through a `Linux Foundation project
+      <https://spdx.dev/>`__ and is used by the OpenEmbedded Build System to
+      provide an :term:`SBOM` associated to each a software image.
+
+      For details, see Wikipedia's `SPDX page <https://en.wikipedia.org/wiki/Software_Package_Data_Exchange>`__.
+
    :term:`Sysroot`
       When cross-compiling, the target file system may be differently laid
       out and contain different things compared to the host system. The concept
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 2/5] ref-manual: variables.rst: document spdx-create class variables
  2022-10-28 15:10 ` [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 1/5] ref-manual: terms.rst: add SBOM and SPDX terms michael.opdenacker
@ 2022-10-28 15:10   ` michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 3/5] dev-manual: common-tasks.rst: add section about SPDX / SBOM generation michael.opdenacker
                     ` (2 subsequent siblings)
  4 siblings, 0 replies; 6+ messages in thread
From: michael.opdenacker @ 2022-10-28 15:10 UTC (permalink / raw)
  To: docs; +Cc: JPEWhacker, mikko.rapeli, Michael Opdenacker

From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 documentation/ref-manual/variables.rst | 82 ++++++++++++++++++++++++++
 1 file changed, 82 insertions(+)

diff --git a/documentation/ref-manual/variables.rst b/documentation/ref-manual/variables.rst
index dc6eccb314..0cc73a234c 100644
--- a/documentation/ref-manual/variables.rst
+++ b/documentation/ref-manual/variables.rst
@@ -7284,6 +7284,88 @@ system and gives an overview of their function and contents.
 
          You can specify only a single URL in :term:`SOURCE_MIRROR_URL`.
 
+   :term:`SPDX_ARCHIVE_PACKAGED`
+      This option allows to add to :term:`SPDX` output compressed archives
+      of the files in the generated target packages.
+
+      Such archives are available in
+      ``tmp/deploy/spdx/MACHINE/packages/packagename.tar.zst``
+      under the :term:`Build Directory`.
+
+      Enable this option as follows::
+
+         SPDX_ARCHIVE_PACKAGED = "1"
+
+      According to our tests on release 4.1 "langdale", building
+      ``core-image-minimal`` for the ``qemux86-64`` machine, enabling this
+      option multiplied the size of the ``tmp/deploy/spdx`` directory by a
+      factor of 13 (+1.6 GiB for this image), compared to just using the
+      :ref:`create-spdx <ref-classes-create-spdx>` class with no option.
+
+      Note that this option doesn't increase the size of :term:`SPDX`
+      files in ``tmp/deploy/images/MACHINE``.
+
+   :term:`SPDX_ARCHIVE_SOURCES`
+      This option allows to add to :term:`SPDX` output compressed archives
+      of the sources for packages installed on the target. It currently
+      only works when :term:`SPDX_INCLUDE_SOURCES` is set.
+
+      This is one way of fulfilling "source code access" license
+      requirements.
+
+      Such source archives are available in
+      ``tmp/deploy/spdx/MACHINE/recipes/recipe-packagename.tar.zst``
+      under the :term:`Build Directory`.
+
+      Enable this option as follows::
+
+         SPDX_INCLUDE_SOURCES = "1"
+         SPDX_ARCHIVE_SOURCES = "1"
+
+      According to our tests on release 4.1 "langdale", building
+      ``core-image-minimal`` for the ``qemux86-64`` machine, enabling
+      these options multiplied the size of the ``tmp/deploy/spdx``
+      directory by a factor of 11 (+1.4 GiB for this image),
+      compared to just using the :ref:`create-spdx <ref-classes-create-spdx>`
+      class with no option.
+
+      Note that using this option only marginally increases the size
+      of the :term:`SPDX` output in ``tmp/deploy/images/MACHINE/``
+      (+ 0.07\% with the tested image), compared to just enabling
+      :term:`SPDX_INCLUDE_SOURCES`.
+
+   :term:`SPDX_INCLUDE_SOURCES`
+      This option allows to add a description of the source files used to build
+      the host tools and the target packages, to the ``spdx.json`` files in
+      ``tmp/deploy/spdx/MACHINE/recipes/`` under the :term:`Build Directory`.
+      As a consequence, the ``spdx.json`` files under the ``by-namespace`` and
+      ``packages`` subdirectories in ``tmp/deploy/spdx/MACHINE`` are also
+      modified to include references to such source file descriptions.
+
+      Enable this option as follows::
+
+         SPDX_INCLUDE_SOURCES = "1"
+
+      According to our tests on release 4.1 "langdale", building
+      ``core-image-minimal`` for the ``qemux86-64`` machine, enabling
+      this option multiplied the total size of the ``tmp/deploy/spdx``
+      directory by a factor of 3  (+291 MiB for this image),
+      and the size of the ``IMAGE-MACHINE.spdx.tar.zst`` in
+      ``tmp/deploy/images/MACHINE`` by a factor of 130 (+15 MiB for this
+      image), compared to just using the
+      :ref:`create-spdx <ref-classes-create-spdx>` class with no option.
+
+   :term:`SPDX_PRETTY`
+      This option makes the SPDX output more human-readable, using
+      identation and newlines, instead of the default output in a
+      single line::
+
+         SPDX_PRETTY = "1"
+
+      The generated SPDX files are approximately 20% bigger, but
+      this option is recommended if you want to inspect the SPDX
+      output files with a text editor.
+
    :term:`SPDXLICENSEMAP`
       Maps commonly used license names to their SPDX counterparts found in
       ``meta/files/common-licenses/``. For the default :term:`SPDXLICENSEMAP`
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 3/5] dev-manual: common-tasks.rst: add section about SPDX / SBOM generation
  2022-10-28 15:10 ` [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 1/5] ref-manual: terms.rst: add SBOM and SPDX terms michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 2/5] ref-manual: variables.rst: document spdx-create class variables michael.opdenacker
@ 2022-10-28 15:10   ` michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 4/5] ref-manual: classes.rst: expand documentation of create-spdx class michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 5/5] ref-manual: terms.rst: add reference to new SBOM/SPDX section in dev manual michael.opdenacker
  4 siblings, 0 replies; 6+ messages in thread
From: michael.opdenacker @ 2022-10-28 15:10 UTC (permalink / raw)
  To: docs; +Cc: JPEWhacker, mikko.rapeli, Michael Opdenacker

From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Also stop refering to the meta-spdxscanner class, no longer
relevant.
---
 documentation/dev-manual/common-tasks.rst | 101 ++++++++++++++--------
 1 file changed, 66 insertions(+), 35 deletions(-)

diff --git a/documentation/dev-manual/common-tasks.rst b/documentation/dev-manual/common-tasks.rst
index c747c0deac..9c85a656a8 100644
--- a/documentation/dev-manual/common-tasks.rst
+++ b/documentation/dev-manual/common-tasks.rst
@@ -11200,8 +11200,6 @@ to be covered by assuming that there are three main areas of concern:
 -  Compilation scripts and modifications to the source code must be
    provided.
 
--  spdx files can be provided.
-
 There are other requirements beyond the scope of these three and the
 methods described in this section (e.g. the mechanism through which
 source code is distributed).
@@ -11392,39 +11390,6 @@ layers (recipes, configuration files, and so forth) enables you to meet
 your requirements to include the scripts to control compilation as well
 as any modifications to the original source.
 
-Providing spdx files
-~~~~~~~~~~~~~~~~~~~~~~~~~
-
-The spdx module has been integrated to a layer named meta-spdxscanner.
-meta-spdxscanner provides several kinds of scanner. If you want to enable
-this function, you have to follow the following steps:
-
-1. Add meta-spdxscanner layer into ``bblayers.conf``.
-
-2. Refer to the README in meta-spdxscanner to setup the environment (e.g,
-   setup a fossology server) needed for the scanner.
-
-3. Meta-spdxscanner provides several methods within the bbclass to create spdx files.
-   Please choose one that you want to use and enable the spdx task. You have to
-   add some config options in ``local.conf`` file in your :term:`Build Directory`.
-   Here is an example showing how to generate spdx files during BitBake using the
-   fossology-python.bbclass::
-
-      # Select fossology-python.bbclass.
-      INHERIT += "fossology-python"
-      # For fossology-python.bbclass, TOKEN is necessary, so, after setup a
-      # Fossology server, you have to create a token.
-      TOKEN = "eyJ0eXAiO..."
-      # The fossology server is necessary for fossology-python.bbclass.
-      FOSSOLOGY_SERVER = "http://xx.xx.xx.xx:8081/repo"
-      # If you want to upload the source code to a special folder:
-      FOLDER_NAME = "xxxx" //Optional
-      # If you don't want to put spdx files in tmp/deploy/spdx, you can enable:
-      SPDX_DEPLOY_DIR = "${DEPLOY_DIR}" //Optional
-
-For more usage information refer to :yocto_git:`the meta-spdxscanner repository
-</meta-spdxscanner/>`.
-
 Compliance Limitations with Executables Built from Static Libraries
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
@@ -11674,6 +11639,72 @@ When analyzing CVEs, it is recommended to:
 -  follow public `open source security mailing lists <https://oss-security.openwall.org/wiki/mailing-lists>`__ for
    discussions and advance notifications of CVE bugs and software releases with fixes.
 
+Creating a Software Bill of Materials
+=====================================
+
+Once you are able to build an image for your project, once the licenses for
+each software component are all identified (see
+":ref:`dev-manual/common-tasks:working with licenses`") and once vulnerability
+fixes are applied (see ":ref:`dev-manual/common-tasks:checking
+for vulnerabilities`"), the OpenEmbedded build system can generate
+a description of all the components you used, their licenses, their dependencies,
+the changes that were applied and the known vulnerabilities that were fixed.
+
+This description is generated in the form of a *Software Bill of Materials*
+(:term:`SBOM`), using the :term:`SPDX` standard.
+
+When you release software, this is the most standard way to provide information
+about the Software Supply Chain of your software image and SDK. The
+:term:`SBOM` tooling is often used to ensure open source license compliance by
+providing the license texts used in the product which legal departments and end
+users can read in standardized format.
+
+:term:`SBOM` information is also critical to performing vulnerability exposure
+assessments, as all the components used in the Software Supply Chain are listed.
+
+The OpenEmbedded build system doesn't generate such information by default.
+To make this happen, you must inherit the
+:ref:`create-spdx <ref-classes-create-spdx>` class from a configuration file::
+
+   INHERIT += "create-spdx"
+
+You then get :term:`SPDX` output in JSON format as an
+``IMAGE-MACHINE.spdx.json`` file in ``tmp/deploy/images/MACHINE/`` inside the
+:term:`Build Directory`.
+
+This is a toplevel file accompanied by an ``IMAGE-MACHINE.spdx.index.json``
+containing an index of JSON :term:`SPDX` files for individual recipes, together
+with an ``IMAGE-MACHINE.spdx.tar.zst`` compressed archive containing all such
+files.
+
+The :ref:`create-spdx <ref-classes-create-spdx>` class offers options to include
+more information in the output :term:`SPDX` data, such as making the generated
+files more human readable (:term:`SPDX_PRETTY`), adding compressed archives of
+the files in the generated target packages (:term:`SPDX_ARCHIVE_PACKAGED`),
+adding a description of the source files handled by the target recipes
+(:term:`SPDX_INCLUDE_SOURCES`) and adding archives of these source files
+themselves (:term:`SPDX_ARCHIVE_SOURCES`).
+
+Though the toplevel :term:`SPDX` output is available in
+``tmp/deploy/images/MACHINE/`` inside the :term:`Build Directory`, ancillary
+generated files are available in ``tmp/deploy/spdx/MACHINE`` too, such as:
+
+-  The individual :term:`SPDX` JSON files in the ``IMAGE-MACHINE.spdx.tar.zst``
+   archive.
+
+-  Compressed archives of the files in the generated target packages,
+   in ``packages/packagename.tar.zst`` (when :term:`SPDX_ARCHIVE_PACKAGED`
+   is set).
+
+-  Compressed archives of the source files used to build the host tools
+   and the target packages in ``recipes/recipe-packagename.tar.zst``
+   (when :term:`SPDX_ARCHIVE_SOURCES` is set). Those are needed to fulfill
+   "source code access" license requirements.
+
+See the `tools page <https://spdx.dev/resources/tools/>`__ on the :term:`SPDX`
+project website for a list of tools to consume and transform the :term:`SPDX`
+data generated by the OpenEmbedded build system.
+
 Using the Error Reporting Tool
 ==============================
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 4/5] ref-manual: classes.rst: expand documentation of create-spdx class
  2022-10-28 15:10 ` [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation michael.opdenacker
                     ` (2 preceding siblings ...)
  2022-10-28 15:10   ` [PATCH v2 3/5] dev-manual: common-tasks.rst: add section about SPDX / SBOM generation michael.opdenacker
@ 2022-10-28 15:10   ` michael.opdenacker
  2022-10-28 15:10   ` [PATCH v2 5/5] ref-manual: terms.rst: add reference to new SBOM/SPDX section in dev manual michael.opdenacker
  4 siblings, 0 replies; 6+ messages in thread
From: michael.opdenacker @ 2022-10-28 15:10 UTC (permalink / raw)
  To: docs; +Cc: JPEWhacker, mikko.rapeli, Michael Opdenacker

From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 documentation/ref-manual/classes.rst | 22 ++++++++++++++++++++--
 1 file changed, 20 insertions(+), 2 deletions(-)

diff --git a/documentation/ref-manual/classes.rst b/documentation/ref-manual/classes.rst
index 3b33783c58..5537eb774a 100644
--- a/documentation/ref-manual/classes.rst
+++ b/documentation/ref-manual/classes.rst
@@ -373,8 +373,26 @@ support.
 ``create-spdx.bbclass``
 =======================
 
-The :ref:`create-spdx <ref-classes-create-spdx>` class provides support for automatically creating
-SPDX SBoM documents based upon image and SDK contents.
+The :ref:`create-spdx <ref-classes-create-spdx>` class provides support for
+automatically creating :term:`SPDX` :term:`SBOM` documents based upon image
+and SDK contents.
+
+This class is meant to be inherited globally from a configuration file::
+
+   INHERIT += "create-spdx"
+
+The toplevel :term:`SPDX` output file is generated in JSON format as a
+``IMAGE-MACHINE.spdx.json`` file in ``tmp/deploy/images/MACHINE/`` inside the
+:term:`Build Directory`. There are other related files in the same directory,
+as well as in ``tmp/deploy/spdx``.
+
+The exact behaviour of this class, and the amount of output can be controlled
+by the :term:`SPDX_PRETTY`, :term:`SPDX_ARCHIVE_PACKAGED`,
+:term:`SPDX_ARCHIVE_SOURCES` and :term:`SPDX_INCLUDE_SOURCES` variables.
+
+See the description of these variables and the
+":ref:`dev-manual/common-tasks:creating a software bill of materials`"
+section in the Yocto Project Development Manual for more details.
 
 .. _ref-classes-cross:
 
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

* [PATCH v2 5/5] ref-manual: terms.rst: add reference to new SBOM/SPDX section in dev manual
  2022-10-28 15:10 ` [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation michael.opdenacker
                     ` (3 preceding siblings ...)
  2022-10-28 15:10   ` [PATCH v2 4/5] ref-manual: classes.rst: expand documentation of create-spdx class michael.opdenacker
@ 2022-10-28 15:10   ` michael.opdenacker
  4 siblings, 0 replies; 6+ messages in thread
From: michael.opdenacker @ 2022-10-28 15:10 UTC (permalink / raw)
  To: docs; +Cc: JPEWhacker, mikko.rapeli, Michael Opdenacker

From: Michael Opdenacker <michael.opdenacker@bootlin.com>

Signed-off-by: Michael Opdenacker <michael.opdenacker@bootlin.com>
---
 documentation/ref-manual/terms.rst | 4 +++-
 1 file changed, 3 insertions(+), 1 deletion(-)

diff --git a/documentation/ref-manual/terms.rst b/documentation/ref-manual/terms.rst
index 4711d7df7b..b4a78efad3 100644
--- a/documentation/ref-manual/terms.rst
+++ b/documentation/ref-manual/terms.rst
@@ -405,7 +405,9 @@ universal, the list includes them just in case:
       <https://spdx.dev/>`__ and is used by the OpenEmbedded Build System to
       provide an :term:`SBOM` associated to each a software image.
 
-      For details, see Wikipedia's `SPDX page <https://en.wikipedia.org/wiki/Software_Package_Data_Exchange>`__.
+      For details, see Wikipedia's `SPDX page <https://en.wikipedia.org/wiki/Software_Package_Data_Exchange>`__
+      and the ":ref:`dev-manual/common-tasks:creating a software bill of materials`"
+      section of the Development Tasks manual.
 
    :term:`Sysroot`
       When cross-compiling, the target file system may be differently laid
-- 
2.34.1



^ permalink raw reply related	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-10-28 15:11 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
     [not found] <17224368BE5A21CF.6604@lists.yoctoproject.org>
2022-10-28 15:10 ` [PATCH v2 0/5] manuals: add documentation about SBOM/SPDX generation michael.opdenacker
2022-10-28 15:10   ` [PATCH v2 1/5] ref-manual: terms.rst: add SBOM and SPDX terms michael.opdenacker
2022-10-28 15:10   ` [PATCH v2 2/5] ref-manual: variables.rst: document spdx-create class variables michael.opdenacker
2022-10-28 15:10   ` [PATCH v2 3/5] dev-manual: common-tasks.rst: add section about SPDX / SBOM generation michael.opdenacker
2022-10-28 15:10   ` [PATCH v2 4/5] ref-manual: classes.rst: expand documentation of create-spdx class michael.opdenacker
2022-10-28 15:10   ` [PATCH v2 5/5] ref-manual: terms.rst: add reference to new SBOM/SPDX section in dev manual michael.opdenacker

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.