Image Image Image Image Image

25

2 月

从Multics到Linux

  • By IanGoo

Linux——对计算机稍微熟悉的人都知道这是芬兰鬼才Linus Torvalds在上大学的时候开发出来的一款开源操作系统。但是,在Linux的背后,又是什么呢?

是长达半个多世纪、云集了计算机行业最顶尖的大脑在操作系统开发领域的尝试和积累。

我们就从一个不是很成功——但是从另一个角度来说又很成功的项目开始说起。

Multics:现代操作系统始祖

提起Multics,这个操作系统知道的人应该很少。而从市场占有率这类的概念上看,这玩意儿也是相当的失败。

但是,从历史的角度看,Multics却又极为成功——它奠定了现代所有*ix操作系统的设计理念,我们今天使用的Linux、BSD(包括Mac OS),其设计理念都可以追溯到Multics。

二战结束后,世界格局迅速转为美苏争霸。在航天领域,苏联先人一步,率先发射了人造卫星、率先实现载人航天,这让美国很是焦躁。为了迅速追赶甚至超过苏联,时任美国总统艾森豪威尔拨出巨款,支持美国的科学界,其中自然也包括了航天领域的配套行业——计算机领域。

而在当时,计算机的普遍形态是这样的——

IBM 1401大型机

大型机(Mainframe)是当时的计算机的主要形态。这些可以占满整个大房间的庞然大物提供了当时最顶尖的计算性能和存储容量。“个人所有的计算机”这种概念,在当时还根本没有。

在这样的时代背景下,计算机科学家将大型计算机当成一种IT基础设施——建立一个性能强悍的大型机,然后在一个范围内,若干用户可以通过终端(Terminal)来访问这些大型机,通过大型机分配出来的计算资源完成自己的工作。

第一个完成这一目标的是MIT。在一台IBM 7094电子管大型机上,MIT率先实现了历史上第一个多用户分时操作系统——CTSS(Compatible Time-Sharing System)。随后,MIT开始了“MAC计划”,在校园里各处安置了160台终端机,将终端机连接到大型机,这样,MIT的师生就可以通过终端机获得大型机的资源,CTSS最多可以支撑30名用户同时使用。

不过MIT是一所集中了全美乃至大半个世界智商最高——同时也是最好奇的大脑的学校,很快,30用户的限制就被撑爆了。

有了开发CTSS的经验,MIT决定扩大MAC计划的规模,这就是Multics(Multiplexed Information and Computing Service)计划。和MAC相比,Multics的规模显得非常雄心勃勃——它将支持1000台终端连接、300名用户同时在线使用。

很显然,这种怪物已经不是一所高校可以搞定的规模了。MIT本想找业界霸主IBM,但是IBM对这项计划并不感兴趣,也就没有趟这混水,而另一家著名企业——通用电气,就见缝插针找上门来,他们愿意提供自家最新的GE645大型机。这事情一旦搞成了,宣传效果相当漂亮。软件方面,除了MIT自己,他们还找来了贝尔系统(今天AT&T的前身)旗下的贝尔实验室当软件外包商。1965年,项目启动。

但是在项目的进行当中,MIT和贝尔实验室很快就发现Multics的规划有些太庞大了,他们都低估了这个项目的难度。最终在1969年,经过四年徒劳的努力之后,贝尔实验室实在忍受不了Multics如此庞大的规模和过高的复杂度,决定退出。在贝尔实验室退出后,MIT和GE继续进行Multics的开发,Multics最终勉强达到了一个半成品的程度,部署在一台GE645上上线运行。

然而,时代变了。

大型机的时代,已经快过去了。仅仅一年之后,GE就推出了大型机市场。IBM划时代的System/360尽管在设计上极为出色而且沿用至今(今天IBM z系列大型机的技术架构依然沿用自System/360),但是数次跳票依然带来了不良的影响,而小型机和微型机的份额开始猛增,依然走大型机-终端路子的Multics宣告彻底失败。

在这之后,GE将大型机业务交割给了Honeywell,Honeywell将原先的GE600系列大型机重新贴牌为Honeywell 6000系列大型机出售,对应的,Multics也移植到了新的Honeywell 6000系列上。随后,Honeywell也停止了大型机业务,并且终止了对Multics的支持,Multics转移到了Bull名下。2006年,Bull SAS将Multics的源代码公开,此前,最后一个Multics计算机——位于加拿大国防部——在2000年关闭,Multics的历史可以认为终结了。

