GNU/Linux与开源文化的那些人和事
文/刘军民
本文只梳理大致的脉络,不做详尽的叙述。
一、计算机的发明
世上本无路,走的人多了,就有了路。世上本无计算机,琢磨的人多了……没有计算机,一切无从谈起。
三个人对计算机的发明功不可没,居功至伟。阿兰·图灵(Alan Mathison Turing)、阿塔那索夫(John Vincent Atanasoff)、和冯·诺依曼(John von Neumann)。
图灵从理论上证明了计算机的可行性;阿塔那索夫实践了图灵的理论;冯·诺依曼奠定了现代计算机的体系结构。
图灵说这玩意儿应该可以做,已经被证明了;阿塔那索夫二话不说动手就做了一个;冯·诺依曼说应该这么做才更好。
图灵功劳很大,死得很惨,只因他是同性恋。他的最后时刻是吃了一个沾有氰化钾的苹果。有人说苹果公司的 Logo 是为了纪念图灵,不可证。确定纪念图灵的是“图灵奖”,计算机研究领域的最高奖项,由美国计算机协会于 1966 年设立。
阿塔那索夫名气不大,享年较长。世界上第一台计算机是阿塔那索夫领导发明的 ABC 计算机,并非我们很多书上说的 ENIAC。
冯·诺依曼长得帅,聪明,研究领域广,故事很多。今天我们使用的计算机都被打上了一个的深深的烙印,这个烙印就叫冯·诺依曼体系结构。
关于计算机之父有很多说法,版本不一,这三个人都可以称为计算机之父。曾有人奉冯·诺依曼为计算机之父,冯·诺依曼说不敢当,殊荣当归图灵。
早年全世界的计算机中心在美国普林斯顿大学,群星闪耀,璀璨夺目。冯·诺依曼曾在此工作,图灵曾在此学习,他俩在普林斯顿的花园里聊过天。冯·诺依曼想让图灵给他当助手,被拒绝了。
二、最初的 Unix 和C语言
早期计算机个头大,电子元器件多,开动一次电费都不少,使用起来也很不方便。别的不说,一次只能干一件事就让人受不了。先煮粥,半小时之后粥煮好了再炒菜。花老多钱雇的厨师,明明煮粥的时候可以炒菜好不好?一次做一件事,就叫单任务,比较笨。
受不了就要想办法,就有人提出了操作系统的想法。操作系统就是想让计算机用起来更方便,能发挥更大的作用。
1965 年,MIT、贝尔实验室和美国通用电气公司合作准备搞个超级操作系统,取了个霸气的名字:Multics (Multiplexed Information and Computing System),多路复用信息和计算机系统。能让多个人可以同时干很多事,也叫多用户多任务操作系统。
Multics 名字挺好,事没干成,目标过于庞大,结果壮志未酬。
1969 年,Multics 项目进展缓慢,被迫停止,参与项目的两个人 Ken Thompson 和 Dennis Ritchie 也闲了下来。他们都是贝尔实验室的人。没活干了,就打游戏。他们俩找了一台破电脑准备玩以前开发的一个游戏。
把游戏移植到一台闲置机器(PDP-7)的过程中,实现了一个简单的操作系统。到了 1970 年,这个简单的系统已经可以使用,但只能同时两个人使用。有人调侃他们,说你们这个破玩意离 Multics 差远了,就叫 Unics(UNiplexed Information and Computing Service)吧。Unics 是 Multics 的反义,与其说调侃他俩,不如说在调侃 Multics。Ken Thompson 稍微把名字修改了一下,Unix。
自此,Unix 纪元开始。1970 年是为 Unix 元年,今年已经是 Unix45 年。Unix 时间戳从 1970 年 1 月 1 日开始计算和 Unix 诞生的时间有莫大关系。
早年的操作系统最早是用汇编语言写的,汇编语言低级落后,写起来很痛苦。开发 Unix 过程中,Thompson 发明了B语言,Ritchie 在B语言基础做了改进,称之为C语言。
C 语言发明后,Ritchie 和贝尔实验室的同事 Brian W. Kernighan 合著一本C语言的书,后来被称为K&R。Kernighan 名气没 Ritchie 大,但并非凡人,Unix 命令 Awk 中的K就是 Kernighan。
接下来 Thompson 和 Ritchie 用C语言重新编写了 Unix 系统。结果相当满意,Unix 可以见人了。1974 年,Dennis M. Ritchie 和 Ken Thompson 发表了第一篇关于 UNIX 的论文《The UNIX Time Sharing System》,从此 Unix 广为人知。
这几年世界计算机的中心到了贝尔实验室,Thompson、Ritchie、Kernighan 还有好多。Thompson 和 Ritchie 后来都获得了图灵奖。
有心栽花花不活,无心插柳柳成荫。Multics 目标宏伟,没干成,Unix 和C语言刚开始并没想那么多,而且还是业余时间的作品,终成伟业!
Unix 和C语言是计算机领域的常青树,历久弥新。从发明至今一直保持着旺盛的生命力,从发明至今都基本保持原貌,足见伟大!
三、混乱的 Unix 发展过程
Unix 一经出现,引起了众人的关注,很多人找 Thompson 和 Ritchie 要 Unix 的源代码。那是个开放的时代,那是个相互学习研究的时代,把程序的源码分享给别人是很平常的事。一份份的 Unix 源码被流传到各个实验室、学校、公司。
加州大学伯克利分校有一帮热衷于 Unix 的人,他们拿到源码后不断研究,不断改进,大大推进了 Unix 的发展。
这个阶段 Unix 发展有两条主线,一条在贝尔实验室内部,另一条就在伯克利分校。伯克利分校的成果很辉煌,著名的 TCP/IP 协议在 Unix 上的实现就是他们搞出来的。后来把他们搞的这套 Unix 称为 BSD(Berkeley Software Distribution)。
伯克利分校一时风光无两,最杰出的一位是 Bill Joy。Bill Joy,Vi、Csh 等等一系列软件的作者,Sun 公司的创始人。没有 Sun 公司,就没有今天的 Java 语言。
Unix 刚诞生的时候,贝尔实验室受反垄断法所限,不能从事计算机业务。其实也并没想到 Unix 发展势头如此之好。
Unix 发展过程图
等到 1983 年,贝尔实验室的母公司 AT&T已经被强制拆分为几个小公司,不再受反垄断法的限制。这时,AT&T发布了 Unix 最新版 System V,宣布从此 Unix 只能商业使用,不再开放源代码。AT&T想用 Unix 赚大钱。
BSD 那边受到了很大影响,他们不想急着赚钱,他们想开放源码。没办法,伯克利分校决心把 BSD 当中受到影响的源码重新写过。从伯克利分校出来的几位同学成立了一家公司,专门开发 BSD 项目。直到有一天,他们宣布 BSD 当中再没有最初来自贝尔实验室的源码。AT&T不买账,告你,起诉,打官司。
这是一场漫长的官司,官司尚未打完,Unix 版权就被倒卖了好几次。买版权的好几家公司继续和 BSD 打官司,几家公司相互也打官司。
等到硝烟散尽,BSD 终究推出了完全属于自己的 Unix,因为版权的问题,不能再叫 Unix,只能叫类 Unix 系统。
BSD 的类 Unix 系统是 FreeBSD、MacOS 的前身。今天使用的苹果电脑,iPhone 手机上的操作系统都是从 BSD 这一支上发展而来。
漫长的官司耗尽了人们对 BSD 的热情,也让 BSD 错过了最好的发展机会。后来的 FreeBSD、NetBSD、OpenBSD 都是从 BSD 分化而来,免费,开源,优秀,但再没挽回曾经的荣光,因为已经有了 Linux。
四、斯托曼博士的 GNU 计划
AT&T想靠 Unix 赚钱的时候,不止是 AT&T,很多商业公司都希望通过软件赚钱。不再免费,不再开放源代码,不再相互通过源代码学习研究。
曾经是多么好的时代,怎么现在就变得只认钱了呢?这一切让一个人很不满意。他曾经看到一个系统有问题,想要一份源码拿来帮修改一下,别人冷笑以对。
世风日下,他要向这个令人沮丧的时代挑战,他要还一个开源、免费的系统与人世间。请记住这个人的名字,理查德·斯托曼(Richard Matthew Stallman)博士。
斯托曼是老牌黑客,Emacs 的作者。Emacs 和前面提到的 Vi 是计算机领域中两大强悍的编辑工具,Emacs 和 Vi 哪个更强是最容易引起争议的话题之一。为了少吵架,千万别和宝马车主说奔驰好。
斯托曼博士长头发,大胡子,不修边幅,一直单身。他一心投入自由软件运动,他创建了自由软件基金会(FSF)。他雄心勃勃地提出了一项伟大的计 划,GNU(GNU's not Unix)计划。Not Unix,不是 Unix,是自由的、免费的、开源的、像 Unix 一样好用的系统。
理查德·斯托曼博士
GNU 起初进展很顺利,GLibc、GCC、GDB,这一系列的操作系统必备软件都有条不紊地在进展。所有的“G”来自 Gnu 的首字母。为什么叫“G”,斯托曼博士说当时他觉得好玩,而且他小时候听过一首歌,很喜欢,歌名是《The Gnu》。
完全搞个操作系统看来也并非易事,GNU 完成了一大堆软件的时候才意识到遇到了大麻烦。GNU 系统的内核项目 Hurd 迟迟不能令人满意。内核之于操作系统,就像发动机之于汽车,必不可缺。
五、Linux 出世记
1991 年,Linus Torvalds 尚是芬兰赫尔辛基大学的一名学生,他在学校学操作系统的课程,他也想搞个操作系统玩玩。他当时已经在使用 Gnu 项目的 Bash、GCC 等软件。受 GNU 的影响,把他自己开发的一个简陋的操作系统内核放到了互联网上。
这个内核系统就是 Linux,Linus's Unix,Linus 的 Unix。名字并非 Linux 所取,他一贯的风格是取个调侃的名字,但当时管理员说 Linux 挺好,名字就这么定了。
Linux 放到网上后引起了很多人的兴趣,他们陆续通过互联网加入到 Linux 开发过程中。1993 年,大约有 100 多名程序员参与了 Linux 内核代码。这时已经是互联网的时代,他们不用相识,不用谋面,通过网络讨论,通过网络协作,推进着 Linux。
1994 年 3 月,Linux1.0 发布,Linux 已经成为一个基本可用的内核。从此 Linux 就一直没有踩过刹车,一步步从幼苗长成参天大树。
Linus 小时候被企鹅攻击过,他给 Linux 定 Logo 的时候选中了企鹅,真不知道这是什么逻辑。长得像企鹅的除了 QQ,还有 Linux。
Linux 开创了一种前所未有的软件开发模式。多人协作,代码随时提交,有问题及时修改,所有参与人员并非精英,而是一群狂热的支持者。前前后后无数人参与了 Linux 项目的开发,组织不太严谨,有很多的争吵和讨论。Linus 经常写代码,偶尔扮演仲裁的角色,而非传统意义上的领导。
后来开源运动的鼓吹手 Eric Raymond 写了一篇文章《大教堂与集市》来分析 Linux 的开发模式。大教堂要设计好图纸,动用优秀的工匠,有序的工程计划才能修筑,闹哄哄无序如菜市场的一拨人能不能修一座大教堂?答案是可以的,因为他们建成了。
Linus 后来坦言,他开发 Linux 时不了解还有 FreeBSD 等项目,如果知道了可能他就不会动手写 Linux 了。那时各种 BSD 系统正在官司的阴影笼罩下,某种程度了也促进了 Linux 的发展。
他们一开始也没什么图纸,一边修建,一边请人参观,出了问题随时修复,有的地方干脆推倒重来。他们没有严密的组织,只有大体的分工。随时有人在使用教堂,给他们提出各种意见。他们建的教堂已经足够好,他们建的教堂一直没有竣工,会一直修建下去。
Eric Raymond 这个人不得不提,早年和斯托曼博士一起共事,还帮斯托曼博士修改过 Emacs 的代码。他比写程序更擅长的是演讲和写文章。《大教堂与集市》是开源文化的抗鼎之作。斯托曼博士是开源运动的精神领袖,Raymond 是开源运动的布道师和理论家。
六、Linux 各种发行版
一边 GNU 项目为内核苦苦挣扎,一边 Linux 内核项目横空出世,这不天作之合么?不错,手快的人来不及同情斯托曼博士的痛苦,把 GNU 一大堆项目和 Linux 攒在一起搞了个新系统,GNU/Linux。
好了,终于大家可以拿去用了,可以用一个完全免费、源码开放的系统了。
今天很多人把使用的系统叫 Linux,很不公平,是对 GNU 工作的漠视。正确的叫法是 GNU/Linux。
有了 GNU/Linux 还不是一切,只能是一个基础的操作系统,要想用得更好还缺很多软件。就像有了 Windows 系统,没有 Word,没有 Excel,没有浏览器,没有游戏,可干的事并不多。
所幸的是 GNU/Linux 诞生的年代,已经有了很多优秀的开源项目,他们和 GNU 无关,有的是个人开发,有的是组织开发,都遵循免费开源的理念。这些开源项目有 Apache、Perl、Python、Vim、TeX 等等。
攒系统的人干脆一股脑攒了起来,就是所谓的 GNU/Linux 的发行版。最早攒 GNU/Linux 系统的公司是 Redhat,后来陆续一大堆 GNU/Linux 的发行版,Slackware、Mandrake、Gentoo、Debian、Ubuntu 等等。有的已经死了,有的还活得挺好。
所谓 GNU/Linux 发行版,就是攒好的一套 GNU/Linux。选用 GNU 项目中的基础软件,加上 Linux 内核,再找一堆开源免费,版权协议许可的软件,最后做个安装程序,就齐活了。更好的发行版大体就是考虑的更周全些,软件包的更新、安装、卸载更方便些。
能不能自己动手攒一个 GNU/Linux 的发行版?当然可以,Linux From Scratch,网上的一个项目,教你一步一步从头打造一个属于自己的 GNU/Linux 发行版。
2002 年,南非商人 Mark Shuttleworth 花了两千万美金,搭乘俄罗斯的宇宙飞船去了一趟太空。次年,他成立了 Canonical 公司,致力于开源文化的推广,推出了 GNU/Linux 发行版 Ubuntu。有钱人办事就是不一样,Ubuntu 做得太好了,GNU/Linux 用户纷纷投靠,Ubuntu 基本一统 GNU/Linux 发行版的江湖。
五、GNU/Linux 和开源文化的背后
GNU/Linux 来了,虽然没成为大多数人电脑里的系统,但每个人都离不开它。诸多互联网公司的服务器里都跑着 GNU/Linux,名单不完全确认,Google、非死book、淘宝、百度、腾讯、小说阅读网等等。
大多人使用的安卓手机的系统也是基于 Linux 内核。
GNU/Linux 的繁荣有宏伟的规划,有个人的努力,也有很多无形的力量在起着作用。
没有 Unix 就没有 GNU/Linux,是 Unix 给予了伟大的启示。
没有C语言就有没有 GNU/Linux,C语言简单,优雅,介于高级语言和低级语言之间,开发系统软件的首选编程语言。
没有一系列 Unix 标准的制定就没有 GNU/Linux 的繁荣。标准就是“车同轨、书同文、统一度量衡”,秦始皇可算最早的标准制订者。遵循 Posix 标准为 GNU/Linux 发展铺平了道路。
没有互联网就没有 GNU/Linux,GNU/Linux 不是一个人在开发,是全球无数人协作的结果。如果没有互联网实在不可想象。当然,GNU/Linux 也反哺了互联网,无数互联网公司采用 GNU/Linux 搭建服务器,GNU/Linux 也促进了互联网的繁荣。
没有斯托曼博士的努力,就没有 GNU/Linux。他的功劳不仅是创建 GNU 组织,也不仅是编写 Emacs、GCC、GDB,他的精神感召着无数人为开源运动做贡献。
当然还有 Raymond 的振臂高呼,摇旗呐喊。
还有 GNU/Linux 诞生之前就开发开源项目的人和组织。Larry Wall 因为懒,整天被报表搞得焦头烂额,发布了 Perl 语言;高德纳教授因为对排版工人不满意,十年时间停止重要工作,发明了伟大的排版软件 TeX;Guido 为了打发圣诞节的无聊,编写了新的脚本语言 Python……
GNU/Linux 发布之后,在前辈们的感召下无数人接受了开源的思想和理念,接受了开源文化的洗礼,兴起了开源文化运动。无数为开源项目做出贡献的人和组织,他们发布了 PHP、MySQL、Ruby、Node.js、X.Org、Gnome、KDE……他们丰富了 GNU/Linux,他们进一步推动了开源文化运动,他们继续感召着别人。
KDE(Kool Desktop Environment)的初衷是想开发一套易用的桌面系统。Windows 系统就是一种桌面,使用方便,不是像程序员整天对着黑乎乎的屏幕工作。桌面系统要有浏览器,他们就分了一个小组 KHTML 来开发浏览器。全世界能开发浏览器核心的也没几家,KDE 做到了。后来苹果公司和微软闹别扭,想自己开发浏览器,就是在 KHMTL 的基础之上开发了自己的浏览器 Safari。KHTML 的浏览器核心模块叫 Webkit。Google 推出安卓手机时浏览器也是基于 Webkit 开发的。
今天的 iPhone 手机和安卓手机的浏览器都是 Webkit 内核。
各种版权许可协议的制订也为 GNU/Linux 的发展铺平了道路,其中就有 GNU 的 GPL、LGPL,还有 Apache License、BSD 协议。不可能每个人都有一套自己开源协议项目的版权协议,已经制订好的版权许可协议使得软件更好地传播。
其实开源并非自由,有人说 GPL 是用自由抹杀自由。GPL 许可要求任何含有 GPL 许可的软件发布时必须开放源码。BSD 和 Apache License 相对比较宽松,算是准自由软件。
版本管理软件对 GNU/Linux 的发展和开源文化运动也功不可没。Linux 内核开发起初使用的是商用版本管理软件,某天 Linus Torvalds 先生不开心了,就自己动手搞了一个。他好取自嘲调侃的名字,命名为 Git,意为没什么用的东西。
Git 可不是没什么用,太好用了,Linux 内核源码从此都用 Git 管理。Git 免费、开源,Git 成就了一家伟大的网站 github.com,伟大的源码项目托管网站。很多开源项目纷纷把源码托管到了 Github 上。
GNU/Linux 不朽,开源运动不朽!
六、后记
从最初安装 Redhat Linux 起,陆续折腾过多种 GNU/Linux 发行版。后来萌生念头,想写一本 GNU/Linux 和开源文化的书,种种原因,一直未能如愿。
作为 GNU/Linux 和开源运动的追随者,书不知何时能写完,这篇文章做个纪念。