拥抱开源(第2版)
上QQ阅读APP看书,第一时间看更新

开源软件诞生于20世纪,但在21世纪,它的巨大影响已经成为一种现象。

在某种程度上,这是因为计算方式的改变有利于开源软件的发展,例如Linux操作系统。毫无疑问,开源也起到某种反馈回路的作用,使这些趋势得以放大。

正如我们所看到的,许多早期的开源项目都与网络化的、横向扩展的计算密切相关。最初,这似乎与许多企业IT部门处理基础设施和应用程序的方式不一致,后者倾向于纵向扩展和单体架构。需要更多的能力吗?那么请升级服务器,请支付更高的费用,谢谢。

然而,到21世纪初,许多组织正在改变它们对企业IT的看法。正如当时笔者的分析师同事Jonathan Eunice在2001年的一份研究报告中所写的:

……我们必须明白,构成今天企业计算的要素实际上正在快速发展。它每天都在向网络计算领域迈进并进一步演变。企业IT越来越多地通过标准化的基础设施来实施并通过Internet协议网络连接进行交付。IT部门越来越多地以这种方式组织任务和数据中心,服务提供商也是如此。

在“Big Iron”UNIX供应商的世界中,为了最大化单台服务器的性能和可靠性,它们在垂直可伸缩性、故障转移集群、资源管理和其他特性方面投入了大量工作。随着时间的推移,Linux(和Windows)操作系统在与这些需求相关的特性上投入了大量精力。但是,世界越来越不重视这些需求,而是将注意力转移到更为分布式、以网络为中心的工作负载上,这些工作负载更接近最初对开源的需求。事实上,一种观点认为,21世纪初由IBM等公司资助的一些Linux操作系统开发工作过度专注于使Linux操作系统成为更好的、纵向扩展的UNIX操作系统。

在新世纪中,一种新的商业模式也加速了对开源软件的需求。可以毫不夸张地说,如果没有开源软件,这种商业模式是不可能实现的。仅亚马逊网络服务(Amazon Web Services,AWS)这一家云服务供应商可能就拥有数百万台服务器。在这种规模下,Amazon公司也许可以授权一个操作系统或其他软件的源代码,然后根据它们的需要进行调整。然而,像Google公司、Facebook公司和几乎所有的互联网公司一样,它们主要运行的是开源软件。

在某种程度上,这只是成本问题。特别是对于那些提供服务的公司,它们只能通过广告或其他方式间接盈利(如Google公司免费的Gmail),如果它们需要按照传统的方式为软件付费,那么经济上是否可行不得而知。

这并不是说这些公司使用的所有东西都是免费的。通常情况下,对技术成熟的组织来说,与一些供应商建立商业关系是有意义的。许多大型企业都需要专业的财务、其他类型的软件和软件服务,这些公司同样需要。把所有事情都放在公司内部处理是没有意义的。

尽管如此,从某种意义上说,这些公司几乎是一种新类别的系统供应商,它们生产和构建大量的软件(甚至优化的硬件)以供内部使用。

不过,每家公司都需要决定内部的研发重点是什么。这是Nick Carr 2003年在《哈佛商业评论》(Harvard Business Review)上发表的一篇题为《IT无关紧要》(IT Doesn’t Matter)的文章的中心论点。软件几乎渗透到企业的每个方面,这使得Carr的一些论点显得越来越夸张。(当时许多人也这样认为。)由于软件在许多层面发挥着竞争优势,公司越来越少地把它当作一种可以轻易外包的纯商品。然而,更广泛一点来说,他认为企业应该专注于那些能够真正实现差异化和获取价值的领域。

开源软件使构建和购买之间的决策权衡变得更容易,因为这不再是一个选择。从历史上看,软件往往是一个要么接受要么放弃的命题。如果你是一个非常重要的客户,而软件不像你希望的那样工作,你可以向供应商提出个性请求,它们可能会在一两个版本中做出回应。通常你可以选择从供应商处购买定制产品。即使这样,你仍然会在改变产品的过程中遇到很多麻烦。

有了开源,公司不需要从头开始构建整个系统,可以选择在某处使用开放源代码而不做任何更改——这可能需要供应商的全力支持,或者根据自己的特殊需求对源代码进行调整和扩充。

