



开源有着漫长而曲折的历史,它的发展主要是由对技术充满热情的爱好者推动的,随着时间的推移,商业投资也逐渐融入开源,而这些开源社群则始终保持了其原有的理念。
经过多年的努力,人们尝试了许多成功和不太成功的开源模式。开源的概念不仅应用在计算机领域,还应用到了拼布图案、家酿啤酒、基因组模式研究等领域。通过大众的努力,我们发现了一些成功应用开源的模式,下面让我们来看看这些模式。
我们看到的最早的(也可以说是最普遍的)开源应用只是能够与他人分享信息和知识,以解决共同的问题。这通常是开源的基本动机,与开源基于黑客和创客文化的历史精神相契合。
信息分享的形式有很多种。虽然在开源领域中,我们通常会想到代码,但实际上,也可以通过设计、工具或流程的文档、图表、数据集以及其他类型的媒介进行分享。我将在第3章中介绍许可证在这些非代码环境中的运作方式,但是要知道,几乎每种类型的工作和社群都期望有相应的许可证存在。
一些专注于信息分享的开源项目包括以下4个。
● Ubertooth:该项目构建了一个用于蓝牙实验的开源无线开发平台。该项目不仅构建了硬件的软件堆栈,也开源了硬件的设计图,供其他人构建实际的硬件(并培养了一个独立社群,提供硬件套件以及完全组装好的无线接收器)。
● PiFire:该项目为烟熏炉或烧烤炉提供了一个支持无线网络的智能控制器,包括基于Raspberry PI平台的软件设计和硬件设计。
● SecurityExplained:该项目专注于为软件安全社群提供各种信息。
● Darwin Core:该项目是一个由Darwin Core维护兴趣小组维护的标准,标准中包括一个术语表,旨在促进生物多样性信息的分享。
“Awesome列表”是社群合作的一种方式,它们汇集了特定主题领域内的一些最佳资源。我知道的一些很棒的“Awesome列表”如下。
● Awesome 3D Printing:为3D打印的爱好者提供各种链接和资源。
● Awesome Interviews(工作面试问题列表):可以帮助求职者更好地准备工作面试,同时也让面试官能够更好地筛选和评估申请各类职位的人才。
与编程语言和框架相关的“Awesome列表”也有很多,如NodeJS、Erlang和极简框架。
在基础技术中,有一个概念被称为UNIX方式或UNIX哲学,它描述了一种最小化和模块化的软件编写方法,这种方法是由Douglas Mcllroy和Peter H.Salus等人最先阐述的,并在Ken Thompson和Dennis Ritchie的著作中被进一步推广。虽然对于UNIX方式有多种解释,但基本上可以归结为一个核心概念:专心做好一件事。因为开源软件社群成员大多有UNIX背景,所以开源项目也秉承了这一理念。我们所依赖的Linux和其他UNIX派生系统中的许多基本命令行工具的设计都遵循了这一原则,如以下3个工具。
● grep:一个命令行工具,用于在纯文本数据集中搜索匹配正则表达式的行。
● sed:代表流编辑器,用于解析和转换文本。
● cat:该工具用于从一个程序中获取输出并写入标准输出,以便作为另一个程序的输入。
现代软件具有多层库和框架,可以构建完整的解决方案,并且这些库和框架都是以同样的极简主义和以集成为中心的思维构建的。以下是我们经常看到的一些开源项目。
● 安卓项目:构建了一个底层操作系统,截至2021年,支持超过30亿台活跃设备。
● Ruby on Rails:推广了Model-View-Controller(MVC)的Web开发方法,这对Web开发产生了重大影响,截至2022年,全球有超过120万个网站使用该框架。
● Pandoc:文档转换工具中的“瑞士军刀”,支持将文档转换为几十种不同的格式(在本书的创作中非常有用)。
● Memcached:这是一个分布式的高性能键值存储系统,可以通过减少访问数据不经常变化的数据库的方式来加速Web应用程序。
你会注意到这些项目主要是开发者工具,这不是巧合。开源大大降低了构建软件的成本,更重要的是,开源也使高质量的工具、编程语言和框架变得更容易获取,这帮助许多Web 2.0时代的公司成功启动,如Google、Meta、Netflix(网飞)等数百家公司。
有一些项目属于前面的基础技术类别,但开源项目的形成和动机在本质上与构建生态系统更相关。换句话说,构建这些项目的目的是,使得无论是开源解决方案,还是商业解决方案,都能够具有一定的兼容性和技能适配性。这背后有多种原因,例如在行业水平或垂直市场上建立标准,探索新的技术领域,或者整合竞争性解决方案。在这些解决方案中,投资会被集中在更高层次的栈上,而这个层次的技术已经变得商品化。
我们将在第4章中深入探讨通过开源构建技术生态系统的内容。以下是一些属于此类别的项目。
● Kubernetes:这是一个开源系统,用于自动化部署、扩展和管理容器化应用程序。它针对Kubernetes的解决方案构建了Kubernetes认证计划,目前拥有超过130种产品,同时Kubernetes认证服务提供商计划也已经有250多家供应商提供支持和服务。这些项目由Kubernetes社群构建并由CNCF工作人员管理。
● Anuket Assured:这是一个开源的、社群主导的合规性和验证项目,用于展示商业云原生、虚拟化产品和服务的准备情况和可用性,包括NFVI、云原生基础设施、VNF和CNF,它们使用了Anuket和ONAP组件。
● The Zowe Conformance Program:该项目建立了与Zowe开源项目构建或集成解决方案之间的互操作性需求。同样,这是一个由社群构建的项目,并由开放大型机项目工作人员管理,截至2022年,已经提供了70多种独特的解决方案和服务产品。
需要注意的一点是,虽然这些项目旨在构建技术生态系统,但它们对开源许可证和代码仓库的重用没有影响。真正确立代码重用和其他实现规则的是许可证的条款。这些项目纯粹是为了提供一个供应商中立和社群运营的程序,以识别和认可各种实现。
虽然我们中的许多人都很幸运地出生或生活在一个能够轻松购买和获取软件的环境中,但并非所有人都如此。即使对于富裕地区的人来说,某些软件的高成本也会让人望而却步。想象一家创业公司,可能会努力控制成本,或者一个学校,可能需要成百上千份软件副本。但免费软件使得这个本来无法实现的目标成为可能。
然而,同等重要的一个方面是自由,并不仅仅是指“免费啤酒”的那种免费,而是指拥有自由或开放的使用权。拥有高质量的软件,用户就可以根据自己的需求和工作流程修改软件,或者可能在上游项目停滞不前时保持更新,这是自由软件运动的核心原则之一。
Linux发行版,如Debian、Fedora、Ubuntu、ArchLinux等,为免费桌面环境铺平了道路,让用户在使用计算机时更加灵活;在许多情况下,这也让使用现代软件重用过时的硬件成为可能,这在那些难以获得现代硬件的地区很有价值。此外,我们还看到大多数主要的桌面应用程序都有活跃的开源替代品,以下仅是一小部分。
● LibreOffice:该应用程序提供了一个与Microsoft Office相当的完整办公套件。
● GNU图像操作程序(GNU Image Manipulation Program,GIMP):该应用程序的图像编辑和操作类似于Adobe Photoshop。
● Inkscape:这是一个开源矢量图形编辑器,很像Adobe Illustrator。
● Mozilla Firefox:它源于1998年Netsuite Communicator的开源版本,提供了一个先进且安全的网络浏览器。
这个列表还在不断增长,当我们谈论开源软件时,都会认为它是一个被更广泛认可的领域。这也是社群增长不仅仅是开发者增长的一个例子;在上述列表中,你可以看到经验丰富的项目经理、用户界面专家以及具有特定领域知识和专业能力的个人汇聚在一起,共同构建用于专业环境的高质量软件。
现在我们已经了解了开源是如何实现的,下面让我们看一些项目,并了解他们选择开源的动机。