我所理解的开源软件供应链安全

点击上方“开源社”关注我们

| 作者:庄表伟

| 编辑:钱英宇

| 设计:谭嘉露

| 责编:王玥敏

1

供应链与断供

隐喻会帮助人,也会误导人。

当我们谈到“供应链”时,会产生哪些联想?环环相扣?缺一不可?掉链子?当我们这样去思考软件供应链,或者开源软件供应链时,同样的“意象”也会出现在我们的脑海里。

一条从不知名的远处延伸到我们面前的链条,这个链条的最后一环,是一款我们看得见、用得上的软件。

这个链条当中,有很多环节都是别人(美国)提供的。也许有一天,美国(人)一旦决定,拿回他的那一环。我们就断供了,延伸到我们面前的链条就断掉了,我们手中正在使用的软件,就消失了。

这就被称为————“断供”。

2

物质断供

当一个链条是由物质构成的时候,这个“意象”并不是幻想,而是实实在在的现实。比如:芯片断供,手机缺货。GPU断供,显卡涨价。

当我们想要把这个情况,引申到软件、甚至开源软件领域的时候,我们必须重新定义“断供”。

这就带来了各种“乱象”。

3

开源软件断供:分类
  • 无法下载

从中国,无法下载到美国(Github)上的开源代码。或者无法及时下载到最新的源代码

  • 无法参与上

一个开源社区,用规则或潜规则,拒绝中国开发者,导致中国开发者被排除在外。我们的开发者被禁止向上游提交代码,无法参与、回馈社区

  • 修改License之一:闭源

在某个版本之后,该软件不再提供开源代码

  • 修改License之二:排除特定类型用户

基于某种License(不允许商业使用、不允许邪恶用途、不允许特定国家使用)

  • 生态限制

开源本身不断供,但是开源所依赖的服务,无法使用

  • 代码托管平台断供

整个Github不允许你使用

  • 开源软件安全风险

具体某一款开源软件的某一个版本,存在安全漏洞,需要修复(或替换)

  • 项目缺少投入,无法继续发展(感谢 @Donald@CNCF@LFAPAC 的补充)

一款无人维护的开源软件(维护不及时,不到位),比如曾经的OpenSSL,就是一种值得关注的风险

4

《技术的本质》与其不足之处

首先推荐一本非常了不起的著作《技术的本质》(布莱恩·阿瑟),在这本书中,布莱恩提出了一些极其深刻的洞见。例如:技术的本质是对现象的驾驭。以及:技术是组合与递归的。

我想继续引申这个观点。类似于我们在做软件开发时,通常会定义的一个依赖文件。一款软件,会依赖一组其他软件(包),而这些软件(包)又会进一步的依赖某些其他的软件(包)。但是,随着包依赖描述的不断改进,我们会区分:开发期(Dev)依赖与执行期(Running)依赖。

在更加广泛的技术领域,我们也会发现类似的现象。我们发明一种新技术时(开发期),会依赖一组其他已有的技术。但是,当我们基于这个新技术,生产某一个产品时,会依赖另外一组技术(编译期),当我们的产品被实际使用时,还会依赖其他一些技术(执行期)。

当我们泛泛的分析技术时,可以发现其中的组合与递归结构。而当我们更加深入的分析技术的依赖关系时,会发现不同的依赖与递归结构。

5

依赖与风险

《技术的本质》告诉我们,依赖一定存在,而且无穷无尽。但是:依赖不能简单的等同于风险,至少不能等于同样大小的风险。

当我们对于开源软件,做供应链风险分析的时候。泛泛的树立一个假想敌,然后一概以风险视之,不但将风险不断放大,也将防范风险手段无限提升。

我认为:这并非一种理性的应对风险的策略。

6

换一种隐喻

如果我们将“链条”的隐喻,换成“生态圈”的隐喻,来看待软件、以及开源软件所面临问题。也许会更加有利于我们朝向正确的方向前进。

空气、水、土壤与风,是环境的一部分。温度、湿度、海拔也是环境一部分。对于一个生态圈来说,我们虽然也提“食物链”,但是很难想象:一个单一物种的缺失,会导致整个食物链的断裂,以及食物链上端的物种全部灭绝。所以:事实上现在描述生态系统时,常用的概念是“食物网”而非“食物链”。

