本页内容

软件物料清单

软件物料清单(SBOM)文档是对 Qt 安装中已安装文件、版权、许可、版本、源代码仓库及其他相关信息的声明。SBOM 文档通过向 Qt 用户及其他相关方共享组件信息,有助于供应链管理。 Qt 的 SBOM 文档对于许可合规性和安全漏洞管理尤为有用。

从 Qt 6.8 开始,Qt 的构建系统可以生成针对不同平台和构建配置量身定制的 SBOM 文档。 Qt Online Installer 将 SBOM 文档放置在相应 Qt 版本安装目录下的sbom 目录中。例如,对于 Qt 6.12.0 Android arm64-v8a 安装,SBOM 文档位于:

<INSTALL_DIR>/6.12.0/android_arm64_v8a/sbom/

若要自行从 Qt 源代码生成 SBOM 文档,请将-sbom 设为configure选项。

例如,在 configure 步骤中:

./configure  -sbom

生成 SBOM 文档便成为常规 Qt 安装流程的一部分:

ninja install
cmake --install .

此构建过程会根据SPDX规范的要求,生成 JSON 格式和tag:value 格式的 SBOM 文档。

从 Qt 6.11 开始,构建过程可选地生成CycloneDXSBOM 文档。

有关 Qt 构建流程的更多信息,请参阅《构建 Qt 源代码》和《Qt 配置选项》。

对于 Qt 开发人员和维护人员,SBOM Wiki提供了有关创建 SBOM 文档的具体信息。

符合 REUSE 标准的 Qt 模块

从 Qt 6.9 开始,Qt 模块已符合REUSE规范。具体而言,许可证文档和许可证检查是 Qt 开发流程的一部分。各种工具会检查 Qt 代码库中文件内的许可证信息,或检查外部 REUSE.toml 文件中的许可证信息。

reuse-tool会检查 REUSE 合规性并生成源代码 SBOM。一个内部工具会验证生成的源代码 SBOM 文件是否符合 Qt 许可规范。

有关 Qt 源代码中许可文档的更多信息,请访问以下链接:

SPDX 格式

SBOM文档采用SPDX 2.3格式。文档开头包含关于Qt模块的信息,随后以独立条目形式列出SPDX包。

对于 Qt 安装,一个 SPDX 包可以是:

一个 SPDX 包通常至少包含:

  • 包名、版本、供应商名称和构建信息
  • Qt 许可声明——Qt 产品可能受不同商业或许可协议的约束。例如,一个包可能列出多项已签订的许可协议:
    LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only

    有关许可选项的更多信息,请参阅《Qt 许可协议》。

  • 版权声明——SBOM 文档包含 Qt 源代码的版权信息,以及来自第三方来源或作者的版权信息。
  • CPE(通用平台枚举)——一种用于识别软件包的命名方案。对于 Qt,SBOM 的 CPE 格式通常为:
    cpe:<cpe_version>:<part>:<vendor>:<product>:<version>:<update>:<edition>:<language>:<sw_edition>:<target_sw>:<target_hw>:<other>

    Qt Network 授权包的标识符示例如下:

    cpe:2.3:a:qt:qtnetworkauth:6.12.0:*:*:*:*:*:*:*

    如需了解更多信息,请参阅CPE 规范页面。

  • PURL(包 URL)——作为 CPE 的替代方案,PURL 是一种采用以下格式的标识符方案:
    scheme:type/namespace/name@version?qualifiers#subpath

    一个包的 PURL 示例如下:

    pkg:generic/TheQtCompany/qtnetworkauth@6.12.0

    如需了解更多信息,请参阅“包装 URL”页面。

  • 包之间的关系,例如依赖关系。

    例如,DEPENDS_ON 用于列出依赖关系。有关有效关系类型的列表,请参阅SPDX 2.3的第11条。

第三方 SPDX 包

用于第三方组件的 SPDX 包通常至少包含:

  • 名称、版本和描述
  • 主页和下载位置
  • 在 Qt 中的用法
  • 许可和版权信息
  • 该组件是否涉及安全关键问题——其代码可能处理不受信任的代码

SPDX SBOM 示例

以下是Qt Network 授权模块的SPDX SBOM文档示例。该SBOM文件名为qtnetworkauth-6.9.0.spdx ,位于安装目录下的sbom 文件夹中。请注意,该SBOM文档中还包含以下示例中未列出的其他几个包。

SPDXVersion: SPDX-2.3
DataLicense: CC0-1.0
SPDXID: SPDXRef-DOCUMENT
DocumentName: qtnetworkauth-6.9.0
DocumentNamespace: https://qt.io/spdxdocs/qtnetworkauth-6.9.0
Creator: Organization: TheQtCompany
Creator: Tool: Qt Build System
CreatorComment: <text>This SPDX document was created from CMake 3.27.7, using the qt
build system from https://code.qt.io/cgit/qt/qtbase.git/tree/cmake/QtPublicSbomHelpers.cmake</text>
Created: 2024-09-19T11:07:23Z
ExternalDocumentRef: DocumentRef-qtbase https://qt.io/spdxdocs/qtbase-6.9.0 SHA1: 3dbc51259a07d458524a976da2e9607a76fab7e7

