开源心法
上QQ阅读APP看书,第一时间看更新

1.3 开源的底层逻辑

1.3.1 运行基座:软件生态+现代软件工程

1.软件与开源

在2007年的D5会议上,乔布斯和比尔·盖茨共同接受了访谈。在访谈中,他们提到了苹果公司的最大秘密——苹果自视为一家软件公司——可能已经不再是秘密。乔布斯认为,未来软件将无处不在,深入人们的日常生活;而盖茨则认为,软件将变得更加个性化,以满足每个用户的独特需求。

软件是连接用户和硬件的桥梁,用户通过软件来释放硬件的潜力,并通过多种应用软件实现面向不同场景的多样化应用。从需求提出的那一刻起,软件的生命周期就涵盖了设计、开发、测试、部署、维护,直至最终的废弃。与硬件单一、静态的生命周期不同,软件的生命周期是一个动态的过程,类似于生物的出生、成长、衰老和死亡。然而,软件的生命周期并不总是线性的,它可以通过更新、扩展甚至重新设计来延长使用寿命。一些软件可能会选择开源,由社区继续维护和开发,这不仅延长了软件的生命周期,还可能改变其生命轨迹。

此外,软件具有天然的生态属性——软件本身、开发人员、用户及其他利益相关者构成了一个相互依存的网络,形成了复杂且不断发展的生态系统。这个生态系统的特点是相互作用、合作和竞争并存。在这一生态系统中,开源协作为软件开发提供了一种新型的合作模式。它不仅降低了开发的门槛,还为用户提供了各种各样的软件选择,使软件更加易于获取和使用。

2.开源模式助力现代软件工程

在传统的软件工程领域,“瀑布模型结合CMM(Capability Maturity Model,一般译作软件能力成熟度模型)”定义了经典的工程模式。通过强化过程管理,这种模式使原本混乱无序的软件开发过程变得有序、可控,对于增强软件开发的过程能力和提高产品质量功不可没。同时,软件开发的规模化也满足了社会对软件产品日益增长的需求。

瀑布开发模式的出现是为了应对20世纪60年代的“软件危机”,由Winston Royce在1970年提出。尽管他没有使用“瀑布”这一术语,但他描述了一种线性顺序的开发流程,并指出了这种方法的潜在风险。随着瀑布开发模式成为软件开发的主流,其缺点也逐渐显现。最主要的问题是在开发阶段需要形成大量的反馈文档,这不仅极大地增加了工作量,也让开发过程变得过于烦琐和重复。

因此,从20世纪90年代开始,“轻量级”的开发方法逐渐兴起。1995年,Jeff Sutherland和Ken Schwaber联合发表了一篇论文。在这篇论文中,他们首次提出了Scrum的概念,后来这一概念逐渐发展成为敏捷开发的重要流派。Scrum定义了一个运作框架,重点关注项目流程、团队管理,包括需求收集、团队协作、项目运营等方面。最终,在2001年,《敏捷宣言》的发布标志着“敏捷运动”的正式开启。

从运作机理来看,相较于瀑布开发模式,敏捷开发模式更强调:个体和互动高于流程和工具;工作的软件高于详尽的文档;客户合作高于合同谈判;响应变化高于遵循计划。这种转变意味着传统工业中对细致计划和严格过程控制的依赖开始减弱,取而代之的是一种全新的思维模式:软件开发过程被视为类似于植物自然生长的过程,从底层开始,逐步有序地向上发展。这种方法不仅与软件开发过程中不断探索的特性相契合,而且能够尽早地交付满足客户预期的产品。

这种逻辑与开源协作的理念高度一致。自1998年Open Source一词被正式提出以来,随着软件工程中敏捷开发方法的发展,开源运动已经成为全球范围内不可阻挡的趋势,并为现代软件工程提供了新的范式。

随着开源软件从MVP(Minimum Viable Product,最小可行产品)版本开始发布,并通过后续版本的持续迭代和更新,用户被邀请参与软件的共同定义和开发过程。这种方式可以更快、更直接地满足用户需求。开源的这些特点与现代软件开发模式高度契合,并推动了软件工程的持续优化。

SaaS(Software as a Service,软件即服务)正逐渐成为软件交付的主导模式。这一模式的演进历程可追溯至大型机时代,当时软件主要解决特定的单一任务。随后,随着个人计算机的普及,软件开始满足个人办公信息化的需求。进入21世纪,互联网和移动互联网的兴起带来了APP的革命,它们改变了人们的生产和生活方式,成为这一时期的软件交付主导模式。如今,在数字化和智能化浪潮的推动下,SaaS正在重塑企业的商业模式和生产流程,确立其作为软件交付主要模式的地位,如图1-1所示。

图1-1 SaaS正在成为软件交付主要模式

根据华为内部的调查报告,全球软件市场的SaaS订阅收入占比将从2020年的约30%增长至2030年的约81%。这一增长趋势在美国市场尤为显著,尽管其市场化程度已经相当成熟,但toB SaaS领域的投资年增长率仍高达40%。在中国,toB SaaS市场也正处于快速发展阶段。展望未来,SaaS不仅将成为推动产业数字化的关键力量,还将彻底改变企业的商业逻辑和生产方式。