然而Multics的诸多设计理念直接影响到了后来者Unix,Unix则树立了一个标准——*ix操作系统类。可以说,Multics是今天所有*ix操作系统的始祖。

枝繁叶茂的*ix操作系统家族

今天,再做出Multics的实现就并不难了,如果有兴趣的话,大可以去体验一把

Unix的诞生

以今天的计算机发展水平去衡量Multics,会觉得这样的需求实在是没啥,四位数的连接、三位数用户同时访问这就能瘫了?12306投来鄙视的眼光。

但是在60年代,这样的规模无疑是超越时代的。过于超前的规划带来了令人沮丧的复杂度,最终将水平第一流的贝尔实验室也逼得退出了。

回到贝尔实验室的Ken ThompsonDennis Ritchie认为Multics的理念其实非常先进,只是步子跨太大扯着蛋。他们纠集了一帮人,决定做一个小规模的Multics实现。

从(开发Multics)经验中我们知道,远程访问、分时共享是公共计算的关键,它不光是一种以终端机作为I/O的工作模式,更是鼓励密切沟通交流的关键。

Dennis Ritchie

而当时在贝尔实验室,正好有一台闲着没人用的DEC PDP-7。

DEC PDP-7

从图上看,这台电脑实在是不小。所以,这是一台大型机?然而和再往上IBM 1401的规模相比,就会发现这台电脑实在是不算大。按照当时的标准,这是一台小型机(Minicomputer)。

小型机当然无法达到大型机的性能,在上面只能以较小的规模实现Multics的性能。到了1969年,Ken Thompson和贝尔实验室的研究员们已经在这台PDP-7上实现了Multics上的分层文件系统、进程管理、设备管理、命令解释器等操作系统核心构件和一些应用程序。这个没有名字的操作系统成了Unix乃至全体*ix操作系统家族的始祖。

1970年,这帮人终于想起来要给这个操作系统起个名字。他们起的名字叫Unics,意为“Uniplexed Information and Computing Service”,和当年Multics的含义一脉相承却又截然相反,而且“Unics”这个名字发音和另一个字完全一样——Eunuchs,这个字的意思是宦官。颇有些Geeky humor的意思。至于Unics是怎么演变成“Unix”的已经不可考了。经历过Unix创世浪潮的老人们普遍将这个字的贡献者认为是加拿大计算机科学家Brian Kernighan,他本人也乐于承认,但是往往会加上一句——“最初写下这个字的是谁,已经无人记得了”。

所以就当是群体贡献吧。Unix在贝尔实验室正式诞生了。1971年11月13日,第一个正式的Unix系统发布——当然只是针对贝尔实验室内部,第一版Unix并不具备可移植性,里面有很多专用于特定机型的汇编代码,只能在PDP-7和PDP-11上运行。但是这并不影响Unix在贝尔实验室成为计算机用户的宠儿。到后来甚至发展到贝尔实验室新购买了一批PDP-11小型机,贝尔实验室员工直接将DEC自己的操作系统丢在一边,装上Unix开耍。内部用户多了之后,贝尔实验室专门成立了Unix支持小组,负责Unix的更新和维护。

不知不觉间,Unix在贝尔实验室内部已经更迭了三个版本。不过和今天我们认知中的软件更新周期不同,它的软件版本编号的依据是用户手册的版本号。1973年,Unix开始进行可移植性的尝试。第四版Unix用上了当时还很新颖的高级语言——C,这是由贝尔实验室创始人之一、Unix众多创始人之一的Dennis Ritchie发明的高级编程语言。

所谓的“高级编程语言”(High-level programming language),并不是说这个语言功能很强大,它是和机器语言(二进制编码)和汇编语言(二进制编码等价翻译成自然语言)对应的一个概念,它的特点是独立于设备的硬件环境和操作系统环境。因此,高级语言的代码具备可移植性。一段C代码,在X86-64计算机上Windows操作系统上用Visual Studio编译一下可以运行,同样的计算机换成Linux,用gcc编译一下同样可以运行(理论上,当然实际情况下多数需要有针对性地修改一些代码),而换成RISC计算机,只要有对应的编译环境,这段代码依然可以运行。

Unix使用C进行重写的意义就在于此——它可以适配更多的设备。但是在Unix第四版当中,依然保留了很多PDP-11相关的汇编代码,导致第四版依然只能在PDP系列上运行,直到80年代,Unix才真正具备了可移植性。

Unix为外界所知是在1973年的一次操作系统原理会议上。Unix两大元老Ken Thompson和Dennis Ritchie在会议上发表了关于Unix的一篇论文,引起了外界的强烈兴趣,贝尔实验室外的用户也想尝试这一全新的操作系统。而这时,法律又成了横在贝尔实验室面前的一个门槛。

贝尔系统的名字来自于它的创始人、电话发明人Alexander Graham Bell,他和Thomas Edison大概可以并列为知识产权变现的两大经典案例。作为电话系统的发明人,贝尔系统自然而然在19世纪末牢牢控制了北美的电话系统,而在专利过期后,由于贝尔系统强大的研发实力和精良的设备质量,贝尔系统依然占据了北美电话系统市场超过80%的份额。这自然会被反托拉斯法案盯上。于是1956年,贝尔系统和司法界达成了一条谅解协议——贝尔系统及其所有分支机构不得从事任何公共通讯运营之外的一切业务。不务正业搞出来的Unix操作系统自然不属于“公共通讯运营”业务,因此,Unix无法合法进行商业发售。而且作为一个实验项目,Unix在设计之初也没有考虑“发行”的问题。贝尔实验室的做法是以成本价(存储介质+运费)分发Unix系统,据传说,Ken Thompson在每一盒Unix系统磁带当中都塞了一张写着“Love, Ken”的字条。而这一阶段Unix的开发也很像今天Arch或者Gentoo的开发节奏——持续开发、持续更新。贝尔实验室也经常拿贝尔实验室法务部的警告当空气,向外部的Unix用户寄送更新磁带。

随着Unix在贝尔实验室外渐渐开始流行,以及Unix移植的成功,Unix开始出现分化。PWB/Unix就是其一(PWB的意思是“Programmer’s Workbench”),商业化的Unix发行版也出现了。第一个商业化的Unix是IS/1。

这是Unix开始走向繁荣的标志。同时,这也是一个危险的信号。Linux没有一个统一标准这没有问题——因为多数Linux发行版是社区驱动,而非商业驱动。没有利益的争夺,CentOS和Arch可以心平气和地和谐相处。但是一旦涉及到商业利益,“标准”之争就从话语权的争夺变成了利益的争夺。

这就为80年代末的“Unix战争”埋下了伏笔。

战争

从理论上说,Unix作为一个可移植的操作系统,它理应能够安装在所有符合系统架构要求的设备上。但是绝大多数Unix系统供应商都想方设法将用户、操作系统和自家的硬件设备捆绑在一块。这也招致了用户的大量不满——何况这些“用户”当中还包括美国联邦政府。

于是,Unix的标准化提上了议事日程。这时候另一个问题又出现了——此时Unix版本众多,哪个才是标准?毫无疑问,在这场“标准制定”的活动中,标准的制定者将获得最大的商业利益。

在80年代中期,有两个最重要的Unix系统分支,其一为Unix发明者AT&T的System V,另一个则是加州大学伯克利分校走出的BSD(Berkeley Software Distribution,伯克利软件分发)。

BSD起源于System V,但是还是由于法律原因,BSD不得不另起炉灶。伯克利研究生Bill Joy在贝尔实验室拿到了一份Unix拷贝,他和他的小伙伴发现这个操作系统非常的Amazing,是运行自己Pascal编译器、文本编辑器等等一套工具软件的绝佳平台,但是随着新版本的发布,AT&T更新了软件授权协议,禁止高校以System V的源代码从事教学活动。这使得伯克利只能以旧版本System V为基础进行继续开发,BSD就此成型。Bill Joy毕业后联合他人创立了著名的Sun Microsystems,并且在BSD的基础上开发了面向工作站的Unix系统——SunOS。

BSD和System V最先开始了“标准”话语权的争夺。AT&T在很多地方打出了广告——

