现代软件开发极其复杂。如今的软件总是由组件组合而成。这些组件通常是模块和库,被其他代码调用,甚至是用作其他程序的独立程序。
直到几年前,80/20 法则仍然有效:在任何重要的软件中,80% 的内容不应该是你自己的。试图开发任何软件超过 20% 的内容在经济上毫无意义,因为很可能有人已经构建了具有必要功能的组件。相反,专注于开发能够给你带来竞争优势的东西。近年来,这种平衡甚至可能已经转移到 90/10。
这就是软件物料清单 (SBOM) 的用武之地。它是一份正式记录,包含构建软件中使用的所有组件的详细信息和供应链关系。这些组件可以是开源或专有的,免费提供或付费的,广泛可用或访问受限的。SBOM 中存在的信息可以以多种方式使用,帮助回答关于软件的各种合同、法律或技术问题。
早期提供 SBOM 的努力主要是受到法律合规性的驱动。每个软件组件都受特定许可协议的约束,这些许可协议可能会对其使用施加一些义务。为了在法律上合规,必须满足所有许可协议的所有义务。这很简单,但不容易实现。显而易见的第一步是记录所有组件和所有许可协议,这正是 SBOM 的作用。
然而,在过去几年中,由于软件供应链攻击,推动 SBOM 采用以及需要了解每个软件内部确切组件的驱动力一直是安全。现在,某些类型的软件交付预计会附带 SBOM。例如,美国行政命令 (EO) 14028 建议美国政府机构开始要求他们采购的任何硬件或软件产品都提供 SBOM。
什么是软件物料清单 (SBOM)?
在概念层面上,SBOM 就像一个简单的目录:它是软件组件的综合列表,包含名称、版本、来源以及可能关于许可、漏洞、出处或任何其他感兴趣领域的附加信息。由于它很容易理解,因此这些信息可以用多种格式表示:如表格、文本文档、电子表格等等。为了使信息有用,交换双方应理解并同意相同的格式。
软件数据包交换 (SPDX)
十多年前,一群代表不同公司的感兴趣人士开始着手定义一种通用的标准化格式,他们称之为软件数据包交换 (SPDX)。每个人都同意,这个标准不应成为任何特定公司的竞争优势,因此这项工作完全遵循开源原则进行,任何想贡献的人都可以公开参与。
SPDX 是用于交流 SBOM 信息的开放标准。去年,它被批准为国际标准 ISO/IEC 5962:2021。SPDX 规范是通过协作方式产生的,汇集了大量参与者,他们根据自己的兴趣和专业知识组织成工作组。自成立之初,英特尔就积极参与了许多小组,例如定义 SPDX 规范的技术团队、从事 SPDX 许可列表的法律团队以及推广 SPDX 使用的推广团队。
SPDX 采取的方法是,SBOM 中存在的信息应该是事实性的。例如,它只是记录每个软件组件声明的许可协议,并避免对许可条款或义务进行法律解释。SPDX 的另一个重要特征是,信息可以以多种格式编码,例如结构最少的纯文本、JSON、XML、RDF,甚至电子表格。
SPDX 文档的结构是分层的。除了与文档本身相关的信息(如作者和日期)外,信息还以逐渐精细的级别呈现,对应于软件包、文件或代码片段。几乎每个级别的所有信息都是可选的,因此可以生成提供总体视图的 SBOM,也可以生成包含极其详细信息的 SBOM。格式的灵活性使其非常适合任何数量的实际用例。例如,SBOM 的接收者可能只对安全漏洞信息感兴趣,而另一个接收者可能关心不同组件受哪些许可协议约束以及它们施加的法律义务。
许多工具可以处理 SPDX 文档。根据功能和工具在软件供应链中运行的精确点,可以对工具进行完整的分类。例如,SPDX 文档可能在软件构建时生成,也可能在构建完成后通过分析已构建的软件生成。其他工具使用这些信息,可以分析、转换、比较或合并 SPDX 文档。
工作组目前正在设计下一个主要版本。SPDX 版本 3 是一项重大努力,将 SBOM 信息重组为模块化、分隔的部分。例如,这将使 SBOM 能够特别强调安全和漏洞信息,并减少关于许可细节的内容。鉴于 SBOM 的用例不断增加,这种模块化方法有望实现更广泛的采用。
英特尔计划在 2023 年推出 SBOM 来配合其软件产品。同时,open.intel 的成员也将继续积极参与定义新版本 SPDX 的工作。
评论已关闭。