企业拥抱开源之前必须了解的七件事 | Q推荐

2022 年 3 月 3 日 InfoQ

作者 | 韩鸿源,阿里云智能新金融 & 互联网事业部首席架构师

1997 年 5 月,埃里克·雷蒙德(Eric S. Raymond)发表了被誉为“开源圣经”的《大教堂与集市》,开源运动从此有了自己的独立宣言。开源发展至今,从 Linus Torvalds、Kenneth Lane Thompson、Richard Matthew Stallman、Eric Steven Raymond 等个人英雄的出现,到越来越多的企业组织加入到开源中,开放、平等、协作、共享的开源模式已成为全球软件技术和产业创新的主导力量之一。而到了云时代,开源更是覆盖了软件开发的全域场景。

本文试图从开源软件演进过程出发,分析常见的开源误区,并深入讨论开源的业务模式,以及开源软件和云的结合。

为什么开源难以回避
特征一:开源基础软件的应用广度与深度提升

早期开源软件集中在应用侧,但是重要的基础软件,如操作系统、数据库等,依旧采用封闭专有的开发模式。

今天, 97% 的软件开发者和 99% 的企业使用开源软件。信通院《开源生态白皮书 (2020 年)》指出,近年来国内企业逐渐侧重基础软件领域开源项目布局,在操作系统、数据库、中间件等领域涌现出众多开源项目,其中不乏国际基金会的顶级开源项目。

特征二:开源软件创造的价值凸显

开源已成为全球数字科技强大的技术创新模式之一,并从最初的软件行业走向了硬件、芯片、视频、IoT、AI 等多个领域。新产品在开源,新架构在开源,新平台也在开源,连顶尖的研究成果也都以开源形式发布。

特征三:国家对开源软件前所未有的重视

2021 年,“十四五规划”中明确指出要“支持数字技术开源社区等创新联合体发展,完善开源知识产权和法律体系,鼓励企业开放软件源代码、硬件设计和应用服务”。毫无疑问,开源被提到国家战略层面予以支持,将走上跨越式发展的快车道。

软件的发展与开源的历史

20 世纪 70 年代 Unix 诞生之前,由于软件不具备通用性,而且软件只是软件开发项目,交付项目的同时交付源代码是常规做法。

随着主要以 C 语言实现的 Unix 的诞生,开放的通用操作系统成为可能。Unix 早期,由于其拥有者 AT&T 回避进入软件行业的特殊态度(原因是其主营电信业务正处在严厉的反垄断高压之下,不愿意添加额外麻烦),Unix 直接以源代码形式提供但不提供后续技术支持,允许用户在自己的环境中修正问题和移植到新的硬件平台。得到 Unix 授权的高校、政府和一些商业机构为后续 Unix 的发展打下了基础,但也为后来的纷争和分裂埋下了种子。

20 世纪 80 年代大批软件公司涌现,如 Microsoft、SAP、Oracle、Adobe 等。软件的交付形态逐渐变成了只提供运行态程序而不再提供源代码,除了销售软件之外,软件公司还提供收费的技术支持服务。时至今日,客户使用软件的方式没有本质变化。

在服务器领域,Unix 阵营发源于 AT&T 分发的早期代码,SUN、HP、DEC、IBM 等基于不同的硬件架构发展出了各自的 Unix 系统。通用与兼容的需求催生了后续的 POSIX 等统一标准,但是 Unix 的授权与法律条文的模糊性以及后续持有者的态度和野心等导致了大量问题。各种源自 Unix 的系统分别改成了各家自己品牌分别发展,与 Unix 主干间也缺乏统一的协调。这种分裂给了 WindowsNT 巨大的商业机会,其最终发展成了今天的 WindowsServer 系列操作系统。

80 年代另外一个重要事件是自由软件基金会(Free Software Foundation,简称 FSF)成立。在学术与科研机构中,“黑客精神”始终是很多人的追求,对软件极致自由追求的基础是拥有对源代码的修改权。这里不得不提理查德·斯托曼(Richard Stallman)(对他的各种毁誉不影响 GNU 和 FSF 的意义和价值)发起的 GNU(GNU is Not Unix)行动,这一行动重新开发实现了 Unix 的大部分工具系统,并且以 GPL 许可发行,而 GPL 对衍生软件强制要求持续提供源代码。虽然 GNU 实现了绝大部分的 Unix 常见工具体系,但是仍然无法摆脱对 Unix 操作系统核心的依赖。直到 1991 年林纳斯·托瓦兹(Linus Torvalds)开始 Linux 核心的开发工作才填补了这个空白。同样采用 GPL 许可的 Linux 核心和外围工具体系一起形成了 Linux 的生态系统。

