伴随互联网的兴起,开源,也就是 Open Source 这个词变得越来越流行。但是这个词是怎么来的?背后都有哪些故事呢?本文我们从 Unix 操作系统诞生说起,一直聊到 Linux 和互联网基础设施的奠定,真切感受一下开源思想。

开源前传:Unix 的故事

当代操作系统以及互联网的基础架构,很多都是源于 Unix 操作系统的。所以聊开源运动的发端,必须要从 Unix 说起。

先说 Unix 之父 Ken Thompson 。 1969 年,时为贝尔实验室工程师的 Ken Thompson ,利用在海边度假的时间写了一个操作系统,这就是著名的 Unix 。Unix 是现代操作系统之父,目前最流行的几个操作系统,包括安卓,iOS,Linux ,MacOS 其实本质上都是 Unix 系统。同时 Unix 也是互联网之母,世界上第一台互联服务器( Web Server ),就是使用了 Unix 操作系统。Ken 说,Unix 的出现是为了扭转操作系统复杂化的趋势,Unix 的设计最重要的原则就是简单。后来 Linux 之父 Linus 说,他之所以愿意去克隆 Unix ,很大一个原因就是因为简单,克隆 Unix 的工作本身就是开心的,所以才能作为业余爱好坚持下来。

Dennis Ritchie 是 C 语言之父,C 语言是当代编程语言的之父。Unix 最早是用汇编写的,但是后来真正流行起来的 Unix 是用 C 语言全部重写过的。所以,C 和 Unix 是相伴而生的关系。 Ken 会说,是他和 Dennis 一起创作了 Unix 。

谈到 Unix 和 C ,Dennis 说

What we wanted to preserve was not a good programming environment, but a system around which a commnuity can form。

翻译过来就是,我们真正想要构建的不是一个好的编程环境,而是一个可以去围绕它来构建一个社区的系统。C 和 Unix 的特点都是简单,Unix 底层的数据结构其实很多都不是从计算角度最高效的,例如一切皆文件,一切皆文本的思想,这些设计显然是为开发者能很快参与进来来考虑的。

Unix 的架构思想,根植到了后来的各种操作系统,以及互联网之中。

开源前传: GNU 项目和自由软件运动

但是 Unix 最初的几个实现版本都是有版权的,不是开放源代码软件。这让一个当时还在哈佛读书的年轻人看着很不爽,这个人叫 Richard Stallman 。

Richard Stallman 的黑客名是 RMS ,被称为自由软件之父。他是人类历史上写代码最多的几个人之一,是大名鼎鼎的 Gcc 编译器之父。作为比尔盖茨的校友和同龄人,RMS 的梦想是创造一个人人都可以免费使用的操作系统。如果你想找一个非常极端的理想主义者做偶像,RMS 就是这么一个人。他把自己的年轻时光全部都用在了创造一个人人皆可自由获取的操作系统上了,这个系统叫做 GNU ,GNU 的目标是做出一个 Unix 的克隆版。基于 GNU 项目,RMS 创建了自由软件基金会。基金会几位元老中,有一个人是后来密码朋克运动的发起人之一,另外还有一个人叫 ESR 是后来开源运动的发起人之一。

密码朋克和区块链我在其他文章中提过了,这里不展开。本文中,我们来聊 ESR 。ESR 是自由软件基金会的早期参与者,全名叫 Eric Steve Raymond 。他不仅是一个开发者,也是开源领域最著名的作家,他的文章,例如《 How to become a hacker 》,奠定了开源社区的很多伦理规范。ESR 发现 RMS 的思想有点太反商业了,很难推行,他说

不是说 RMS 额原则错了,而是他的语言根本不能说服任何人