广告上呼吁消费者将System V考虑为标准(“Consider it standard”)。但是System V并不完美,比如针对TCP/IP的支持,BSD在工作站上的领先让很多工作站供应商选择了BSD 4.2,作为回击,BSD的海报上写上了“4.2 > V”的字样。

两个巨头掐架,其他的小弟们只能抱团取暖。1984年,X/Open标准委员会成立,旨在推动Unix的开放化和标准化。这个委员会很快就被AT&T盯上了——螳螂捕蝉黄雀在后那是万万不能的。不就是标准化吗?吃掉BSD就成了,看谁拧的过谁。

1987年,AT&T和最大的BSD系统供应商Sun Microsystems联合发布了Unix System V Release 4,这个系统继承了System V和SunOS/BSD的特色,还整合了一部分微软Xenix的特性。

Sun选择和AT&T合作的行为在其他Unix发行商看来这简直是助纣为虐嘛,于是又有一批BSD发行商联合成立了OSF(Open Software Foundations,开放软件基金会),AT&T针锋相对地成立了Unix International(UI),双方很快从技术竞争变成了商业竞争。这时节,三个Unix标准化组织——X/Open、UI和OSF互相斗得不亦乐乎,“标准化”?不存在的。

1990年的一项测试表明,随便装一个Unix系统,不管它来自于UI还是X/Open还是OSF阵营,其中都有四分之一到三分之一的应用软件会因为各种各样的奇葩兼容性问题而崩溃无法运行,几乎所有的Unix开发者都在忙于深挖自己的阵营的标准护城河,可靠性、稳定性和兼容性却无人关心。

叫苦不迭的还是用户。

1988年,IEEE POSIX标准讨论通过。在POSIX框架下,System V和BSD可以在比较小的工作量修改下实现互相兼容。1993年3月,UI和OSF的主要参与者达成和解,创立了COSE联盟。Unix战争开始平息。6月份,AT&T剥离Unix资产,由Novell接手,Novell又将Unix转让给了X/Open。1996年,X/Open并入COSE,成立了Open Group。目前Open Group是Unix标准的控制者,它同时负责POSIX标准的制定。

那么Unix可以继续高歌猛进了?

并没有。整个80年代,Unix战争带来的巨大的内耗给了商业Unix极大的发展阻力。新兴的操作系统后来居上,在一众Unix供应商无暇他顾的时候占领了大片市场。

首先是开源化的BSD。BSD和AT&T的版权争议一直就没有停歇。从1989年到1994年,BSD社区一直在做一件事情——清除有争议的来自AT&T的代码,并且将BSD的源代码开放。BSD也成了一种开源软件授权规范的名称。开放源代码的FreeBSD、NetBSD很快在X86架构上接替了BSD x86的位置,并持续至今。NetBSD又在后续发展为OpenBSD,2007年,采用BSD核心的Mac OS X 10.5发布。

然后是Linux。Linux的故事,下面会继续。

最后,就是微软的Windows。从OS/2中抽身,微软另起炉灶,面向x86架构发布了Windows操作系统,它并不遵从POSIX,但是它却占据了桌面系统的最大份额,最高时突破90%,而最近的数据也依然有88%之多,处于绝对的垄断地位。

当然,今天不提BSD,也不提Windows,我们看看Linux究竟是如何异军突起的。

不看代码

Unix商业化之后,诸多Unix供应商都禁止高校拿Unix的源代码从事教学活动。虽然高校还有BSD可以用,但是很多人都是心里不爽的。

其中就包括阿姆斯特丹弗里耶大学的Andrew Tanenbaum。他编写了一本教材Operating Systems: Design and Implementation。为了给教材加个案例,它自己动手,按照教材中的思路,遵从Unix标准写了一个操作系统。这个操作系统兼容于当时已经非常流行的IBM PC兼容标准,而且为了避免法律纠纷,Tanenbaum一眼都没有看Unix的源代码。

这份操作系统大约有12000行代码,被命名为MINIX。Tanembaum给MINIX的授权是仅供学生购买,价格69美元。但是出版商不乐意了——本来书里带有MINIX的源代码,你又单卖操作系统加代码,那势必会影响书的销量啊。最终的折衷方案是在教材的价格当中包含MINIX的授权费用。

随着开源BSD和Linux的兴起,MINIX并没有获得太多的关注。2000年,MINIX的源代码公开。此时,开源BSD和Linux气候已成,商业操作系统如Windows和Mac OS更是功能极为完善、生态高度成熟。MINIX在应用方面并未获得太多关注。但是MINIX依然是操作系统研究人员、学生和业余爱好者研究操作系统原理的重要系统。

MINIX的另一个授权限制是只能用于教学用途。所以理论上,即便是学生,也不允许在日常生活中使用MINIX来处理自己的事务。这群学生当中,就包括芬兰赫尔辛基大学计算机系学生Linus Torvalds。为了规避这些法律纠纷,Torvalds采用了和Tanenbaum一样的策略——摸清MINIX的系统机制,然后不看源代码自己做实现。

这绝对是莱爷的高光时刻之一

1991年8月25日,Linus Torvalds在comp.os.minix新闻组发布了一条消息:

各位MINIX用户大家好:

我正在为386/486 PC/AT克隆机做一个免费的操作系统,它不会像GNU那么专业,只是个业余爱好产品。4月以来,我一直在酝酿这个计划并开始准备,我希望聆听大家对MINIX的优缺点的反馈,因为我的操作系统和MINIX在某种程度上非常类似(如文件系统,因为一些实际原因)。

我已经成功移植了bash 1.08和gcc 1.40,目前看来还OK,这意味着我可以在未来几个月内继续完善,并且我也想知道大多数人想要的功能,所以我欢迎任何建议(虽然不一定听得进去)。

PS,它不包含任何MINIX代码,能够支持多线程文件系统。不过目前不能移植,它使用的是386的任务切换机制,并且只能支持AT硬盘——因为我只有这些硬件设备。

Linus Torvalds

留言中只能使用MINIX文件系统的“实际原因”是Torvalds就是在MINIX系统下完成Linux的代码编写工作的。至于这个操作系统的名字,Torvalds给他起的名字是Freax,是Free(免费、自由)、Freak(怪咖)和Unix的组合。他不是没考虑过“Linux”这个名字,不过他认为拿自己的名字命名这个操作系统有些太过得瑟。

显然,别人不这么想。当Torvalds将操作系统上传至FUNET的FTP服务器的时候,FTP服务器的管理员Ari Lemmke觉得“Freax”这个名字实在是不怎么样,于是直接将它重命名为“Linux”,后来,Linus Torvalds本人也认可了这个名字,并且注册了商标。

Linux就此横空出世。

不过,MINIX的作者Tanenbaum对Linux一直不是很感冒。

Linux就是个过时的古董。

Andrew TanenbaumMINIX作者

Tanenbaum的不满主要来自于Linux使用了宏内核,而非他喜爱的微内核。他甚至为了微内核信仰挺了一把“开源公敌”Windows(Windows NT从某种程度上说也是微内核)。

Linux看起来比Windows更安全,仅仅是因为骇客们攻击Windows可以获得更多的利益。一旦Linux的市场占有率提升到和Windows一样高,那么我相信Linux在安全方面的表现不会比现在的Windows更好。

Andrew S. Tanenbaum

Linus Torvalds当然不服气,也发表了一系列文章加以反驳。史称Linus-Tanenbaum论战。针对Tanenbaum“缩减代码规模可以减少Bug数量”来挺微内核的观点,Torvalds的回应嚣张得很:

没人第一次码代码会不出错。
除了老子我。

Linus Torvalds

当然这场论战更多的是立场(或者说信仰)之争,2004年5月,一个叫Kenneth Brown的人撰写了一篇文章,指称Linux Kernel的大量源代码是从MINIX复制而来的。这下整个Kernel.org社区都炸了,出乎意料的是,最炸毛的竟然是文中的“受害者”Tanenbaum。他第一时间撰文澄清整个事件的来龙去脉,声明Linux Kernel并未抄袭MINIX源代码,而且他还指控Kenneth Brown受微软的资助,对Linux进行了“恶意且无依据”的攻击。

Tanenbaum对Linux的不满并没有影响Linux的快速发展。时至今日,Linux已经远远超越了MINIX,在服务器领域占据绝对领先优势,而在超算领域,Linux的表现更是垄断级别的——自2017年11月以来,超算TOP500清单当中的所有超级计算机清一色使用Linux系统。小声BB:在桌面系统嘛……啪啪啪……