90 年代中期以后,互联网开始蓬勃发展,各种 Unix 衍生品与 Windows NT 在起步阶段支撑了这个过程。新创互联网企业并不愿意把宝贵的资金消耗在昂贵的硬件设备和僵化的软件授权上,Linux 因其不强制收费和开放后续源代码修改的优势,被很多新兴互联网企业选为后台服务运行平台。操作系统之上的各种开源系统也得到了广泛的运用与持续发展,逐渐形成了今天互联网巨头们基于开源软件之上自研业务软件的普遍现状。

开源软件的定义与许可体系的发展

从字面上看,开源是指开放软件的源代码给使用者,但是单纯提供源代码并不是目前“开源软件”的标准定义。标准的“开源软件”定义是,软件向使用者提供源代码并且授予修改和持续演进的自由。而对修改后的软件再分发在规定上的差异,就形成了不同的开源软件许可体系。

目前开源软件的许可体系主要分为两大类:一类强制要求再开源,代表性的有 GPL 许可体系;另一类不强制要求衍生开源,为宽松开源许可证,代表性的有 BSD、MIT、Apache 等许可体系。GPL 许可体系强制要求下游“发行”时提供源代码,不得改变 GPL 的兼容性,限制从开源软件转变成非开源软件(但“发行”的定义,存在可被利用的空间)。

强制继续开源,又衍生出对服务提供者、尤其是云服务提供者的不同变种许可,如 AGPL 等。由于限制过多、过于复杂,AGPL 的接受程度有限。

开源软件对软件行业商业模式的影响
开源没有改变软件运行的基本模式

软件的质量取决于设计、实现、测试和运行过程中暴露问题的持续修复,开源软件改变的只是开发阶段和发行形态,其他软件规律仍然是一样的。完全把技术支持工作交给使用者是不可行的,支持客户的业务运行并保证服务质量,仍然是软件业务的重要组成部分。

开源成为分布式协作开发模式的典范和推动者

开源软件项目的治理方式存在封闭与开放的差异,开源项目的主导权与管理权有两种常见方式:一种是项目归属于某个基金会组织,如 Apache;另外一种是由发起者或创建者主导的管理模式,如 MySQL 和 Linux 核心等。

很难用简单的方法判断哪种方式一定就是最好的,但是相对来说,由一个有信用的、有成熟制度模式的非营利组织管理,更容易受到信任和吸引更广泛的参与者。

开源不等于免费

自由软件选择的 Free Software 的名字往往被误解为“免费”,其实在这里 free 的含义是“自由”,开源是软件自由精神的体现。今天即便是承诺完全开源的软件,如 Linux,主要的商业化形态仍然是提供有质量保证的发行版和技术支持服务,收取许可费用不是被认可的业务形态。MySQL 是一个特例,因为它同时提供不同的软件许可,商业版软件和社区版软件本质上是两个产品,根本原因在于 MySQL 相关的所有知识产权完全属于单一商业实体。

以发行版方式提供软件和在云上提供服务仍然是主流业务模式

目前绝大部分软件的使用者,都不是软件本身的开发者。依靠使用者自行解决问题和持续演进,既不必要也不现实。为了保证质量和兼容性,开源软件发布前也需要整体的验证测试和优化工作,本质上与不开源的专有软件的发布没有差异。

企业作为开源使用者的挑战

大多数企业是以行业开源者和行业使用者存在,它们所面临的挑战也不尽相同。

CIO 视角:IT 架构治理的挑战

不同企业因为自身 IT 建设阶段不同,使用开源软件的方式也各有不同。但不管哪种方式,最终都需要考虑 IT 架构统一治理。

第一种,新型企业全部业务从一开始就使用开源软件构建。常见于互联网公司和开源发展得比较成熟后创立的企业。这类公司把 IT 能力作为核心竞争力,平台技术团队完全有能力采用开源和定制化修改的开源衍生产品。但随着定制系统的发展,代码改动和软件升级会面临很大挑战,企业可能被迫选择持续加大技术投入,或走向避免改动的保守状态而陷入落后局面。

