第三章 编程的美妙
1、 开始编程
我真不知道该如何阐释自己对编程的狂热,但我可以试试。
对于任何编程的人来说,编程是世界上最有趣的事。它比下棋之类的游戏更有乐趣得多,因为它可以由你自己来制订游戏规则。而你制定什么样的规则,也就会导出与此规则相符合的结果。
然而,对于编程外行的人来说,它却似乎是世上最枯燥的事。
编程给人带来的最初兴奋的原因有部分是显而易见的,那就是:通过编程你可以支配一台计算机,你叫计算机做什么,它就做什么,永远准确无误,而且毫无怨言。
这本身就很有意思。
但是计算机在一开始让你入迷的盲从性,显然不得它成为招人喜爱的伙伴。事实上,这种特性很快就让人厌烦了。真正使编程令人欲罢不能的是:你能让电脑做你想做的事,但是你还必须想出怎样做到的办法。
我个人认为,计算机科学和物理科学有很多相似之处。两门学科都是在一个相当基础的层面上探讨一个体系是怎样运行的。当然,区别在于,在物理学中,你探究的是一个已经存在的客观世界的构成。而在计算机科学中,你却是在创造一个前所未有的体系。
在电脑世界中,你就是创世者,你对所发生的一切拥有最终的控制。如果你功力深厚,你可以是上帝——在一个较小的层面上。
我这么说恐怕要得罪地球上近一半的人口了。但是的确如此。你开始创造自己的世界,而唯一限制你的就是机器的性能,以及——在今天尤其如此——你自己的能力了。
想象一下建在树上的小屋的情形。
你可以建筑一个这样的房子,有一个活板门,既稳固又实用。但是每个人都可以看出一个仅仅以坚固实用为目的的树上小屋和一个巧妙地利用树本身特点的美妙小屋之间的差异。这是一个将艺术和工程融为一体的活计。编程与造树上小屋有相似之外,这是它之所以被看成是一项既有魅力同时又有实际贡献的活动的原因之一。在编程中,实用的考虑往往被置于有意思、美观伶俐或有震撼力的考虑之后。
编程是对创造的训练。
探究计算机工作原理的过程,是吸引我走进编程世界的最初原因。在这其中获得的最大的乐趣在于,我认识到了计算机科学与数学的类似:你必须从该体系自身的规则出发,推演出整个世界,在物理科学中,你被客观规律所束缚。但是在数学和编程中,只要能合乎逻辑地推演,就可以成立。思考数学问题,不会受到客观世界的逻辑的限制,数学只是逻辑自洽的符号体系。正如任何一名数学家都明白的,人完全可以建构出一套数学等式,以证明三加三等于二。事实上,你想有什么样的体系就可以什么样的体系。但是,随着复杂程度的提高,你必须多加小心,不要弄出什么与你创造的体系不一致的东西。
好的体系容不得任何错误。编程也与数学一样是这么回事儿。
人们对电脑如此着迷的原因之一,就是能从中获得自己创造一个新世界的体验,并贪图到它到底能够成为什么样子。在数学中,人们往往按照客观事物的可能性进行思想实验。比如,说到几何时,大部分人想的是与我们的经验相符合的欧几里得几何学。但是电脑却可以帮助人们形象化不同的几何,并不仅仅是欧几里得几何学。在电脑的帮助下,人们可以形象化这些虚构的世界,看到那些世界到底是什么样子。还记得Mandelbrot set吗——基于Benoit Mandelbrot等式的fractal images。要不是电脑,纯粹的数学世界绝不能这样形象地展示出来。Mandelbrot就是人为地制定了一些本不存在的与现实没有一点关系的世界规则,却创造出了的图案。通过编程和电脑,你能够构筑一个新世界,有时其设计会是非常美妙的。
但是在大部分时间中你却不能欣赏自己创造的美妙世界。你只不过是在编写执行某一任务的程序。这时你就不是在创造一个新世界,而是在电脑世界中解决一个具体的问题。问题通过将思考结果应用到问题中而得到解决。而能够坐下来,盯着电脑屏幕,将一个问题彻头彻尾地贯穿思考,就需要某种特定的人。
比如,需要像我这种书呆子气十足的人。
操作系统是计算机的所有功能的基础。而创造一个操作系统则是最终的挑战。
创造操作系统,就是去创造一个所有应用程序赖以运行的基础环境——从根本上来说,就是在制定规则:什么可以接受,什么可以做,什么不可以做。事实上,所有的程序都是在制定规则,只不过操作系统是在制定最根本的规则。
创造操作系统就像在为你创造的这片土地制订宪法,而其他在电脑上运行的程序则是为宪法所允许的普通法律。
有时,这些法律根本讲不能,但这正是你要面对的问题。你需要找到解决办法,并能够意识到自己以正确的方法找到了正确的答案。
还记得那些在课上总能答对问题的同学吗?他们的答案比别人来得快,他们能这样是因为他们没有刻意去追求。他们不在乎他们应该怎样来答题。他们只不过找到了合理的考虑问题的方法。人们一听到正确答案,一切听起来就都是那么回事了。
在电脑上也是这样。你可以鲁莽、生硬地行事,愚蠢地死死纠住问题不放,直到问题不再成为问题。也可以通过找到正确的方法,使问题突然消失。你可以从不同的角度看问题。直到灵光突现地认识到:问题之所以成为问题只在于你的方法错了。
也许能够证明这一点的最佳例子不是来源于计算机科学,而是数学。故事发生在十七世纪,日后将成为伟大的数学家的高斯还在上中学。一天,老师厌烦了授课,就让学生们计算从1到100的数字的和。他原以为学生们要花一整天来计算这道题。没想到初展才华的数学家仅花了五分钟就得出了正确答案:5050。他解答这个问题的方法不是真的把所有这些数字一一加起来,这样做既麻烦又愚蠢。他发现1加100等于101,2加99也等于101,然后3加98还是101,直到50加51等于101。不要几秒种,他就注意到一共是50对101,所以答案是5050。
[1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
也许这故事是虚构的,但它想说明的道理却很清楚:一个伟大的数学家不会采用平庸而繁琐的方法,因为他能看到隐藏在问题背后的真正内涵,并应用这一理解去找到更为简便的方法。
在计算机科学中也绝对如此。
没错,你能写一个程序来求出总数。这对于今天的电脑来说不过小事一桩。但是一个伟大的编程者能凭借其聪明的头脑就知道答案是什么。他知道怎样写出漂亮的程序,知道怎样采用一种全新的但最终会被证明是正确的方法。
不过还是很难说清楚,闭门冥思苦想地要找到解决某个问题的漂亮答案,为什么竟然有如此巨大的魅力?但是,你要是曾经有过找到更好方法的经历,你就会明白,这简直是无与伦比的感觉。
2、长腿的终端仿真器
我的终端仿真器(terminal emulator)长了腿。我经常用它登录到学校的电脑上,查阅电子邮件和参加MINIX讨论组。但是问题是,我还想下载和上传东西。也就是说,我必须能向磁盘里保存东西。为此,我的终端仿真器必须装个磁盘驱动。还需要一个文件系统驱动,这样才能查看磁盘里的东西,将我下载的内容保存成文件。
这是我在发明Linux的过程中差点半途而废的一步。我当时觉得这太麻烦,也不值得。但是除此之外我也没什么可做的。那年春天我在上课,课程很简单,无需费太多的心思。当时我唯一的课外活动是每周三晚上参加同学聚会。我那时是一个社会“死物”(与“社会动物”相对——译者),于是那聚会就成为我除了编程和学习之外唯一一个可以干点别的事情的场合。要不是那聚会,我可以说是彻底与世隔绝了。同学聚会是我接触社会生活的仅有的地方,我几乎是每次不落地参加。该聚会对我是如此重要,以至于我有时会因为想着将要参加它而失眠,因为一直担着心不要因为缺乏社交风度、或由于自己丑陋的大鼻子、或明显缺少个女伴而出丑。这自然都是些典型的低级趣味。我之所以说这些,是因为要表明,当时我真的没有什么别的有意义的事情可做。而搞出驱动程序的工作却很有意思。所以我对自己说,我要干下去。
于是,我写了一个磁盘驱动程序。因为我想把文件保存在我的MINIX文件系统中,也因为MINIX文件系统本身整理得很好,于是我让自己的文件系统可以和MINIX文件系统兼容。这样,我就可以在MINIX系统下阅读我建立的文件并将它们存入同一张磁盘,以便MINIX系统也可以通过我的终端仿真器阅读到我建立的文件。
这花费了我大量的精力:编程——睡觉——编程——睡觉——编程——吃饭(饼干)——编程——睡觉——编程——洗澡(冲冲了事)——编程。随着工作的进展,这个项目很明显正在成长为一个操作系统。所以我转变了看法,不再把它看成一个终端仿真器,而是一个操作系统。这个转变出现在我马拉松似的编程过程中的哪个时间段,是在白天还是晚上,我已经想不起来了。也许在这一刻之前我还穿着破旧的睡袍奋力敲击着键盘,在为终端仿真器更多的功能;而转瞬之前我拥有的功能是如此之多,以至于整个体系已经变成了一个。
我把它称之为我的“gun-emac终端仿真程序”(gnu-emac of ternimal emulation programs)。gnu-emac终端仿真程序开始是一个编辑程序,但创造它的人又为它增加了一系列功能。设计者本想让它成为一个可以用程序控制的编辑程序,但是其程序可控性的特点很快使一切都黯然失色,它成为了一个从地狱中冒出来的编辑程序。它除了厨房水池子外几乎无所不包,这就是为什么这个编辑程序指令的图标有时竟是一个厨房水池。这个编辑程序的一大特点就是,其设计过程比任何其他编辑器都更复杂。
我的终端仿真器也是如此。它在不断地扩张。
3、寻求网上帮助
来自:
[email protected](李纳斯?托沃兹)
讨论组:comp.os.minix
主题:Gcc-1.40和一个有关POSIX的问题
信息名称:1991 Jul 3,
[email protected]
日期:1991年7月3日,格林威治时间10:00:50
各位网友好!
由于我现在正在MINIX系统下做一个项目,对POSIX标准很感兴趣。有谁能向我提供一个(最好)是机器可读形式的最新的POSIX规则?能有FTP地址就更好了。
好吧,这就是一个芬兰小子希望检验一下自己的计算机技能限度的最早的公开证据。
POSIX标准是一个可以适用于数以百计的UNIX系统呼叫中的任意一个的一套冗长规则,计算机要执行任务(从读、写、开机和关机开始)就需要这个标准。POSIX则是指一个UNIX的标准体系,或一个由来自不同公司的代表所组成的一个组织,希望按照一个共同的标准进行运作。对于程序员开发的在该操作系统下的新应用软件或开发应用软件的新版本而言,标准是极其重要的。从POSIX这样的系统呼叫(system call),尤其是重要的呼叫(call)中,我可以获得一个操作系统应该具有哪些功能的一个单子;然后我就可以通过自己的方式在自己的系统中实现每一个功能。通过编写出这些标准,我的系统软件的源代码将可以被别人使用,以开发新的应用软件。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
当时我并不知道我本可以直接从POSIX公司买到这些规则的软盘,但这无所谓。哪怕我能买得起,什么东西运到芬兰,往往会需要很长的时间。我不愿等上那么久,因此我四处搜求一个能从FTP地址上直接下载的版本。
没有人给我提供能找到POSI标准的来源。于是我开始了计划B。
我从学校找到运行sun器(sun server)的sun微系统版的UNIX手册。该手册中有一个完全可以凑合使用的系统呼叫的基本版本。从用户手册中能看出系统呼叫的主要功能,以及为完成这些功能所需要完成的步骤。但是,从中看不出具体的方法,而只是标明了最终的结果。于是我便着手从安德鲁?塔南鲍姆的书中和别的材料中收集一些系统呼叫。最终有人给我寄来了那几卷厚厚的POSIX标准。
不过我发的那个邮件并没有石沉大海。任何一个有相应知识的人(只有具备相应知识的人才会上MINIX的网站)都能看出我的计划是要开发一个操作系统,否则,我会需要POSIX规则呢?我的邮件引起了赫尔辛基工学院(我若不是对研究理论这么感兴趣,可能会在这儿求学)一个助教阿里?莱姆克(Ari Lemke)的好奇。阿里善意地给我回信说,他愿意为我在他们学校的FTP地址上建一个子目录,这样到时我可以把自己的操作系统发布上去,让感兴趣的人们下载。
4、linux
阿里?莱姆克一定是一个相当乐观的人。在我能拿出什么可以发布的东西之前 ,他就为我建立了一个子目录:ftp.funel.fi。我有了密码,一切都准备就绪,就等着我去登录然后上传内容了。但是我要再花上四个月才能找到一点我愿与世人分离的东西,或者至少与阿里或几个与我保持邮件往来的热衷于操作系统的狂热分子分离的东西。
我最初的目录是想开发出一个最终可以取代MINIX的操作系统。
这个系统不必比MINIX能干,但必须能胜任我最喜欢用MINIX做的事,以及其他我想做的事。比如,MINIX的终端仿真不仅太不方便,而且也不能进行任务控制——即把暂不用的程序放入背景中,同时内存管理也太简化。顺便说一下,它还是以苹果的操作系统(Mac OS)而不是以DOS为支持的。
开发操作系统就是搞明白系统呼叫应该做什么,然后以你自己的方式编出能使系统呼叫得以执行的程序。总有来说,共有几百个系统呼叫。有些是多功能的,其余的则很单一。有些更基本的系统呼叫确实是十分复杂的,并需要有大量的基础作为支持。比如,为完成“写”和“读”这两种系统呼叫,你就必须建立一个磁盘驱动程序,以便能够在磁盘里读或写东西。又比如“打开文件”的系统呼叫,你就必须创建一整套文件系统层,以便分析文件名和在磁盘上查找文件。要编写“找开文件”的系统呼叫,更需要几个月的工作。但这个程序一旦编写出来,用于别的功能的程序都可以借鉴。
早期的创建工作就是这样。我不但从Sun服务器的操作系统手册中查找标准,也从其他书中查到可用的标准,挑出一个一个的系统呼叫,然后为它们再编出可行的软件。
这工作很容易让人感到灰心丧气。
原因是:表面上一切如故,你看不到任何进展。你可以做几个试验性的程序,检验自己刚刚加上的东西是否可行。但这并不真的有什么用。在有的阶段你不得不放弃刚才的想法,那一长串的系统呼叫都白干了。一个真正的程序在运行之前,必须已经接近完成。你必须首先运行的程序是外壳(shell)程序,而在有这个外壳程序之前,要运行什么很难的。而且,这个外壳程序包括了很多你所需的系统呼叫。它运行起来之后,你才会从中找到一长串你尚需完成的功能。
在UNIX中,外壳程序是一切程序之母。它的作用是引发以后的一系列二进制语言程序(二进制程序是以计算机可识别的1和0为符号编写的程序。以机器语言编程,就是将二进制的源代码组合起来),这个外壳程序使你首先能登录(当然在真正的UNIX系统中,你运行的第一个程序传统上被称为init,而init的确需要很多基础的支持才能运行。它是一种对正在运行着的程序的控制工具。当没有任何程序运行时,init就没有用了)。
因此,我做的第一件事不是创建init,而是建一个外壳程序。我执行了约二十五个系统呼叫,正如我所说,这也是我要运行的第一个真正的程序。这个外壳程序不是我自己编的。我下载了一个叫Borne Shell的外壳程序。它是UNIX的初始外壳程序之一,可以从互联网上免费下载,名字来源于一个难听的双关语。编写该外壳程序的家伙名叫波恩(英文中的“忍受”或“出生”之意——译注),所以这个程序就叫做“Borne Again Shell”(“再次忍受或再次降生外壳程序”——译注),或一般被称为BASH(bash的英文意为“重击”——译注)。
当你试着从磁盘运行或导入一个真实的程序时,一般都会有“臭虫”(bug,IT业中称软件里的瑕疵为“臭虫”——译注)出现在磁盘驱动程序或导引程序中,因为程序往往会不理解它读到的东西,于是它就会在屏幕上显示出相关的信息。这很重要,你可以从中知道哪儿出了毛病。
于是,我就到了这样一个阶段:我试图导引外壳程序,屏幕上则显示出外壳程序中每一个我尚未能执行的系统呼叫。我导入并运行外壳程序,屏幕上则出现类似“系统呼叫517没有执行”这样的信息。我日日夜夜盯着屏幕上显示出来的系统呼叫,试着发现我在哪一条上面出了错。这比拿到一个系统呼叫的单子,然后一一使他们可以被执行要有意思多了。人们需要看到事情的进展。
到了八月底或九月初的时候,我的外壳程序终于可以工作了。过了这一关,后面的任务就轻松多了。
这可是一件大事。
我的外壳程序可以运行后,我马上开始着手其他几个程序,比如拷贝程序和列表程序,这些都比外壳程序简单得多。你所需的一发,外壳程序早就具备好了,所以一旦外壳程序完成,就好像是从0飞跃到100一样,因为一切都已就绪。这时,我已经拥有了一切必要的条件,感觉就像上帝创世纪那样,执掌一切地说:“让那里有光”,那里就真的有了光。在此之前,的确是一无所有。
是的,我深感满意。
这种满意很重要,因为那个夏天我除了伏在电脑面前,其他什么都没做。这么说一点也不夸张。芬兰四月到八月的日子是一年中最美好的时光。人们到布满小岛的海上航船,去海滩上晒日光浴,到夏日小木屋中消闲。但是我却在没日没夜地工作,不知哪一天是周末,哪一天是工作日。学生的黑色窗帘遮蔽了几乎昼夜灿烂的阳光,也遮蔽了整修世界。有些天——或夜晚?——我会从床上爬起来后直接坐到离床仅几英尺远的电脑旁。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
爸爸显然在不断催促妈妈让我在暑假找份工作,但妈妈却不在乎:我并没有打搅她。萨拉会因为我有时上网使电话战线而有点恼火。她也许会写些毫不客气的话。毫不夸张地说,我和电脑之外的世界几乎没有任何联系。
当然,也许每周有一次,一个朋友会敲敲我的窗户,而我如果没在捣腾什么重要的编码时,会请他进来。我们会喝杯茶,也许还会挤在窄小的厨房里看一小时的MTV。现在回想起来,对了,有时乔科会来敲我的窗户,我们会出去喝点啤酒或玩司诺克台球。但是,诚实地说,那时我的生活也就这么简单了。
而我一点儿都不感觉自己是那种面色苍白、可怜兮兮的失败者。
外壳程序成功了。这意味着,我事实上已经建立起了可行的操作系统的基础,而我自己则乐趣无穷。
外壳程序成功之后,我开始检验其中的内装程序。接着我又编了足够的新程序,可以真正干点什么了。我用了MINIX中所有有用的东西。当我把外壳程序移到一个我为新的操作系统所建的特别区域中时,我开始把这个操作系统称为“linux”。
坦率地说,我一开始并不想把它以linux的名称发布出去,因为那显得我太自我中心了。那么,我为最终发布起的名字是什么呢?Freax(Freaks的变形,该词为“异想天开”之意——译注。) 事实上,在一些早期完成的文件中,即那些说明如何汇编源代码的文件中,有将近半年的时间我一直使用Freax这个名称来指代这个操作系统。但这其实是无所谓的,因为当时还没有任何人知道它,所以它其实并不需要什么名字。
5、开放源代码
来自:李纳斯托沃兹
[email protected] (李纳斯?托沃兹)
新闻组:comp.os.MINIX
题目:你在MINIX中最想看到什么?
总结:关于我的新操作系统的小型民意调查。
信息编号:1991年8月25,
[email protected]
嗨,所有使用MINIX的人们,大家好!
我在编一个(免费的)用于386(486) AT clones的操作系统(只是一个爱好,不会成为一个像Gnu那样大型的专业软件)。我从四月起就在酝酿,现在已准备就绪。我想听一听人们对MINIX有哪些欣赏或不满之处,因为我的操作系统和它有些相象(尤其是文件系统的物理排列方式)。
我目前已经装上了bash (1.08)和gcc (1.40),看来一切进展顺利,估计几个月内我就会得出一些实用的东西。我想知道大多数人在这方面有什么要求。任何建议都欢迎,但我可不保证一定会采纳。
李纳斯(
[email protected])
附:对了,它不受任何MINIX源代码的影响,并有一个多线程的FS。记住。它不能安装(比如使用386任务转换文件等等),也许永远不会支持除了AT硬盘之外的东西。情况就是这样。
使用MINIX人群中最坚定的操作系统的狂热者看到了火花。我没有收到多少有关MINIX特点的建议,但却有许多别的问题。
>多告诉我们一点!它需要MMU吗?
回答:是的。
>在多大程度上使用C语言?在装截中会有什么困难?不会有人相信你的不可“半截性”,比如说我就想把它装截到我的Amiga软件上。
回答:它大部分使用C语言,但大部分人不会把我写的程序称作C语言。它使用了我能想到并找到的386的特征,我也想通过它充分了解386。我的一些C文件几乎和C语言一样是组合起来的。
如上所述,它也使用MMU,用于分页和分类(还不能存进软盘里)。正是分类使它成为一个真正的386的依赖者(每项任务都有一个64mb的编码和数据分类文件。
甚至有几个人提出愿意做试用版的试验者。
最后,把它发布出去并不需要太大的决心。我一直习惯与人交流程序,所以要做的唯一真正决定就是,我敢于向人们展示这一系统软件的最佳时机是何时,才不会使自己感到不自在,或更确切地说,什么时候发布才使我将来不至于为此感到羞愧。
我最终想实现的是有一个编译器和一个能在linux内部编程的真正的系统环境,而不必再用MINIX。但是当gnu程序可以运行时,我骄傲极了,愿意让整个世界都看到它。同时,我也想听到人们的反响。
外壳程序能运行时,我已为操作系统初步编了几个程序。其实还不能做什么,但你能看出和UNIX很相似。事实上,它运行起来像一个有点残疾的UNIX。
所以我决定将其发布出去。但我不会公开地告诉任何人,而是通过私人邮件告诉几个人——也许总共只有五到十个人吧——告诉他们我已将其上传到FTP地址上。其中包括阿里?莱姆克,布鲁斯?伊文斯,以及其他几个人。我还上传了linux的源代码和几个用于初始运行的小程序。我告诉人们要运行这个系统应该怎样做。人们还是MINIX386版本——还必须有GCC编译器,事实上是我自己版本的GCC。所以我把这些也传了上去。
我们有了一个给发布的内容编号的协议。它其实只有心理意义。如果我认为自己的东西已经完善,我愿意将其定为1.0版本,而在此之前,我给出的编号就表示出距离1.0版本还有多远的距离。所以,我将上传发布的那个版本的操作系统定为0.01版,让大家知道它离最后完善还有很大的距离。
对了,我想起了上传那天的日期:1991年9月17日。
我想只有一两个人看了我的作品。因为他们必须先费事地安装一个特殊的编译器,准备一个空间以便导入并汇编我的指令,然后却只能运行一个外壳程序。
基本上,运行外壳程序就是这个版本所能做的一切。它也可以把源文件打印出来,大概有一万行——如果字体小一点的话,大概不到一百页纸(而现在大概要有一千万行了)。
我发布这一操作系统的主要原因之一,是要证明我此前并非在说大话,而是我确实有所作为。在互联网上,说话没有太多责任。不管你做什么,不管是操作系统还是性,太多的人在这个计算机的虚假空间里弄虚作假。所以在告诉了那么多人你在发明一个操作系统之后,能够这样说真好:
“瞧,我真的做出了点什么。我没有在骗你们。这就是我所做的……”
6、linux有了用户
哦,阿里?莱姆克,是他为我把这个系统上载到FTP地址上铺平了道路。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
他极不喜欢Freax 这个名字。倒喜欢我当时正在使用的另一个名字——linux,并把我的邮件路径命名为pub OS/Linux。我承认我并没有太坚持。但这一切都是他搞的。所以我既可以不惭愧地说自己不是那么以个人为中心,也不得不承认自己并非完全没有自我意识。并且我认为,这是个不错的名字。
如上所述,我的操作系统并非很有用。比如,如果储存太多的东西,或仅仅是因为不小心,系统就会马上崩溃。而哪怕你并非不小心,如果让它运行时间稍长一点,也会崩溃。但是在那个阶段,它并不是给人运行的,而是让人看的。对了,是让人仰慕的。
所以它只是为给少数几个热衷于开发新的操作系统的人分离的。他们都是非常迷恋技术的人,甚至是技术迷当中的特殊兴趣小组。
他们的反应无一例外是积极的,但是这是一种“它要是能这样或那样就更好了”的肯定态度。或说:“看起来倒是挺酷,但是在我的电脑上根本就转不起来。”
我记得一个人在邮件中写道,他真的很喜欢我的操作系统,并用了至少一大段文字来描绘它的好处。接着他说我的系统吃掉了他的硬盘,而我的磁盘驱动程序则是“又娇气又脆弱”之类的。他丢失了他先前所有的文件,但他还是对我的操作系统持积极支持的态度。读这样的邮件很令人感动。事实上是一个软件“臭虫”毁了他的文件系统。
我的就是这种反应。我修补了几个程序上的瑕疵,包括那个当内存用完时就会死机的漏洞,而且还取得了一个,经GCC编译器装载到操作系统上,这样我就可以编写小的程序了。这也意味着使用者在运行这个操作系统之前不必先导入我的GCC编译器了。
你是否渴望回到那样的时代,当男人像男子汉并且能自己编写驱动程序?
——linux0.02版本的上载宣言
十月初我发布了0.02版,包括了几个对瑕疵做的补丁程序和一些增加的新程序。十一月我又发布了0.03版。
我本来可能会在1991年底之前就洗手不干了。我已经做了很多自认为有意思的事。并非一切都绝对圆满,但在软件世界中,一旦你已解决了最根本的问题,兴趣就容易很快地消失。我也是那样。解决软件中存在的小问题并不是什么吸引人的工作。但接下来发生了两件让我继续下去的事,第一:由于失误,我破坏了我的MINIX分区;第二,人们不停地传给我反馈的意见。
那时,我在导入linux时仍要把MINIX作为主要的开发环境。我在Linux系统下做的大部分事只是这我写的终端仿真器从学校的电脑上读邮件和新闻。
学校的电脑总是很难登录,所以我编了个可以自动拨号的程序。但是在十二月时,我本想自动拨devtty1——这是系列电话线,但却错误地拨成了devhda1,既硬盘分区,结果是我无意中覆盖了保存的MINIX中最重要东西的空间。是的,这也就意味着我不能再进入MINIX的环境了。
那就是我要做出抉择的一刻。
我可以重新装入MINIX系统,或者也可以将错就错,自认linux已是足够的好,以至不再需要MINIX了。我将通过在Linux下编程来编译Linux,而只要我觉得需要MINIX中好的功能,我就把这些MINIX的优点编到Linux中。无疑,这是观念上重要的一步,因为你要摆脱原有的系统环境,使新的系统真的能够自我包容。这一步十分重大,因此我将十一月底发布的版本命名为0.10版。几个星期之后,就升级到了0.11版。
正是从那时起,开始有人使用这个系统并可以用它来做一些事了。
到那时为止,我已经修补了一系列的漏洞。但没有人向我提出新的建议。我记得为了满足更多存储的需要,我曾出过门,并将机器的内存从4兆升级到8兆。我还出去买了个浮点协同处理器(floating point co-processor),因为人们开始问我linux是否能支持他们的浮点协同处理器。这个附加硬件使我的电脑能执行浮点运算(floating point math)。
我记得是在十二月,德国的一个计算机只有2兆内存却试图汇编Kernel的家伙,他也不能运行GCC,因为那时的GCC需要1兆以上的内存。于是,他问我linux是否能用一个无需太多内存的较小的编译器来进行汇编。尽管我并不需要这个特别的功能,但我仍决定要为这个家伙实现这种功能。接着就出现了那个称为page-to-disk的东西,这就意味着尽管他只有2兆的内存,他也可以通过使用这个存储盘使他的电脑看起来宽敞一些。那是在1991年圣诞节前后。我记得曾在12月23日那一天加班加点,努力使page-to-disk运行。到了12月24日,它已经可以在某种程度上运行了,但是每隔一会儿就死机。最后到12月25日,也就是圣诞节那天,它终于成功了。这可以说是我为满足别人而不是为自己的需要而增加的第一项功能。
而我也为此感到很骄傲。
linux的用户天天都在增加,我也不断接到来自我曾向往的国度的电子邮件,包括澳大利亚和美国。关于此事,我在祖母家的圣诞聚会上对家人只字未提。不要问我为什么,我只是觉得没有必要和我的父母、姐妹或任何亲戚讨论这件事。他们不懂计算机。至少,我认为他们不懂计算机。
就他们而言,我每天干的事就是把电话线连到调制解调器上。当时的赫尔辛基,电话费在夜间可以打很多折,所以我在家的大部分工作都在深夜进行。但偶尔也会一整天地连在电话线上。我本想另接一条电话线,但是我母亲的公寓所在的大楼十分古老,没有额外的电话线,也不打算增加新的。那时我妹妹萨拉除了在电话上聊天之外也是无所事事,至少在我看起来是这样。所以我们会偶尔为抢电话线打架。真的会打起来。她和朋友打电话时,我会强行用“猫”拨号,她就会听到“嘀——嘀——”的声音。这自然会打断她,而她也就知道我确实、确实要上网收电子邮件了。
我可没说过自己是世界上最好的哥哥。
Page-to-disk是一个相当庞大的程序,因为它是MINIX没有涉及到的东西。该程序出现在0.12版中,于1992年1月的第一个星期发布。人们马上开始不仅仅把linux和MINIX相比较,而且开始和Coherent相比。后者是由TK开发的小型UNIXclone。从一开始,增加page-to-disk就使Linux在竞争中脱颖而出。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
那是linux起飞的开始。
突然间,人们纷纷从MINIX转向linux。那时Linux尚不能胜任MINIX的所有工作,但是它还是可以做人们真正需要的大部分重要的工作。而它拥有一项人们特别喜欢的功能:有了page-to-disk,你可以运行超过你内存的巨大程序。这意味着,当超出内存之后,你可以将一块旧的内存存到磁盘上,要记存到了哪儿,仍然使用那块内存来解决你的问题。这在1992年的第一个星期是一件不寻常的事。
正是那个月,linux的用户从我知道名字并与其有邮件往来的五到十个人,增加到了成百上千我不知是谁的人。我并不认识每一个Linux的用户,这多有意思。
7、linux能换来金钱吗?
那时,互联网上正有一个恶作剧在盛行。
据说有一个叫克雷格的可怜男孩得了癌症,正在死亡线上挣扎,而在网民中则流传着一个连锁邮件,让人们向这个男孩邮寄明信片以表示对他的支持。实际上这是某人的一个恶作剧,可能根本就没有克雷格这么个人,更别提什么癌症了。但是这一呼吁竟招来了上百万张明信片。所以我半开玩笑寺要求使用linux的人给我寄明信片,而不用给钱。这像是一个人们会感叹“哦,上帝,又是一个要明信片的家伙!”的玩笑。在那时的个人电脑世界中,有一个有关软件共享的牢固传统。你下载了一个程序,就应该给作者寄回十块钱左右的回报。所以我收到了很多邮件问我是否要人们给我寄三十块钱。就是在这种情况下,我觉得必须说点什么了。
现在回想起来,我觉得那些钱一定会很有用的。我已欠了大约五千美元的学生货款,同时每个月要为我的电脑支付约五十美元。我另外的主要消费是比萨饼和啤酒。但是由于开发linux,我那时没有时间外出,最多每周出去一次。我不花钱约女孩子,把钱都花在了为我的电脑增加硬件上。也许要是换一个人,就会向大家要钱了,哪怕是为了减轻他那日夜辛苦劳动的单身母亲的负担呢?唉,我那时却没有想到这一点。去告我吧!
那时,我更想知道都有哪儿的人在使用linux。与收到钱相比,我更喜欢收到明信片。事实上,明信片确实在滚滚而来,从新西兰、从日本、从荷兰和美国。萨拉曾偶尔象征性地去取取信,突然意识到那总和他争吵的哥哥竟有来自那么遥远的朋友。那是她第一次认识到,在我总是占用电话线的时间里,我可能是在做一件会很有用的事情。那些明信片加起来足有几千封,但它们现在早已不知去向了,一定是在我某次搬家时丢掉了。我的朋友艾温坦说,我是他所见过的最不怀旧的人。
实际上,我不要钱还有很多原因。在最初发布linux的时候,我觉得自己是在沿着几个世纪以来的科学家们和其他学术界人士的脚印在前进,而他们的成就往往建立在别人所打下的基础上——用牛顿的话来说,我是站在巨人的肩膀上。这样做,我不仅仅是在与别人分离我的成果,别人也将会觉得我的工作是有用的。我还想听到反响(当然,是想听到赞扬)。朝那些可能会帮助我改进工作的反馈信息要钱是没有 。我想,如果我不是长在芬兰,我的态度会不完全不同。在芬兰,只是一个人稍微显露出一丝贪心的迹象,人们就会视之为可疑而不会羡嫉(自从诺基亚电话公司开始赚整个世界的钱并充实了很多芬兰人的钱包之后,这一点已经有了一些变化)。并且,对了,如果我不是在顽固的学究祖父和共产主义立场的父亲影响下成长起来的话,无疑我会对这件不要钱的事持不同态度。
无论如何,我不想把linux卖掉,我也不想失去对它的控制权。也就是说,我不想别人把它买掉。早在九月上传每一个版本时,我就在有关复制的文件中表明了这个版权声明。根据十九世纪的波恩公约,除非你将其出卖,你拥有自己所创造的一切东西的版权。作为版权所有者,我开始定下了以下关于Linux的规则:
1、 人们可以免费使用该操作系统,2、 但不3、 得将它作为商品。
4、 对其所作的改动和改进,5、 必须以源代码的形式将其公开(而6、 不7、 是二进制,8、 这是不9、 公开的。)
10、 如果不11、 同12、 意以上规定,13、 则无权对它进行复14、 制或从事任何行为。
你不妨自己设想一下。你为这个程序倾注了六个月的心血,你希望它是有用的,并且自己也能从中有所收获,但你肯定不想让它白白被人占去便宜。我想让大家都能够看到它和使用它,同时也可以随意对其进行改动和改进。但是,我也希望能确保我自己可以及时了解他们做过哪些改动。我希望自己有权使用源程序,这样,假如别人做了什么改进,我也可以利用它。我认为,要使linux发展成最完美的技术就必须保持它的纯洁性。如果有铜臭渗透进来,事情就要变黑暗了。所以,如果不让钱的问题掺和进来,就不会有贪欲的参与。
尽管我没兴趣拿linux去赚钱,但别的人却不这么认为,他们在给别人一份已经下载到软盘上的拷贝时都要索取回报。到了二月份,参加UNIX用户会议的人,几乎人人手上都有一张装有Linux系统的软盘。这些人也问我,他们能不能把Linux作为商品出售,比如说,只要五块钱,为的是收回软盘和时间上的成本。这听起来还有点道理,但问题在于,这样做就会侵犯了我的版权。
显然,我已经到了反思“linux是非卖品”这一立场的时候了。
那时,linux已经在网上引发了很多讨论,这使得我很自信,再没有人能够窃取我的劳动成果了——而这曾经是我最大的担忧。至少,假如真有谁这样做了,他也难逃众人的谴责。如果有人想篡夺Linux并将其变为一个商业项目,必将会在网上掀起黑客的反对潮,会有无数黑客似的人物大声斥责道:“嘿,那是Linux,住手。”当然,措辞可不会如此文雅。
事情的发展已经势不可挡:世界各地的黑客们每天都在共同分享彼此提出的修改建议。
我们正在集体创造一个最好的操作系统,这种发展轨道已经不可改变。正因为如此——因为linux已广为人知,我才觉得把它作为商品也是可以接受的。
但是,在使我自己看起来像个慈善先生之前,还有另一个关键的因素使我做出了这一决定。事实是,为了使linux有用,我曾依赖过很多在网上免费下载的工具——我把自己放到了巨人的肩膀上。这些免费软件中最重要的是GCC编译器,它是理查德?斯多曼的杰作,并且已经在公共执照协会(GPL)上注册了版权。在GPL条款之下,钱不是问题,只要有人愿意买,你可以卖一百万美元。但是,你必须提供软件来源。而得到或买到你的来源的人,将拥有和你一样多的对于该程序的。这实在是很高明的一招。我认可GPL的原则,但是和那些认为所有的软件创新都应该在GPL下向全世界公开的顽固的GPL信仰者不同,我认为发明者本人有决定如何处置自己的发明的权利。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
于是,我抛弃了自己旧有的版权声明,采纳了GPL的内容,一个斯多曼也曾经和他的律师一道签署过的文件(因为有律师的参与,该文件被搞得洋洋洒洒有好几页)。
新的版权声明被放进了0.12版本中。但是,我记得在发布当晚我从睡梦中醒来,想到商业利益将可能有点古怪,因为当时所涉及的商业利益真是不多。但不知怎的,我觉得自己应该小心。我的担心之一是——现在仍然是——有人将丝毫不尊重我的版权地将linux掳去。我担心,在现实中,如果有个美国人侵犯了我的版权,我无法对其提起诉讼。现在这仍是我的担心。状告某人侵权很容易,而我的担心是,有的人会即使被起诉也继续从事这种违法行为,除非加诸某种强制执行的法律行动他们才会停止。同时我也不断地担心,在像中国这样的地方,企业并不承认GPL的效力,从而也不会尊重我的版权。
事实上,这些地方的法律体系对侵犯版权的制止在当时并不得力(中国已经签署了一系列的国际公约,李纳斯在这里谈的是1991年的情况——译注),而且,为防止违法行为的投入在这些地方被认为是不划算的。大软件公司和唱片公司曾作过努力,但是成效不大。
不过,事实减轻了我的担忧。有的人确实会暂时侵犯我的版权,但是他们往往也是那些尊重版权、反馈改进意见、使系统功能得以提高的人。他们将是系统升级过程中的一分子。相反,那些不尊重版权的人们则不会利用这些升级,他们的顾客也会离他们而去——我希望。
总的来说,我从两个方面看版权。比如一个每月挣五十美元的人,他可能会为一个软件花费二百五十美元吗?如果花一点钱买非法拷贝软件,而把五个月的工资用于吃饱肚子,我一点不觉得他不道德。这种侵权是道义上可以接受的。去追捕这种“侵权者”是不道德的,更不要说简直就是愚蠢的。就linux而言,谁在乎如果只将其用于个人目的时,一个人是否真正遵循了GPL呢?那些想藉此赚大钱的人们,才是真正不道德的,不管他们是在美国还是非洲,也不管程度如何。
贪欲从来就不是善的。
8、MINIX对linux
引人注目并非全是好事。
我从不擅长处理对抗,但也被迫站出来为linux和我的尊严辩护,因为安德鲁?塔南鲍姆不断攻击我的Linux取代了他的MINIX操作系统。我们都是网虫,所以论战是通过电子信件进行的。
他只穿着件T恤就浑身冒火,能怪谁呢?
在还没有linux讨论组之前,我一般都是在MINIX讨论组上宣布有关Linux的信息和寻找对这个操作系统感兴趣的人。对此,安德鲁怎么会高兴呢?
所以,开始的时候,他对我入侵他的讨论组有些不快。很显然,他也很不高兴自己的操作系统正在被一个来自芬兰雪原的新发明夺去光彩,而且看来有众多的软件设计者正在加入进去。同时,他对应该如何创建操作系统持与我对立的观点。那时,安德鲁属于主张以微内核的方法建立操作系统的计算机科学家阵营。他把MINIX做成适用于微内核和Amoeba(一种他当时正在创建的也适用于微内核的系统)的形式。
适用于微内核的系统在八十年代晚期和九十年代早期十分盛行,而linux的成功威胁到了这一运动。所以他不断地在网上帖一些难听的带攻击性的帖子。
微内核的理论依据是,操作系统是非常复杂的,所以要通过模式化来减少复杂性。微内核方法的原则,即核心的核心,是昼减少功能。它的主要功能是传播。电脑所提供的一系列不同的服务都是通过微内核的传播渠道实现的。因此,应尽量分割问题的空间,使其不再复杂。
我认为这种做法很愚蠢。
是的,每一个单独的部分是简单的,但是相互作用的多种功能如果放在一起就要复杂得多,而linux就是后者的情况。想一想自己的大脑。每一个单独的部分都很简单,但是各部分的相互作用构成了一个复杂的系统。这是一个整体比个别更大的问题。拿一个问题来说,如果你简单地将问题一分为二,说半个问题要容易一半,那么你就忽略了一个事实,即:你必须要考虑到两个半个之间的联系所带来的复杂性。微内核的理论是,如果把核分为五十份,那么每一份都只有五十分之一的复杂性。但是每个人都忽视了一个事实,即各部分之间的联系事实上比源系统更加复杂,而且那些个别部分也不是那么简单。
这是我对微内核最重要的反驳:你想实现的简单化是错误的简单化。
开始时,linux是一个较小的软件,而且简单得多,没有必要进行模式化。所以用Linux可以比MINIX更直截了当地做很多事。我最初发现MINIX的缺陷是,如果你同时运行五个软件,五个软件都要读不同的文件,那么五项任务要一个一个地先后进行。换句话说,你要向系统发出五次请求:“我可以读文件X吗?”文件系统主管读取的后台驻留程序先接受一个请求,对其进行回应,然后再接受一个,再进行回应……
linux系统只有一个核,在这个系统之下,五个不同的过程都对核进行系统呼叫。核必须要十分小心,不会将其混淆,但是它会很自然地让各个过程各行其是。因此Linux更加快捷高效。
MINIX的另一个毛病是:尽管你有了源代码,但是许可证并不允许你做很多事情。拿布鲁斯?伊文斯来说,他对MINIX做了重大改进,使其更易在386上使用,但是他却无法将其所做的改进纳入原系统之中,因为MINIX限制人们对其进行修改。从实用的角度来说,这不啻是一个灾难。使用者哪怕为了得到一个可使用的系统都要经过多个步骤,这真是太不实用了。
就这样,我与安德鲁?塔南鲍姆结束了交战,那是在1992年年初。想象一下,在一个暴风雪过后的早晨,你看见这样一条信息:
来自:安德鲁塔南鲍姆
[email protected](安德鲁?塔南鲍姆)
新闻组:comp.os.MINIX
题目:linux过时了。
日期:1992年1月29日,格林威治时间12:12:50
我在美国待了几个星期,所以没来得及对linux做多少评论(不是说如果我在,我就会说什么)。但是,Linux确实值得一评。我现在就有话要说。
正如你们所知,MINIX只是我的爱好,每当晚上我写烦了书,如果当时没有什么战争、革命、CNN直播的参议院听政会,我就会摆弄MINIX。我的真正职业是大学教授和操作系统领域中的研究人员。
由于我的职业,我想我知道在今后的十年左右时间里操作系统会向何处发展。有两个方面引人注意:
1)微内核对Monolithic system
大多数操作系统是独立一体的,也就是说,整个操作系统是一个单独的a.out文件,一个“核形式”运行。这种二进制中有管理过程、存储管理、文件系统及其他。这类操作系统目前有UNIX,MS-DOS,VMS,MVS,OS/360,MULTIC以及其他很多。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
另一种则是基于微内核的系统,在这种系统中大部分OS都作为单独过程进行,还有许多通过沟通在核外运行。核的任务是管理信息仁慈,控制中断的情况,低层次的过程管理,还可能有I/O。这种形式的操作系统有RC400,Amoeba,Chorus,Mach,以及尚未发行的WindowsNT。
在我详尽论述两者的利弊之前,可以说那些设计了这两个操作系统的人们之间的急诊已基本结束。微内核胜出。Monolithic system唯一的优点在于运行上,而现在有足够的证据证明,微内核系统也能和Monolithic system一样快。
MINIX是一个基于微内核的系统。文件系统和存储管理相分离,在核外运行。I/O驱动也是分离的(在核中,只是因为英特尔中央处理器中的大脑是死的这一原因,才很难寻求其他的做法)。
linux是Monolithic风格的系统。这一做法是回到七十年代的一大退步,就像对一个令人激动的C程序以BASIC语言重新编写。对我来说,在1991年还写一个Monolithic system的系统是一个不折不扣的坏主意。
2)不分界域性(Portability)
很久很久以前有一种4004CPU,它成熟后变成了8008,接着它接受了整形手术,就成了8080。由8080诞生了8086,接下来是8088,再后来是80286、80386、80486,一直到了第n代。同时还出现了RISC芯片,有些能以100MIPS运行。200MIPS的速度以及更高能在近几年中出现。这些都不会马上消失,而是会很快从80*86发展开去。它们会通过在软件中解析80386来运行旧式的MS-DOS程序。我认为任何一个架构设计OS都是极大的错误,因为它会很快消失。
MINIX的设计就是不分界域性,并已从英特尔ported到680*0(Atari,Amiga,苹果),SPAC,以及NS32016。linux紧紧地与80*86联系在一起,方向错了。
别误解我,我并非不喜欢linux,主要是Linux会使所有那些想在BSD UNIX上运转MINIX的人弃我而去。坦诚地说,对那些想获得一个“现代的”免费OS的人们,我想建议他们找一个基于微内核的、portable的操作系统,如GNU之类。
安德鲁?塔南鲍姆(
[email protected])
附:顺便说一下,Amoeba有一个UNIX仿真器(在用户的空间中运行),但是还远未完成。若有人有志在此方面努力的话,请告诉我。运行Amoeba需要几个386,其中一个要有16M,所有的都必须具备WD以太网卡。
于是,我知道有必要维护自己的荣誉了,所以就有了下面的反击:
来自:李纳斯本尼迪克特托沃兹
[email protected](李纳斯?本尼迪克特?托沃兹)
题目:回复“linux是过时的”
日期:1992年1月29日,格林威治时间23:14:26
组织:赫尔辛基大学
看到这种言论,我想我得有所回应了。先向那些已经听够了对linux系统进行的议论的MINIX用户们说声抱歉。我很想能“对诱饵视而不见”,但是……该是我好好地自我辩护的时候了。
安德鲁塔南鲍姆写道12595@star,cs,vu,
[email protected](安德鲁?塔南鲍姆)写道:
>我在美国待了几个星期,所以没来得及对linux做多少评论(不是说如果我在,我就会说什么)。但是,Linux确实值得一评。我现在就有话要说。
>正如你们所知,MINIX只是我的爱好,每当晚上我写烦了书,如果当时没有什么战争、革命、直播的参议院听政会,我就会摆弄MINIX。我的真正职业是大学教授和操作系统领域中的研究人员。
你用这个作为MINIX局限性的借口?对不起,但是你输了。我的借口比你的还多,而linux在很多领域还是胜MINIX一筹。更别说MINIX的大部分似乎是由布鲁斯?伊文斯编写的了。
反驳一:你说你把MINIX当作爱好来玩——那么,请问是谁在拿MINIX挣钱呢?又是谁在免费发送linux呢?再来谈谈爱好。让MINIX能免费获得,我对MINIX的最大抱怨就会消失。Linux在很大程度上对我是一个爱好(但是一个很严肃的爱好,最棒的一种爱好)。我没有从我的爱好中赚一分钱,它也不是我在大学要修的课程之一。我是纯粹用我自己的时间,在自己的机器上做出来的。
反驳二:你是教授和研究人员。这真是一个MINIX出现核心缺陷的好借口。我只能希望Amoeba不会像MINIX那样垮掉。
>1.微内核对Monolithic system
没错,linux是Monolithic的,我同意微内核是好一点儿。如果不是你的话题有争议性,我可能会同意你的大中分意见。从理论角度(及审美角度)而言,Linux输了。如果GNU的kernel在去年春天就已完善的话,我可能就不会开始这个工程。而事实是,GNU还没有完善,也远非如此。如果现在就已实现的这一点而论,Linux才大获全胜。
>MINIX是一个基于微内核的系统。linux是Monolithic的系统。
如果这是判断一个kernel好坏的唯一标准,你的观点就对了。但你没提到的是,MINIX在微内核方面的表现并不出色,而且对核内多元任务的操作仍存在着问题。如果我做的是一个在多线文件系统上有问题的OS的话,我就不会这么快来责备别人。而事实上,我竭尽所能来使人们忘记软件设计者在此问题上的惨败。
(是的,我知道MINIX拥有众多黑客支持者,但他们只是黑客。而布鲁斯?伊文斯告诉我有很多可以竞争的机会。)
>2.不分界域性
“不会界域性是给那些写不出新程序的人们准备的。”
——我,现在刚说的,口出狂言
事实上,linux比MINIX更具有分界域性。“你说什么?”我听见你说。是真的——但却不是在你所说的意义上。我使Linux尽量符合标准(我当时手边并没有POSIX标准)。把程序移植到Linux上比到MINIX上要容易得多。
我同意,不分界域性是个好东西,但是只有在它确实有意义的地方才是个令人向往的特性。没有必要专门使一个操作系统太具有不分界域性:能粘到可移植的API上就行了。操作系统的实质就是利用硬件的特点,并将其隐藏在一层高级的呼叫后面。而linux就是如此,它比任何kernel都更多地利用了386的特性。当然这便利真正意义上的kernel变得不可移植,但是这也使设计大为简化,是一个可以接受的权宜之计,因为这首先保证了Linux的诞生。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页
我也同意,linux又太不具有不分界域性了。去年一月我拥有了自己的386,而Linux系统的创建在一定程度上成为了一个让我认识386的项目。如果要成为一个真正的项目,必须能够在不分界域性方面做一些事情。但是,我最初的设计思想就是没有考虑到不分界域性,如果我这样说并不是太过分地为自己辩护。去年四月我开始这个项目时,认为不会有什么人会真的使用它。我很高兴我的这个想法错了。随着我对源代码的发布,每个人都可以免费来装截Linux,哪怕还不是很方便。
李纳斯
附:很抱歉我有时言辞过激。如果你没有其他的操作系统可供选择的话,MINIX已经挺好的了。如果你有五到十个386机器闲着没用,那么Amoeba也会不错,只是我确定无疑是没有的。我一般不会勃然大怒,但是在涉及到linux的问题时,我是有点容易感情用事。
在这件事上还有一些口舌,那是我唯一一次发火。但是我要说明的问题是:的确有反对的声音出现,哪怕在早先的日子里(或者我还证明了这一点:当你参加网上论坛时,一定要小心从事,打字错误和语法错误会永远纠缠着你)。
我和李纳斯把家人和朋友留在露营地,开始沿着一条清流的小溪做一次午后散步。我们的露营地是在东西亚拉(Eastern Sierra)一个叫格鲁夫尔温泉(Grover Hot Springs)的地方。此时是七月四日国庆日的周末,这里的风光秀美得好像是把《国家地理杂志》上的照片原封不动搬下来似的。“现在是柯达一刻,”李纳斯一边背诵着广告词,一边停下来欣赏着突兀的峭壁背景下铺满野花的草地。随后,我们在溪边坐下。我让他描述一下他的生活,尤其是自从linux越出了其发源地——即由他认识的那些参加新闻讨论组的狂热爱好者组成的小圈子——而广泛地传播开来之后,他的生活有何变化。
“这种感觉一定很棒,”我说道,“那些年你一直跳不出户,除了你的电脑之外只和这个世界保持着仅有的一点点联系。突然间,这个星上的每一个角落都有人认识到你正在进行的伟大工作,你成了这个对你寄予厚望的发展中的linux世界的中心……”
“我从不认为这对我来说是什么大事情,”他回答道,“我真的不认为是这样。对我来说,linux确实是那种我随时都在思考的东西,但这主要是因为总有问题需要我去解决。我确实为它投入了很多,但主要是因为它是一个智力的挑战,而不是因为任何感情的因素。
“我喜欢有这么多的人给我从事这个事业的动力,我曾认为自己已接受于完成它了,但我一直没有真正做到这一点。人们始终给我更多继续的理由,以及更多困扰的棘手难是,这使得继续完善linux变得更为有趣。否则,我可能早就干其他事情去了。但我没有,因为这是我喜欢的工作。做这件事充满乐趣。我怀疑,我对自己的大鼻子或其他这方面的事情的提成,显然比在Linux上花费的精力还要多。”
几个星期后,在斯坦福购物中心,李纳斯为怎样挑选一双慢跑鞋而犯愁。“你一般每星期跑多少里地?”售货员问李纳斯。李纳斯不由得笑了起来:在过去十年里他还从未?上过一里地。锻炼不是过去的首选功课。但在他感到疲惫的时候,李纳斯承认他愿意走出过度的自我监禁式生活。
“塔芙一定求过你,要你帮我去掉大肚子。”他开着开玩笑,一边拍着自己的肚子。
“告诉她,她的要求你本周内绝不可能达到。”我回答道。
接下来的一个半小时,我们开始在斯坦福校园里兜圈,以便找到一个可以合法停车的地方。然后,在伸展了一下胳膊腿之后,我们开始跑了起来。我们越过干涸的湖里狭窄的泥土小道来到林中,向着我们的目标——山顶巨大的卫星接收天线——前进。当然,我们根本没有跑到那儿。我一边迈着不寻常的轻快步伐奔跑,一边很惊讶李纳斯能够仅仅以一里的距离落在我后面而不被甩开。接着他终于不行了,几分钟后,我们在边的草上上舒展地躺了下来。
“你的家里人对因linux而发生的一切事情的反应是怎样的?”我问道,“他们对此一定感到非常的激动。”
“我不认为有谁真的对此很在意,”他回答道,“我不是说没有人真的关心这件事。但我一直花费我最多的时间在编程序上,这一次也与以前没什么不同,他们不至于为此而有什么更多的关切。”
“那么,你一定曾对你的亲属们说过些什么。比如当你和你爸爸一同出动时,你是否曾对他说:‘嘿,你可能不会相信我一天到晚在计算机上鼓捣的那个玩艺儿现在怎么样了,现在已经有好几百人在用它了……”
“没有,”他回答道,“我只是觉得没有必要与家人和朋友分享这些,我从来也没有想过要把它推荐给更多的人。我想起了在我写linux程序时,拉素曾经决定要买Xenix,UNIX的SCO系统版(微软开发的用于PC机的UNIX版本)。我记得他曾经试着劝说我‘不要在这上面犯错误了。’他的意思是叫我不要再继续写下去了。但我不在意他的话,最终,在这个问题上他也有所转变。但对我来说,Linux仍然不是什么大事情。在我看来,人们使用它固然是好事情,能够从中获得反馈意见也很棒,同时这些却并不是那么重要。我不想传播什么福音。我为人们使用我的代码而感到骄傲,但我从来也没有过要与所有人共同分享它的念头。我从来没有认为这是世界上最重要的事情。我也不认为有几百人用我的软件有任何的重要性可言,以至要告诉我爸爸。不是的,它对我来说更多的是一种乐趣。直到今天我也还是这么认为。”
“那么,你甚至都没有想过告诉你的父母、家人和朋友这些事吗?你自己真的不为这些事情而激动吗?”我问道,没有掩饰我的怀疑。
他沉吟了几秒钟,然后回答道:“我不记得我当时是否感到过激动。”
李纳斯买了一部新车,一部按他的定义很有“乐趣”的宝马Z3双座敞篷车,车身是金属蓝,完善的男孩子的汽车颜色。他选中这款颜色是因为没有他所中意的亮黄色。这黄色的宝马,他解释道,“看起来就像尿。”几年来,他去位于圣克拉拉的Transmeta公司总部上班时,总是将他的庞蒂亚克车尽可能停在离大门口近的地方。但现在,他却将心爱的宝马车停在他办公室外的窗前,按他的廉洁这样可以停在阴影中避免暴晒。于是,现在李纳斯在电脑前工作时就可以不时地欣赏一下他的新车了。
大约在一年多以前,我们曾经首次在一起外出旅行——开着我特意租来的白色野马敞篷车翻山去圣克塔克鲁兹。在我们这次旅行期间,李纳斯曾停下来观察我们所参观的桑拿浴场和酿酒厂外停着的运动型轿车。现在,我们是在他自己的运动轿车里翻山越岭。当他在十七号公路上驶过弯路时,他脸上浮起微笑。
上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] [10] [11] [12] [13] 下一页