实际上,这些关于经济的争论回避了开源快速发展这个最重要的原因,特别是在一家公司的背景下。这些原因包括超越了将开源仅仅视为代码的狭隘视角。它要求把开源看作一种非常好的开发模式,同时也是个人和公司进行合作的一种新型方式。

这就是21世纪开源的真实故事。随着时代变迁,它早已不是比专有软件更便宜的问题了。噢,开源软件通常是这样的。而且在某些方面,这是典型的颠覆性创新,即它并不完全是关于价格的,但通常在一定程度上涉及价格(如图1-5所示)。

图1-5 颠覆性创新模式
(来源:Clayton M. Christensen、Michael Raynor
和Rory McDonald,hbr网站版权所有)

“颠覆性创新”是哈佛商学院教授Clayton Christensen提出的一个术语,用来描述“一种产品或服务最初在市场底层的简单应用中扎根,然后不断向上发展,最终取代现有竞争对手的过程”。

在本书中,我们已经介绍了一个例子——PC和服务器颠覆了传统的UNIX操作系统供应商,而UNIX操作系统供应商又颠覆了早期的专有系统,例如小型机。

Christensen还写道:“颠覆性创新让处于市场底层的全新消费者群体能够获得产品或服务,而在过去,只有拥有资金或技能的消费者才能获得这种产品或服务。”相对于UNIX操作系统,Linux操作系统符合这个定义(Windows操作系统也是如此)。事实上,随着时间的推移,大量现有的UNIX操作系统业务已经转向Linux操作系统。这让那些想要少花钱的大型用户和技术复杂的用户受益。

但它也为那些可能负担不起专有UNIX操作系统的新用户和企业提供了机会。可以说,Linux操作系统也将成为Windows操作系统的颠覆者,因为它在很大程度上将Windows操作系统挡在网络基础设施和科学计算市场之外。而在没有Linux操作系统或另一种免费UNIX操作系统替代品的情况下,Windows操作系统最终可能会默认占领这些市场。

我们可以将类似的论点应用到许多其他类别的开源软件——数据库、应用服务器和其他企业的中间件、编程工具、虚拟化等。这些开源软件早期的主要优点是用户可以从网上下载并免费试用。但是,实际上,它们在其他方面并不比专有的替代软件更好。

然而,在过去10年左右的时间里,情况开始发生变化。早期的云计算项目针对的是那些想要自己动手搭建云计算平台的人。这可能是第一个大的转折点,而大数据是另一个转折点。今天,云计算是云原生、容器、人工智能以及许多与它们相关的项目。共同之处在于,开源允许多个来源的创新以强大的方式重新组合与混合。这创造了一种情况,即大量有趣的创新最先出现在开源领域。

在某种程度上,这可能是因为独立的开源社区可以以强大的方式进行集成和组合。

云原生应用程序开发和基础设施空间可能是技术领域中互补和竞争项目结合的显著例子。起初,云原生主要涉及容器本身。在操作系统中,容器是一种隔离应用程序和应用程序组件的高效、轻量级的方法。但是Kubernetes、Prometheus和其他数百个项目对它进行扩展,这些项目涵盖容器编排、监控、日志、跟踪、测试和构建、服务发现,以及你能想象到的任何可能对大规模开发、安全、部署和管理分布式应用程序有用的东西。我们还看到云原生和其他领域的持续交集。例如,软件定义的存储和软件定义的网络功能都以不同的方式被容  器化。

人工智能和机器学习是另一个重要的领域,其中许多工具和构建模块由开源主导。这包括像Python这样的编程语言,像Kafka这样的事件系统,像Jupyter notebooks这样的协作和共享工具,以及像Ceph这样的分布式存储。你还可以看到这个空间和云原生之间的交集,因为像Open Data Hub这样的项目使用容器平台来简化复杂的软件部署。

随着计算领域发展得更加分布式与灵活,开源也随之进行广泛 演变。

软件既塑造了计算环境,又反映了计算环境。历史上,大量的专有软件集中开发大型应用程序,而要使用这些应用程序则需要花费昂贵的许可费以及安装费用和定制费用。应用程序之间以及应用程序和数据之间的连接需要更昂贵、更复杂的软件,比如EDI(Electronic Data Interchange,电子数据交换)。这符合专有的商业模式。