第二种,传统企业局部使用开源软件替换商业软件。常见于成立时间已久的大中型企业,长期使用商业软件享受软件技术服务。新技术与新开发方式使新的业务发展无法拒绝已经开源的软件。

第三种,特定行业在一定发展阶段选择了商业软件,越过发展台阶后重新拥抱开源软件和加大自身研发投入,典型如阿里巴巴。

鉴于开源软件自身的特点、版本路线不同,以及不同应用开源组合的复杂性,不同企业有选择不同企业级技术架构路线的权利。

自主可控的挑战

“自主”的含义大致有两种理解:一种是指采用主权范围内厂商具有完全知识产权掌控力的软件,不受国外产品和服务体系供应的限制,因此这里的“主”是指的国家主体;另一种“主”是指企业本身,企业可根据自主意志,按自己的需求、想法,在不违反授权的情况下,自由地修改和使用软件。

“可控”对应的是“卡脖子”,无论是开源社区还是商业授权的软件。一些企业想从现在开始就不再采购开源软件的商用发行版和商业服务。诚然,集中精力自己研发、自己把控,在特定的场景上放弃外部的商用依赖,另起炉灶做出一套完全自主的产品,这样的成功例子是有的,但毕竟是极少数。这种做法也需要有大量优秀的软件工程师,并且还需要积累大量的经验。

对大多数企业而言,要想做到自主可控,最好能仔细钻研开源软件的代码、架构、测试。这里的诀窍就是,与软件产品的主流社区协同。自己越是有可能面临风险,越应该广泛建立与开源商业生态体系的联系,除非真的被外部客观不可抗拒原因切断联系。

成本可控的挑战

大多数开源软件的成本都是隐形的,主要来自持续的质量控制、升级和运维服务成本。虽然被广泛使用的开源软件大多质量和可靠性水平很高,但是靠单一企业内部的技术力量支持海量源代码产品的持续运行难度非常大。

我们仍需要避免一个认知误区:某个单独软件的授权成本,并不是投入的全部,后续支撑性投入才是重头戏。企业必须超越简单的底线成本模型或 ROI 计算逻辑,站在业务视角看整体成本。

安全的挑战

过去几年随着开源社区数量快速增加,以及媒体对最近一些数据泄露事件的报道,使得大众对开放源代码安全性的关注度不断提升。据统计数字,84% 的开源代码库至少含有一个漏洞,60% 的已审核代码库包含高风险漏洞。2021 年 12 月,最新的 Log4j2 远程代码执行漏洞就是典型的开源项目安全事件,该漏洞影响巨大,一旦被攻击者利用会造成严重危害。

合规的挑战

《关于规范金融业开源技术应用与发展的意见》明确提出:金融机构应当遵循开源技术相关法律和许可要求,合规使用开源技术,明确开源技术的使用范围和使用的权利与义务。

为了主动发现问题,起步阶段可以考虑采用集中扫描的方式,对使用的软件版本发布前批量进行源码开源合规的扫描。但是一旦发现问题,留给开发人员修复问题的时间太短。如何高效地统计企业内开源产品许可情况和使用情况、快速修正不合规的使用,形成企业开源软件合规一览表,是目前企业使用开源软件合规性所面临的重大挑战之一。

企业作为行业开源者的挑战
构建生态的挑战

早期的开源社区运营并不能很好地反映开源技术在各行业各企业的实际应用情况。目前,开源社区与基金会的运营更看重产业沟通和用户分享,软件产品基于云的使用量统计可能会形成新的生态运营机制。

商业模式的挑战

开源产品的商业模型基本上融合了以下四种模型:开放核心(Open-Core),同时提供差异化的商业产品;专业服务(Professional Services);托管(Hosting);市场(Market place),提供应用商店、应用市场、插件。

对于成功的开源公司来说,最常见的模式是开放核心产品,将托管、服务作为第二和第三收入来源。不过随着市场竞争和客户的不断变化,这些模式可能都将不再适用。

云时代企业使用开源软件的变化

目前广泛使用的开源软件许可制定时间较早,当时云计算还没有出现或还没有形成足够大的影响力,开源许可条款主要针对的是软件以发行为主的情况。云服务尤其是封装后的 PaaS 服务包含的软件,规避了 GPL 强制再开源的义务,由此开源衍生出的云服务实际在一定程度上纵容了云厂商减少对开源的贡献。