Linux流行程度超越MINIX,很大程度上得归功于1992年Torvalds的一个决定。

GNU与Linux

1983年,MIT人工智能实验室研究员Richard Matthew Stallman(专用缩写:rms)很愤怒。

80年代是软件快速商业化的年代。如前所述,Unix的商业价值被发掘出来,这导致了软件分发方式的变化。在此之前,软件一般是作为硬件的附庸出现的。供应商也普遍不那么看重软件本身的价值,在提供Binary的同时也会附上源代码。而随着软件行业的快速商业化,软件供应商不再向用户提供软件的源代码。1976年,美国版权法案的通过更是加速了这一过程。

1979年,Brian Reid在自己的Scribe字处理软件当中设计了DRM,以阻止未授权的用户使用该软件。rms表示这种行为是反人类罪。但是,人工智能实验室的很多同行并不怎么认同rms的理念——软件能用来赚钱?那就拿来赚钱——然而需要注意的是,rms并不反对通过软件来赚钱,他反对的是通过DRM限制用户自由使用的权利、通过封闭源代码限制用户研究、修改、再分发的权利。在人工智能实验室主任Russ Noftsker的帮助下,部分人创立了Symbolics。Symbolics招募了很多来自人工智能实验室的黑客,并且采用闭源和专有授权(Proprietary License)模式向人工智能实验室兜售软件产品。更让rms火大的是下面这件事。

当时人工智能实验室还有一位叫Richard Greenblat的老哥,他成立了一家公司叫Lisp Machines Inc(LMI),卖人工智能实验室里捣鼓出来的Lisp机。本来这也没啥,但是Greenblat坚持不引进外部投资——但是这样来钱慢,不过,Greenblat可以保持对LMI的完全控制权,而从某种程度上来说,Greenblat是比较符合rms向往的“实验室文化”和“黑客精神”的。但是Symbolics那帮人在捞钱之余,还通过MIT的政策迫使Greenblat辞职。这就让rms不能忍了。

rms用自己的行为回击Symbolics的行为——每次Symbolics开发出什么新的软件,rms马上重新写一个实现,并且以公布源代码的方式发布出来。更决绝的是,为了避免他的代码被MIT和人工智能实验室声明版权,他在1984年干脆辞掉了在MIT的工作,将全部时间用于自己的理想——GNU计划。

GNU计划是由一年前rms发布的一篇声明拉开序幕的:

每个计算机软件用户都应当保证有自由运行、自由研究、自由修改、自由发布软件的基本权利。

GNU宣言

自由软件运动就此拉开帷幕。GNU计划的核心任务是打倒当时占有重要地位而且已经高度商业化的Unix操作系统,为此,1990年,自由软件基金会开始着手开发GNU/Hurd。

但是GNU/Hurd的开发……Pff到现在都整整三十年了也就只有点水花。GNU操作系统开发效率之低下有很多原因,有技术层面上高估了微内核的价值、低估了开发难度,有理念层面上的“自由洁癖”,有组织层面上的过度中心化开发模式,有外交层面上的排斥商业软件开发商的参与(这其实还是理念层面上的洁癖问题)。这些多数都可以追溯到FSF——以及创始人Richard Stallman的信仰上。

得亏1992年,Linus Torvalds做出了一个决定——更改Linux Kernel的许可。

在此之前,Linux Kernel的许可很简单——禁止用于商业用途。完了。而在1992年的0.99版本,Torvalds决定以GNU通用公共许可第二版(GPLv2)发布Linux Kernel。再加上Linux Kernel的开发使用的是gcc等GNU工具,为了能让Linux能够正常使用还得加上bash、coreutils等GNU系统组件,Linux Kernel在事实上和GNU生态无缝对接了。FSF自然也乐于接纳Linux Kernel。Linux Kernel+GNU组件,就形成了GNU/Linux,即“使用Linux内核的GNU操作系统”。

当然,“GNU/Linux”这个名字有颇多争议,FSF一直强调GNU/Linux这个名字,反对简单使用“Linux”来称呼一个完整的发行版,这其中更多的还是理念之争。