自由软件基金会的确有着相对激进一些的思想,核心体现就是 RMS 提出的 GPL 协议。GPL 协议的规定是,如果一个人基于 GPL 协议下的软件做了改进,那他也必须把他的代码分享出来,这个本身就对商业公司很不友好了,后来的 GPL v3 就更为激进,增加了更多软件商用的限制,导致自由软件思想的确推广很困难。后来,自由软件基金会分裂,以 RSR 为代表的这些人出来,想要表达一个对商业世界相对温和的态度,所以他们需要找一个词和自由软件区分开来,于是大家商量了一下,最终确定了这个词叫 Open Source ,也就是“开源软件”。

可以说,自由软件是开源软件的前身,但这不仅仅是因为自由软件基金会里面有一部分人出来参加到了开源运动中,而是更是因为开源软件社区对 GNU 和 GPL 的继承,这个马上我们就会聊到。

开源诞生:Linux 项目和开源运动

GNU 项目发展了十几年,一个相对完整的操作系统已经有了,只缺少一个组件,也就是操作系统内核,术语叫做 Kernel 。而 Linux 就是这个 Kernel 。

1991年,Linus 还在芬兰上大二的时候,以 GPL 协议发布了 Linux 源码。严格来说 Linux 只是操作系统的 Kernel ,今天我们所说的 Linux 系统,其实绝大部分代码都是来自 GNU 项目的。Linux 诞生后,围绕 Linux 项目形成了一个大大的社区,大家的基本共识是要为正在腾飞的互联网提供基础设施,社区里最重要的是两个项目,一个是 Linux 项目本身,另外一个是 Apache 服务器。不久 Linux 就成为市场占有率第一的服务器操作系统平台,Apache 则是排名第一的 Web 服务器。后来,全世界几乎所有的超级计算机都使用了 Linux 系统,Google 也基于 Linux 开发了安卓系统,Linux 于是又成了市场占有率最大的移动端操作系统。

开源思想可以收就是诞生在 Linux 社区的。跟自由软件基金会的思想比起来,开源思想最大的区别是对商业行为的包容。Linux 的协议本身是 GPL v2 ,比起 GPL v3 来要温和的多。其他的开源协议,例如 BSD 和 MIT ,对代码的使用基本不做严格的限制,让商业公司可以更放心的使用开源代码。

但是开源思想最重要的不是一个对代码的法律定位,不是那些协议,而是一种人与人协作,去进行大规模协作的方式。Linus 说

我做开源不是基于对自由的宗教式的信仰,而是因为开源是做软件的唯一正确方式

Linus 做出了世界上最强大的操作系统,但是他本人并不是公司领导,跟大部分的 Linux 项目开发者都没见过面,也不给这些人开工资。用 Linus 自己的话说,每个开发者其实都带着自己的目的来贡献 Linux 的代码的。所以说 Linux 的开发是由社区驱动的。Linus 把自己多年的协调 Linux 项目开发的经验,凝结到了一个软件之中,这个软件就是 Git 版本控制工具。跟传统的版本控制工具,例如 SVN/CVS 不同,Git 是一个去中心化的版本控制工具,没有中心化的服务器,每个开发者都自成中心,互相从对方那里拉取代码。Git 的底层数据结构就是区块连成的链,就用到了 SHA1 这样的加密哈希来保证版本历史不可篡改。这些特征都是跟区块链技术完全一样,搞得我总怀疑 Linus 是不是就是中本聪。关于 Git 的详细思想,可以参考 Linus 的在谷歌做的关于 Git 的演讲 https://www.youtube.com/watch?v=4XpnKHJAok8 。

Linux 腾飞之后,人们突然意识到开源思想是能做很多大事的。Linux 之后,维基百科是又一个非常著名的例子,基于开源协作,大家创造出了这个有史以来最大更新最及时的百科全书。

总结

这节我们从 Unix 聊到自由软件和 GNU 项目,然后又聊到 Linux 系统的诞生。可以看出,互联网基础设施的诞生基本都是在开源社区完成的。所以关于开源这个话题,我们就先聊到这里了。文中咱们主要介绍了重要的历史人物和事件,如果想要了解开源的法律细节,可以参考 GPL 协议,如果要理解开源软件开发的具体过程,可以去学习一下 Git 和 Github 的使用。

参考: