新的时代,开源的发展越来越蓬勃,开源和云的关系越来越复杂,耦合度越来越高,云是开源软件允许的最佳环境之一,也为开源软件插上安全高效的腾飞引擎。本文从企业软件的历史,结合开源软件发展规律,介绍软件开发和交付方式的演进过程,分析常见的开源软件开发和使用误区,讨论开源软件的业务模式和生态,以及在云时代下,开源软件和云的结合与相互促进。
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 诞生之前, 由于软件不具备通用性, 而且软件只是软件开发项目, 交付项目的同时交付源代码也是常规做法。
随着 Unix 的诞生并且主要以 C 语言实现,开放的通用操作系统成为可能。Unix 早期,由于其拥有者 AT&T 回避进入软件行业的特殊态度 ( 原因是主营电信业务正在严厉的反垄断高压之下,不愿意添加额外的麻烦 ),以源代码形式提供并且不提供后续技术支持,允许用户在自己的环境中修正问题和移植到新的硬件平台。得到授权的高校、政府和一些商业机构为后续 Unix 的发展打下了基础,也为后来的纷争和分裂埋下了种子。 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(GNU is Not Unix) 行动重新开发实现了 Unix 的大部分工具系统,并且以 GPL 的许可发行这些软件。GPL 对衍生软件强制要求持续提供源代码,GNU 实现了绝大部分的 Unix 常见工具体系,但是仍然无法摆脱对Unix 操作系统核心的依赖。直到 1991 年林纳斯· 托瓦兹 (Linus Torvalds) 开始的 Linux 核心的开发工作填补了这个空白,同样采用 GPL 许可的 Linux 核心和外围工具体系一起形成了 Linux 的生态系统。
90 年代中期以后,互联网开始蓬勃发 展, 各 种 Unix 衍 生 品 与 WindowsNT 在起步阶段也支撑了这个过程。新创互联网企业并不愿意把宝贵的资金消耗在昂贵的硬件设备和僵化的软件授权上, Linux 因其不强制收费和开放后续源代码修改的优势, 被很多新兴互联网企业选为后台服务运行平台。操作系统之上的各种开源系统也得到了广泛的运用与持续发展,逐渐形成了今天互联网巨头们基于开源软件和自研业务软件的普遍现状。
三、开源软件的定义与许可体系的发展
从字面上看,开源是指开放软件的源代码提供给使用者, 但是单纯提供源代码并不是目前“开源软件”的标准定义, 而是软件向使用者提供源代码并且授予修改和持续演进的自由,因此对修改后的软件再分发在规定上的差异, 形成了不同的开源软件许可体系。
目前开源软件的许可体系主要分为两大类 : 一类强制要求再开源,比如 GPL 许可体系;另一类不强制要求衍生开源, 为宽松开源许可证,比如 BSD、MIT、Apache 等许可体系。GPL 许可体系强制要求下游“发行”时提供源代码,不得改变 GPL 的兼容性,限制从开源软件转变成非开源软件 ( 但“发行”的定义, 存在可被利用的空间 )。
强制继续开源,又衍生出对服务提供者, 尤其是云服务提供者的不同变种许可,如 AGPL 等。由于限制过多、过于复杂,所以 AGPL 的接受程度有限。
四、开源软件对软件行业商业模式的影响
(一)开源没有改变软件运行的基本模式
软件的质量取决于设计、实现、测试和运行过程中暴露问题的持续修复,开源软件改变的只是开发阶段和发行形态, 其他软件规律仍然是一样的。完全把技术支持工作交给使用者是不可行的,支持客户的业务运行并保证服务质量,仍然是软件业务的重要组成部分。
(二)开源成为分布式协作开发模式的典范和推动者
开源软件项目的治理方式也有封闭与开放的差异, 开源项目的主导权与管理权有两种常见方式。一种是项目归属于某个基金会组织, 如 Apache; 另外一种是由发起者或创建者为主导的管理模式, 如 MySQL 和 Linux 核心等。很难用简单的方法判断哪种方式一定就是最好的,但是相对来说,由一个有信用的、有成熟制度模式的非营利组织管理,更容易受到信任和吸引更广泛的参与者。
(三)开源不等于免费
来源: 阿里云
自由软件选择的 Free Software 的名字往往被误解为“免费”,其实在这里 free 的含义是“自由”,开源是软件自由精神的体现。今天即便是承诺完全开源的软件,如 Linux,主要的商业化形态仍然是提供有质量保证的发行版和技术支持服务, 收取许可费用是不被认可的业务形态。MySQL 是一个特例,因为它同时提供不同的软件许可, 商业版软件和社区版软件本质上是两个产品, 根本原因在于 MySQL 相关的所有知识产权完全属于单一商业实体。
(四)以发行版的方式提供软件和在云上提供服务仍然是主流业务模式
目前绝大部分软件的使用者,都不是软件本身的开发者。依靠使用者自行解决问题和持续演进,既不必要也不现实。整体的验证测试和优化工作,保证质量和兼容性,本质上与不开源的专有软件的发布没有差异。
五、企业作为开源使用者的挑战
大多数企业是以行业开源者和行业使用者存在,它们所面临的挑战也不尽相同。
(一)IT 架构治理的挑战—CIO 的视角
不同的企业因为自身 IT 建设阶段的不同,使用开源软件的方式也各有不同。但不管哪种方式,最终都需要考虑 IT 架构统一治理。
第一种,新型企业全部业务从一开始就使用开源软件构建。常见于互联网公司和开源达到比较成熟阶段后创立的企业。这类公司把 IT 能力作为核心竞争力, 平台技术团队完全有能力采用开源和定制化修改的开源衍生产品。但随着定制系统的发展,代码改动和软件升级则面临很大挑战,被迫选择持续加大技术投入,或走向避免改动的保守状态,陷入落后的局面。
第二种,传统企业局部使用开源软件替换商业软件。常见于成立时间已久的大中型企业, 长期使用商业软件享受软件技术服务。新技术与新开发方式也使新的业务发展无法拒绝已经开源的软件。第三种,特定行业在一定发展阶段选择了商业软件, 越过发展台阶后重新拥抱开源软件和加大自身研发投入, 典型如阿里巴巴。
鉴于开源软件自身的特点、版本路线不同,以及不同应用开源组合的复杂性, 不同企业有选择不同企业级技术架构路线的权利。
(二)自主可控的挑战
“自主”的含义大致有两种理解。一种是指采用主权范围内厂商具有完全知识产权掌控力的软件, 不受国外产品和服务体系供应的限制,因此这里的“主” 是指的国家主体;另一种“主”是指企业本身,企业可根据自主意志,按自己的需求、想法,在不违反授权的情况下, 自由地修改和使用软件。
“可控”对应的是“卡脖子”,无论是开源社区还是商业授权的软件。一些企业想从现在开始就不再采购开源软件的商用发行版和商业服务。诚然,集中精力自己研发、自己把控,在特定的场景上,放弃外部的商用依赖,另起炉灶, 做出一套完全自主的产品, 这样的成功例子是有的,但毕竟是极少数。这种做法也需要有大量优秀的软件工程师,并且积累了大量的经验。
对大多数企业而言,要想做到自主可控,最好能仔细钻研开源软件的代码、架构、测试。这里的诀窍就是,与软件产品的主流社区协同。自己越是有可能面临风险,越应该广泛建立与开源商业生态体系的联系,除非真的被外部客观不可抗拒原因切断。
(三)成本可控的挑战
大多数开源软件的成本,都是隐藏的,来自持续的质量控制、升级和运维服务的成本。虽然广泛使用的开源软件的质量和可靠性水平都很高,但是靠单一企业内部的技术力量支持海量源代码产品的持续运行难度非常大。
仍需要避免一个认知误区,某个单独软件的授权成本,并不是投入的全部, 后续支撑性投入才是重头戏。企业必须超越简单的底线成本模型或 ROI 计算逻辑,站在业务视角看整体成本。
(四)安全的挑战
过去几年开源社区的大量增加,以及媒体对最近一些数据泄露事件的报道, 使得人们对开放源代码安全的关注提高。根据统计数字,84% 的开源代码库至少含有一个漏洞,60% 的已审核代码库包含高风险漏洞。2021 年 12 月,最新的log4j2 的远程代码执行漏洞就是典型的事件,该漏洞影响巨大,一旦被攻击者利用会造成严重危害。
(五)合规的挑战
《关于规范金融业开源技术应用与发展的意见》明确提出,金融机构应当遵循开源技术相关法律和许可要求,合规使用开源技术,明确开源技术的使用范围和使用的权利与义务。
为了主动发现问题,起步阶段可以考虑采用集中扫描的方式, 对使用的软件版本发布前批量进行源码开源合规的扫描。但是一旦发现问题留给开发人员修复问题的时间太短。如何能高效地统计企业内开源产品许可情况和使用情况、快速修正不合规的使用,形成企业开源软件合规一览表,是目前企业使用开源软件合规性所面临的重大挑战之一。
六、企业作为行业开源者的挑战
(一)构建生态的挑战
早期的开源社区运营,并不能很好地反映开源技术在各行业各企业的实际应用情况。目前,开源社区与基金会的运营更看重产业沟通和用户分享, 软件产品基于云的使用量统计可能形成一个新的生态运营机制。
(二)商业模式的挑战
开源产品的商业模型基本上融合了以下四种模型:开放核心 (Open-Core), 同时提供差异化的商业产品;专业服务 (Professional Services); 托 管(Hosting); 市场 (Market place), 提供应用商店、应用市场、插件。
对于成功的开源公司来说,最常见的模式是开放核心产品,将托管、服务作为第二和第三收入来源。不过随着市场竞争和客户的不断变化,这些模式可能都不适用。
七、云时代企业使用开源软件的变化
广泛使用的开源软件许可制定时间较早,当时云计算还没有出现或没有形成大影响,许可条款主要针对的软件以发行为主的情况。云服务尤其是封装后的 PaaS 服务包含的软件,规避了 GPL 这样的强制再开源的义务,开源衍生出的云服务一定程度纵容了云厂商减少对开源的贡献。
公共云的持续发展已经证明了闭源的基础设施和支撑平台类软件不再具有普遍的发展前途。
主流开源软件与主流云厂商是未来的发展方向, 大型云厂商投入人力和资金帮助开源项目持续发展。开源软件以不同程度托管在云上运行, 提供技术能力,会是未来企业 IT 面临的主要选择。软件尤其是技术平台软件, 需要大量的测试验证和优化调整, 来达到稳定性和性价比的最优, 公共云的运行环境及其支持的海量、差异化客户场景,为软件的成熟提供了最佳的环境。
对于使用者来说,应用想要实现在不同云平台之间一行代码都不改的切换并不现实, 但是追求云特有能力— 不侵入应用代码而只是在管控层面发挥作用, 应该是现实可行的做法。
总体来说,云平台能够更好地集中解决安全与合规的问题, 针对不同的开源软件合规扫描、漏洞扫描、升级等。云厂商本身就是开源最大的使用者、最佳实践,可以帮企业屏蔽试错风险。
云平台天然是一个协作平台,可以让开源贡献者、开源使用者,在云上互通需求驱动发展。(文︱韩鸿源 阿里云智能新金融 & 互联网事业部首席架构师)