我不是供应商

点击查看目录

译者评论

本文作者观点是:不应该将自由和开源软件(FOSS)置于你的软件供应链中,而是寻找他们的供应商,因为只有能够为软件负责任的供应商存在才能作为供应链的一环。

在过去的几年里,我们看到了很多围绕软件供应链概念的讨论。这些讨论始于 LeftPad 时代,并随着过去几年发生的各种事件而升级。这个领域所有工作的问题在于它忘记了一个基本点。

在开始讨论这个基本点之前,我将定义供应链和一般供应商的含义,以及我们申请软件的原因。那么为什么将 FOSS(自由和开源软件)置于该定义之下的尝试被深深地误导了。

概念

在过去的几十年里,我们看到了 FOSS 的兴起。特别是,这可以极大地增加打包为库的代码片段的重用。这要归功于围绕这个想法蓬勃发展的庞大的基础设施生态系统。今天,每一种编程语言环境中都有一个包管理器,中央存储库保存着查找库和处理它们的分发所需的元数据。

这是可能的,因为 FOSS 许可证非常宽松,并且可以重复使用和重新混合这些库,否则会出现的大量法律和财务问题。一个现代软件项目可能有成百上千个这样的依赖项,从 OpenSSL 到测试框架或日期选择器,涵盖诸如 JSON 编码器/解码器库甚至它所部署的操作系统的 libc 之类的东西。

这种依赖关系的生态系统,其中许多是可传递的(依赖关系的依赖关系),就是软件供应链模型所称的项目供应链。在这个模型中,我们将找到有助于管理它的工具,例如软件物料清单 (SBOM),它应该包含一些关于这个项目使用了哪些库、在哪里可以找到它们、哪个版本、内容等的散列信息。

什么是供应链?

供应链的想法当然不是空穴来风。在制造业中,供应链是生产特定工厂产品所需的供应商的长链。例如,如果您组装一辆汽车,您需要座椅、大量螺丝、电缆、电子产品、各种冲压金属板……您的电缆供应商需要铜、塑料、能源,可能还需要各种机床。可能需要制造其他机床、螺钉、螺栓、螺母和一些电子设备……我们可以继续玩这个“你需要什么来制造这辆车”的漫长游戏,直到你的图表看起来像一个巨大的意大利面球。

然后德国一家不知名的小工厂里有人生病了,碰巧链条上有五层,每个层级都取决于他们的特定螺栓,都被我们搞砸了。这个问题的一个版本出现在为 Covid19 提供疫苗的早期,当时供应链专家意识到他们需要的玻璃瓶数量超过全世界一年的产量。

为了避免在这个链条上五个层级上出现最终会停止其有价值的生产的障碍,制造公司花了数年时间在流程的每个层次上与供应商建立关系。这既是一种非常深厚的关系,但往往还不够,但不是每个复杂系统都如此吗?

为什么要谈软件供应链?

好吧,因为公司不断发现他们的产品存在大问题,而这些问题并非来自软件工程师编写的代码。问题可能来自库的所有者决定停止提供对它的访问(例如 Leftpad)并破坏了一半的互联网。

或者它可能来自 OpenSSL 或 Log4J 等通用数字基础设施中使用的大型库,这些库中存在许多安全问题,使一半的互联网容易受到黑客攻击。

或者有人可以与拥有库的人交谈,获得他们的信任,让拥有库的人相信他们是来帮忙的,获得访问权限并向其中添加加密货币挖矿代码以获取利润(很多时候我不知道从哪里开始)。

或者代码的所有者不喜欢好战政权,所以他会添加代码来破坏在那些政权所在地使用其代码的计算机(是的,这种情况已经发生过)。

然后,这些公司的每个人都发现他们的产品可以从他们不知道的代码中“远程操作”。于是出现了“软件供应链”的概念,定义了供应链中的人需要做的所有事情,这些库的所有者,为了不破坏下游公司使用的代码,做个好公民。

这些规则管理诸如我们如何测试代码、我们如何保护有权访问它的人、我们如何发布版本、我们如何验证其安全性、我们如何组织代码工作、我们如何保护控制代码等等。

我不是供应商

这里有个小问题。我们不是供应商。对于编写和维护这些项目的每个人来说,我们不是供应商。我们与这些组织中的任何一个都没有业务关系。我们是根据这些许可编写代码并在线发布的志愿者。是的,我们把它放在网上供人们使用。但我们没有从中得到任何东西。

更糟糕的是,许多支撑我们所谓的数字经济结构的库都在努力筹集足够的钱来支付食物。关于这个话题,我强烈建议大家花时间阅读 Nadia Eghbal Road and Bridges 的报告,以了解问题的深度。它有点旧,因为它是在 HeartBleed 之后写的,但它在今天和当时一样重要。

或者为了更有趣、更直观的解释,XKCD 2347

XKCD 2347,一堆块的图像,标记为“所有现代数字基础设施”,一个小块保持整个堆栈稳定,标记为“内布拉斯加州某个随机的人自 2003 年以来一直在不知疲倦地维护的项目。
XKCD 2347,一堆块的图像,标记为“所有现代数字基础设施”,一个小块保持整个堆栈稳定,标记为“内布拉斯加州某个随机的人自 2003 年以来一直在不知疲倦地维护的项目。

我们知道。这就是为什么在这些许可中都管理着在这些库中在线发布的作品的重复使用规则,你会发现这一段是逐字复制的。

本软件“按原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定用途适用性和非侵权保证。在任何情况下,作者或版权所有者均不对因软件或其使用或其他交易引起的或与之相关的任何索赔、损害或其他责任负责,无论是合同、侵权或其他方面。

这里有太多法律术语,但我可以很容易地总结出来。如果你用这个,我什么都不欠你。绝对不。我们无所谓。我把它放在网上的条件是,如果你使用它,你将完全自行承担风险。

这意味着这里没有供应链。因为没有供应商。我不会把你从我这里买的东西送给你。没关系。我把东西放到网上是因为我想。你的产品依赖于它是你的责任。不是我的。不是提供者之一。我们提供图书馆。你不能对我套用这些规则。

老实说,我不会接受它们。我几乎没有花时间在我维护的 FOSS 库上工作,而且这样做常常让做这件事的人筋疲力尽。

现在,我很高兴成为供应商。你希望我以某种方式工作,我非常乐意这样做。但要做到这一点,我将不得不成为一名供应商。这意味着你将不得不开始付钱给我。价格公道,我们可以协商。在不同的许可证下。

在那之前,我不是你的供应商。那么你所有的软件供应链想法?你不是从供应商那里购买,你是在垃圾箱中挖掘免费代码。所以我建议你把这些规则放在同一个箱子里。记住。我不是供应商。 因为本软件“按原样”提供。

编辑本页