软件材料清单

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

从 Qt 6.8 开始,Qt 的编译系统可以为不同的平台和编译配置生成 SBOM 文档。该 Qt Online Installer将 SBOM 文档放置在位于相应 Qt 版本安装目录下的sbom 目录中。例如,对于 Qt 6.9.0 Android arm64-v8a 安装程序,SBOM 文档位于:

<INSTALL_DIR>/6.9.0/android_arm64_v8a/sbom/

要自己从 Qt 源生成 SBOM 文档,可将-sbom 设置为configure选项。

例如,在配置步骤中:

./configure  -sbom

然后,生成 SBOM 文档就会成为常规 Qt 安装的一部分:

ninja install
cmake --install .

该构建过程会按照SPDX格式的规定,以 JSON 和tag:value 格式创建 SBOM 文档。

有关 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 Licensing提供了有关许可选项的更多信息。

  • 版权声明 - 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.9.0:*:*:*:*:*:*:*

    更多信息,请参阅CPE 规范页面。

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

    软件包的 PURL 示例如下

    pkg:generic/TheQtCompany/qtnetworkauth@6.9.0

    更多信息,请参阅软件包URL 页面。

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

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

第三方 SPDX 包

第三方组件的 SPDX 包通常至少包含以下内容:

  • 名称、版本和说明
  • 主页和下载位置
  • 在 Qt 中的使用
  • 许可证和版权信息
  • 该组件是否对安全至关重要--代码可能会处理不受信任的代码

SBOM 示例

以下是Qt Network 授权模块的 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

使用 meta-qt6 构建 Yocto

Boot to Qt使用 meta-qt6 层构建所有 Qt 模块,生成的 SBOM 文档可在通过Boot to Qt 安装时作为 SPDX 文件使用。 Qt Online Installer.安装路径取决于 Qt 版本和目标硬件。

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

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

有关详细信息,请访问以下页面:

© 2025 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.