事实上在1992年,GNU的软件包已经高度完善,只缺一个Kernel。Linux的出现正好填补了这个空缺,让GNU操作系统得以完成。虽然不是FSF自己开发的,但是Kernel的整个构建环境都是GNU工具集,因此在FSF看来,Linux Kernel只是“补齐了GNU操作系统的最后一块拼图”,整个操作系统应当遵循GNU的规范,称为GNU/Linux。

而更多的普通用户和开发者——包括Torvalds自己,表示无所谓。带不带GNU并不影响Linux Kernel和Linux Distro的本质。他是一个实用主义者。

事实上,这是另一场论战的衍生产品——FSF与OSI,自由软件运动与开源软件运动,理想主义与实用主义。

辩论

自由软件运动与其说是一场技术运动,不如说是一场政治运动。它带有浓重的理想主义色彩。

而相较之下,OSI开始的开源软件运动则务实而且技术化很多。开源软件更加注重于技术模型的实现,而不是“XXX是否自由”这种问题。

因为“自由”或者“不自由”,更多的时候是一种道德判断。而道德审判往往不具备普适约束性——道德只可约束自己,却无法约束他人。

FSF的尴尬局面就在于此。它坚守着自己的道德理念,大力宣传自己的道德理念,希望其他人也能遵从自己的道德理念。奈何,世界的运行规则并不以FSF的道德理念为中心。

这其中以对non-free组件的态度最有代表性。

众所周知,non-free组件的重灾区就是各类驱动——其中又以显卡驱动为甚。开源的mesa驱动性能烂得一批,而mesa驱动性能烂的根源则是显卡的硬件不开源,要发挥显卡的全部性能,还是得求对硬件设计知根知底的显卡厂商提供驱动,但是这些驱动往往又是专有许可。

对于这种东西,FSF是万万不能忍的。这还不够,不光不能提供non-free组件,提供non-free组件的源也不行,更有甚者,在文档里甚至都不允许指导用户怎么去安装non-free组件。

GPL许可的性质也是一样的,OSI将GPL许可描述为“病毒”,一旦以GPL许可发布,那么与之沾边的所有软件都只能以GPL许可发布。

在这种高度洁癖的影响下,一大票Linux发行版——包括Debian、Arch等,都被FSF喷了。FSF自己力挺的几个发行版,如gNewSense,就是在Debian基础上魔改(净化)而来的,保证绝对没法以“正常”的手段安装non-free组件。对不起,你想安装nVidia的闭源驱动?你要是敢在FSF社区里问这种问题立马会遭到道德谴责,你指责这种“自由”反而是限制了安装non-free的自由,立马又会有人告诉你——源代码都是开放的啊?你自己研究源代码不就好了?

我又不是计算机专业的,我只想抓来一台电脑,装上操作系统和我要使用的软件,又快又好地完成我要完成地任务而已。

FSF的问题就在于此。它试图让别人和组织接受自己的一套道德标准。不遵守自己道德标准的,就立即打成“敌人”加以排斥和攻击。久而久之,自由软件运动变成了一个孤立而脱节的小圈子。它们拒绝来自“外界”的一切。而且更危险的是,阅读FSF的声明,我发觉这种画地为牢的行为有对人不对事的危险趋势。如它对Debian的批评,是Debian提供了non-free的repository,对Arch的批评则是Arch除了提供non-free repository,还在Wiki里指导用户安装non-free组件,这就很有趣了——Debian和Arch都可以选择不安装non-free组件,或者删掉non-free repository,构成一个完全符合GNU规范的GNU/Linux——但是没有用。因为FSF批评的是Debian和Arch,而不是Distro当中的non-free repository。

相比之下,OSI反而更加“开放”。它接受non-free,接受来自Red Hat、IBM、Intel乃至Microsoft的贡献,因此,一众Linux Distro的开发进度堪称神速,在Hurd还完全不能用的时候,Linux大势已成。至于道德上的审判,往后放一放吧,那些太没有必要的。世界本来就是多种多样的,包容一些不好吗。

所以,本文的撰写是在一台运行Windows 10(专有许可)的计算机上的Firefox浏览器(MPL许可)上完成的,CMS系统为WordPress(GPL许可),CMS构建于php(php许可)、MariaDB(GPL许可)、nginx(BSD许可)和群晖DSM(专有许可)之上。

世界本来就是如此复杂,而且丰富多彩。

Tags | ,