作为软件行业的从业者,我们应该关注整个生态的健康程度,以及预防可能存在的“污染”和“破坏”。甚至,考虑到生态多样性,我们也的确应该支持更多类似的软件,甚至竞争性的平台。

但是:这并非一场“为了防止我的链条断掉”,而发起的一场“伟大战斗”。这是一场“建设更加丰富、繁荣的软件生态的运动”。

所以,我的提议是:不再提“开源供应链安全”,而是提“开源生态建设”

与诸君探讨。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/302471.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

82 个代码案例实践,带你学好 Python 机器学习

全世界有3.14 % 的人已经关注了数据与算法之美如果村里通了网,那你一定知道【AI】人工智能。如果你会网上冲浪,那你一定看到过【ML】机器学习。小编在网上看到一个段子:ML派坐落美利坚合众山中,百年来武学奇才辈出,隐然…

查询程序崩溃日志_PC 崩溃报告途径 amp; 临时解决方法

TC Sera (社区经理):你好!如果您在电脑游戏中遇到与 Nvidia 驱动程序相关的崩溃情况,请打开视频设置(Video Settings)中的诊断模式(Diagnostics Mode)并重新启动游戏。如果您遇到问题,请打包:%localappdata%\Gears5\Sa…

C# ConcurrentBag的实现原理

一、前言笔者最近在做一个项目&#xff0c;项目中为了提升吞吐量&#xff0c;使用了消息队列&#xff0c;中间实现了生产消费模式&#xff0c;在生产消费者模式中需要有一个集合&#xff0c;来存储生产者所生产的物品&#xff0c;笔者使用了最常见的List<T>集合类型。由于…

Linux里10个最危险的命令

全世界只有3.14 % 的人关注了数据与算法之美Linux命令行佷有用、很高效&#xff0c;也很有趣&#xff0c;但有时候也很危险&#xff0c;尤其是在你不确定你自己在正在做什么时候。推荐阅读Linux之父林纳斯自传《只是为了好玩》这篇文章将会向你介绍十条命令&#xff0c;但你最好…

让你立刻爱上数学的10个算术游戏

全世界只有3.14 % 的人关注了数据与算法之美死理性派的小编经常会被问到的一个问题&#xff1a;数学到底哪里有趣了&#xff0c;数学之美又在哪里&#xff1f;这篇文章精心选择了 10 个老少咸宜的算术问题&#xff0c;以定理、趣题甚至未解之谜等各种形式带领大家窥探数学世界的…

iPhone 的 Push(推送通知)功能原理浅析

第一部分&#xff1a;Push原理(以下绝大多数内容参考自、图片来自iPhone OS Reference Library)机制简介Push 的工作机制可以简单的概括为下图图中&#xff0c;Provider是指某个iPhone软件的Push服务器。 APNS 是Apple Push Notification Service&#xff08;Apple Push服务器&…

编程从业五年的十四条经验,句句朴实

全世界只有3.14 % 的人关注了数据与算法之美排列不分先后&#xff1a;1. 当性能遇到问题时&#xff0c;如果能在应用层进行计算和处理&#xff0c;那就把它从数据库层拿出来。排序和分组就是典型的例子。在应用层做性能提升总是要比在数据库层容易的多。就像对于MySQL&#xff…

.Net之Swagger基础使用

介绍Swagger 是一个规范和完整的框架&#xff0c;用于生成、描述、调用和可视化 RESTful 风格的 Web 服务。日常可以用于后端开发人员测试接口或者前后端联调使用。从.net5开始&#xff0c;swagger已经集成到vs2019编译器中&#xff0c;可以通过勾对选项“启用OpenAPI支持”显示…

孩子不是笨,他和“最强大脑”差的是这个!

小木最近看到一则消息推送&#xff0c;说家长辅导孩子陪写作业简直就是一道“送命题”。朋友圈更是掀起了一股“提前嫁儿嫁女”的热潮。为什么孩子对数学一点兴趣也没有&#xff1f;为什么再简单的一道题&#xff0c;换个数字换个形式&#xff0c;孩子就一问三不会了&#xff1…

c++ 隐藏进程_Linux 查看进程的动态信息

前言top命令经常用来监控Linux的系统状况&#xff0c;是常用的性能分析工具&#xff0c;能够实时显示系统中各个进程的资源占用情况目录一、描述二、top命令常用字段含义三、top中的子命令四、总结五、思维导图一、描述1、top命令经常用来监控Linux的系统状况是常用的性能分析工…