复杂性实际上是一件好事(至少从供应商的角度来看)。它将客户与单一的供应商捆绑在一起产生咨询费,同时通过所有需要的选项创造大量的追加销售机会,使所有的东西都能一起运作。复杂性也意味着没有真正的方法来确定软件能否像广告宣传的那样工作。在实践中,笔者曾经见过不止一款高端计算机系统管理应用程序最终沦为架子上一个非常昂贵的文件夹,因为它从来没有真正完成应该完成的工作。

即使在Web出现之后,最初的尝试仍然反映了传统的做事方式,例如面向服务的架构(Service-Oriented Architecture,SOA),至少在最初的形式中是这样的。SOA背后的许多核心思想是现代架构模式(如微服务)的一部分,例如将功能分离成不同的单元,通过明确定义的共享格式传递数据来相互通信。然而,在最初实现时,SOA经常被重量级Web服务标准和协议所拖累。

相比之下,今天的分布式系统通常以轻量级协议(如REST)为特征;可以混合、匹配和改编开源软件组件;同时是一种倾向于编码参考实现而不是经过重量级标准设置过程的哲学。开源将UNIX风格的方法(如高度模块化设计)更广泛地引入到平台软件和应用程序中。

2003年,IBM公司播放了名为《神童》(Prodigy)的电视广告。它描绘了一个小男孩坐在那里汲取智慧之珠的能量。好莱坞导演Penny Marshall说:“一切都取决于时机,孩子!”哈佛大学教授Henry Louis Gates说:“共享数据是走向社区的第一步。”Muhammad Ali说:“说出你的想法。不要退缩。”在广告的结尾,有人问这个孩子是谁,“他的名字叫Linux。”

这则广告由奥美广告公司制作,画面引人注目,令人不忍切换频道。时任IBM公司全球广告主管的Lisa Baird表示,该广告的目标客户是“首席执行官、首席财务官和产品经理”。对这则广告的投资反映了在世纪之交具有前瞻性的个人和组织是如何看待开源的。

Irving Wladawsky-Berger很早就认识到Linux操作系统的潜力并在世纪之交的关键时刻为IBM公司运营Linux战略。他在2011年LinuxCon的一场主题演讲中发表了自己的观点。“我们并不认为Linux只是另一个操作系统,就像我们不将互联网视为另一个网络。”他接着说,“我们把它看作是未来创新的平台,就像我们看待互联网一样。”

许多人认为IBM公司对Linux操作系统的投资是大型企业将Linux操作系统视为安全选择的重要认可。AWS的Matt Asay告诉笔者:“开源领域发生的最重大的事情之一是IBM公司对Linux操作系统的10亿美元投资……几乎一夜之间,对话发生了变化。”科技记者Steven Vaughan-Nichols对此表示赞同,他说:“IBM公司的认可意味着一个操作系统获得了《财富》(Fortune)50强企业的官方认可,而在此之前,它仍然被视为只有真正的书呆子才会使用的东西。”

正如Wladawsky-Berger在2020年对笔者讲述的那样:

我还清楚地记得1999年12月,我给IBM公司负责人Sam Palmisano打了电话。我说:“Sam,工作组建议我们应该使用Linux操作系统。”Sam说:“好吧,Irving,我们会这么做的。”我对Sam说:“你想什么时候宣布?”Sam说:“现在怎么样?”我说:“Sam,现在是圣诞节,也许我们应该等到新年。”在2000年1月的第二个星期,我们发布了一个重要的公告,宣布IBM公司将在所有产品中支持Linux操作系统。

同样值得注意的是,像Red Hat公司、SUSE公司和其他一些小型公司开始建立业务,他们不仅使用,而且明确地以开源为基础。

2000年,许多人可能还不清楚Linux不仅仅是一个拥有特殊许可证的类UNIX操作系统,或者更广泛地说,开源是软件或业务的重要组成部分。然而到2020年,很明显,Linux操作系统和广泛的开源在推动软件创新方面发挥着重要作用。考虑到商业能力与软件密不可分的关系,这意味着开源的发展将推动商业能力向前发展。