如今,公共云的持续发展已经证明闭源的基础设施和支撑平台类软件不再具有普遍的发展前途。

主流开源软件与主流云厂商未来的发展方向将会是:大型云厂商投入人力和资金帮助开源项目持续发展。开源软件以不同程度托管在云上运行,提供技术能力,会是未来企业 IT 面临的主要选择。软件尤其是技术平台软件,需要大量的测试验证和优化调整,才能达到稳定性和性价比的最优,而公共云的运行环境及其支持的海量、差异化客户场景,为软件的成熟提供了最佳的“孵化”环境。

对于使用者来说,应用想要实现在不同云平台之间一行代码都不改的切换并不现实,但是追求云特有能力不侵入应用代码而只是在管控层面发挥作用,应该是现实可行的做法。

总体来说,云自诞生以来,其与生俱来的特性以及不断发展的能力,天然就能够解决企业可持续使用开源软件所带来的挑战。云平台能够更好地集中解决安全与合规的问题,针对不同的开源软件执行合规扫描、漏洞扫描、升级等等。同时,云厂商本身就是开源最大的使用者和实践者,可以帮助企业屏蔽试错风险。云平台天然是一个协作平台,可以让开源贡献者、开源使用者在云上互通需求,进而驱动发展。

👇了解更多精彩内容可以点击阅读原文

登录查看更多
0

相关内容

UNIX操作系统(UNIX),是美国AT&T公司1971年在PDP-11上运行的操作系统。具有多用户、多任务的特点,支持多种处理器架构,最早由肯·汤普逊(Kenneth Lane Thompson)、丹尼斯·里奇(Dennis MacAlistair Ritchie)和道格拉斯·麦克罗伊于1969年在AT&T的贝尔实验室开发。 现为 Linux、BSD 和 Solaris 等多种符合 POSIX 标准的「Unix 类操作系统」的统称。
区块链赋能“碳达峰碳中和”白皮书 ,41页pdf
专知会员服务
37+阅读 · 2022年3月26日
《人工智能安全测评白皮书》,99页pdf
专知会员服务
355+阅读 · 2022年2月26日
2021年中国区块链行业发展白皮书,63页pdf
专知会员服务
68+阅读 · 2021年10月27日
专知会员服务
83+阅读 · 2021年10月14日
专知会员服务
54+阅读 · 2021年9月23日
专知会员服务
74+阅读 · 2021年7月24日
专知会员服务
204+阅读 · 2021年4月21日
【2020新书】使用Kubernetes开发高级平台,519页pdf
专知会员服务
65+阅读 · 2020年9月19日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
“做开源如同创业”,九死一生 | QCon
InfoQ
0+阅读 · 2022年3月8日
企业拥抱开源之前,必须了解的七件事
阿里技术
0+阅读 · 2022年2月23日
开源云原生大潮下的消息和流系统演进
CSDN
0+阅读 · 2022年2月10日
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
2+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
3+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
6+阅读 · 2008年12月31日
VIP会员
相关VIP内容
区块链赋能“碳达峰碳中和”白皮书 ,41页pdf
专知会员服务
37+阅读 · 2022年3月26日
《人工智能安全测评白皮书》,99页pdf
专知会员服务
355+阅读 · 2022年2月26日
2021年中国区块链行业发展白皮书,63页pdf
专知会员服务
68+阅读 · 2021年10月27日
专知会员服务
83+阅读 · 2021年10月14日
专知会员服务
54+阅读 · 2021年9月23日
专知会员服务
74+阅读 · 2021年7月24日
专知会员服务
204+阅读 · 2021年4月21日
【2020新书】使用Kubernetes开发高级平台,519页pdf
专知会员服务
65+阅读 · 2020年9月19日
《代码整洁之道》:5大基本要点
专知会员服务
49+阅读 · 2020年3月3日
相关基金
国家自然科学基金
0+阅读 · 2014年12月31日
国家自然科学基金
2+阅读 · 2014年12月31日
国家自然科学基金
0+阅读 · 2012年12月31日
国家自然科学基金
3+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
2+阅读 · 2012年12月31日
国家自然科学基金
1+阅读 · 2012年12月31日
国家自然科学基金
0+阅读 · 2011年12月31日
国家自然科学基金
6+阅读 · 2008年12月31日
Top
微信扫码咨询专知VIP会员