.net core针对async ()=的安全处理

最近在做一个功能需要传递一个委托作为回调逻辑处理&#xff0c;但在使用中定义了async ()>来处理awaiter逻辑那就存在一个安全问题了。了解async/awaiter的朋友一定清楚async void函数带来的致命风险&#xff01;async void会阻断异常路由&#xff0c;即当前函数没有try的情…

这三道题,总有一道你是答不出来的

全世界只有3.14 % 的人关注了数据与算法之美大家好&#xff0c;我是最近过得不太舒心的卢sir。经常被小思妹提的各种奇葩数学题搞得云里雾里的。我一看数学题就想做&#xff0c;没想到这些题目都是奇葩中的奇葩&#xff0c;不是那写错就是这计算错。为了捍卫我最后的倔强&#…

前端对div连线_《前端图形学从入门到放弃》003 三维世界

从本篇起&#xff0c;我们将正式进入webgl的3D世界本篇涵盖的内容包括&#xff1a;webgl它在干啥&#xff1f;如何画一个正方体&#xff1f;如何成为一个“有深度”的正方体&#xff1f;正方体要离家出走了&#xff01;webgl它在干啥&#xff1f;首先我们需要知道webgl的世界其…

通过R,让你的数据分析更简便!

R作为一种统计分析软件&#xff0c;广泛应用于生物、医学、电商、新闻等数据相关行业&#xff0c;是目前主流数据应用软件之一。为了更好地帮助大家了解并快速入门R语言&#xff0c;现超级数学建模携手柯老师以R语言为基础&#xff0c;向大家隆重推出《R语言基础》系列课。柯老…

r语言用行名称提取数据框信息显示na_学会这些R语言技巧至少可以节省半年时间...

ubuntu备忘定期清空回收站扩增子数据牢记r ubuntu 相关技巧和备忘待解决问题1&#xff1a;phyloseq有一篇文章案例使用输入和输出文件相同的文件名&#xff0c;无法执行待解决问题2&#xff1a;待解决问题3&#xff1a;样品分组文件太长了&#xff0c;导致提取出来数据存在NA值…

hibernate.cfg.xml的一些事

Hibernate连接数据库的配置文件书写一般有两种方式&#xff1a; 第一种方式&#xff1a;使用开发环境直接连接数据库最后生成hibernate.cfg.xml文件 第二种方式&#xff1a;使用已有的模版直接拷贝的工作的目录下&#xff0c;通过相应的修改获得需要的连接数据库的配置文件&…

配置静态路由下一跳为本地出战接口和IP地址的区别

配置静态路由下一跳为本地出战接口和IP地址的区别 在配置静态路由时&#xff0c;下一跳可以使用下一路由器的IP地址&#xff0c;也可以使用本路由器的出站接口。在点对点的网络中&#xff0c;两者可能没有什么差别&#xff0c;但在以太网中或者NBMA网络类型&#xff0c;两者有很…

使用 Source Generator 自动生成 WEB API

使用 Source Generator 自动生成 WEB APIIntro上次我们介绍了使用 Source Generator 的应用&#xff0c;有小伙伴留言说想要自动生成一套 ABP 相关的东西&#xff0c;我对 ABP 不怎么熟悉&#xff0c;所以写了一个简单版的雏形&#xff0c;可以根据自定义的模板去动态生成&…

Excel中的散点图这么强大,学习了!

全世界只有3.14 % 的人关注了数据与算法之美平时见得最多的也许是柱形图了&#xff0c;但我个人最喜欢的却是散点图。在讲散点图之前&#xff0c;我先阐述一个不太严谨的个人观点。我认为&#xff0c;所有的数据图表都可以分为两类&#xff0c;一类是偏重于展示&#xff0c;一类…

mysql修改字段的顺序_Mysql中如何修改字段的排列顺序?

创建数据表的数据,字段在表中的位置已经确定了。但要修改字段在表中的排列位置,则需要使用ALTER TABLE语句来处理。在MySQL中,修改字段排列位置的基本语法格式如下: ALTER TABLE MODLFY 字段名1 数据类型 FIRST|AFTER 字段名2 在上述格式中,“字段名1”指的是修改位置的字段…