PackageName: NetworkAuth
SPDXID: SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth
PackageDownloadLocation: git://code.qt.io/qt/qtnetworkauth.git
PackageVersion: 6.9.0
PackageSupplier: Organization: TheQtCompany
PackageLicenseConcluded: LicenseRef-Qt-Commercial OR GPL-3.0-only
PackageLicenseDeclared: LicenseRef-Qt-Commercial OR GPL-3.0-only
ExternalRef: PACKAGE-MANAGER purl pkg:github/qt/qtnetworkauth?library_name=NetworkAuth#src/oauth
ExternalRef: PACKAGE-MANAGER purl pkg:generic/TheQtCompany/qtnetworkauth-NetworkAuth?vcs_url=https://code.qt.io/qt/qtnetworkauth.git&library_name=NetworkAuth#src/oauth
FilesAnalyzed: true
PackageCopyrightText: <text>Copyright (C) 2024 The Qt Company Ltd.</text>
PrimaryPackagePurpose: LIBRARY
ExternalRef: SECURITY cpe23Type cpe:2.3:a:qt:qtnetworkauth:6.9.0:*:*:*:*:*:*:*
ExternalRef: SECURITY cpe23Type cpe:2.3:a:qt:qt:6.9.0:*:*:*:*:*:*:*
Relationship: SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth DEPENDS_ON DocumentRef-qtbase:SPDXRef-Package-qtbase-qt-module-Core
Relationship: SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth DEPENDS_ON DocumentRef-qtbase:SPDXRef-Package-qtbase-qt-module-PlatformModuleInternal
Relationship: SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth DEPENDS_ON DocumentRef-qtbase:SPDXRef-Package-qtbase-qt-module-Gui
Relationship: SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth DEPENDS_ON DocumentRef-qtbase:SPDXRef-Package-qtbase-qt-module-Network
Relationship: SPDXRef-Package-qtnetworkauth CONTAINS SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth

CycloneDX 格式

从 Qt 6.11 开始,构建过程可选地生成CycloneDX v1.6格式的 SBOM 文档。

若需强制生成 CycloneDX 文档,请使用以下配置命令配置 Qt:

./configure -sbom -sbom-cyclonedx-v1_6 -sbom-cyclonedx-v1_6-required

生成 CycloneDX 文档需要以下依赖项:

  • Python3.9 或更高版本
  • Python 包:
    • cyclonedx-python-lib[json-validation]
    • tomli

您可以使用 Python 的 `pip ` 工具来安装所需的包:

pip install 'cyclonedx-python-lib[json-validation]' tomli

CycloneDX 文档提供的信息与 SPDX 文档类似,包括组件、许可证、依赖项和安全元数据。

与 SPDX 相比,CycloneDX 信息在许可证和关系类型等某些方面的细节较少。

已安装的 CycloneDX SBOM 文档的文件名格式为:<module>-<version>.cdx.json 。

CycloneDX SBOM 示例

以下是Qt Network 授权模块的 CycloneDX SBOM 文档示例。该 SBOM 文件名为qtnetworkauth-6.11.0.cdx.json ,位于安装目录的sbom 文件夹中。请注意,该 SBOM 文档还包含以下示例中未列出的其他若干组件。

{
  "components": [
    {
      "bom-ref": "SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth",
      "copyright": "Copyright (C) The Qt Company Ltd. and other contributors.",
      "cpe": "cpe:2.3:a:qt:qt:6.11.0:*:*:*:*:*:*:*",
      "licenses": [
        {
          "license": {
            "acknowledgement": "concluded",
            "id": "GPL-3.0-only"
          }
        }
      ],
      "name": "NetworkAuth",
      "properties": [
        {
          "name": "qt:sbom:entity_type",
          "value": "QT_MODULE"
        },
        {
          "name": "qt:sbom:is_qt_entity_type",
          "value": "true"
        },
        {
          "name": "spdx:external-reference:package-manager:purl",
          "value": "pkg:github/qt/qtnetworkauth?library_name=NetworkAuth#src/oauth"
        },
        {
          "name": "spdx:external-reference:security:cpe23",
          "value": "cpe:2.3:a:qt:qtnetworkauth:6.11.0:*:*:*:*:*:*:*"
        }
      ],
      "purl": "pkg:generic/TheQtCompany/qtnetworkauth-NetworkAuth?library_name=NetworkAuth&vcs_url=https://code.qt.io/qt/qtnetworkauth.git#src/oauth",
      "supplier": {
        "name": "TheQtCompany",
        "url": [
          "https://qt.io"
        ]
      },
      "type": "library",
      "version": "6.11.0"
    }
  ],
  "dependencies": [
    {
      "dependsOn": [
        "SPDXRef-Package-qtbase-qt-module-Core",
        "SPDXRef-Package-qtbase-qt-module-Gui",
        "SPDXRef-Package-qtbase-qt-module-Network",
        "SPDXRef-Package-qtbase-qt-module-PlatformModuleInternal"
      ],
      "ref": "SPDXRef-Package-qtnetworkauth-qt-module-NetworkAuth"
    }
  ],
  "serialNumber": "urn:uuid:ce0d41b5-0fe8-5383-bf31-ff353a05b8be",
  "version": 1,
  "$schema": "http://cyclonedx.org/schema/bom-1.6.schema.json",
  "bomFormat": "CycloneDX",
  "specVersion": "1.6"
}

Yocto 通过 meta-qt6 进行构建

Boot to Qt 使用 meta-qt6 层来构建所有 Qt 模块,当通过Boot to Qt 安装时,生成的 SBOM 文档会以 SPDX 文件的形式提供 Qt Online Installer安装时,生成的 SBOM 文档将以 SPDX 文件的形式提供。安装路径取决于 Qt 版本和目标硬件。

例如,对于 Raspberry Pi 目标平台,SBOM .spdx 文档位于:

<INSTALL_DIR>/6.12.0/Boot2Qt/raspberrypi-armv8/toolchain/sysroots/cortexa53-poky-linux/usr/lib/sbom/

如需了解更多信息,请访问以下页面:

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.