开源软件供应链之道
Mon Jan 15, 2024 | 7000 Words | 大约需要阅读 14 分钟 | 作者: 「开源之道」·适兕 |
供应链最初是一个企业用语,用于探讨企业之间的物品流通关系。英国商业顾问 Keith Oliver 是率先将“供应链一词推向商业化使用的人之一。通过”供应链管理“,企业得以打破生产、销售和财务之间的界限,实现从原料产地、制造工厂一直到终端消费者的协同。1982年诞生的这个词,彻底改变了人们对全球货物供应和运输的看法。 ———— 林雪萍 《供应链攻防战》[1] P26
对《供应链攻防战》一书的初步印象
初识林雪萍老师,是在刷微信视频的时候,中信读书推荐,一个大概有不到三分钟的谈到外企工厂迁出对于本土未必是件好事的论证让我深为折服,于是果断下单买了他刚刚发布的新书《供应链攻防战》[1]。作品本身写的非常赞,从书中翔实的数据,以及多个行业的论述,确实是叹为观止,尤其是芯片、服务器等个人从事的行业所在领域,论证的头头是道。从连接力、控制力、设计力三个角度探索了供应链的内涵,尤其是那句:
供应链是隐藏的国力!
堪称一语道破天机,就像《软技能》[2]的编者罗振宇所提及的那个水龙头的段子一样,这本书让我们看到了很多作为“链主”的界面产品背后庞大的供应,从汽车、新能源、光伏、芯片、服务器、软件等等现代的产品,如果我们仅仅停留在每天使用的产品表面上,那么我们可能就是非常感性的认知所谓的品牌:华为、Apple、小米、大众、比亚迪等,而不是这些品牌的产品:手机、电脑、汽车等背后所使用的零部件:外壳、注塑、电容、电池等等庞大的产业链条,当然,更加不会知道打火机:高效的组织能力,让成本降到最低,才是最有竞争力的产品。
该书不仅从过去的全球发展阐释了供应链的形成,成就了全球经济增长和现代繁荣,还分析了其中的缘由,分析了供应链形成的各类要素,在全球面临变化和挑战之时,并给出了如何应对供应链的危机。
《供应链攻防战》对Linux发行版的错误解释
谈全球化、谈供应链,不可绕过现代信息和数字化时代的软件产业,当然也就绕不过开源这种生态形式,书中也将开源作为生态形式中的一种而夸赞不已,对于RISC-V的开源芯片的介绍和分析是非常不错的,但是令我大跌眼镜的却是作者在谈及Linux发行版即开源操作系统的部分时,却犯了相当大的错误,错误到连他自己前面提及的理论都完全不顾,似乎是硬生生的被嵌入广告一样的生硬、突兀和令人生厌。
在《供应链攻防战》书中的192~194页,“寻根:逆流而上的根控制力” 一节中,将桌面Linux发行版的解释为平替,实在是荒唐和谬误。该错误最大的罪恶为误导读者认为Linux发行版是“二级系统”,这完全是对作者本身连接力理论的颠覆,自相矛盾的说法。
下面笔者就Linux发行版这个开源生态系统,给读者讲述一下,开源的供应链真正的连接力、控制力和设计力在哪里,对于deepin的错误认知进行批判。
Linux发行版是如何造就的?
一些原先做过的工作简要概述
笔者在早几年翻译过 John Mark Walker 先生的几篇关于开源软件供应链的文章:
在2020年9月的时候,我也写过一篇评判当时发生的一些平替的声音的文章:请保持清醒:开源是和世界同步的绝佳机会!,在其中扼要的论述了一下Linux发行版的隐藏的势力:像冰山一样的巨大部分是不被看见的。
一个Linux发行版是如何形成的?
Linux 内核项目创始人Linus torvalds 在纪录片《Revolution OS》[3]中表述过,其实用户是不在意操作系统的,大多数用户交互的部分是应用软件的界面,如办公套件、游戏和音视频等,所以人们使用电脑的时候,其实并不会在意后台运行的是谁写的代码,开源还是闭源,即使是Windows系统,大家更在乎的是浏览器、微信、QQ等应用。而这些软件项目的背后是超过几千人,甚至万人的团队,也涉及了超大量的软件代码库。
Linux 发行版是一种统称,意指采用了Linux内核实现的操作系统,能叫得上名称的发行版目前大约有近300种[4],但是主流的也就是十多种,这个符合事物的客观规律,能做的出色的永远只有少数。这就是《供应链攻防战》书里提到的界面链主,能够被用户识别的“集成商”,从数十万个项目中筛选后打包分发。
想要理解Linux 发行版工作,其实是需要一段时间的累积的。也就是说,就像所谓的供应链专家那样,需要从事多年才能摸清楚其中的门道。笔者作为布道者,对于给非计算机背景的人介绍时也非常的困难,不得不用大家日常熟悉的东西做比较。
其实,最好的布道,是能有机会让大家上手试验,这也是我给实习生通常布置的任务就是体验LFS[5]的整个过程。 LFS 是从零开始整合一个Linux系统,就像是人类到了荒芜之地开辟新生活一样:
LFS 项目存在的一项重要原因是,它能够帮助您学习 Linux 系统的内部是如何运作的。构建 LFS 系统的过程将展示 Linux 系统的工作原理,以及其各组成部分的协作和依赖关系。最棒的是,有了这些经验,您将能够定制 Linux 系统,使其满足您独一无二的需求。 LFS 的另一个关键优势是,它允许您掌控您的系统,而不用依赖于其他人的 Linux 实现。在使用 LFS 时,您就像坐在驾驶座上一样,亲自掌控系统的各个部分。
从头以源代码的方式构建一个系统,会发现另外一番天地,我们会看到最为基础的部分,不仅仅是哪些在系统界面中无法看到的软件包的名称,还能看到每一行运行代码的出处。比如最基础的Coreutils
、Binutils
这些最为底层的程序。正是这些不为人知的项目奠定了能看到部分的基石。
如果你能成功刷一遍LFS,那么就有了一个基本的操作系统了,虽然不是最小的,但是为安装和应用程序做好了准备,如果需要图形界面程序,则需要安装和运行,诸如Gnome[6]等系统。如果所有都以源代码方式来处理的话,那么这个时间和学习成本是极高的,以月来计算毫不为过,但凡一个错误,则可能需要找很多天,它们层层叠叠、相互依赖。于是,用于简化和管理软件的包管理器出现了,那就是如RPM、DEB等,然后就是我们经常所知道的发行版,如Fedora[7]、Debian[8]等。
Fedora、Debian等发行版包含了大约7万多个软件包[9],这7万多个软件包,来自于7万多个开源项目,有大家熟知的gcc、kernel、python、perl、mysql,也有大家难以察觉的anaconda、kerberos、chrony、OpenSSL等项目,而每一个开源项目的背后,都有一个开源共同体作为组织支撑着,这个共同体有的是单个人,有的是商业公司支持、有的是学术团体开发,而所有的这些都是开源操作系统的一部分,都有其用武之地。
从供应链的角度,我们就像《I,Pencil》[10]那样完成了一次全球化之旅,相比于工业的地理特性,开源软件的每一家供应商都来自于互联网上的一个虚拟的项目共同体。
开源软件供应链,是超越地理位置的全新赛博空间的连接。
控制力体现在何处?
在正式开始谈控制力之前,笔者就开源的生产模式和知识财产模式的原理进行一番说明,这是一切出发的基础。
Unix/linux设计哲学
保持简单,Keep it simple,stupid! (KISS原则) 每次只做一件事,并把它做好。[11]
Linux 作为典型的开源生产模式的开放方式,被称之为“集市”式[12]开发,也就是来自全球各地的开发者通过邮件列表的方式主动的去“挠自己的痒”完成整体系统的协作,完全分布式的开发方式,开发者可以自行决定撰写想要开发的模块。这样的开发模式,或许有组织上集体行动的难题,但是其如此彻底分布式的协作方式,无疑从供应链的角度来讲,能够整合众多的力量。
知识财产的容他权形成
以 GPL 为代表的具有 Copyleft 的思想,是数字时代全新的知识财产权模式,放弃了排他权这种古老的做法,而是采用容他权(right to include)[13],这也就意味着放弃了传统意义上的控制权,但是软件的特性还有另外一个:分发权,保留分发权是开源重要的举措[14],这点也奠定了自由/开源软件的商业基石,离开了收取许可费用,开源仍然可以前行。
开源软件供应链的控制力
当然,没有什么是自然发生的,所有的开源项目的每一行代码都是开发者的辛勤劳动的结晶。举个例子,GCC 是重要的编译器项目,我们看到该项目的亲力亲为者列表:https://gcc.gnu.org/onlinedocs/gcc/Contributors.html,来自全球各地的编程语言开发者们共同造就了这个项目。从copyleft的角度而言,这份名单均拥有项目的所有权。
gcc
仅仅是一个可用的Linux发行版的7万分之一个项目,从所有权的角度而言,没有人或组织可以控制所有这些项目,但是,这只是理想状态,也就是说每一个项目,还是有产出更多,更能影响走向的关键人物存在的,比如说Kernel项目的Linus就是非常典型的存在,Linus 并不拥有Linux,但是很多开发者信任它,愿意往他的git
分支上提交,换句话说,关键产出的关键开发者就是对开源项目最具控制力的存在。
推而广之,有些项目是有商业公司背景的,比如Nginx
,本来是个人项目,最后由于需求旺盛而成立了公司,并且终被巨头F5收购,那么这个项目的控制力就是原来这家公司,Apache 软件基金会的项目有很多都是如此,尤其是商业公司的捐赠。
换句话说,开源项目虽然在所有权上作了让步,任何人都可以分叉、修改,但是在分发权上仍然具有强大的控制力。这就是我们看到 RedHat 收购 Cygnus/Jboss/Ansible/KVM/CentOS、给Kernel的开发者赠送期权[15]、雇佣顶级的开源项目开发者等等的举措,得开发者得天下说的就是这个道理。
连接力体现在何处?
从上面提到的linuxfromscratch项目,我们得知,几万个软件包的彼此协作成为一个超大系统,能够从各个同类中选择和开发出最合适的项目,才能让整体的系统最优,这个时候就体现出供应链中的连接能力。
无论是编程语言的库,还是程序软件包,都需要下载、部署到用户的本地才能使用,这就是包管理器能够做的事情,它可以将成千上万的软件按照一定的规则进行检索、组织、下载和部署:
- 编程语言:Maven、Pypy、CPAN、Go
- Linux发行版: RPM、DEB、dpkg
- 容器:Docker、Podman、containerd
- 代码托管平台:GitHub、GitLab、Sourceforge
当然,这些都是技术上的实现,背后的驱动力有的是个人的兴趣爱好,有的是通过社会捐赠,有的是非营利基金会的支持,这些实现均能体现其连接力的价值,尤其是同类实现,相互还有竞争关系。
分发镜像是完全公益的存在?
天下没有免费的午餐,在互联网上开源项目提供下载的服务器都是价格不菲的带宽、存储等服务[16],由于开源项目许可的作用,这些服务是不能直接收取费用的,连广告的业务都受到了排挤,但是它的价值又并不是那么明显的商业盈利能力。
无论是编程语言,还是软件包,抑或是容器,这些服务的分发服务器都是整个供应链的连接力的体现,这就是众多巨头愿意提供和资助这些服务的重要原因,当然,如果不能识别连接力的重要性,那么就不会提供这样的服务,也不会资助,这就是本土缺少这类分发服务的重要原因。对于开源项目供应链连接力的认知尚待挖掘。
案例:Sonatype 公司的崛起
Sonatype [17] 在今天看来已经是一家被1千5百万开发者信任的公司,在软件供应链领域提供企业级服务,但是“罗马不是一天建成的”:
- 2001年,Apache Maven 项目启动,脱胎于 Jakarta Alexandria 项目,随着Java 的流行,程序库的管理显然需要更广泛的分发功能[18];
- Sonatype 是 Apache Maven 项目的早期的亲力亲为者,并持续投入;
- 2004年,Apache Maven 开始迎来了大众的接纳[19]
- 2008年,Sonatype 开发了并运行了java开源类库托管平台:Central Repository ,并对广大开发者免费开放下载使用;
- 2009年,Sonatype 发布了企业级私有仓库平台:Nexus Pro,并提供企业级的商业服务;
- 发展至今,不断基于软件供应链的认知开发新的产品和解决方案,帮助了超过2000个组织的安全和平稳运行。
而 Central Repository 始终是Sonatype不遗余力支持的仓库,当然,这也是Sonatype商业的基础。Snoatype是软件供应链:以Java程序类库为例的典型案例!其开源及其商业化的路程是相当值得学习和借鉴的。
设计力体现在何处?
判断一个人是否认真的看待开源,其中有一个很好的试金石,那就是是否认为开源是自然而然发生的,就和大自然的四季一样,开源会自动发生,这样的人多数是事不关己高高挂起的姿态,认可并参与开源的人,是不会这么思考的,因为开源的项目都是这些人辛勤劳动的结果,是一步一个脚印脚踏实地干出来的。
当然,从源头上说,设计力还是Copyleft思想、GPLv2/v3许可、KISS原则、早发布勤发布等等这些人类优秀的实践成果,但是,思想归思想,观念归观念,终究是要落实到行动上的。
upstream first 对于用户的利好
在整体的供应链中,相互的反馈是极为重要的,我们在Fedora中发现的问题,可能是一个界面问题,也可能是一个驱动问题,如果这个问题局限在Fedora中,那么这个问题仍然隐藏在其它的分发环境中,这对于该项目本身就是很大的伤害,OpenSSL 的问题得不到解决,它的所有上下游都会受到牵连,Log4j的问题,绝不仅仅是Log4j本身,而是所有依赖Log4j的下游项目,以及引起Log4j的上游Java或C 的问题。
上游优先:Upstream first [20]并不是大公无私的利他行为,而是深刻理解开源软件供应链之后作出的行动,是设计能力体现。无独有偶,这也是一个违背直觉的事情,我们看到几百个Linux发行版,只有少数几个脱颖而出,而脱颖而出的都是基于上游优先策略的。
另外一个更为重要的缘由是,Upstream first 有利于用户,而用户才是能够形成有效反馈的最佳,如果用户的问题没有反馈到最终的上游项目,换一个场景问题就会成为技术债务。这是一个双赢和皆大欢喜的事情。
平替的代价有多大?
林雪萍老师在其书中,相当谦虚的说明了理解供应链的难处,它隐形于暗处,在当下的社会中有很多误区,比如平替,从开源的视角来说,也就是说凡是不在自己组织内的都要替换掉:如Linux发行版,将所有的项目都重写:从Kernel到图形接口。
暂且不说如此巨大的工程量,有那个组织可以做得到,而是说重写的意义有多大?将git
采用rust
替换掉C
,是不是明智的?
再退一步讲,平替是否是刻舟求剑式的拒绝协作的行为?上游项目仍然在有条不紊的前进着,在平替的过程中,上游会走的更远。供应链的竞争并不是简单的平替,平替其实是下下策,真正的竞争是去争夺连接力、控制力和设计力。
开源生态,生生不息
开源软件的供应链,当我们将几万个项目当作节点的时候,我们会发现这些节点的竞争关系,只有最适应上下游的节点才能被接纳,方能有持续发展的机会。这也奠定了其持续的生命力,生生不息。
计算机和信息的历史告诉我们,开源的生态是重要的生态之一[21],在这个生态中,处处皆有价值可寻,在漫长复杂、赛博连接、良莠不齐、鱼龙混杂的开源软件供应链中占据有利位置,显然需要智慧以及坚韧不拨的耐心和付出,熵增世界也同样告诉我们,只有开放的生态才能走的更远,接纳更多,不断创新,生生不息。
21世纪的竞争不再是企业和企业之间的竞争,而是供应链和供应链之间的竞争。市场上只有供应链而没有企业。 ———— 马丁·克里斯托弗 ,物流专家 [1]
参考材料
- 《供应链攻防战:从企业到国家的实力之争》,林雪萍,中信出版集团,2023-12-5
- 《软技能》,刘擎等,新星出版社,2023-6-9
- 操作系统革命-Revolution OS【双语字幕】, https://www.bilibili.com/video/av9512574/, 最后访问时间:2024.1.15
- https://distrowatch.com/dwres.php?resource=popularity ,最后访问时间:2024.1.15
- https://www.linuxfromscratch.org/ ,最后访问时间:2024.1.15
- https://www.gnome.org/ ,最后访问时间:2024.1.15
- https://fedoraproject.org/ ,最后访问时间:2024.1.15
- https://www.debian.org/ ,最后访问时间:2024.1.15
- https://fedora.pkgs.org/ ,最后访问时间:2024.1.15
- https://fee.org/resources/i-pencil/ ,最后访问时间:2024.1.16
- 《UNIX编程艺术》,Eric S. Raymond,电子工业出版社,2011-1
- 《大教堂与集市》,Eric S. Raymond,机械工业出版社,2014-5
- 《知识产权正当性解释》, [美]罗伯特·P.莫杰思,商务印书馆,2019-5
- 《The Success of Open Source》, Steven Weber, Harvard University Press,2004-04-30
- 《Linux 红帽旋风》,(美)罗伯特・杨 / 罗姆,中国青年出版社,2000-11
- 《开源之迷》,适兕,人民邮电出版社,2022-02
- https://www.sonatype.com/company ,最后访问时间:2024.1.27
- https://maven.apache.org/background/history-of-maven.html ,最后访问时间:2024.1.27
- https://www.internetnews.com/developer/apaches-maven-comes-of-age/ ,最后访问时间:2024.1.27
- 开源布道者分享系列之十一:上游思维与上游优先
- 《创新者:一群技术狂人和鬼才程序员如何改变世界》,[美] 沃尔特·艾萨克森,中信出版社,2017-4
关于作者
「发现开源三部曲」(《开源之迷》,《开源之道》《开源之思》。)、《开源之史》作者,「开源之道:致力于开源相关思想、知识和价值的探究、推动」主创,Linux基金会亚太区开源布道者(2022/2023年度团队主席), 云计算开源产业联盟OSCAR(中国信息通信研究院发起)个人开源专家,OSPO Group 联合发起人。