乐趣区

关于开源:再谈开源软件供应链安全

本文转自开源社 KAIYUANSHE
作者:庄表伟

缘起

之前写过一篇文章《我所了解的开源软件供应链平安》,过后的状况,还没有呈现一些值得探讨的,堪称紧迫的热点事件,所以我也仅仅是泛泛而谈,到最初留了一句话:「我的提议是:不再提“开源供应链平安”,而是提“开源生态建设”。」

在最近一段时间,接连呈现了 Log4j2 事件,与 Marak Squires 删库事件,一时间大家都议论纷纷,我也感觉本人有责任,来更加深刻的探讨一下,这个方面的问题。

时代曾经产生了变动

在 B 站上,有一位驰名的 Up 主:半佛仙人,发了一篇文章,起初还专门录了一期视频。因为是“在行”的缘故,所以会受到很多的批评与指摘。其实我感觉他说得大抵上都很有情理,作为一位热心人士,踊跃找程序员敌人交换,尽量深刻了解开源,而后再发表本人认识,曾经十分不错了。

至多半佛的一个观点,我特地同意:时代曾经产生了变动。咱们只有意识并了解这些变动,而后才谈得上“如何应答”。

比尔盖茨的一封信

1976 年 2 月 3 日,驰名的微软公司的创始人,公布了《致电脑爱好者的一封公开信》。这封信在开源社区,预计无人不知、无人不晓。关键在于上面这段话:“谁会从事业余的软件开发却分文无获。哪有业余爱好者会破费 3 集体年的精力去编写软件,去修改软件,编写使用手册却收费发放给他人应用?”

在很长一段时间里,开源社区的人都视微软是开源的敌人,而且经常喜爱拿段话进去“打脸”。当初就是有那么多人,那么多技术水平高超,却不求回报的人,违心破费极其惊人的工夫,去写软件,修 bug,写文档。甚至还有社区经营、技术布道等等诸多工作。

“你们这些资本家们无奈了解的事件,正在这个世界上产生着,而且越来越多”。

晚期的黑客是一群什么人?

有一些事件,的确很难了解。尤其是像半佛这样的人,无奈了解那些晚期黑客的动机。因为依照“感性经济人”的假如,那些黑客齐全是在做一些一味付出,不求回报的事件。

事实上,咱们能够从两个角度,来了解黑客的逻辑。

  • 对于回报:如果咱们扩大经济人假如,将回报,不仅仅局限于经济上的,金钱的,间接的回报。而是依照功利主义的定义:“效用最大化”。所谓效用,包含幸福、高兴、满足等等情感体验。通过取得经济支出,当然是一种形式。然而:社会位置的晋升,甚至仅仅是在社区范畴内的备受尊敬,也是一种形式。更有甚至,仅仅是发明一个从未存在过的事物,这种发明的喜悦,就足以回报那些黑客的全副投入。
  • 对于将来:黑客、程序员,兴许是最喜爱科幻小说的人群了吧。不仅仅是喜爱,而且他们甚至心愿可能促成某种将来的早日实现。如果本人写的代码可能帮忙这样的将来早日实现,如果与一群黑客一起致力,可能推动这样的世界早日来临,简直每一个黑客都会违心倾尽全力。

所以,简略的总结就是:晚期黑客们,在致力推动将来早日实现的过程中,曾经取得了他们心愿失去的回报。

供求单方,从合一到拆散

咱们能够援用一段自由软件的定义:“自由软件”尊重用户的自在,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着用户能够自在地运行,拷贝,散发,学习,批改并改良该软件。

起初在社区里有一些不同的声音,在质疑这样的定义。为什么只谈用户的自在,却不谈“作者”的自在?为了用户能够自在的运行,拷贝,散发,学习,批改并改良,就能够不论作者的利益了吗?作者为啥不能自在的定义本人的受权协定?想授予就授予?想发出就发出?

其实,本源还是在于时代不同了。在自由软件,甚至开源软件刚刚诞生的时候。软件的供求单方,是一个严密的整体。社区里的人,既是一些软件的开发者,也是另一个软件的使用者。所谓“尊重整个社区”就是这个意思。尊重整个社区的自在,就是为了整个社区的利益。

在晚期:开源与互联网简直就是一对双生子,他们一起成长,相互搀扶。风借火势,火借风威。然而,慢慢的,开源社区与软件产业、互联网产业,以及由互联网产业成长起来的云计算行业,不再是一体的了。在这个过程中,供应方产生了变动,需求方也产生了变动。要想再欢快的一起游玩,就须要从新思考各自的定位了。

所以,上面我将从拆散之后的供求单方,来剖析这个问题。

从“礼物文化”到“注意力兑换”

在 Eric Raymond 的《大教堂与集市》中,有一个最经典的比喻,就是礼物文化。咱们援用其中的两段:

在礼物文化下,其成员通过送出礼物而竞争社会位置。

礼物文化并不是对物质稀缺的适应,而是对物质富余的适应。富余性会使命令关系难以维持,会使替换关系变成无意义的游戏。在礼物文化中,社会位置并不取决于你管制了什么,而是你给予了什么。

礼物的价值,是由礼物自身决定的?

咱们来剖析一下礼物这个比喻的外延。一个人送出了一个礼物。人们依据这个礼物的贵重水平,而“赋予”这个送礼者,相应的社会位置。

这意味着三个并未明确讲述的因素:

  • 礼物的价值是客观存在的吗?是能够被主观、精确、以公认的形式断定的吗?
  • 人们,留神这里的人们,到底是一百个人,还是一万个人?这些人的数量应该会有多少,他们如何达成共识?
  • 所谓社会位置,到底是什么?尊重,礼让,还是某种“注目礼”?

开源软件的价值,当初是由“价值 + 关注度”决定的

假如咱们还是沿用“礼物”这个思路,来看当初的开源软件,咱们须要如何来掂量一个人做出了多大的奉献?或者说“送出了多贵重的礼物?”

先辨别两种状况,一个人独立开发出一款开源软件,作为一个礼物。一个人参加一个开源我的项目,在其中奉献了一部分“代码、文档、探讨、布道等等”

  • 首先应该是软件价值自身,一个加密软件,应该比一个加法软件,更有价值。
  • 其次是这个软件到底对多少人有价值?一个只对一百个人有用的软件,必定不如对一百万人有用的软件,那么有价值。
  • 而后就是抢夺关注度的状况了,一款对一百万人有用的软件,当初只有一百个人晓得,这个软件的价值说到底也不大。

当初来计算礼物的价值:一个人,做了一个开源软件,有多少人晓得这个软件,而且晓得是他做的,而且认可他的工作。这个数量,大略能够用来推算他所奉献的礼物的价值。

如何将注意力兑换成其余事物?

自从互联网风行当前,尤其是互联网上收费的商业模式流行起来当前,大家都谈判一个词,叫做“流量变现”。其实在开源软件畛域,简略的“礼物文化”,也须要降级为“注意力兑换”。

以前的逻辑是:一个人奉献礼物 –> 取得社会位置

当初的逻辑是:一个人奉献礼物 –> 吸引了多少注意力 –> 这些注意力可能兑换多少社会位置

当然,咱们也能够将兑换这个词,用来形容更多的景象。

  • 兑换心田满足(有人用,我就很开心)
  • 兑换社会位置(更高的社会评估)
  • 兑换就业机会(跳槽到大厂)
  • 兑换风险投资(有投资人看中这个开源软件)
  • 兑换保护合同(有企业级用户应用,违心找你保护)

然而,所有的这些,还须要一个前提:注意力。如果没有足够高的关注度,你啥也兑换不了。

事实上,晚期开源那种“爱用就用,别来烦我”的态度,当然没有问题。然而:那样不够“敌对”,也就会影响关注度的疾速晋升。无论是在社区疾速响应,和颜悦色的答复问题,疾速修复 bug,其实都是一种吸引更多注意力,留住更多关注度的方法。

尽管这么说有些仁慈,然而我还是想说:“Marak Squires 的做法错了,一款开源软件有几千万次下载,并不可能主动兑换成社会位置,个人收入或者其余货色”。

供应链、责任链与利益链

