
【开源生态60问】——开源生态与开源供应链是什么关系?
开源生态与开源供应链是两种不同的看待开源世界与描述开源世界的角度。前者从生态的眼光来看待开源,而后者从数字世界“生产过程”的角度来看待开源。前者更加看重生态的“繁荣与和谐”,后者则是从消费者的角度出发,看重“供应”是否稳定、可靠、顺畅。由于供应链的视角较为“狭窄”,也可以认为:开源供应链只是开源生态的一部分,而不是全部。
如第2章,第10问所述,开源生态是一个基于协作与共享的社会经济系统。而开源供应链聚焦于开源软件从开发到应用的供应网络。现代软件项目平均依赖数百个开源组件,这些依赖关系形成了复杂的供应链网络。一个典型的应用可能直接依赖20-~30个库,但这些库又可能各自依赖数十个其他组件,形成多层次的依赖树。
1. 开源生态与开源供应链的结构关系
首先,开源生态是开源供应链得以存在的基础。开源生态提供环境,开源供应链则是其中的物质和信息流动。
从开源技术发展的角度来看:每一个开源项目的诞生都是源于某种“实际存在的需求”,而这些需求不仅仅是最终用户的使用需求,也可能是某个开源软件的功能与技术需求。从软件架构的角度看,一个具有一定共性的技术需求就值得通过一个具有一定独立性的模块来实现,而这样的模块逐渐就具备了从一个项目中脱离出来,独立成为项目的趋势。
待到开源软件的生态发展越来越成熟,开发一个新软件时,不再需要从第一行代码开始写程序,而是先在开源世界里寻找已经可用的模块、组件、框架甚至成品,然后再稍作修改,或者拼拼搭搭,用于组成符合需要的软件。在软件领域非常重要的哲学“不要重复造轮子”(DRY),使整个开源生态本身变得越来越繁荣。
随着各种现代编程语言都开始支持基于网络的在线包管理工具,复用已有的组件变得顺理成章,甚至非此不可。docker之类的工具出现使更大复杂度的重用也变得可能。到了现在,从网络上“拉取”一些组件回来后继续开发,变成一种在开源世界里随处可见的操作。
现在,顺着开源供应链的脉络去理解,才有可能把握整个开源生态的全貌,而不是将开源世界理解为一个一个互不相关的开源项目。
再进一步,需要从软件架构的依赖关系出发,看到背后的开发者的“身兼多职”的现象,一个开源开发者既是一个开源项目的主力开发者,又是另外一些开源项目的业余(非长期的)贡献者,因为在他开发一个项目的过程中,自然产生了对其他生态相关项目的贡献需要。甚至,他很有可能成为另一个开源项目的创始作者。最著名的例子可能是林纳斯在开发Linux的过程中,“并不那么情愿”地成了Git的创始人。
2. 开源生态治理与开源供应链治理的区别
“治理”(governance)这个词用在开源领域通常是指某种管理行为。开源生态治理主要关注社区治理模式(见第2章,第12问),多项目协同、文化建设、社区包容性等软性因素,通常会发生在社区里。而开源供应链治理更注重技术性、规范性,强调依赖关系、组件来源、软件物料清单、漏洞管理等相关的企业内部的实践(见第2章,第18问),但是随着开源软件复杂度的上升,大型开源项目也涉及自身的开源供应链治理的问题。
开源生态治理的核心目标是能够使整个生态更健康(见第2章,第14问),虽然最新潮流会让我们更多的关注“健康指标”这样看起来更加科学的内容,但是更基础的“人际沟通”“团队管理”“人员激励”等工作,更像是“社区管理的艺术”而非简单直接的最佳实践组合。在开源基金会的层面,则不只是关注单一项目的开源生态健康与繁荣,而是会思考更复杂的整个“生态圈”如何保持繁荣的问题。
在整个开源生态层面,需要考虑的是参与开源生态的各方角色,各自的利益与诉求,如何通过开放式协作得到满足,以及在这样的过程中他们又需要付出哪些努力、提供哪些资源。而所谓开源生态治理,本质上是一种开放式协作的架构设计。通过与多方协商,互相妥协,最终达成某种合作共赢的利益架构,这是想要维持开源生态的真正挑战。
开源供应链治理的核心目标是确保(尤其是企业的)软件DevOps全过程都能够顺利进行。因为存在下文中会详细描述的各种各样的开源供应链风险,软件可能会无法正常发布,或者在发布之后由于各种疏漏给企业带来重大损失。而所谓开源供应链治理,就是在选型、设计、开发与发布软件的全过程中引入对开源软件的精细化管理,从而避免潜在的风险。
下节预告:如何理解和防范开源生态风险与开源供应链风险?
转载自 庄表伟 阅读思考与生活 【开源生态60问】——开源生态与开源供应链是什么关系?