在SaaS的交付趋势下,软件与开源之间的关系变得日益紧密,这已成为产业界关注的焦点。SaaS提供的是全面的软件解决方案,而云服务则是这一解决方案中不可或缺的组成部分。开源软件通常可以通过云服务这一平台提供给用户,而云服务提供商在构建SaaS平台时,也普遍采用了开源架构和工具。因此,开源在构建SaaS生态系统时扮演着至关重要的角色。

尽管开源软件具有诸多优势,但要真正实现其增强软件企业核心竞争力的目标,仍需要克服一些挑战。企业不应持有“薅羊毛”的心态,仅仅将开源软件视为降低开发成本的廉价工具。开源是现代软件工程战略发展的重要一环,企业应当遵循这一战略的核心原则,建立自己的开源生态系统。

1.3.2 可持续发展:开源软件项目+商业价值实现

1.开源软件项目与源代码公开

根据OSI的定义,开源软件项目是指源代码公开可见,并且允许自由修改、分发和使用的软件项目。这意味着任何人都可以查看源代码,对其进行修改和分发,而不需要事先获得授权或支付许可费用。

开源软件项目通常由社区或志愿者团队开发,他们在公共代码库中共享代码和文档。社区成员可以贡献代码和文档,通过协作改进软件。这种开放式的开发模式有助于加速软件的开发和迭代,提高软件的质量和稳定性。此外,公开源代码使开源软件项目能够吸引更多用户和开发者,形成一个庞大的生态系统,推动软件的发展和创新。

在开源领域的经典著作《大教堂与集市》(Eric S. Raymond著)中,开源的理念被比喻为“集市”,它代表了一种低成本、开放式的协作方式,其特点是项目周期短,但品质可能参差不齐。与之相对的是闭源开发,它类似于“大教堂”的建设,品质控制更为严格,但成本较高,开发周期也较长。

尽管“大教堂”和“集市”的模式将长期并存,但由于技术研发的开放性和人才流动性,企业实现垄断变得不现实。竞争与合作才是永恒的主题。从这个角度来看,开源所带来的持续迭代与产品升级,以及基于开源构建的人才生态系统,能够为企业带来持久的活力。

然而,在以商业为主导的市场环境中,“源代码公开”似乎与技术专利保护的原则相悖。开源常常被贴上“共享智慧”“协作开发”和“免费”的标签,这引发了一些质疑。但事实上,免费并不意味着与商业化不相容,它通过模式创新,使商业运营变得更加高效和合理。

2.开源运动下逐步走出的商业模式

从自由软件运动的兴起到开源概念的确定,再到开源定义和许可证的发布,以及不断涌现的各类开源项目,这一过程见证了从早期“自由精神”与商业看似冲突,到刻意避免Free一词的免费含义,进而确定“开放源代码”的内涵,使之与商业和谐共存,直至各种开源商业模式取得成功。

在开源运动的背景下,Linux操作系统是一个典型的代表。Linux操作系统拥有众多系统开发商,它开创了由多家公司共同主导一款开源产品的商业化模式。其中,最著名的开发商是Red Hat,该公司在2018年被IBM以340亿美元的价格收购,这笔交易至今仍是开源领域最大的一笔收购交易。

此外,基于Linux操作系统开发的Android操作系统横空出世,迅速成为全球最广泛使用的智能手机操作系统。同时,全球最大的开源开发者社区GitHub被微软以75亿美元的价格收购……这些标志性事件不仅展示了开源产品的商业价值,也证明了在当今大企业主导的开源浪潮中,开源模式能够稳固地立足并持续发展。

1.3.3 生态繁荣:开发者贡献+个人英雄情结

在前面的内容中,我们从宏观角度分析了开源的产生和发展的底层逻辑。而从微观角度,即开发者的视角来看,正是开源社区所倡导的“能者治理,才配其位”的理念,使众多优秀社区开发者的贡献得以被认可和看见。当开发者的贡献被整合到开源项目中,并随着后续版本的发布被广大用户下载并使用时,他们将获得巨大的成就感和自豪感。

在开源社区中,顶尖开发者扮演着“仁慈的独裁者”的角色,他们并非传统意义上的独裁者,而是以一种更加温和、谦逊的方式领导社区。这些开发者通常具备卓越的技术能力和丰富的项目经验,能够解决技术难题,并对项目的发展方向做出明智的决策。这种领导风格在开源社区中非常有效,能够凝聚社区力量,推动项目的持续进步。因此,“仁慈的独裁者”在开源世界中被视作“英雄”。

开源社区中不乏这样的“英雄”人物,例如Linux内核的创始人Linus Torvalds,他以开明和睿智的领导风格,以及个人魅力,吸引了全球顶尖开发者共同贡献力量,推动Linux内核的不断进步和发展;还有Python语言的创始人Guido van Rossu,他一直致力于推广和普及Python语言,为Python社区的发展作出巨大贡献。这种“英雄”般的待遇和成就感是推动开源运动持续繁荣的内在动力。

正如中国工程院院士孙凝晖所说:“开源模式不仅仅是一种商业模式,它也是一种生态构建方法;开源是一种共享共治的精神;开源是一种打破垄断、开放创新的精神;开源是一种鼓励奉献的精神;开源不仅仅是公开源代码,更重要的是协作开发流程的建立与社区治理机制的建设。”正是开源的宏观正义性和微观成就感,以及商业和生态的共同支持,共同构成了开源的完整图景。