上面再来说说需求方的问题。当初咱们经常说:软件吞噬世界,开源吞噬软件。然而,咱们为啥还会接着说:云计算吞噬开源呢?

  • 软件吞噬世界:全世界都运行在软件之上
  • 开源吞噬软件:简直所有的软件,都有开源的成分,甚至齐全就是开源
  • 云计算吞噬开源:云计算靠开源赚到了钱,然而并没有分给开源

当然,这外面的每一句话,可能都有些问题。

由开源软件的依赖关系,天然造成的供应链

在上一篇文章中,我写了这么一段话:“咱们在做软件开发时,通常会定义的一个依赖文件。一款软件,会依赖一组其他软件(包),而这些软件(包)又会进一步的依赖某些其余的软件(包)。然而,随着包依赖形容的不断改进,咱们会辨别:开发期(Dev)依赖与执行期 (Running) 依赖。”

在那段话里,我只是心愿阐明“依赖不等于危险”,由软件依赖关系造成的整个网络,能够称之为:“开源供应链”或者“开源生态”,却不能简略的等同于供应链危险。

然而,我并没有进一步剖析:开源软件的供应链与个别的供应链,有何区别?以下一段文字,要特别感谢李大维老师,因为与他的交谈,让我意识到这一点。

传统的供应链,是一级与一级之间,都签了合同的。

然而在软件,尤其是开源软件的供应链,每一级之间,都有免责条款。

免责条款

事实上,有两种免责条款。一种是大多数开源软件的受权协定里写的。比方在 GPL 2.0 里。

因为本程序是收费提供的,所以在法律许可范畴内,本程序是没有担保的。除非有书面阐明。本程序是“AS IS”的,没有任何明示或暗示的保障,比方默认的适销性、适用性这些保障都没有,对于本程序的性能和性能导致的危险都由用户本人承当,(你单位用我作品出了事,你可别想拉我当垫背的,大公司都不背这锅,你让我一个不挣你钱的背?)如果我这作品真有缺点,你本人想方法搞定,你能够花钱买服务,这种公司又不是没有。

摘录自卫 Sir 的《人话版 GPL 2.0 协定》

再比方在 MIT 里:

本软件是“按原样“提供的,不附带任何明示或暗示的保障,包含没有任何无关适销性、适用性、非侵权性保障以及其余保障。在任何状况下,作者或版权持有人,对任何权利追索、损害赔偿以及其余追责,都不负任何责任。无论这些追责产生自合同、侵权,还是间接或间接来自于本软件以及与本软件应用或经营无关的情景。

摘录自卫 Sir 的《开源程序员失望毁库跑路的背地》

另一种是互联网服务的免责条款、云计算服务的免责条款、商用软件的免责条款。

这里就不再摘录了,因为那种法律文本,往往都很长很长,在你应用之前,你简直是不会去读完的。然而:你必定曾经点过“确定”或者“承受”按钮了。

利益断裂

一方面是供应链的延续性,另一方面是责任的断裂(罢黜)。于是,咱们就会发现一个理论存在的景象:因为责任链条断裂,所以利益链条也断裂了。

因为事实上软件呈现问题之后,厂商可能损失的金额并不太高,所以在平时厂商也没有任何能源,投入足够的人力与估算,去确保他所用到的开源软件的供应链平安。

前两天听到的一个课程,在介绍影响寰球互联网产业的美国《通信标准法》230 条款。互联网公司被罢黜了波及用户生成内容的法律责任。一方面这些内容的存在不会侵害互联网厂商的利益,另一方面,互联网厂商又能够出于“出于良善的信念”自行删除或治理这些内容。

这当然大大降低了互联网厂商的法律危险与投入老本。再加上他们所用到的开源软件,又是无需领取费用的。这才带来了互联网产业的高速倒退与现在的凋敝。

冰山景象

与此同时,咱们还在开源社区里,踊跃的宣传礼物文化。“富余性会使命令关系难以维持,会使替换关系变成无意义的游戏。”

后果就变成了:开源世界的冰火两重天

  • 一座冰山是“开源我的项目”,海面之上看失去的开源我的项目,只是开源世界里的极小局部

