本文转载自LinuxStory
原文作者:Demon - Law
1、Unix 的诞生
实际上,在计算机出现的最初年代,由于能够使用计算机的都是软件开发者或研究人员,软件提供它们的源代码是天经地义的事。将软件以源代码形式提供给用户,软件问题可以由用户们(同时也是软件开发者、计算机科研人员)自己修改解决,这样不仅能缓解计算机企业的售后服务压力,特定硬件平台上的用户们还可以对自己的软件进行修改来满足一些特定的需求。使用相同硬件的计算机科研人员或爱好者会组成特定的小团体,共享技术心得和自己编写、修改的程序。
1969年11月,美国国防部高级研究计划管理局(ARPA)开始建立一个命名为ARPAnet的网络,通过专门的接口和专门的线路,把美国的几个军事及研究用电脑主机联接起来,其4个结点分布在洛杉矶的加利福尼亚州大学洛杉矶分校、加州大学圣巴巴拉分校、斯坦福大学、犹他州大学四所大学的4台大型计算机。起初是为了便于这些学校之间互相共享资源而开发的。作为Internet的鼻祖,虽然ARPAnet的设计目的是使研究人员在合作一个项目时可以共享代码和信息,但是它也成为了对开放源代码可行性的一个展示。
1965年时,美国电话电报公司(ATT)下属的贝尔实验室加入一项由通用电气和麻省理工学院合作的计划,这项野心勃勃的计划旨在建立一套多使用者、多任务、多层次的MULTICS操作系统,用于取代当时通用的只支持30台终端访问主机的分时操作系统(Compatible Time-Sharing System)。但到了1969年,由于MULTICS计划制定的目标太多太大,项目距离完成遥遥无期,实际拿出的产品也不能叫人满意,该项目最终被喊停。
1969年的夏天,贝尔实验室的研究员Ken Thompson和Dennis Ritchie吸取了之前的教训,采取了“保持简单”的策略,一起用汇编语言在DEC PDP-7机器上写出了一个新的多任务操作系统,这就是Unix 。说起这个名称, MULTICS其实是“Multiplexed Information and Computing Service”的缩写,原本计划能同时支持1000用户的系统,最后只能支持到2位用户,于是贝尔实验室的人们就开玩笑地称他们的系统其实是:“UNiplexed Information and Computing Service”,缩写为“UNICS”,后来,大家取其谐音,就称其为“UNICS”了。
Ken Thompson (左) 和Dennis Ritchie (右)
Unix的第一版是完全用汇编语言编写的,最初只在贝尔实验室内部流转。渐渐的,Ken收到了外部的人索要Unix的磁盘拷贝寄来的邮件,由于数量不多,Ken也一并寄给了他们。不过,随着越来越多的人想要在不同的机器上使用这套系统,他们意识到有必要用高级语言来重写这套系统。最初,他们在Unix第二版中使用的是B语言,这是Ken以剑桥大学的BCPL语言为基础设计的一种简便易用的语言。但由于其在进行系统编程时依旧不够强大,所以Dennis对其进行改造形成了一种新的语言,他取了BCPL的第二个字母作为这种语言的名字,这就是今日影响力巨大的C语言。随着1973年C语言的完成,两人迫不及待地投入到用C语言重写Unix的工作中,不久第三版的Unix便诞生了。用C语言编写的Unix代码简洁紧凑、易读、易修改、可移植,从此Unix操作系统的修改、移植变得相当便利,为Unix日后的普及打下了坚实的基础。而在当时那个为了实现最高运算效率而完全用汇编语言编写操作系统的时代,Ken和Dennis此举是极具创新和革命意义的,他们清楚地意识到需要在效率和效用之间取得平衡。用汇编写的Unix会更快和更小,但用C语言写的系统变得如此的易于修改、理解和移植,所以他们认为牺牲速度和内存是值得的。
1974年,Ken和Dennis在7月的The Communications of the ACM上发表了一篇“The UNIX Time Sharing System”的文章向外界介绍Unix,引起了学术界的广泛关注,向其索取源码的请求更是源源不断。于是乎,Unix第五版就以“仅用于教育目的”的协议提供给各大学作为教学之用,费用也只是象征性地收取了制作磁盘和手册的成本。由于其近乎免费和可获得的源码,Unix很快成为当时操作系统课程中的范例,各大学和公司也开始对Unix进行了各种各样的改进和扩展,Unix 逐渐风行大街小巷。
2、致电脑爱好者的公开信
Ken和Dennis的研究小组仍在积极地投入Unix的开发当中,与此同时,他们避免对外作出提供支持的承诺。这是因为ATT受制于《反托拉斯法》的规定,无法进入电话、电报以外的行业,这也是它允许人们免费获得Unix源代码的重要原因。相应的,它不向用户提供软件技术支持和售后服务。于是人们便有了相互支持和共享错误信息的动机。但当时并没有互联网,这种共享往往通过学者间的游学和研究人员的交流会的形式完成,人们通过磁盘/软盘等形式分享改进过的源代码,这便是早期以物理形式存在的社区。
70年代,随着软件规模与复杂程度的提高,以及“福特主义”的兴起,商业软件开始了分工化的进程,软件工程内部分成了负责设计软件的功能与结构的设计员以及负责具体实现软件功能的编码员。这种由一个人或少数人负责总体设计和监督完成项目的模式由于和中世纪的大教堂建造非常相似,因而被称为大教堂模式。与此同时,计算机用户的平民化,和出于保护自家技术、确保公司盈利能力的目的,软件产品开始走向闭源,即只提供可运行的软件程序而不包括其源代码。对于两者的理解,Eric Raymond用了一个有趣的比喻:
“源代码就像菜谱,而可运行软件则是依照菜谱烹调出来的菜品,拥有菜谱的人可以轻易地烹调出同样的美味,而吃过菜品的人却不能够反推出其菜谱。”
也就是说,闭源将使得用户无法知道软件实现的原理,通过修改代码以满足自己特别需求的愿望也无法实现。在这方面,微软称得上是一个先锋。
1975年,微软公司成立,他们推出的第一个产品Basic编程软件深受人们的喜爱,几乎成为每台电脑上必备的软件。由一群计算机爱好者和发烧友组成的“家用计算机俱乐部”是当时最著名的社区之一,俱乐部有一个不成文的规定,会员可以从俱乐部带走软件的磁盘,只要下次会议时带回两份拷贝给其他会员就行了。这是当时人们习以为常的软件传播方式,微软的Basic程序就这样被安装在了许多俱乐部成员的电脑上,而实际上只有原始的拷贝是从微软那里付了钱买来的。不久,盖茨便写了一封“致电脑爱好者的公开信”,其措辞简单明了,直接指责这种行为称“你们大多数人都是在剽窃软件”,接着他从触犯知识产权和抑制创新的角度阐述“谁能够承担得起没有收入的工作?什么样的爱好者可以让3个人长年累月无偿地投入编程工作中,找出所有的错误,编制产品手册并进行发布呢?”私有软件和开源软件从此成了势不两立的仇家。
3、Berkeley Software Distribution
1975年,KenThompson获得了带薪休假一年的机会,他选择到加州大学伯克利分校访学,与他一起的,是他随身携带的最新的Unix第六版的源码磁盘。伯克利对于 Ken 的到来欢欣鼓舞,早在Unix发布之时Bob Fabry教授便为伯克利争取到了一份拷贝并在校园内招募到了一批有兴趣研究和改进这一系统的人,其中一名学生Bill Joy的表现尤为突出,他可以算是小组的领导人之一。
1977年,其他大学的人们也开始对伯克利的软件感兴趣,Bill Joy便开始着手编译他们自己的操作系统,正如早期的Unix一样,期间他们陆续有收到一些外界的代码改进和反馈,这些也一并被包含其中,待到下一个版本中一起发布。到了1978年3月完工时他们将捆绑了自家软件的改进过的第六版Unix以1BSD(1st Berkeley Software Distribution)的名称对外发布,一共分发出了30份左右的拷贝。
2BSD于1979年5月时发布,这个版本除了一些软件的更新之外,最大的变化应该是vi编辑器的加入,这一编辑器是今日依旧非常流行的vim编辑器的前身。同年,伯克利购置了一台DEC最新款VAX机器,为了充分发挥这台机器的性能,小组成员们继续埋头工作,于年底前发布了3BSD。4BSD于1980年底发布,次年发布了4.1BSD。4.2BSD带来了较大的功能更新,这也使这一版本的开发周期延长到了2年,到1983年8月才正式发布。新版本添加了完全由伯克利开发的TCP/IP协议栈,快速文件系统,以及对NFS文件系统的支持。BSD最大的贡献大概要数TCP/IP了,在Windows NT中也依靠BSD的代码来实现。
1982年,核心成员Bill Joy选择离开伯克利并创立了Sun微系统公司,他将之前自己领导开发的BSD继续发展成为SunOS操作系统(后来的 Solaris),与德州仪器合作设计了Sparc微处理器,在90年代依靠出售其高性能、平价的Sparc系列工作站狠狠赚了一笔。
再说说这几年间Unix的发展。1979年的Unix 7是最后一个广泛发布的研究型Unix版本,之后Unix的许可证开始禁止大学使用Unix的源码,包括在授课中学习,80年代相继发布的8、9、10版本只授权给了很少的几家大学。1981年,ATT基于版本7开发了Unix System Ⅲ的第一个版本,这是一个仅供出售的商业版本,不过其依然提供源代码。同时,为了解决市场上混乱的Unix版本情况,ATT综合其他大学和公司的各种Unix和软件,开发了商业版 Unix System V Release 1并于1983年发布,这一版本开始不再提供源代码。
回到伯克利,4.3BSD于1986年6月发布,常规更新。由于此时各个版本的BSD都含有Unix代码,虽然BSD可以免费获取到,但作为衍生的产品,要使用BSD却不得不向ATT支付高昂的授权费。于是一个分支项目便应运而生,项目利用BSD自行开发、公布在网络上的那部分代码开发了一个新的版本,于1989年6月公布,取名Networking Release 1(Net/1)。由于Net/1去掉了私有部分的Unix代码,它并不是一个完整的操作系统而更像是一个软件包。当然,人们并不会轻易放弃,Net/2的计划很快被提上日程,这次的目标是把所有私有Unix代码重写以形成一个完整的操作系统。时间一晃就是两年,1991年6月Net/2发布,尽管完全重写的目标是基本上实现了,不过这次依然不完整,由于Unix内核部分的6个文件编写难度太大,小组的成员最后决定将缺少这6个文件的版本公布,希望外界能有大神级的开发者帮助他们补齐为一个完整的系统。
过了半年多时间,Bill Jolitz夫妇合作完成了缺失的6个文件,并将其源码公布于网上给人下载,取名为386BSD。后来Jolitz作为联合创始人加入了Berkeley Software Design Inc,继续改进这部分的代码,他们把补齐文件之后以BSD/386(后改称BSD/OS)命名的系统以市场可以接受的价格($995)出售,取得了不错的销售成绩。
这对Unix的销量来说是一个很大的威胁,看不过眼的ATT不久便将对方告上了法庭,时间是1992年,理由是其销售的系统中含有私有的Unix代码,随后伯克利的师生也被卷入这场诉讼当中。依据原告的申请,法院签署了禁止令,Net/2及其派生的版本都被禁止在市面上传播,期间由于法院的调查,BSD的大部分开发工作也被搁置。这场官司旷日持久,闹得人心惶惶,学生和教师以及校委员会被要求出庭作证,Net/2的全部代码作为证据必须接受原告和法庭的仔细审核以确保其中如伯克利所说的已不包含有Unix的私有代码。期间,ATT将Unix版权出售给了Novell,接手的Novell不打算继续扯皮,遂与伯克利达成了和解。这桩官司最终在1994年1月结案,根据调解协议,Net/2的18000个文件中有3个文件需要删除,另有68个文件需要添加Unix的版权声明,协议中还要求,原告不得针对使用或开发4.4BSD的任何人及组织提起进一步的诉讼。
既然官司打完了,大家又可以回去各干各的活儿了。6月份,4.4BSD发布,这次分为完全包含伯克利代码并可自由分发使用的4.4BSD-Lite和包含Unix代码并需要取得授权才可使用的4.4BSD-Encumbered两个版本。1995年的4.4BSD-Lite Release 2是最后一个由伯克利开发的BSD版本。
在这之后,基于386BSD逐渐形成了三个“主流”的BSD分支: FreeBSD是最受欢迎的BSD,针对高性能和易用性,它为x8和x64架构的处理器提供了最好的支持。NetBSD被设计成可以运行在几乎任何计算架构上,具备高度的可移植性。OpenBSD则是为最大化安全性设计的,这不仅仅体现在它宣称的功能,在实践中也确实如此,它是为银行、金融等重要机构的关键系统设计的。
至此, BSD 的故事暂告一段落。
4、Minix
因为ATT的政策改变,在Unix 7推出之后,新的使用条款不再允许在大学中使用Unix源代码。阿姆斯特丹自由大学计算机科学系的Andrew S. Tanenbaum教授为了能在课堂上教授学生操作系统运作的实务细节,决定在不查看任何ATT的源代码情况下,自行开发与Unix兼容的操作系统,他取Mini-Unix之意,将之命名为Minix。 Minix 1.0的全部代码一共约12,000行,随他的《操作系统:设计与实现》一书一起发布于1987年,置于附录中作为范例,随后也发行了一些包含源码的磁盘。彼时的Minix凭借低廉的价格和简易的操作在大学中大行其道。
Minix的系统要求在当时来说非常简单,只要三片磁盘就可以启动。系统在设计之初是为了在IBM PC和IBM PC/AT兼容电脑上执行的,1.5版也有移植到Motorola 68000系列CPU、ARM和Sparc机器上,2.0版则以x86架构为主。早期版本皆以教学为目的,需要收取很少的费用,2000年换用BSD授权后可以免费获取。
最新的版本为Minix 3,发布于2005年的ACM操作系统大会上,依旧作为《操作系统:设计与实现》第三版的范例,是一个免费、开源的,旨在实现高可靠性、灵活性及安全性的操作系统。由于其开放源代码的特性,它依然非常适合用于课堂教学中让学生们了解操作系统是如何运作的。
5、POSIX
POSIX是Richard Stallman应IEEE的要求而提议的一个易于记忆的名称,全称是Portable Operating System Interface(可移植操作系统接口),而X表明其是Unix API的传承。POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种Unix操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE 1003,而国际标准名称为 ISO/IEC 9945。POSIX的标准化工作始于1985年左右。
POSIX标准意在获得源代码级别的软件可移植性。换句话说,为一个POSIX兼容的操作系统编写的代码,应该可以在任何其它的POSIX兼容操作系统(即使是来自另一个厂商)上编译执行。POSIX并不局限于Unix,许多其它的操作系统也支持,例如Linux、FreeBSD、DEC OpenVMS等,Windows NT不支持。
6、GNU宣言和Linux
1983年,推崇自由的黑客文化的Richard Stallman发表了著名的GNU(GNU is Not Unix)宣言,号召大家一起来创建自己的开源的Unix的替代系统和软件,拉开了轰轰烈烈的自由软件运动的帷幕。
1985年10月Stallman创立了一个自由软件基金会(Free Software Foundation)来为GNU计划提供技术、法律以及资金支持。同时,考虑到放弃软件版权后一些商业公司和个人可能通过修改开源代码并将修改后的代码闭源进行营利而不给社区提供任何回馈的情况,他提出了Copyleft的概念,即利用现有的版权体系来维护开源软件的自由性。为此,他使用法律术语起草了一份通用公共许可证(General Public License,GPL),与强调个人所有、限制他人任意修改和传播的著作权(Copyright)不同,在GPL协议下虽然作者依然享有版权,但作者许可用户对代码进行复制、修改、传播和销售获利,前提是这样做的人必须保持原有的版权信息并公布修改后的全部源代码,以保证思想能够一直自由传递。也就是说,如果用户的软件使用了以GPL协议发布的软件的任何一部分,那么该软件就继承了GPL协议,必须随应用程序一起发布源代码以回馈社区,这一条款也因此被称为“病毒条款”。
1991年,经过了6年的努力,GNU项目需要的许多工具软件(Gcc、Bash、Emacs)已经基本完成,其中不少软件已经具备了工业级的水准,这时人们开始考虑为这个项目画上点睛一笔:开发操作系统的内核GNU Hurd。但由其采用了先进的微内核设计,导致项目复杂性大大增加,消息传递机制也使得除错变得异常困难,因此内核项目GNU Hurd迟迟未能完工(截至2015年依旧处于实验性的开发阶段),可以说“万事具备,只欠内核”。
同样是在这一年,在跨越半个地球的芬兰首都赫尔辛基大学,一位大二的计算机学生Linus Torvalds满心欢喜地把自己新买的386计算机抱回了宿舍,386计算机自带的操作系统是 MS-DOS,Linus并不喜欢,于是他安装了当时流行的Minix。虽然用上了他熟悉的Unix环境,但Minix作为一个教学用的系统设计还是有些保守,许多功能不能满足他的需求,而商业版的Unix则贵得离谱,考虑到自己以后要和计算机打一辈子的交道,最终他决定自己动手开发一个操作系统。说干就干,他在Minix用户组中发布消息,有人就给他寄来了厚厚几卷的 POSIX标准手册,同时还从学校的网站上找到了SunOS服务器的用户手册,这个手册中有一个可以凑合着用的系统调用的基础版本,另外,运行在他机器上的Minix和Tanenbaum的著作《操作系统:设计与实现》也是他重要的参考资料和灵感来源。项目开始于美好的暑假伊始的7月份,这期间他穿着破旧的睡袍没日没夜地奋战在电脑前,敲打着键盘编写一个又一个的程序模块,饿了就弄点咖啡和汉堡、披萨或者玉米煎饼,困了就往旁边的床上一躺休息,他哪儿也不去,几乎分不清白天和黑夜。终于在暑假完结时的9月17日,他拿出了一个基本可以工作的0.01版本。最初版本非常粗糙,如其本人所说“一个学生的作品”,但通过这时已经开始普及的互联网,这一项目立即吸引来了许多程序员的关注。令Linus没想到的是,原本只是做着好玩、计划发布稳定版本后就撒手不管的作品,却收到来自世界各地的人们通过细细的网线向他本人反馈的各式各样的错误报告(Bug),提出的修改意见,甚至有人将修复好漏洞或增加了新功能的代码直接发送给他。
“这里没有建造大教堂的安静和虔诚,Linux社区更像一个充满不同议程和方法的嘈杂的大集市,Linux归档站点来者不拒,任何人的作品都接收。”Eric生动地描述道。
后来,在一次失误的操作中,他将电脑中原本的Minix系统分区破坏掉了,他便干脆完全放弃Minix ,将所有的日常工作都转移到Linux上,这时他开始考虑把Linux项目继续发展下去了。于是在许多人的协同工作下,他又陆续发布0.02和0.03版本,到0.11版本(1991.12.8)是基本可以正常运行的内核版本,到0.13版本Linus直接改称0.95(1992.3.8),他的意思是这个系统已经完成了95%了,让大家不要觉得离1.0版还很遥远。随后系统陆续添加了TCP/IP 网络支持和虚拟文件系统VFS等特性,功能越来越完善,一直到0.99(1992.12.13)进入最终的攻坚调试期,版本也从0.99 1a一直滚动更新到0.99 15z,历经无数次调试修正,可见其精益求精的工匠精神。最后,1.0版本(1994.3.14)终于发布,此时的Linux已是羽翼渐丰,当人们将GNU项目的软件与Linux内核结合起来时,一个伟大的操作系统GNU/Linux诞生了。
“有些人生来就具有统率百万人的领袖风范;另一些人则是为写出颠覆世界的软件而生。唯一一个能同时做到这两者的人,就是Torvalds。”美国《时代》周刊对“Linux 之父”Linus Torvalds给出了极高的评价。甚至,在《时代》周刊根据读者投票评选出的二十世纪100位最重要人物中,Linus居然排到了第15位,而从20世纪的最后几年就开始霸占全球首富称号的盖茨不过才是第17位。
—Linus自传《乐者为王》
《人月神话》一书曾提出著名的“Brooks定律”:给一个延期的项目增加程序员,完成的工作量会直线上升,出错率会呈几何级增长,导致项目进一步延期。出现这种现象的原因是,随着人数的增加,管理的成本也会增加,团队成员因为沟通不足导致项目出错的可能也会成倍增加。但这一定律在开源模式下并不适用。Linux作为开源社区工作模式最典型的代表,它的成功离不开互联网的应用,互联网的快速与便捷使得沟通成本大幅降低,通过互联网的公共邮件列表和新闻组,所有的问题和意见都得到公开的讨论和表达,每个人都可以自由地表达自己的想法,因此而不存在沟通不足的情况。与此同时,“Linus法则”(眼球足够多的话,所有Bug将无处可藏)及数目众多的志愿者们则有效地减少了重大错误产生的可能。当Linux拥有成千上万不计报酬地开发团队时,其效率必定远远高于一些公司的开发小组或者大学的研究团队,这样的行动所产生的力量是个人和公司无法匹敌的。可以说,如果没有廉价的互联网,社区模式将无法实现。
任何人都可以自由地选择自己想要参加的那部分工作,不存在任何强制性的分工,任何人也可以随时离开,这些也是大公司内所没有的。大公司里的软件开发人员太过经常地在那些他们既不需要也不喜欢的程序上消磨时日、换取工资,开源社区的成功,则通过提供硬性证据显示从互联网上招募自我选择的志愿者要比管理整栋楼的“身在曹营心在汉”的人们要便宜和有效得多。
—Eric Ryamond《大教堂与集市》
7、微内核与单内核之争
在没有Linux讨论组之前,Linus一般都是在Minix讨论组里发布有关Linux的信息和寻找对这个操作系统感兴趣的人,这种行为对Minix的作者Tanenbaum而言,无异于直接从他的讨论组挖走用户。他越想越不对劲,于是在1992年的新年还未完全过去之时,他在讨论组里发了一篇题为“Linux 过时了”的帖子抨击Linux,批评其采用的是落后的单内核设计,是“向七十年代的大倒退”,而不是像Minix一般采用先进的微内核设计。
虽然Linus平时是一个谦逊平和的人,但当别人对他的辛勤劳动的成果指指点点时,尽管对方是他的偶像,他还是忍不住要站出来说几句。当天晚上他就洋洋洒洒地回复了上千字来反驳对方的观点,强调了利用单内核实现Linux的高效性,并且认为“Minix本身没有实用性”。
简单的讲,单内核(Monolithic kernel)是将内核从整体上作为一个大进程来实现,整个操作系统是一个运行在核心态的单独的二进制文件,所有的内核服务都在一个地址空间运行,相互之间直接调用函数,简单高效。微内核(Micro kernel)则将功能划分成一组独立的进程,进程间通过IPC消息传递机制进行通信,模块化程度高,优点是一个服务崩溃不会对另外一个服务造成影响,稳定性高,但也由此增加了代码交互的冗余与效率的损耗。在设计哲学上,学院派的微内核符合目前流行的模块化设计的思想,从美学角度看也更胜一筹,但理论上的优势实现起来却有其困难,Hurd的难产就是一个例证,现实之中多采用折衷的混合内核方式吸取两种模式的优点,Windows和OS X就是这么干的。
8、商业模式
GNU/Linux和自由软件运动的重要转折点之一,就是基于这些软件和哲学的商业市场的诞生。很多人忍不住问,如果软件的源代码都可以无偿获得,那么程序员该如何挣钱养家呢?需要注意的是,即使在包含源代码的情况下,软件也更像高级饭店里一道菜肴的复杂烹饪方法,而不是航空公司的机票。
在市场经济中,如果无限制地免费提供航空公司的机票,那么航空公司将会破产。相反,Alice Waters出版自己拿手菜的食谱,却不会减少排队在她的Chez Panisse餐厅外等候用餐的人数。实际上,Stallman在最初的GNU宣言里列出了几种可行的营利模式,例如:以光盘或磁盘的形式销售自由软件包拷贝;自由发布软件,但可以提供捐款的途径给使用满意的客户;提供手把手的安装、培训和指导服务;针对厂商新机器架构的软件移植;软件的定制化等。
Cygnus Solution是第一家专门服务于自由软件的商业公司,他的想法是通过为自由软件提供咨询和服务来赚钱。用户在拥有源代码的情况下可以自行维护软件,但如果他们对代码一窍不通,或者公司里需要批量的维护工作,这时就可以交给他们的公司来做。自由软件由于其开放的源代码,其优势之一就是你可以在一个自由的市场上选择各种技术服务与支持,不同的服务提供商之间存在价格与质量的竞争,使用过一个服务商后觉得不满意可以随时寻找其他替代。
闭源软件由于只有其开发商拥有源代码,因此也只有开发商自家能够提供技术支持,没有竞争就没有动力,这也是微软的售后服务(如蓝屏)如此糟糕的原因。
另一种主流的营利方式是推出Linux发行版(Linux Distribution)。由于Linux实际是一个操作系统的核心(Kernel)而不是一个完整的操作系统,它缺少正常使用中许多必要的软件,而Linux发行版则是将Linux kernel、GNU软件包、工具集和文档、桌面环境等打包在一起的一个完整操作系统。第一个Linux发行版是1992年的Softlanding Linux System(SLS),并催生了后来的Debian、Slackware发行版。中国的第一个Linux发行版红旗Linux于1999年8月发行。目前Linux发行版可以分为由公司维护的版本如Red Hat(Red Hat), openSUSE(SUSE)和Ubuntu(Canonical Ltd.),以及由社区维护的版本如Debian,Arch Linux,Mandriva。大部分的Linux发行版都可以免费下载,但在下载页面上一般会有一个“如果你喜欢,请捐助我们”的选项,另外,付费的公司维护版本还可以获得定制化、技术支持等服务。
Linux发行版由于其友好的用户界面以及集成了便捷的软件包管理软件,大大提高了Linux的易用性,使得普通用户上手Linux的成本也大幅降低,为推广开源的理念和推动Linux的普及立下了汗马功劳。
9、自由软件与开源软件
1998年2月3日,一群自由软件的急先锋商议如何趁网景公司开放其浏览器Navigator源代码的大好时机,将自由软件有助于业务的核心理念推广出去。与会者都同意自由(Free)软件这一词存在问题,除去Free带给普通人的免费(Free)、质量低劣的印象,“自由”一词本身带有哲学和道德层次的意味,这意味着选择开源也就与利润无缘,而实际上并非如此,这些都不利于推动这一运动的进一步发展。经过几番头脑风暴,Christine Peterson提出的“开源”(Open-Source)一词被确定下来,它表达的意思很简单,即开放源代码,而不涉及到商业模式的选择。
随后是O'Reilly出版社同意出版一本Open Source文集,这就是1999年初的Open Sources: Voices from the Open Source Revolution。不到一周的时间内,Linux Journal杂志就有人撰文介绍,影响巨大的Eric Raymond也写了一篇文章向社区介绍并呼吁使用这个新词。
作为实用派的反面——理想派的代表,自由软件之父Richard Stallman对开源的态度是容忍的,他也是那本开源文集的作者之一。当然,随着开源渐渐开始取代自由软件,Stallman便不再掺和其中,而是将更多的精力花在了给各大媒体写信上,纠正他们在文章中将开源软件与自己以及Linux等自由软件的主要功劳混为一谈,不厌其烦地阐述自由软件和开源软件的理念之间的不同。
虽然对于一般开发人员和用户而言,开源软件与自由软件基本上没有什么值得注意的区别,它们所指代的软件集合也基本相同。用Stallman的话来说,开源软件对其最为重视的自由理念有意无意地进行了一定程度的弱化。Stallman从四个方面阐述了他对自由权的定义:可以为任何目的运行程序的自由权;研究程序运行原理并对其修改以满足自身需求的自由权;以免费或收费方式再发布软件拷贝的自由权;修改和改进程序,并将修订版再发布给公众,使其他人可以从中受益的自由权。
对两者之间理念上的不同,Stallman的文章总结得非常清楚:自由软件是一场社会运动,自由关乎道德,因为只有自由才能真正尊重用户的权利。而开源软件是一种软件开发方法,只有开源才能开发出优秀的软件。
10、开源运动
马克思的《共产党宣言》引领世界共产主义革命热潮的历史表明,任何一场革命或者运动都需要一个理论家,需要一份纲领性的文献,来带领革命走向最终的胜利。Eric Raymond于1997年5月27日所发表的《大教堂与市集》一文恰好就起到了这一画龙点睛的作用。文章以Linux的核心开发过程以及作者自己主持开发的开源软件Fetchmail为例,清晰、透彻地描述了开源软件开发模式的理论与实际应用,第一次以形象生动的比喻,将开源软件和商业私有软件区分开来。它在开源运动中的地位相当于基督教徒手中的《圣经》,是开源运动的独立宣言。另外,这一文章最大的成就是直接促成了随后网景公司采取的行动。
1998年是一个多事之秋。一月份的重大事件便是网景(Netscape)公司宣布开放其浏览器软件的源代码,这一事件的影响在于,它开了原本闭源的商业软件转向开源模式的先河,此后逐渐有其他软件开始效仿,例如,Sun将Star office开源并建立Open office项目。十月,Eric Raymond披露微软内部机密备忘录《万圣节文件》,这些文件将开源描述成一种“长期可靠”、“对微软的直接、短期收入和平台构成威胁”的开发过程,它承认“工业品质可以通过开源软件项目达成甚至超越”,其中还提出了微软应该如何对抗开源软件的建议,包括在公司内部引入开源的模式、高薪挖走开源核心人员等。
《万圣节文件》使微软的处境相当尴尬,因为这与微软过去的表态是自相矛盾的,比尔盖茨在公开场合一直表示“没把Linux放在眼里”,这相当于反手打了自己一巴掌。随后,Linux迎来了自己的杀手锏级应用——开源Web服务器Apache。Apache基于当时最流行的HTTP服务器NCSA HTTPd 1.3的代码发展而来,它是第一个吸引人们热切想要使用Linux的应用。如Linux,Apache出众的稳定和高效,比其他竞争对手更可靠、更灵活、更具扩展性,迎合了网管的实际需求。同时,其具有很高的性价比,使用Linux加Apache建服务器同比用Windows Server和IIS能为企业省下不少的钱。很快,运行Apache的Linux机器在网络服务器市场所向披靡,捷报频传,目前已经有约60%的网站运行在Apache的机器上,击败了Unix和Windows Server,成了全球ISP平台的首选。
IBM、英特尔、甲骨文等知名软件和硬件公司也纷纷采取行动支持开源:甲骨文的企业级数据库向Linux开放接口,IBM与开源Apache服务器软件团队合作开发大型服务器应用平台WebSphere,戴尔开始提供预装Linux系统的个人计算机等……虽然得到了各方豪杰的支持,但Linux之父Linus认为,他们当时并没有被一片叫好的表象冲昏头脑,因为他们知道这些大公司与他们合作的一个重要原因其实是为了打压微软当时嚣张的气焰。
时间到了世纪之交的1999年,此时微软由于将Windows95和IE浏览器捆绑销售,正如其前辈ATT一般深陷反垄断官司当中,为了给自己洗白,他们的辩护词中甚至出现了“Unix和Linux都是微软Windows强而有力的竞争对手”这样的溢美之词,而这一年开源运动也达到了顶峰。两家Linux系统服务公司Red Hat和VA Linux在纽约证交所IPO上市,前者是全球最大的Linux服务提供商,后者则被视为第二个Sun。VA的股价从发行之初的30美元一路蹿升至接近300美元,翻了10倍,打破了华尔街首日涨幅记录,各大新闻媒体也纷纷以头条报道此事。街头上的日常闲聊,电台里的午间新闻,人们口中都在谈论着“开源”、“Linux”等词语,也正是从这时起,人们不再把“开源”作为一种遥不可及的科技术语,而是主动去了解这种新兴的事物。
可惜,好景不长。2000年的互联网经济泡沫破灭,给Linux的发展笼罩上了乌云。泡沫始于2000年3月10日,当日纳斯达克股指到达5000多点的峰值,随后开始走下坡大幅下跌。许多公司被严重地高估市值,在股价崩盘时,由于其实际盈利有限,不得不走向破产。大多数网络公司也在把风投资金烧光之后停止交易,许多甚至从来没有盈利过。据统计,互联网经济泡沫在两年间抹去了互联网技术公司约5万亿美元的市值。
2001年6月19日,Red Hat公布了其一季度的财报,次日股价跌至4.87美元每股。6月27日,由于连连亏损,VA Linux宣布终止其下计算机硬件服务,次日股价亦跌至2.61美元每股,与其巅峰时期形成巨大反差。
另外,当时Linux上主流的两款桌面环境KDE和Gnome都是程序员风格的设计,界面简陋,一点也不用户友好。与之相比,微软内部有专门开发UI的专业美术团队,当微软推出实用、界面友好、漂亮的XP后,个人用户纷纷弃Linux而去,桌面版Linux业界也对此一度灰心失望。
11、微软与开源的攻守战
微软和开源社区的恩怨由来已久,最早可以追溯到家用计算机俱乐部的公开信那时,之后双方陆陆续续发生过几次擦枪走火的事件。
1999年2月15日是一个特殊的日子,它被开源软件者们称为“Windows退款日”。这一天几百名来自硅谷Linux用户组、FreeBSD社区的开源软件爱好者们高举横幅游行到旧金山湾区的微软办事处,要求微软为他们未使用的机器上的Windows操作系统退款。事情的起因源于一名澳大利亚的用户在新购置了一台电脑后仔细地阅读了几乎不会有人看的Windows操作系统用户协议,发现其中包含了“如果软件未被使用,你可以得到退款”的条款,于是他便带着他未使用的机器成功拿到了退款。与今天一样,当时微软的垄断地位已足以使它把Windows预装在其他厂商生产的每一台计算设备上,我们在购买它们的时候也间接地向微软支付了操作系统的授权费。开源社区的人们认为,预装的行为实际上剥夺了人们自由选择操作系统的权利,因为即使你购买电脑时就打算换上别的系统,你依然向微软支付了授权费。微软的代表早早准备好出来与他们交涉,当然没有取得很多进展,于是大家打算继续前进,直接上到他们的办公楼里,只不过害怕被乱搞一番的微软方面早已经把通往他们所在的九楼的楼梯通道和电梯都封闭起来了。尽管这一天结束之时,微软的工作人员并没有掏出支票簿兑现他们的退款,但他们的努力依然取得了一些成效——设备生产商开始提供未预装系统的计算机。
面对开源软件的汹汹来袭,微软开始了它的反击。2001年其推出了一项“共享源代码”计划,依据这项计划,独立开发者在开发系统级的软件时可以申请查看他们所需的源代码,政府和单位出于信息安全的考虑也可以要求审查源代码,而教育研究机构在进行科研时亦可以申请获得源代码的支持。在外界看来,这也许是微软向开源模式低头的表现,但微软内部依然是抗拒开源模式的,微软高管Craig Mundie在纽约大学商学院的一次演讲上提到:“共享源代码计划仅仅是吸收了开源模式的优点,例如提供有效反馈以及Bug修复、可定制等。实际上,(开源模式)要求开发者把他们辛勤工作产出的最具价值的结果无偿提供给人们,转而希望他们能通过提供一些诸如技术支持之类的其他东西来养活他们自己,这是对独立软件的持续发展的最大扼杀。”虽然受到不少批评,但“共享源代码”计划时下依旧在运作着,其还推出过获得OSI认证的Ms-PL授权许可。
两年后,为了推广精简版的Windows XP,比尔盖茨多次访华,同时与中国政府签署了“政府源代码备案计划协议”,盖茨还亲自向江泽民汇报。从微软的资料来看,政府源代码备案是一项全球性的计划,旨在让政府和其关联的备案单位通过可控的方式查看微软的源代码和相关的技术信息,使政府部门能对 Windows 的安全性做一个全面的评估,强化双方的合作。只不过,微软方面并没有对“可控的”一词做出进一步解释。
尽管微软多管齐下,出于降低成本和对安全问题的考虑,尤其是棱镜门事件曝光之后,多国政府也开始对开源软件给予支持。法国近年来一直在大力发展开源软件,曾向高校学生免费派发了 175000 份装有开源软件的U盘,并不断釆取优惠的措施扶持开源软件厂商。德国外交部将它的11000台电脑全部换成GNU/Linux和其它开源软件,这一举措使外交部相比其它部门大幅减少维护费用。美国纽约州立法院则修改当地税法,对开源软件开发者进行个人所得税补贴(减免20 %)。中国政府在《软件和信息技术服务业“十二五”发展规划》中亦提出要把开源软件作为扶持发展的对象。同时,中央采购中心在14年发函通知,禁止采购安装Windows 8的计算设备,中国邮政随后采购了上万套定制版的国产红旗Linux操作系统用于门店收银的电脑上,用于取代老旧的Windows XP。
2008年Google发布基于Linux内核的开源安卓系统,随着HTC推出第一台安卓智能手机,其开放的生态吸引了许许多多优秀的开发者,可定制性也成为许多厂商选择其的原因,市场的选择使安卓系统接二连三地打败了曾经流行的塞班、黑莓等对手,逐步成为最流行的操作系统,时至今日安卓已经拿下了智能手机操作系统份额的70%。而微软由于战略失误,在移动平台反应一直比别人满半拍,当全触屏智能手机已经成为市场主流时,才匆匆地推出了自家的Windows Phone操作系统。只是,由于应用稀少,功能不完善,WP目前只在不到3%的智能手机上运行着。开源社区在这次竞争中大获全胜。
不过,微软在桌面系统领域的霸主地位却一直是无人能撼动的,Windows操作系统在统计数据中一直占据着桌面系统90%以上的份额,而Linux只被2%左右的桌面用户所接受。2013年微软推出Windows 8.1系统更新,紧接着的是搭载了该系统的Surface Pro 3这款重新定义移动生产力的产品,同时微软还宣布取消小于9英寸屏幕的Windows平板的授权费,于是大量搭配英特尔低功耗处理器的Windows平板上市,也因为其相对低廉的价格和Windows平台多年累积的丰富应用给安卓平板和iPad造成有力的冲击。2015年7月,微软开始了为期一年的免费升级正版Windows 10的服务,抢占了更多市场份额。Linux则在其他的领域发力:目前世界上97%的超级计算机跑在Linux上,包括天河二号、IBM蓝色基因等;60%的网站,包括Google、Facebook等最流行的网站选择LAMP组合的服务器;机器人、物联网、无线电……
开源软件在这些年的发展中一路高歌猛进,取得了不小的成就。但也不能因此而沾沾自喜,毕竟桌面系统这块兵家必争之地依然受到微软垄断阴霾的重重笼罩,而Linux系统给人的印象也依旧离不开“程序猿专用”、“命令行”、“复杂难用”等,在桌面版本上,Linux依然还有很长的路要走。
12、微软拥抱开源
微软在2014年的云策略发布会上大胆喊出了“微软爱Linux”的口号,这在鲍尔默掌权微软的时代是难以想象的,在他口中“开源就是一个毒瘤,谁碰上了都要倒霉。”那么这对昔日的仇家如今怎么走向合作了呢?新任CEO纳德拉的上台及其提出的新的发展战略是一个关键的转折。
在盖茨、鲍尔默时代,Windows被视为微软的业务核心,他们要做的就是如何让客户更多地购买他们的光盘和授权,而在他们的思维中互联网是次要的,IE浏览器糟糕的体验就一直被人吐槽。一晃二十多年过去了,微软赢得了桌面操作系统的胜利,Windows操作系统依然运行在数以万计的PC设备上。但今天是一个移动互联网的时代,PC市场正在不断地萎缩,与此同时,苹果和Google这样的竞争对手逐渐崛起,他们在互联网、移动互联网、云服务甚至物联网构筑起成熟的生态,而Linux则在服务器及超级计算等高精尖领域把微软打得落花流水。醒悟过来的微软亡羊补牢,可惜为时已晚,移动端的WP只取得3%的惨淡份额就是最好的证明。
也许是在互联网和移动计算时代输得太惨,纳德拉接替鲍尔默执掌微软后,微软的战略从模仿苹果的“设备和服务”变成了“平台和效率、移动优先云为先”。
原云服务部门的纳德拉,担任CEO之后的第一个举动,就是将微软云计算服务Azure之前的“Windows”字样果断取掉,在此之前Azure平台只能运行在自家的Windows Server操作系统上。在他看来,无处不在的“Windows”印记,是PC时代思维的遗留,在云计算和移动互联网时代,微软的云服务不应该在束缚 Windows的“高墙”之内。随后,微软陆陆续续地与相关公司开展合作,将Debian Linux、Red Hat Linux和Ubuntu Linux一批最先进的Linux发行版本带到Azure平台上。目前,在Azure云平台上已有50%以上的虚拟机运行着Linux,用他们的话来说,“识时务者为俊杰”,这些举动让有特殊需求和喜好的客户在选择产品时留有更大的余地,对提高微软自身的竞争力无疑是有帮助的。
实际上,早在2009年微软就曾向Linux内核贡献了超过两万行代码,这些代码大大增强了在Windows Server 2008 Hyper-V上运行Linux操作系统的虚拟机的性能,甚至让微软在一段时间内在Linux内核贡献数量榜单上排名第一。
除此之外,微软还在开源这条路上走得更远。微软为开源的开发者提供基于开源、免费的代码编辑器Visual Studio Code,支持主流的30几种编程语言,任何人可下载其源代码依个人喜好进行定制,并可在Windows、Linux与Mac环境上运行;微软也将Windows下广受开发者喜爱的应用框架.NET Framework的核心部分开源,称为.NET Core,支持Windows、Linux与iOS不同的操作系统,既开源也跨平台,已经成GitHub上最受欢迎的开源项目;在收购了Xamarin后,微软宣布将这一移动跨平台开发技术免费开放给开发者使用,这将实现“一次开发,多平台部署”的美景,单一开发者就能够开发iOS、Android与Windows Phone的原生App,企业不再需要为一个App养着3个开发团队了;另外,微软具有核心竞争力的数据库产品也将推出SQL Server 2016 For Linux版本,尽管目前该产品依然处于测试阶段,是否收费也尚不清楚,但这对于推动服务器间建立持续一致的数据平台来说是利大于弊的;Ubuntu Bash on Windows项目则将Linux上最重要的命令行组件带到了最新的Windows 10上,这意味着大量Linux上的开源开发工具可以直接运行在Windows上面了。
在跨平台上也可以看得出微软所投入的心血。Office原本是作为Windows的杀手锏之一,而在最近我们看到iOS版本Office推出,同时安卓版的Office也实现了免费。甚至,在iPad Pro的发布会上,微软的高管还应邀为对手站台,现场演示iPad版Office应用。Cortana智能语音助手,Outlook邮箱,必应输入法也纷纷登陆了对手的平台上,使更多用户能在不同的平台上享受微软服务的一致体验。
2014年9月,微软预览体验项目(Insider Program)随着Windows 10的第一个技术预览版本一起面世,致力于为喜欢尝鲜的用户迭代推送包含最新功能、处于测试阶段的微软产品,并通过一个“反馈中心”的程序让用户提交他们的使用体验及错误报告。对于微软的转变,内部高管Terry Myerson表示:“这样做可以带来更开放的开发模式,社区中的每个人都可以参与其中,并通过提出建议、提交代码、修正错误、开发新功能等方式来提交反馈,我们认真听取这些反馈,并有可能采纳建议或合并代码到我们未来的产品中。”
纳德拉则说:“营收属于落后指标,而使用率才是领先指标。”在这一指标的引导下,微软大力拥抱开源,培养多元化的生态系统,从微软云Azure到Windows,从开发工具到数据库平台,这些举动表明其不再死守Windows不放而选择开放性。当然,这也给它带来了新的机遇。开源意味着它能够收到来自社区的反馈和改进,而跨平台则使其能够向更多的用户兜售其服务,以Office为例,其收费模式已经从传统的“一次购买,终生使用”,转向“包月、包年购买使用权”了,从长期看这无疑有益于推动其营收。
对于微软此番大胆秀恩爱的举动,开源社区的人有话要说。首先,这显示出开源的力量,开源社区一直引领网络服务平台最先进的技术,需要和想要使用Linux服务的付费客户占市场大多数,微软意识到如果他们不能提供Linux虚拟机,那些客户就会转而选择其他厂商。正如美国的一句俗语说的,“如果无法战胜你的敌人,那么就拥抱他吧”。说到底,微软还是那家商业至上的公司。这次的行动也引发了一些担忧:“.NET Framework确实是一个优秀的框架,在跨平台、开源模式的加持下将帮助其更加完善,因而吸引越来越多的开发者使用它。但是,开源社区的一个很明显的问题是,很多项目都活不长,开发者在丢出最初几个版本后就弃坑的项目比比皆是。.NET的广泛采用可能意味着与之竞争的开源项目会走向消亡,最终迫使我们都跟着微软的指挥棒转。”从这个方面来看,微软的开源对于开源社区来讲也许不是什么好消息。
从目前来看,开源因其开放和协作而逐渐登上历史的舞台,微软也正顺应着潮流开发更多的开源软件。在开源软件的影响下,还出现了以Ardunio为代表的开源硬件、配方开源的饮料、开源设计、开源政府、开源医药、开源艺术、开源教育等等运动,未来究竟会是个什么样子还很难说,但以微软为代表的闭源软件目前还有着强大的生命力,人们喜欢闭源软件漂亮的UI及其易用性,企业青睐集成化、统一的解决方案,开发者在使用着最新的开源Docker、Hadoop等技术的同时,依然依赖着闭源的Xcode、Slack等,而开源也还存在着不够平易近人的问题。或许未来人人都会编程时,开源就真的成为了世界的唯一标准,不过读到这篇文章的人中估计也没有几个正打算去学编程的。所以说,开源和闭源其实没必要太过较真,双方各有其优点与不足,两者长期共存、互利共惠的局面还将持续下去。
现代企业需要充分拥抱两个世界。Google、Facebook和IBM用他们自身做了一个成功的示范:他们证明利用开放源码也可以让你的午餐留在盘子中。