海面之下的开源我的项目,不仅重要,而且是海面上的开源我的项目,存在的根底

然而,海面之下的开源我的项目,简直没有商业价值,也没有投资前景

  • 另一种冰山是“开源贡献者”,海面之上的开源开发者,只是开源社区里的一小部分人

他们确实做出了极大的奉献,也因而享受到了“礼物文化”

海面之下的开发者,他们的奉献甚至被忽略了,社区的尊敬位置,简直与他们无关

生态责任

当咱们来谈开源软件的供应链危险,或者开源生态的问题时,首先须要达成一个共识:当初的开源生态,确实存在问题,而且是一个亟待解决的,重大的问题。

基于这一共识,咱们才可能来探讨,在这个生态之中,有哪些角色,各自有什么责任?

开源开发者的责任

大家应该都能抵赖,开源是一种软件开发的合作形式。对于某些人来说,开源甚至是一种娱乐形式。当然,如果有公司违心雇佣你写开源代码,开源也是一种很不错的工作形式。然而,如果你心愿将开源作为本人的生存形式,要么你家里有矿,要么你十分善于兑换注意力。否则,难免会伤心悲观。

尽管咱们都认为,开源是一种纯集体的行为,然而单纯的发泄不满。最多引发同情,却未必会失去反对,更是难以获取本人真正想要的后果。

作为一个感性行动者,晓得本人想要什么,也晓得本人将要付出什么,才是一种负责人的做法。

开源使用者的责任

“只有足够多的眼球关注,就可让所有软件缺陷浮现。”,或者说“只有有足够的测试员及独特开发者,所有软件缺陷都会在很短时间内被发现,而且可能很容易被解决。”这句话被称之为 Linus 定律。当初我想要通知这些开源软件的使用者,当初的开源软件曾经越来越多了,眼球曾经基本不够用了。

假如“开源软件没有品质问题,不会给你带来平安危险,完全免费,拿来就能够用。”是一种齐全不负责任的冒险。

开源软件并不是“收费”的,任何应用开源软件的企业,都须要为本人的应用负责,要留出估算,要么找到合格的员工,要么找到合格的服务商,来帮你应答这些危险。

开源基金会的责任

一款开源软件,如果呈现平安危险,这个开源软件的社区,应该要疾速解决。如果这款开源软件被捐献给某个开源基金会,那么这个基金会也有任务,为这个开源软件的品质负责。

为什么?因为:你的品牌与声望,为这款开源软件背书,使得更多的厂商抉择了它。那么:如果它内含危险,你的品牌与声望,就放大了这些危险。

作为一个基金会,你收到的捐款,应该更多的投入到保障软件品质的工作中去!

开源布道师的责任

不要只是介绍“礼物文化”,不要重复的强调“Just for Fun”。不要仅仅宣传 Linus 眼球定律。在布道的时候,还须要介绍更多的真实世界的状况。

政府的责任

2022 年 1 月 13 日,白宫就 Log4j 破绽与公私实体召开了开源软件平安峰会。其中一名高级官员示意:“开源软件尽管减速了翻新并推动了微小的社会和经济效益,但其宽泛应用且由志愿者保护的事实是重大的国家平安危险,正如咱们正在经验的 Log4j 破绽事件。它并非新问题。本次峰会咱们将探讨如何解决这个问题,失效的解决方案是什么以及咱们还能采取哪些口头来爱护咱们都在依赖的开源软件平安。”

援用自《白宫和科技巨头在开源软件平安峰会上说了啥?》

在我看来,各个政府,应该都会有所口头才是。

结束语

这篇文章,曾经太长了,援用一段我在《2021 年中国开源年度报告》中的前言,作为结尾吧。

在开源还只是一个小众群体的业余爱好时,简直做任何事件,都是自在的。然而,在软件吞噬世界、开源吞噬软件的明天,开源技术,曾经成为整个世界的基础设施之一。能力越大,责任越大。利用越广,危险越高。咱们应该如何思考与保障开源供应链平安呢?应该如何建设更加衰弱的开源生态呢?在这样一种生态中,各方的责任又该如何界定呢?

愿与诸位独特摸索。

退出移动版