justForFun
昨天的电脑
小时候,我只用过3台电脑。第一台是11岁从外公那接触到的Commodore VIC-20,也是最早的“家用”计算机之一,也就是现在PC机的前身。
那些年,PC机还没普及,家用计算机的大多数程序都是用汇编语言写的。在当时的每种计算机上,操作系统都是由各家自造的,就跟PC机上有个DOS操作系统一样。计算机的种类不同,其操作系统也有着明显差异,要么特别简单,要么功能稍微强一些。
后来,VIC-20快被我玩腻了,我开始攒钱买新一代电脑。当时这对我来说是一件大事。对于家人某个时候住过什么地方这种事,还有很多其他的事情,我都记不清了,但对得到第二台电脑的经过,我却记忆犹新。
我攒下了一些圣诞节和生日得到的钱。有一年夏天,我还靠在赫尔辛基一些公园的清洁队里打工赚了点钱。赫尔辛基很多公园都没有好好美化和保养,倒更像是一些杂草丛生的娱乐场所或茂密的过头了的绿地。我们的活儿就是把那些从生的灌木锯掉,或是捡拾枯木枝————这活儿还挺有意思的,我一向就喜欢户外活动嘛。我还一度送过报纸————勉强算是送报吧,不过递送的不是报纸,而是广告宣传册。回头想想,我其实不那么喜欢打暑假工,不过那些年我还是干了这样的活儿。总而言之,攒下的钱更多是来自学校的助学金。
在芬兰,人们给学校捐款相对来说并不是什么新鲜事,甚至连公立小学都有人捐款。所以学校从小学四年级开始就有钱拿了。发钱的方式全有赖于捐款人的意愿,他们想怎么发就怎么发。我就记得我们学校当时有一笔捐款,准备发给班级里最讨人喜欢的学生。那是六年级的事,我们还真投了票决定究竟谁能得到这笔钱呢。我得补充一句,赢的人并不是我。这笔赏钱总共也只有200芬兰马克,当时也就值40美元左右吧。不过对于一个六年级学生来说,仅仅因为讨人喜欢就能得到这笔钱,简直是太赚了。
通常在某一门课或者某项运动中拔尖的学生都能得到助学金。很多助学金都是由具体学校具体发放的,或者是由政府拨款的。有些时候,一些款项还会随着时间推移而逐渐缩水。我记得有一笔钱只有差不多一便士(1芬兰马克等于100芬兰便士)。遇上这种情况,学校就会凑些钱补上去,让这些奖金多少显得不那么寒酸。当然,即便如此,这笔钱也多不了多少。这样做的目的,不外乎是为了把派发助学金的传统延续下去。芬兰的学校十分重视这种传统,这样做的确挺好的。
所以,我每年都能以“数学天才”的名义得到一些助学金。到了高中,助学金的数目就更多了,最高能达到大约500美元。我买第2台电脑的钱大部分都是这么来的,因为仅凭每周那点儿零花钱根本是不够的。为了这台电脑,我还向爸爸借了点儿钱。
那是在1986年或1987年,我大约十六七岁时。那时我早已不打篮球了。为了决定买哪一款电脑,我做了十分细致的调查。那时的PC机质量不太好,所以我不考虑买PC机。
我挑了一台Sinclair QL,你们多数人估计都太年轻了,不知道这款电脑。Sinclair电脑是家用计算机市场上32位计算机的始祖之一。在当时,Sinclair公司的创始人史莱夫·辛克莱爵士就相当于是英国版的斯蒂夫·沃兹尼亚克。他生产电脑配件,然后在美国挂着“天美时”的品牌出售。没错,就是那家做手表的公司。他们进口Sinclair电脑的零件,再打着自己的名号卖出去。早期只卖电脑零配件,后来就开始卖组装好的计算机了。
Sinclair电脑有专门编写的操作系统,叫做Q-DOS。当时我对这个系统已经烂熟于心。它有一个还算先进的Basic语言,图形处理能力也非常好。Q-DOS最令我激动的是它的多任务处理能力:你可以同时在系统上运行多个程序。不过,Basic部分就没有多任务处理能力,所以你不能同时运行多个Basic程序。但要是你自己动手用汇编语言写程序,就能让操作系统安排好时间表,分时运行,那就可以同时处理多个程序了。
这台电脑有一块68008芯片,是摩托罗拉的第二代68000芯片,也是68000芯片的简化版。就其内部构造来说,第一代68000芯片是32位的,但它有一个16位的对外接口,用以连接除了CPU之外的设备(比如说内存或外接式硬件)。因为每次只能从内存中加载16位数据,所以16位操作通常比32位操作更快(由于外部接口限制为16位,处理器需要分两次加载内存来读取32位数据,这就导致了性能上的差异)。这种架构非常受欢迎,现今的很多嵌入式设备和汽车还在使用。虽然现在用的芯片不同,但架构还是一模一样。
我电脑里的68008芯片在和CPU之外的设备连接时用的是8位接口,虽然每次它和外部设备的互动是8字节的,但其内部还是32位的,因此在编程时,使用起来非常不错。
它有128KB的内存,这在当时对家用计算机来说已经是非常大的了,我那台被它取代的VIC-20只有3.5KB的内存。而且由于它是一台32位的机器,所以可以毫不费力地一次读取所有的内存,这在当时可是空前强大的。这也是我选择这台电脑的主要原因。这项技术很有意思,而且我非常喜欢它的CPU。
我的一个朋友认识一家商店的老板,我本想以折扣价在他店里买,但要很长时间才能到货。于是我“长途跋涉”去了赫尔辛基最大的书店————学术书店(Akademiska Bokhandeln)。这家书店有一个电脑专柜,我就在那儿买了这台电脑。
这台电脑花了将近两千美元。以前的行情就是这样的,入门级的电脑基本上都是两千美元左右。这种行情到了近几年才有所改变,现在只要花五百美元,你就可以买回一台新电脑。这就跟汽车一样,现在没有人肯生产一万美元以下的汽车了,怎么说呢,就是因为不值得嘛。不错,厂家当时也能够造出七千美元的汽车,但是汽车制造商会这样考虑:一个出得起七千美元买辆汽车的人,肯定也乐意出三千美元来获得更高的配置,比如说附带空调系统。假如拿今天的入门级汽车和十五年前的作比较,它们的价格相差无几。但实际上,除去通货膨胀的因素外,今天的入门级汽车可能还更便宜一点,不过性能可就好得多了。
那个年代的电脑就是这样:它还并不是人人都会买的东西,所以你也只能忍痛被宰了。如果一台成本很低的电脑以很高的价格出售,那么他们也卖不出多少台。但事实上,它们的制造成本是很高的,所以低价卖的话就更不划算了。从另一个方面来看,人们也总是愿意多花两百美元去买一台性能更好的电脑。
就这样,1987年,我花了两千美元买回了这台Sinclair QL电脑。大多数时间,我就是用它来不停地写程序。我总会找一些有趣的事情来做。
那时候我自己会编写程序设计工具。在最开始为这台机器买的东西中,就有一个是带有EEPROM卡(电可擦可编程只读存储器)的扩展槽。EEPROM卡是一种可以自己利用特殊模块来编写的内存,就算你关了机,卡中内容也不会丢失。这样一来,我什么时候想要用到这些工具,都可以从EEPROM上直接调用,而不用再把它们写入RAM(随机读取存储器)内存,占用那点珍贵的内存来编程了。
来瞧瞧我为什么会对操作系统感兴趣吧:我自己买了一个软盘控制器,所以不用非得去用电脑自带的微型驱动器了,但是这个软盘控制器上的驱动程序写起来太别扭,所以最后我只好自己写了一个。在写驱动程序的过程中,我又发现了这个操作系统的一些bug。之所以我能发现这些问题,是因为我写的一些东西在电脑上不能运行。
我的代码一直都……嗯,很完美。所以我知道一定不是代码的问题,肯定是别处出了错,于是我对这个操作系统进行了反汇编。
关于这个操作系统的书都写得不完整,但你也可以买一些来读,多少也会有些帮助。你还需要一个反汇编程序,也就是一个能把机器语言转换成汇编语言的工具。这一点非常重要,因为要是只有一个机器语言的版本,要理解和执行它的指令就非常困难。比如说,如果一个指令跳转到了一个数字地址,要想搞清楚就麻烦多了。一个理想的反汇编程序会自动给数字地址命名,而且也支持自定义命名。你还可以用它来标识你指定的指令序列。我自己就有一个反汇编程序,用它来建立目录相当不错。要是有哪儿出了错,我就可以进入反汇编程序,从它给我标识的路径找到出错的目录。此外,我还能清楚地看到操作系统要干的任何事。有时候,我倒不是因为系统出了错才使用反汇编程序的,而是我想搞清楚某个程序究竟能做到什么。
Sinclair QL让我反感的一个地方,就是它的操作系统是只读的,你根本不能改变它。虽然它确实有钩子机制(hooks)————你可以在钩子机制下切入自己写的代码来接管一些功能,但是钩子机制只在某些特定的地方才有。要是能完全替换掉整个操作系统,那可就好多了!所以说,把操作系统做在ROM(只读存储器)内存上,真是个馊主意。
虽然我曾经说过“芬兰对高新技术的包容度天下无敌”之类的话,但Sinclair QL在芬兰这个欧洲第7大市场里却没能站得住脚。因为QL的市场实在太小了,你要是想为这台创新的高端机器添置升级设备,就只能从英国邮购。而且你还得翻一大堆产品目录,直到找到一家有你所要设备的商家。然后你还得准备好保付支票,再苦苦等上几个星期,它才能到货。想要把内存从128KB扩展到640KB,除此之外,别无他法。我还买了个新的汇编程序,用来把汇编程序转换成机器语言(1和0的组合),另外又买了个编译器,这基本上就是一个编程时使用的文字处理程序。
当时买的汇编程序和编译器都挺好用的,但是它们只能存在电脑的微型驱动器上,无法放到EEPROM卡里。所以我又自己写了汇编程序和编译器,在编程的时候使用。两个程序都是用汇编语言写的,按现在的标准来看,还真是挺愚蠢的。因为汇编语言既复杂又花时间。我敢说,如果解决同一个问题,用汇编语言要比用C语言多花一百倍的时间,而且当时C语言已经问世。
我在电脑自带的解释程序上添加了一些命令,这样一来,我想要编辑点什么的时候,只要让自己的那个编译器自动运行,它就直接出来了。我的编译器比电脑自带的那个速度要快得多。编程的时候,屏幕上可以快速地呈现我敲出的字符,这点我很自豪。一般用这样的机器,要填满一屏幕的字需要特别长的时间,从屏幕缓慢的滚动速度上就能看出来。因此让我非常得意的是,如果用我的编辑器来写,书写的速度就会快得惊人,甚至连滚动的屏幕都模糊了起来。这一点对我来说非常重要。我的这个改良让这台机器用起来爽快多了,而且只有我才知道,为了让机器这样高速运转,自己花费了多少心思。
那个时候,在我认识的人当中,没有多少像我这样沉迷计算机的。学校倒是有一个计算机俱乐部,但我没有在那儿花多少时间。那个俱乐部只是给那些想了解电脑的孩子开的。我读的那个高中大概只有250个学生,我想他们当中没有人和我一样,从十岁就开始接触电脑。
我玩这台Sinclair QL时最常做的事,就是克隆别人的游戏。以前我在VIC-20上喜欢玩的游戏,都被我在Sinclair QL上做了翻版,有时候我还会增强游戏功能。
记得我用汇编语言做过一个“吃豆人”(Pac Man)的翻版。首先,你好歹得先记下所有的吃豆人角色都长什么样子,然后再把它们画到一张16x16格的纸上,还得给它们上色。如果你有点儿艺术细胞的话,这活儿估计能干的不错。但你要是跟我一样是个艺术菜鸟,那你画出来的就不是吃豆人了,而是吃豆人那个病怏怏的表弟。
我为什么会对“吃豆人”这个游戏感兴趣呢,其中的一个原因就是这个游戏力图解决图像闪烁的问题。旧式电脑游戏一般都存在这个问题,除非硬件支持,否则你的角色就会闪烁不定。在当时,要让角色到处移动,你得在旧位置把角色图像擦掉,再复制一份图像到新位置上。要是碰巧其中的间隔时间把握得不好,玩家就会看到这两个动作之间的空白,这就出现了闪烁。处理这个问题其实有很多方法。你可以把角色的新图像先画好,然后再把旧图像擦掉,不过用这个方法得特别注意,千万别把旧图像过度到新图像的那一部分也给擦掉了。这样的话就不用再忍受烦人的闪烁问题,虽然有时还能看到旧图像被擦掉前留下的阴影,但角色移动的效果已经很不错了。往好的方面想,闪烁没有了,而且还创造出了动态模糊的效果。
游戏之所以一直引领着技术的潮流,而且通常程序员之所以最先写的程序都是游戏,这都是有原因的。有一部分原因是这样的:最聪明的程序员都是些躲在自己房间里玩的十五岁的孩子(十六年前我是这么认为的,现在我还是这样想的)。此外,其中还有一个原因:游戏总是能够促进硬件的发展。
看看今天的游戏,大多用起来还是足够快的,能满足任何操作。但是要考验硬件的极限,就得靠动作游戏了,比如说一些时下很流行的3D游戏。基本上,游戏玩到某个阶段,你发现该有的没有、该快的不快,立马就能感觉到电脑的哪些硬件存在问题。在众多电脑程序中,游戏是少有的能办到这点的。处理文字的时候,慢上个一两秒你也许不会在意。但是在游戏里,即使是十分之一秒的延迟也会非常明显。以前的游戏很简单,可以说是个单纯的程序。但看看现在的游戏,程序只占了一小部分。占游戏大头的还有配乐、故事主线之类的。要是把写游戏比做拍电影,那么编程充其量就是剧组的摄像而已。
上大学
大学的第一年,我住在彼得盖坦大街一座老公寓楼的一楼。那台Sinclair QL电脑就搁在窗户旁的桌子上,不过我并没有经常用它来编程。有一部分原因是我想要专注学业,此外还有一个原因,就是我没找到什么好项目可做。没有项目可做,我也就没有了编程的激情。这种时候就该尝试去找一些事情来做,让自己兴奋起来。
所以看起来,这个时候应该是我入伍的最佳时机了————反正早晚都得入伍。当时我19岁,对我电脑的各种缺点特别恼火,加上正好手头也毫无兴趣的编程项目,于是我登上了去拉普兰德的火车。
我在1990年5月7日退伍。虽然朵芙可能会告诉你,我连结婚周年纪念日也记不住。不过呢,我不可能忘记离开军队的日子。
这时,作为一名极客,我陷入了一种困境。和任何一个随着68008芯片一起长大的计算机完美主义者一样,我特别看不惯PC机。但是到了1986年,386芯片出现之后,PC机看起来……嗯……开始有了那么一点儿魅力。68020芯片能干的活儿,它全都胜任。而且到了1990年,大规模生产和便宜机器的出现,令PC机的价格大幅度下跌。我当时特别在乎价格,因为手头没有多少钱。所以,先不管别的了,这就是我现在想要的电脑。正因为PC机的市场很旺,它的升级设备和外接配件都能容易弄到手。尤其在要换硬件的时候,我想要的是标准设备。这一点Sinclair电脑做不到。
每个人都会遇到一本改变自己一生的书吧。比如说《圣经》《资本论》《相约星期二》《在幼儿园学会需要知道的一切》,诸如此类的。而安德鲁·坦尼鲍姆所著的书《操作系统:设计与实现》让我脱胎换骨,达到了一个全新的高度,改变了我的一生。
那时候,我选好了大二秋季学期的课程,其中最令我期待的一门课程就是“C语言与Unix”。在夏天等开课的时候,我就买了上头提到的那本教科书,迫不及待地先读了,希望能在开课之前就打好基础。在这本书里,阿姆斯特丹自由大学的教授坦尼鲍姆讨论了他为Unix操作系统编写的教学辅助工具————Minix操作系统。Minix同时也是一个小型的翻版Unix系统。读完了Minix的介绍,了解了Unix系统的理念,知道了这个强大、简洁、漂亮的操作系统能干什么之后,我很快就决定弄一台电脑来玩Unix系统。到时我会把这个Minix系统放上去跑,这是我能找到的唯一一个相对有用的Unix系统版本了。
通过读这本书,我逐渐了解了Unix系统,对Unix系统的热情也就越来越高。坦白说,我对Unix的热情从来没有淡过。我希望你们也能对某些事情说出同样的话。
从Unix开始
1990年秋季学期开学的时候,赫尔辛基大学拥有了它的第一个Unix操作系统。20世纪60年代后期,这个强大的操作系统诞生于AT&T
(美国电话及电报公司)的贝尔实验室,但随后在其他地方逐渐发展起来。我上大学的第一年,我们用的是一台VAX电脑,跑的是VMS系统。VMS是个糟糕透顶的操作系统。你要是用上了这个系统,肯定说不出“真棒,我想在家也装上这个系统”之类的话。它只能让你这样说:“哼,这玩意儿到底怎么用啊?”这个系统用起来特别麻烦,也没有多少工具。你甚至没法轻易地在VMS系统上看出一个文件的大小。不过,VMS系统非常适合某些操作,比如操作数据库,这一点倒毋庸置疑。但总而言之,它不是那种能让你拍案叫绝的操作系统。
于是学校意识到,是时候淘汰VAX和VMS这样的旧东西了。当时学术界对Unix系统已经越来越感兴趣了,所以学校就买了一台跑Ultrix系统的MicroVAX电脑。Ultrix系统是DEC公司(美国数字设备公司)发布的Unix系统版本。这算是学校初次试水Unix操作系统吧。
还是在夏天的时候,我已经等不及想把我在教科书上学的知识在Unix上做实验,而且对我即将在Unix系统上做的探索感到特别兴奋,当然我得先把那台386电脑弄到手才行。但是我没有办法一次凑齐18000芬兰马克(18000/5=3600美元)去买这台Unix系统了。我知道,等到秋季学期开学,我就能用Sinclair QL电脑接入学校的Unix系统了。
于是,整个夏天我就做了两件事。其一是把719页的《操作系统:设计与实现》读了多遍;其二,除了第一件事以外什么都没做。可以这样说,那本红色软封皮的教科书住到了我的床上。
赫尔辛基大学给这台MicroVAX电脑配了16个授权用户。也就是说,“C语言与Unix”这门课只能招32个学生————我想他们是这样考虑的,白天给16个学生使用,晚上给另外16个使用。老师跟我们一样,对Unix也不熟悉。他一开始就很坦率地告诉了我们这点,所以这也不是什么大问题。不过他只会提前预习下一章,但有时候我们会提前跳着读后面三个章节。于是上课就变成了一种师生比赛,学生们向老师提一些三章后才学到的问题,看能不能把老师问倒,看他是不是已经读到了那里。
Unix系统的独特之处,就在于它所追求的一整套基本理论。它是一个既干净又华丽的操作系统。这个系统有“进程”这样一个概念,做任何事情都有一个进程。我举个简单的例子吧。shell命令是一个输入后可以访问操作系统的命令,这个命令在Unix系统里不像在Dos系统那样已经嵌入到操作系统中。它只是一个任务,和其他的任务没什么两样。这个任务就是读你的键盘动作,然后回写到显示器上去。在Unix系统上,任何事情都是进程使其发生的。此外,就是文件的概念了。
正是这个简单的设计激起了我和大多数人对Unix系统的兴趣(好吧,不是大多数人,至少我们这些极客们被吸引住了)。几乎所有你在Unix系统上做的事情都是由6个基本操作完成的。通过这6个基本的系统调用,你几乎可以在Unix上完成所有事情。
Unix系统有一个fork的概念,这也是Unix系统的基本操作之一。当一个进程调用fork指令的时候,它就把自己给复制下来了。这样你就有了两个一样的进程,新建的子进程一般用来执行另一个进程————用一个新的进程替换掉它自己(这就是exec系统调用)。这就成了系统的第二个基本操作。接着就是另外的四个系统调用————打开(open)、关闭(close)、读取(read)、写入(write),都是用来访问文件的。这6个系统调用组成了Unix的基本操作,从而构成了Unix系统。
当然,要是往细了说,还得有数不清的系统调用才能完成各种任务。不过,只要你能明白这6个基本的系统调用,你就能掌握Unix系统。Unix系统的美妙之处就在于,就算你要创建复杂的任务,也不需要特别复杂的接口。只要用一些简单进程之间的交互,就可以创建任何复杂的任务。你要做的,就是在简单进程之间,创建它们的交流渠道————Unix语言里面叫做“管道”,这样就能解决创建复杂任务的问题了。
在一个讨人厌的系统里,你想要做任何事情,都需要一些特殊的接口。而Unix系统恰恰相反,它直接把建筑构件给你,而这些构件足以用来执行任何任务。这就是所谓的“干净的”设计。
另一方面,Unix系统还有一个“小即是美”的理念。它有一套简单构件,可以组合成无限复杂的表述。其实物理也是同样的道理。通过实验,可以找到一些基本的规律,而这些规律本身都是相当简单的。其实,物理的复杂性来自于简单规律之间各种令人难以置信的相互作用。
Unix系统的简洁并不是天生就有。要知道,这个有着建筑构件概念的操作系统,可是AT&T
贝尔实验室的丹尼斯·里奇和肯·汤普逊幸幸苦苦花了大气力写出来的!你也千万别把简洁和容易混为一谈。简洁需要良好的设计和卓然的品位,要做到简洁可一点都不容易。
和电脑上很多其他的东西一样,它的起步也和游戏有关。一开始是有人想在PDP-11电脑上玩游戏————其实就是丹尼斯和肯想要玩“星际战争”,于是Unix系统就这样被开发出来了。正因为这个操作系统不是个正式的项目,AT&T
公司也就没有把它看做是一个商机。事实上,AT&T
公司是家受到一定程度管控的垄断企业,它不能销售计算机。所以Unix系统的创始人把操作系统连带着源代码许可证书都免费发布了出去,尤其是给了很多大学。他们自己也没当回事。(肯·汤普逊于1969年编写了第一个版本的Unix操作系统,丹吉斯在1971年以肯·汤普逊设计的B语言为基础开发出了c语言,肯·汤普逊和丹尼斯在1973年用C语言重写了Unix系统)
但Unix系统在学术界摇身一变,成了一个大项目。到了1984年,AT&T
公司被分拆了,终于获得许可能够经营计算机业务了。而这个时候,各大学里的电脑专家,尤其是加州大学伯克利分校的电脑专家,他们在比尔·乔伊和马歇尔·柯尔克·麦库西克等人的指导下,已经研究和改进Unix系统好几年了,但并没有多少研究过程或成果被记录下来,因为人们并不会在这些事上下功夫。
但到了20世纪90年代初,Unix系统已经成了所有超级计算机和服务器的头号操作系统了。它已经是个大买卖了。但还是有问题:当时Unix操作系统存在大量的相互竞争的版本,而且这种问题直至今天仍然存在。其中一些衍生自AT&T
公司自己严格控制代码的版本(也就是所谓的“V系统”),也有一些是从伯克利大学的BSD版本衍生出来的,另外还有一些以上两个版本的结合体。
当时有一个BSD的衍生版本的确值得一提。那就是比尔·乔利兹在BSD代码的基础上开发的386BSD项目,随后它被发布到了互联网上,后来又派生出了几种风格各异且免费开放的BSD————NetBSD、FreeBSD和OpenBSD,在Unix圈内引起了极大的关注。
于是乎,AT&T
公司突然醒过味儿来,告了伯克利大学一状。原代码的确一直都是属于AT&T
公司的,只是大部分的后续开发是在伯克利大学完成的。加州大学的董事们声称他们有权发布他们的Unix版本,或是以象征性的价格销售出去。他们还证明自己做了大量的后期开发工作,基本上已经相当于重写了AT&T
公司所提供的代码。后来,Novell公司买下了AT&T
公司的Unix系统,这场官司就此了结。于是,Unix系统的一部分不得不从AT&T
分离出来。
与此同时,一个新系统正好遇上了这场争端,从而赢得了时间让自己成熟并发展起来。可以这么说,这场官司正好让Linux系统赶上了抢占市场的好时机。瞧,我自己说过头了。
既然已经跑题了,那我不妨再说一说这件事。Unix系统就是出了名地能吸引那些边缘电脑迷。这个不用争论了,事实就是这样。
别忘了,Unix的早期发展大多发生在20世纪60年代末与70年代初,那时我还睡在我祖父母公寓的洗衣篮里呢。他们就是一群嬉皮士,只不过是技术嬉皮士。“Unix免费共享”(Unix-must-be-free)这个理念,其实主要还是和当时的时代环境有关,并不是操作系统本身的特质。那是个理想主义盛行的时代,到处都是改革、打破权威、自由恋爱。于是,Unix系统相对的开放性(尽管当时是因为商业利益不大才开放的)就已经让这群人特别着迷了。
我第一次接触到Unix系统开发的一面,大概是在1991年吧,那时候拉兹·维泽尼尔斯非拉我去赫尔辛基理工大学参加一个活动。大家都知道,这所大学其实并不在赫尔辛基,而是在赫尔辛基毗邻的埃斯波。他们起这个名字,就是想和大城市联系起来,哪怕只是个名字而已。那场活动的主讲人是理查德·斯托曼。
理查德·斯托曼算得上是自由软件的缔造者了。早在1984年,他就已经着手研究一个可以替代Unix的系统。他把这个系统叫做“GNU”。GNU是“GNU系统不是Unix系统”(GUN is Not Unix)的首字母缩写。这是一个递归式的首字母缩写词,即缩写词也出现在全称里。这种循环首字母缩写的冷笑话只有在计算机圈内才有市场,一般人都不觉得好笑。极客们总是能产生很多这样的笑料。
更重要的是,RMS(理查德·斯托曼喜欢别人这样叫他)还写了《自由软件联盟宣言》和自由软件授权证书GPL(通用公共许可证)。他倡导开放源代码的概念,完全是有意为之。这点和Unix系统不同,要知道,当年Unix的开源开发可是处于偶然的。
我得承认,我并不太熟悉社会政治问题,但RMS却非常重视这些问题。我对他创立的自由软件基金会以及该基金会的主张也不是特别了解。说实话,我不太记得1991年他那场演讲的内容了,这也说明那场演讲没有对我产生多大的影响。当时我只对技术感兴趣,政治就免了吧,家庭政治已经够我受的了。不过拉兹是个理论家,于是我也就跟着他去听了听。
在理查德身上,我平生第一次看到了典型的蓄着长发、胡子拉碴的黑客形象。当时,这样的人在赫尔辛基还不多见。
虽然我未能透彻理解那场演讲的内容,但多少还是从中受了些启发。毕竟在后来,我给Linux系统采用的也是GPL许可证。
第一台386和终端仿真
1991年1月2日,是圣诞假期过后的第一个工作日,商店开始营业。刚过完的圣诞节和我的21岁生日,是我得钱最多的两个日子。
我手里就抓着圣诞和生日的钱,算了一笔经济账,做了一个非常重要的决定:买一台价格18000芬兰马克(18000/5=3600美元)的电脑。但我手头没有那么多钱,于是我打算先付三分之一,剩下的赊账慢慢付。
我去的是一家小店,就是那种夫妻店,但是这家店只有丈夫在经营。我不在乎电脑的品牌,所以就随便挑了一台白色的杂牌电脑。老板递来一张价格表,上面列了可兼容的CPU种类、内存大小和硬盘大小。我想要最好的配置。我要4MB的内存,不要2MB的;我要33MHz的CPU,虽然16MHz的CPU买下来也能凑合着用,但我偏不,我就是想要高配。
我只要告诉他们你要的配件,他们就会给你组装好。放到现在这种互联网与快递十分发达的时代来看,这种交易方式还挺古朴的。店家说三天后就可以去拿,但对我来说,这三天过得像一个星期那么长。1月5日,我让爸爸开车帮我一起把这大家伙运了回来。
这台电脑附带了一个简化版的DOS系统。我想在这台电脑上跑Minix版本的Unix系统,所以就订购了一个,而这个操作系统居然花了一个多月时间才运到了芬兰。这个系统的价格是含税169美元,还要算上汇率,再加上别的费用什么的。当时我就觉得,这简直太过分了。老实说,我现在还这样觉得。这漫长的一个月,我非常沮丧地等着收货,好像过了有6年那么长。即使是在等着买PC机的那几个月里,我都没有这样沮丧过。
终于在一个星期五的下午,Minix系统到了。当天晚上我就给装上了。要想在电脑上安装这个系统,前前后后得用16张软盘。我花了整个周末来熟悉这个新系统。我了解了这个系统的优点,但更重要的是,我也知道了它的缺点。为了弥补系统的不足,我从学校电脑上下载了一些用惯了的程序。总共花了一个月的时间,我才把这个操作系统打造成我的专属系统。
Minix系统有很多地方让我很失望。最让我不满意的就是它的终端仿真程序。终端仿真对我来说非常重要,因为我之前就是用这个程序和学校的电脑进行通信的。每次想要接通学校的电脑,我都要依赖这个终端仿真程序,让我的电脑去模仿学校的电脑。
于是我启动了一个项目:编写自己的终端仿真程序。我不想在Minix系统下写这个程序,而是想在裸硬件上写。这个项目也是个好机会,使我可以趁机了解一下386电脑的硬件工作原理。
因为这次我是在裸机上编程的,所以得从BIOS系统入手。这是电脑在启动的时候先读入的ROM代码。它既能读软盘,也能读硬盘。在这个项目中,我是用软盘来运行这个程序的。BIOS系统会读取软盘的第一个扇区,然后开始运行上面的代码。这是我的第一台PC机,所以我得先搞清楚这个过程究竟是怎么完成的。这个过程一般是在“实模式”下发生的。但是为了更好地利用整个CPU并进入32位模式,你最好让电脑在“保护模式”下启动。要实现这个目的,就得作大量复杂的配置。
这么一来,你要在裸机上写一个终端仿真程序,就得先知道CPU的工作原理。说实话,我用汇编语言写程序,一部分的原因就是为了要了解CPU。另外,你还需要了解如何写入屏幕,如何读取键盘的输入,如何读写Modem(调制解调器)等。
我打算实现这两条独立的线程:用一条线程读取Modem数据,然后将其显示到屏幕上;用另一条线程读取键盘数据,然后写入Modem上。这样就存在两条双向的管道。这种进程叫做任务转换,而386电脑的硬件正好支持这种进程。我觉得这是个很不错的主意。
我最先写的测试程序,是使用一条线程把字母A写到屏幕上,用另一条线程来写字母B(我承认这个程序听起来不怎么样)。通过程序,我让它在一秒钟内多次执行,并用定时器来中止程序运行,于是程序就这样跑起来:屏幕上先是显示着一长串的字母A,突然之间就变成了一长串字母B。从实用性上来看,这个程序的确没什么用。不过要看我的任务是不是可行,这倒是个好办法。边做边学,做到这一步大概花了我一个月的时间。
最后我终于能更改这两条线程了,从而让它们一条读Modem然后显示到屏幕上,另一条读键盘然后写入到Modem上,就这样,我终于有了自己的终端仿真程序。
我想看新闻时,就在电脑上插入这个软盘,然后重新启动电脑。这样就你能通过这个程序连接上学校的电脑看新闻了。要是我想要改进这个终端仿真程序包,就会在电脑启动的时候进入Minix系统,然后用它来编程。
我顿时感到特别自豪。
当时是三月份,或者四月吧,不知道彼得盖坦大街上积雪是不是都化成雪泥了————我不知道,也不在乎。大部分的时候,我都穿着睡袍,和我那台不招人喜爱的电脑缠绵在一起。窗户上那块厚实的黑窗帘遮得严严实实,把我和阳光隔离开来(外面的世界就更不必说了)。每个月我都得想方设法去给这部新电脑付款,这笔欠款得在三年内付清。当时我还不知道,再过一年这笔款项就可以不用再付了。因为一年之后,我已经开发出了Linux系统,到时候我的观众可就不只是萨拉和拉兹了。一年之后,现在和我一起在全美达公司工作的彼得·艾文,为了帮我付清电脑的钱,在网上发起了募捐活动。
人人都知道,我并不指望通过Linux系统赚钱。于是大家觉得:要不我们凑点钱,帮林纳斯把电脑钱还清吧!
这种感觉好极了。
我的测试程序变成了一个终端仿真程序包,Linux操作系统也就这么开始诞生了。
如果你见过一个人,遇到问题并久久被其困扰的时候,他两眼发直,听不见你说话,甚至连一个简单的问题都答不上来,其实他是在全神贯注思考眼前的问题,为了解决问题,他废寝忘食也要想出办法,而且从不轻易言败;当然,他可能会受到干扰,日常生活里这种事不可避免,但是排除干扰后,他还能愉快且固执专一地继续思索————这时候,你就知道林纳斯是什么样的人了。
linus的妈妈:林纳斯是一个什么样的儿子,我想我已经回答了————养大他一点都不幸苦,真的。他就喜欢挑战难题,只要遇到一个问题,接下来的事情他都会自己处理了。当他年少时开始专注于电脑后,他就更不需要什么额外的养育和教导了。就像以前我和萨拉经常说的那样,只要把林纳斯和一台能用的电脑关进一个黑乎乎的小屋里,再时不时扔点儿面条进去,他就会非常满足了。
编程的美妙
为什么对编程这么狂热,我自己也解释不来。我姑且说说看吧:在编程的人看来,编程是世上最有意思的事情了。它要比国际象棋之类的游戏复杂得多,你想要什么规则都可以自己设定。按照你定下的规则,它的结果该是什么,就会是什么。
不过,似乎在外行人看起来,编程简直是地球上最无趣的事。
编程刚刚开始会令人觉得特别刺激,这个原因倒很好解释:因为你让电脑干什么,它就干什么,没有毫厘偏差,并且永远服从、毫无怨言。
这本身就很有意思。
虽说一开始是电脑的盲从让你对编程入迷,但是单靠这一点,不足以让你真正喜欢上编程。事实上,电脑的盲从很快就会让编程变得无趣。编程真正让人欲罢不能的魅力是:你想要让电脑干什么事之前,必须先弄清楚,怎么样才能让它这么干。
我个人觉得,计算机科学和物理科学有不少相似的地方。它们都是在一个非常基础的层面上,探讨整个学科的运作原理。当然,不同的是,在物理科学上,你得去弄清楚这个已存在的世界是如何正常运转的;而在计算机科学上,你得从零开始创造出一个新世界来,而且还得设法让它正常运转。在计算机的世界里,你就是创世者,对这个世界里发生的一切都有最终决定权。如果捣鼓得足够好,你就是这个世界的上帝。当然,这个上帝的地盘就比较小啰。
我这么说,恐怕已经得罪地球上近一半的人了。
不过事实就是如此。你在电脑上创造出属于自己的新世界,而唯一的限制就是电脑本身的性能,还有,还有一点在今天尤为重要,那就是你自己的能力。
还记得学校里那个总能答对问题的家伙吗?他的答案总比其他人来得快,恰恰是因为他没有刻意去寻找正确答案。他并不知道问题本该以什么样的标准思路来解决,只是以一种合理的思路来考虑这个问题。因此别人一听到他的答案,就觉得很合乎逻辑。
编程也是如此。你可以用蛮劲解决问题,跟问题慢慢磨蹭,直到它不再是问题为止,看谁磨得过谁。不过这是个愚蠢的办法。或者你也可以找到正确的方法来解决问题,这样问题就会立马消失。换一个角度看问题,你会突然灵光一闪:问题之所以成为问题,只是因为我原先看问题的方法不对。
要证明这一点,计算机科学方面似乎没有什么好例子,不妨举一个数学的例子吧。故事是这样的,伟大的德国数学家高斯那时候还在上学。有一天,他的老师觉得课本上的题太无趣,为了不让学生们走神,他让大家把从1到100的数字加起来求和。老师原以为这群小孩子要花一整天的时间来做这道题,没想到这才过了五分钟,我们这位初露头角的小数学家就给出了正确答案:5050。他没有从1到100一个数字一个数字简单相加,因为要那样计算,可真是既折腾人又愚蠢到家。原来,他发现1加100是101,2加99也是101,3加98还是101,一对对算下去,知道50加51得到最后一个101。没多久的时间,他就注意到一共有50对101,于是答案就出来了,就是5050。
这个故事也许是虚构的,道理却十分浅显:伟大的数学家不会采用既繁琐又无趣的方法解决问题,因为他们能理解问题背后的真正内涵,并且利用这个内涵找到更为简便的方法,从而得出答案。这个道理放到计算机科学上,绝对也是一样的。没错,同样的问题,你可以随便写个程序来求和,就现在的计算机技术来看,这就跟打个响指一样简单。但是只有才思敏捷的伟大程序员才知道真正的答案。他们知道怎么样采用全新的方法,写出一个漂亮的程序来攻下某个问题,并且最终会证明这个新方法就是正确的方法。
我还是很难解释清楚,闭门三天冥思苦想却徒劳无功,找不到一个漂亮的好方法来解决难题,这编程到底有什么好着迷的?其实,一旦找到了解决问题的那个漂亮方法,那种感觉就会是无与伦比的。
长了腿的终端仿真器
我的终端仿真程序像是长了腿似的。我经常用它登入学校的电脑,查阅电子邮件,或是参加Minix新闻组的讨论。但问题在于,我还想下载和上传文件。也就是说,我必须能把东西保存到磁盘上。为了做到这一点,终端仿真程序就需要一个磁盘驱动。此外,我还需要一个文件系统驱动,否则就没有办法查看磁盘组织结构,也就无法将下载的内容保存成文件了。
在那个节骨眼上,我差点就放弃了。因为这么干下去,实在是太费劲了,也不值得。不过除此之外,我也没有其他像样的事情可做了。而那个磁盘驱动和文件系统驱动的项目,倒也算有趣。所以我告诉自己,那就干这个吧。于是,我写了一个磁盘驱动。另外,因为我要把文件保存到Minix文件系统上,而Minix文件系统本身的文档都已经非常完善,所以我就让自己的文件系统能和Minix文件系统兼容。这样,我就能读取在Minix系统下创建的文件,并把它们写入到同一个磁盘上,而且这样一来,Minix系统也才能够通过我的终端仿真读取我创建的文件。
这个项目废了我很大力气,我的日程安排变成了编程————睡觉————编程————睡觉————编程————吃饭————编程————睡觉————编程————洗澡————编程。随着项目逐渐完善,我意识到它越来越像一个操作系统了。于是我改变了想法,不再把它当成一个改进型的终端仿真程序,而是一个可运行的操作系统。这个转变应该发生在某次我被马拉松式的编程催眠了的时候,当时是白天还是晚上,我也说不清了。反正上一秒我还穿着破旧不堪的睡袍,为了终端仿真程序能有更多功能而全力写代码,下一秒我就突然意识到,既然它的功能已如此之多,那么只须再加把劲,它就能破茧成蝶,变成一个新操作系统了。
我把它称为“终端仿真程序的GNU-Emacs”。GNU-Emacs最初只是一个编辑器,不过它的创建者们给它增加了一大堆功能。他们的本意是想它成为一个可通过编程进行自定制的编辑器,没想到这个可定制性却反客为主,令其他功能黯然失色。于是GNU-Emacs就变成了一个地狱来客。除了厨房水槽,它几乎什么都有。就因为这样,GNU-Emacs编辑器有几次还真用了厨房水槽的图案来做图标呢。这个编辑器出名之处还在于,由于需要进行大量的编程工作,它所拥有的函数数量远超其他任何编辑器所需。我的终端仿真程序也是这样,它的功能不断地被我扩展,已经不再是一个存粹的终端仿真程序了。
Linux的诞生
我一开始只想编写一个能替代Minix的操作系统。它倒不必比Minix强多少,只要能干平常在Minix上干的事,再能干点别的小事,我就很满足了。举个例子吧,Minix系统不仅是终端仿真程序做得很糟糕,它还不能进行任务控制:你没有办法把暂时不用的程序放到后台去。不过,Minix系统对内存的管理倒是做的十分简洁。顺带提一下,苹果Mac OS系统的内存管理到今天也还是一样,极其简单。
要开发一个操作系统,就要弄明白那些操作系统调用的功能,然后写出自己的程序,以自己的方式去实现那些系统调用。一般来说,一个操作系统有好几百个系统调用。有些系统调用涉及了不少函数,有些则比较简单。有些基础系统调用不光复杂,还得依靠许多基础设备的支持。就拿“写入”和“读取”这两个系统调用来说吧,如果需要将数据写入磁盘或者从磁盘读取数据,就得先创建一个磁盘驱动程序。又比如说,要执行“打开”这个系统调用,就必须创建一整套文件系统层来分析文件名,并通过该系统层在磁盘上查找文件。单单写一个“打开”的系统调用,就得花上好几个月。不过,一旦写出了一个调用,再写其他函数就可以借鉴这一套代码了。
Linux早期的开发就是这样完成的。那时候,为了把我感兴趣的系统调用程序一个个挑出来,看看能不能捣鼓出一些能运行的东西,我不仅要去看Sun的Unix系统的说明手册,而且还要查阅成堆的其他资料,看看能不能找出需要的代码标准。那个过程可真叫人沮丧啊。
我之所以沮丧,是因为项目没有什么变化,基本上看不出什么进展。虽然可以做几个简单的测试程序,来测试自己刚加上的代码是否会造成什么问题,不过这种测试收敛甚微。捣鼓了一阵子没反应之后,你就会心灰意懒,也不想回头去翻查书里那一串串系统调用的代码,查看哪儿出了问题,自己就先放弃了,一切也就白干了。一个程序要想真正能够运行,它得足够完整才行。首先,需要运行shell程序,要不然运行其他的东西就非常困难。而且,shell程序本身包含了许多必须的系统调用。运行shell程序,通过它列出的反馈信息,你就能列出有哪些系统调用还没有实现。
在Unix系统中,shell程序相当于所有程序的母程序。只有运行了shell程序,其他二进制程序才能运行————二进制程序是以计算机可识别的许许多多1和0为符号编写的程序。无论用何种语言编程,源代码一经编译之后,就会生成二进制程序。shell程序首先使得你能登录系统。当然,实际上在Unix系统中,你运行的第一个程序通常被称为init进程(初始化进程),但init进程需要很多基础设备的支持才能运行。它是一种控制工具,监视其他正在运行的程序。但如果其他程序都还不能运行,init进程也就没什么用。
因此,我的操作系统内核首先要做的不是启动init进程,而是启动shell程序。之前提过,我已经实现了大概25个系统调用,但shell程序才是我真正要运行的第一个程序。但我没有去编shell,我下载了一个Bourne shell的克隆版,叫Bourne-Again shell,把它复制在一张磁盘上。它是Unix系统早期的一个shell,可以在互联网上免费下载。这个名字来源于一个糟糕的双关语:编写Bourne shell的人名叫伯恩(Bourne),而这个克隆版叫做Bourne-Again shell(Born-Again:再生),这也就是后来通常被称为bash的shell。
在试着从磁盘载入一个真正的程序时,磁盘驱动程序或者载入程序都会不可避免地产生bug,因为它们往往无法解析读取到的内容。于是就会在屏幕上显示反馈信息,告诉你程序的运行情况。这种情况非常重要,你可以从中了解到哪个环节出了纰漏。
然后,我进入了一个新的阶段。当我载入shell程序,屏幕上就会生成个反馈信息,告诉我有哪些必要的系统调用还没有实现。我启动操作系统并运行shell程序,接着就能收到一些类似于“512号系统调用没有执行”的反馈。我日夜盯着系统调用的反馈,试着去辨别哪一条调用出了错。比起机械地参考书里的系统调用列表,再一一从电脑上实现,这个过程可好玩多了。你能亲眼看到每一条调用的实现。
大概是八月底或者九月底的时候吧,我终于让shell程序跑起来了!完成了这一步,后面的工作可就轻松多了。
这件事可不得了。
当shell程序运行妥当以后,我就马不停蹄地开始编译其他几个程序,像cp程序(复制)或者ls程序(获取目录列表)等。这些程序跟shell程序相比,简直是小菜一碟。做这些程序所需要准备的,在做shell程序时已经备好了。一旦shell程序运行了,就等于进度是从接近于0转眼间窜到100,因为所有准备工作都已到位。有时,我会有一种创世的错觉,因为在此之前,还没有什么能真正运行起来。
没错,我感到非常满足。这种满足感非常重要,因为那个夏天我除了在电脑前工作,其他的什么也没干。这一点儿都不夸张。每年的四月到八月,绝对是芬兰一年之中最美妙的时光。大家或者驾船在群岛间游玩,或在海滩上晒日光浴,或在避暑别墅里蒸桑拿。而我却没日没夜地忘情工作,已不辨日期。那些厚重的黑色窗帘不分昼夜地把阳光和整个世界挡在了窗外。那些白天————也可能是晚上,我会滚着下床,径直坐到离床不到60厘米的椅子上,投向电脑的怀抱。爸爸显然整天催促妈妈让我找一份暑期工作,不过妈妈倒不在乎:因为我很让她省心。萨拉对我有点恼火,因为那段时间电话线总是被我占着上网。毫不夸张地说,我的世界里就只有电脑,我和电脑以外的世界没有任何联系。好吧,也许每个星期也会有那么一次,朋友路过我家敲敲我的窗户。要是我刚好没有在捣鼓什么重要的代码,我就会让他进屋。我们会喝喝茶,或者挤在客厅里看个把小时的MTV。对了,现在想起来,尤科也时不时来敲我的窗户,我们就会出去喝喝啤酒,玩玩台球什么的。老实说,那时候我的生活也就这样,没别的了。
可我一点也不觉得自己是电脑呆子————那种可悲的、脸上惨白的失败者。shell程序能够运行,意味着我已经为一个可行的操作系统打好了基础。而且我当时乐在其中。shell程序运行成功后,我开始测试它的内置程序。接着我又编译了足够多的新程序,这下总算能实实在在干些正事了。我从Minix系统中取了所有能用的东西,但我把shell程序移动到一个特殊的分区,那个分区是我专门为新操作系统准备的,私底下我管这个系统叫Linux。
开放源代码
发件人:torvalds@klaava.Helsinki.Fi
收件人:comp.os.inix
主题:在Minix系统中你最想看到什么呢?
摘要:关于我的新操作系统的小小民意调查
信息编号:<1991Aug25.205708.9541@klaava.Helsinki.Fi>
使用Minix系统的朋友们,大家好!我正在编写一个(免费的)能用在386(486)AT机上的操作系统(纯粹个人爱好,不是像GNU那种大型的专业系统)。打从四月份起,我就开始酝䣼这个系统了,现在它应该快到火候了。因为我的操作系统和Minix系统有点儿雷同(特别是文件系统的物理排列方式,主要是因为它实用),所以我希望能得到一些你们的反馈意见。在使用Minix的过程中,你们有什么满意或者不满意的地方,都欢迎来信提出。
我已经移植了bash程序(1.08版)和GCC编译器(1.40版),似乎一切正常。也就是说接下里的几个月我会做出一些实用的东西,所以我想知道,大多数人在系统特性方面有何需求。什么意见都行,不过我可不能保证每一项意见都能实现:-)
对了,我这个系统不受任何Minix代码的限制,而且它有一个多线程文件系统。它不能移植,而且它可能只支持AT硬盘,因为我手头只有这个:-(
在Minix的用户圈子里,一些操作系统的狂热铁杆对我的系统十分有兴趣。关于Minix系统特性的意见我没收到多少,倒是收到不少其他问题。
给我们再详细介绍一下这个操作系统吧!它需要MMU(内存管理单元)吗?
回复: 需要。
在编写这个系统时,C语言占了多大分量?安装过程有什么困难?这个系统能装在我的Amiga电脑上么。
回复:系统基本上都是用C语言写的,但大多数人也许不会认为我写的是C语言。只要是我能想到的386电脑的特性,都写在这个操作系统里了,写的过程中,我也系统地了解了386电脑。我自己写的一些“C”文件,说它是汇编程序也差不多。
正如我刚才已经提到的,它需要MMU来进行分页(暂时不能放到磁盘里去)和分段。正是因为分段的功能,所以系统只能用于386电脑。(电脑为每一个任务的代码和数据都留有64MB的分段,也就是说4GB的话,最多能供64个任务使用。有人需要64MB以上的空间存储任务吗?好吧,你真有主见。)
甚至有几个家伙提出想给我的试用版作测试。
到了这最后一步,发布linux基本上是板上钉钉的事了,我很习惯于这样与别人交换程序。真正需要仔细考量的,是我何时能比较放心地向人们展示我的工作成果?或者更准确地说:在什么时候发布,将来回头想起来才不至于感到羞愧?
我想实现的,追根究底就是能有一个编译器和一个实实在在的环境,让我能够在Linux里面自主编程,而不用再依赖Minix系统。尽管如此,一开始当GNU shell程序运行起来的时候,我还是感到骄傲极了,很想让整个世界都看到它。而且,我也想看看大家有什么意见。
当shell程序能够运行时,我已经为操作系统编写了几个基本的二进制程序。虽然这时它还没什么实际用途,但你会发现这和Unix很相似。实际上,它运行起来有点像Unix,但就是蹩脚,相当蹩脚。
我决定把它发布出去,但并未打算公开告知。我只通过私人邮件通知了少数几个人,告诉他们我已经将操作系统上传到了FTP上。这些人里包括了Minix名人布鲁斯·埃文斯,还有阿里·莱姆克。我上传了Linux本身的源代码和一些二进制程序,以便别人拿到系统能直接使用。我还告诉他们要运行整个系统所需要作的准备。因为他们还是需要安装Minix系统才行————386版本的Minix系统,而且还得配备一个GCC编译器。事实上,这个编译器必须是我的版本才能运行,于是我把这个编译器也发布出去了。
给发版的版本编号是有规定的。基本上只是个心理作用。如果你认为某个版本可以拿得出手,就将它的版本号定为1.0。但在那之前的版本,你也可以编上号,以表明在达到1.0版本前还需要完成大量的工作。所以我就琢磨着,把这个操作系统上传到FTP上时,把它的版本号定为0.01。大家也就能明白,这个东西还很不成熟。
是的没错,我清楚地记得那个日子:1991年9月17日。
我发布操作系统的一个主要原因,是为了证明我不是在说大话,我是实实在在做了这件事。在网络上夸夸其谈很容易,吹牛也不用交税。做没做到没什么关系,做操作系统也好,做爱也好,在网络上虚张声势的大有人在。所以,在朝着一大堆人喊话说要编写一个操作系统之后,我还能够说出:“看吧,我可真做出一个来了。我可没有忽悠你们,这就是我的工作成果……”这种感觉真是太棒了!
我还记得有个网友给我发来邮件说,他非常喜欢我的操作系统,然后花了至少一个段落来说明系统的种种优点。紧接着他就告诉我,我的操作系统把他的硬盘一口吞掉了,还说我的磁盘驱动古里古怪什么的。他丢失了所有的工作文件,但还是给予我肯定。能收到这样的邮件真是太有意思了。那不过是个Bug报告,只是那个Bug给他捅了很大的娄子。
这才是我想要的反馈意见啊。我修复了一些Bug,比如那个当内存消耗完了系统就会卡住的毛病。我还做了一个很大的改进,把GCC编译器植入到了操作系统里面,这样我就能编译一些小型的程序了。那也意味着,用户不需要再专门下载我的GCC编译器,也可以直接运行操作系统了。
Linux能换来金钱吗?
10月初我发布了Linux 0.02版本,这个版本修复了上一版的一些Bug,还新增了少量程序。11月,我又发布了0.03版本。
我本可以在1991年底就收手不干了,因为那时我已经完成了大量有意思的工作。虽然并不是说一切已经完美无瑕,但在软件设计这样的世界里,一旦解决了根本问题,你很容易就会对它失去兴趣。我当时正好陷于这种境地,单单给软件修复Bug可拴不住我的心。幸好接下来发生了两件事,我才有了继续下去的动力:第一,我不小心损坏了存放Minix系统的分区;第二,人们不断给我发来反馈意见。
当时,我虽然能进入Linux系统,但仍是以Minix操作系统作为主要开发环境的。我在Linux操作系统环境下做得最多的事,是用我写的终端仿真程序从学校电脑里查阅电子邮件和浏览新闻。但学校的电脑通常都很忙碌,老是登录不上,于是我写了一个自动拨号程序来登录。就在那年12月的某一天,我忘了用调制解调器拨号,竟然用了硬盘去自动拨号:我应该通过串行线路/dev/tty1来自动拨号的,但却不小心用/dev/hda1去自动拨号了,那可是硬盘分区啊!结果,硬盘分区中一些最重要的数据覆盖掉了,而那个分区恰好是用来存放Minix系统文件的。没错,这意味着我再也无法进入Minix系统了。
事到如今,我只好做出重要抉择:要么重新安装Minix系统,要么放弃Minix系统————反正Linux已经够好了,是时候让Linux大显身手了,Minix系统不用也罢。我可以在Linux这个开发环境中,通过自己编程来编译Linux!如果需要用到Minix上某个功能时,我就把这个功能写到Linux上去。搁着原有的操作系统不用,让我的系统能够成为运行环境,这个想法够前卫吧!这是很重大的一步,于是我把11月底发布的新版本定为0.10版本,几个星期之后,我又发布了0.11版本。
这才是真正意义上的开始:终于开始有人使用Linux系统,并且用来做一些事情了。在此之前,我收到的反馈无一例外都是要求修复Bug,但到了现在,反馈意见就全都是要求我新增一些功能了。我还记得,由于内存不足,我破天荒地出了家门,把内存从4MB升级到了8MB。此外,还有人问我,Linux是否会支持浮点协处理器,为此我还特意出门买了一个。这个新增的硬件让我的电脑实现了浮点数字运算。
12月时,德国有个家伙在尝试编译内核时无法运行GCC编译器,因为他的电脑内存只有2MB,而当时启动GCC需要占用1MB以上的内存。他问我是否做一点改进,让Linux可以用一个比较小的编译器来进行编译,节约内存。虽然我自己觉得增加这个特性没什么必要,但还是愿意为他做这个改进。这个程序叫做“分页到磁盘”(page-to-disk),有了这个改进,哪怕用户的电脑只有2MB的内存,也能利用磁盘增加内存的空间,而不会占用过多内存空间。这个改进是在1991年的圣诞节前后做的。我记得挺清楚,12月23日,我还在尝试着让分页到磁盘程序运行起来。12月24日,程序好像能运行了,但是隔段时间就会让系统崩溃。到了12月25日,程序终于做好了。这可以算是我专门为满足别人需求而定制的首个功能。
我对此非常自豪。
25日那天,我和家人在我爸爸的妈妈家里过节,大家吃着火腿,品尝着几种不同做法的鲱鱼。关于Linux,我一个字儿也没有跟他们提起。Linux用户天天都在增加,其中有些人都来自那些我曾经想去旅游的国家,比如澳大利亚和美国,而如今这些国家的用户却常常给我发邮件。别问我为什么,反正我就是觉得没必要和我的父母、妹妹或者其他亲戚谈论这些事。他们压根儿不懂电脑。我就是觉得,就算我当时告诉了他们,他们也未必明白这是怎么回事。
分页到磁盘程序的确算得上是一大进步,因为Minix根本没有这个功能。这个程序包含在Linux 0.12版本中,是在1992年1月的第一个星期发布的。刚一发布,人们就立马拿Linux和Minix做比较,不止和Minix比较,还和马克·威廉姆斯公司开发的小型Unix版本Coherent做了比较。从一开始,Linux的分页到磁盘功能就让它在竞争中脱颖而出。
从此,Linux声名鹊起。眨眼间,很多原本的Minix用户都改用Linux了。Linux当时虽然还无法实现Minix系统的所有功能,但它实现的功能基本上都是用户最需要的。而且它还有一个杀手锏是用户最为看中的:分页到磁盘程序。有了这个功能,用户的电脑内存再有限,也可以运行比内存还要大的程序。这就意味着当电脑内存不足的时候,就可以将电脑较早前被占用的内存挪到磁盘上,记录下这块内存的新路径,然后继续用这块内存来跑原来的程序。Linux这个特性算是1992年新年伊始的一件大事,火了好几个星期呢。
那时是1月份,Linux的用户从5个人、10个人、20个人,一下子增加到了几百人。之前的那些人经常和我通邮件,我都能叫得出他们的名字,但后来这些新用户我可不认识。竟然有我不认识的Linux用户,当时觉得真有趣。
大约就在那时,网上流传着一则恶作剧。有一封信里说,一个叫克雷格的可怜男孩身患绝症,生命垂危,忽悠网友们给他发明信片表示支持。结果那其实只是某个家伙想出来的恶作剧。我估计根本就没有克雷格这个人,更不用说他得癌症这件事了。但这个恶作剧招来了上百万张明信片倒是事实,所以,当我也向Linux用户索要明信片而不是报酬时,确实有点半开玩笑的意思,我就是要让他们觉得“不会吧,又来一个骗明信片的”。其实,在当时的个人计算机界,共享软件有一个不成文的规定:你要是下载了一款软件,最好能给软件程序员汇上10美元作为报酬。当时我就收到过一些邮件,问我要不要他们给我汇30美元左右过来之类的问题。
现在想来,我要是接受那些钱,也应该能派上用场。当时我的学生贷款大概已经累计到了5000美元,每个月还得再拿出50美元偿还电脑的费用。要是换了别人,也许就会接受那些钱作为编程的报酬,要是能为幸苦工作的单亲妈妈分担点房租就更好了。我当时怎么就没想到这一点呢?这都怪我。
事实上,我之所以拒绝别人的捐赠,也经过一定的深思熟虑。最初发布Linux时,我觉得自己是在循着几个世纪以来的科学家和学者们的脚本前进,而他们的成就也是建立在前人努力的基础上。借用艾萨克·牛顿爵士的话来说就是,“我站在了巨人的肩膀上”。我不仅要将我的软件与他人共享,让他们觉得我的工作是有用处的,而且还想收到他们的反馈啊(好吧,当然也要赞美啦)。他们的反馈意见让我有机会改良系统,要是我反而问他们索要报酬的话,就显得太不知好歹了。我想,要不是在芬兰长大,我可能就不会这么想。在我们老家芬兰,只要是谁显露出一丝贪婪,人们就会猜疑他,如果不算是嫉妒的话。当然了,若不是我有一个顽固的学院派祖父和一个坚定信仰共产主义的父亲,在他们的潜移默化中成长,我肯定也不会干这种不要钱的活儿了。
不管怎么说,总之我不愿意把Linux拿来卖,也不想失去Linux的控制权,也就是说,我也不想其他人把Linux拿去卖。早在九月份我上传第一个版本的时候,就在附带的版权声明上将这一点说得很清楚了。根据19世纪欧洲的《伯尔尼公约》中的规定,作品版权出售之前,原作者一直享有其版权。而作为Linux版权的所有者,我就有权利制定规则:只要不用于出售,用户可以免费使用该操作系统。如果用户对操作系统做任何修改或者改进,必须把源代码无偿分享给他人使用(而不是以二进制代码的形式公开,因为二进制代码无法公开)。所以用户不同意上述规则,则无权复制任何代码或对其进行任何操作。
不妨设身处地想一下。如果你把整整六个月的心血倾注到一个系统上,肯定希望它能有用处,也想从中收获点什么,但你肯定也不想别人拿你的成果白白地占便宜吧。我希望人们能够看到和使用这个系统,并且能无拘无束地修改和完善它,但我同时也想要确保自己能够及时掌握他们所做的任何改动。我希望能一直有权使用源代码,这样的话,一旦有人作出改进,我就可以直接拿来为自己所用。我一直坚信,要使Linux发展成为十全十美的系统,就必须保持免费且开源。一旦牵扯上金钱,一切都会变得波谲云诡。只要不牵扯到金钱,我们这个圈子就不会有贪欲了。
不过,在我把自己说成大慈善家之前,得先提到另外一个影响我决定的关键因素。事实上,为了使Linux系统能跑起来,真得仰仗从网上下载的这些好用的工具————我确实是站在了巨人的肩膀上啊。在这些自由软件中,最重要的要数GCC编译器,它是理查德·斯托曼的智慧结晶,受到通用公共许可证(GPL)的版权保护,GPL也被称为“公共版权”。按照GPL条款规定,钱不是问题,只要有人愿意买,你开价一百万美元都行,但你必须给他相应的源代码;而且,当对方获得或者说买断了你的源代码文件,他也就相应地拥有了你的所有权利和义务。这招相当高明!
因此,我撤下了原来的版权声明,采用了GPL许可证。这个许可证当初是斯托曼亲自撰写的,还有律师帮着审稿(正因为有律师参与,整个文件长度可不短呢)。
新的版权声明随同0.12版本一起发布。我记得发布之后的那天晚上,我整晚都合不上眼,忐忑不安,担心Linux系统牵扯到什么商业利益而紧张不已。现在回想起来,这种担心有些多余了,因为在当时,Linux能涉及的商业利益确实微乎其微。但不知怎的,反正我就是不放心。那时我主要担心的一点(现在依然放心不下),就是某些人会将Linux占为己有,而且丝毫不尊重我的版权。当时我还担心,要是有个美国人侵犯了我的版权,我还真不知道该告谁去。到现在我还是很担心这个事。状告某人侵权不难,但我担忧的是有些人还是会这样做,除非有相关法令明文禁止此类行为才成。
与此同时,一种挥之不去的担忧笼罩着我。有些国家的企业并不认可GPL许可证的效力,实际上,有的国家的法律体系中没有相应的法规阻止他们侵犯版权。确切地说,他们觉得严惩侵权行为太费事,并不划算。一些大的软件公司曾经为维权付出了很大的努力,但收效甚微。还好,事实缓和了我的担忧。虽然的确有人会侵犯我的版权,但总归是暂时的,他们实际上也尊重我的版权,而且会在系统改进上给我反馈,帮助我改善操作系统的核心功能。他们是参与内核升级过程中的一份子,这是在助我一臂之力。相反,那些漠视GPL的人从升级中也占不到什么便宜,他们的顾客也会离他们远去。起码我是这么希望的。
总的来说,我是从两个方面看待版权问题的。比如说,有人每月挣50美元,你能要求他花250美元来买软件吗?用这5个月的薪水买吃的,然后拷贝一盘盗版软件,我觉得也无可厚非。从道德上来说,这种侵权行为是说得过去的。但追究这些“侵权者”的行为既不道德,也不明智。当这种事发生在Linux系统上,要是某个人只不过将Linux用在私人用途上而没有遵守GPL原则,有谁会在乎这种事呢?但要是有人唯利是图,拿Linux去赚外快,不管这事发生在美国还是非洲,也不管侵权程度如何,我都觉得这是不道德的。
贪婪从来就不是什么好事。
Minix与Linux之争
引人注意倒不全是好事。Linux系统浮出水面并且还可以取代Minix系统,使得Minix的设计者安德鲁·坦尼鲍姆不断对Linux发表攻击言论。虽说我从来都不擅长和别人争吵,但也不得不站出来为Linux和我的个人尊严与他对抗。我们都是书呆子,所以一切论战都是通过电子邮件来进行的。
当时有一帮计算机学者主张以微内核方式创建操作系统,安德鲁就属于该阵营。他采用微内核理念开发了Minix系统,而他当时手头正在做的Amoeba系统,用的也是微内核。
在20世纪80年代末90年代初,微内核理念十分盛行,而Linux系统的成功对它造成了威胁,于是安德鲁就不断地在网上发帖子抹黑Linux。
微内核理论认为,操作系统非常复杂,所有必须通过模块化来降低其复杂性。微内核理论的原则是:内核作为操作系统的基本核心,本身的功能越少越好,它的主要功能应该只是通信。电脑所提供的各种不同服务,都要通过微内核之间的通信渠道来实现。所以,采用微内核方法,就得尽量分割操作系统的问题空间,让每个问题空间都尽量简单。
我觉得这种方法很愚蠢。没错,每个模块可以做得很简洁,但比起让内核担负所有功能来说,模块间的交互可就复杂多了。Linux系统采取的就是让内核担负起所有功能的做法。想想人的大脑就知道了。大脑中每一个单独的部分都不复杂,但是它们之间的相互作用让大脑成为一个高度复杂的系统。这是一个“1+1>2”的情况。 举个例子,把一个复杂问题一分为二,然后就认为两个“半问题”的复杂程度都只有原先的一半了,但你忽略了一个事实:这两个“半问题”之间的联系你还没考虑呢!于是问题又复杂起来。 微内核原理是要把内核分割为50个独立模块,每个模块承担1/50的复杂性。但这些人都忽略了这个事实:各独立模块之间的联系比原来系统要复杂得多,更何况,每个模块也并不是那么简单。
以上这些,就是我反驳微内核理念最重要的理由。他们想要实现系统简化,但却搞错方法了。
相比之下,Linux系统则要小巧得多,运行起来也十分简单。它并不采用微内核所倡导的那种强制的模块化结构,所以跟Minix比起来,Linux执行什么任务都更为直截了当。早些时候,我就发现Minix有一个毛病,比如说当系统上同时有5个程序运行,它们分别要读取5个不同的文件,那么这5个任务得一个个执行。换句话说,5个进程会向文件系统发送5个请求:“我能读取一下某个文件吗?”而文件系统的后台程序是这样工作的:先接受一个请求,作出回应,然后再接受下一个请求,再作出回应……
Linux系统是个宏内核系统。在Linux下,这5个进程会分别向内核发起一个系统调用。内核必须非常仔细才不会混淆了这几个调用,但是它会有条不紊地将资源分配给这些进程,让它们能同时顺序地执行各自的任务。这个优势让Linux系统用起来更加快捷和高效。
Minix系统的另一个毛病是,虽然你拿到了源代码,但许可证同时给了你诸多限制。就拿布鲁斯·埃文斯来说吧,他为Minix系统做了十分重要的改进,让Minix用起来更为顺手,但是因为Minix系统对修改权限做了限制,他没法把他所作的改进直接合进到原系统上,只能以补丁的方式开放出来。从实用性的角度看,它就造成了诸多不便。
最后的冲刺
当越来越多的人不再把Linux当成一个玩具,而是当成一种依靠之后,Linux就开始像回事了。用户不再只是拿Linux摆弄着玩,我这才意识到,要是Linux出了什么岔子,我可是得负责任的。或者说我至少感觉到了自己肩上扛着的责任了(我现在还是这么觉得的)。1992年之前,Linux顶多算是个玩物,就在那一年一下子变成了某些人生活中不可或缺的一部分,成为他们的生计或者生意。
这一转变发生在1992年春天,距离编写终端仿真程序已过去了大概一年时间。那年春天,第一代X视窗系统开始在Linux系统上跑。这意味着Linux系统能够支持图形用户界面,而且用户也能够同时运行多个视窗了。这个成功得归功于麻省理工大学的X视窗项目。这是一项巨大的技术革新。记得一年前它没问世的时候,我还和拉兹开过玩笑,说总有一天我们能够做出一个X系统,而且能在Linux系统上运行得很好。想不到这个愿望这么快就实现了。一位名叫奥瑞斯特·扎布罗斯基的黑客顺利地将X系统植入到了Linux系统中。
X视窗系统是依赖X服务器运行的,X服务器提供了图形用户界面的环境。服务器与客户端进行对话,就好像客户端说:“我要一个视窗,就要这么大的。”这个交互过程通过一个套接字层来完成,或者更正式地说,通过Unix域套接字来完成。这样就能实现Unix系统的内部对话,套接字其实也能用来进行网络对话。就是这样,奥瑞斯特给Linux系统编写了第一个套接字层,以此把X系统植入Linux。奥瑞斯特的这个套接字接口只相当于插件,并未整合其他代码。虽然它还不很成熟,但是我非常欣赏这个插件,因为Linux十分需要这样的插件。
Linux系统就这样有了图形用户界面,我一时半会还适应不过来。有了这个功能的第一年里,我还很少使用它。但现在我工作时打开的界面数都数不清,要是没了这个功能,我简直就没法儿活了。
奥瑞斯特的贡献不仅让Linux用户有了图形视窗,还打开了一扇通向未来的大门。那个域套接字是用来支持本地网络运行X视窗系统的,我们也可以进一步利用这些套接字,使Linux跳出本地网络,去连接外部网络————也就是让Linux拥有连接其他电脑的能力。要是没有联网,Linux能发挥的作用就很有限了,只能供本地用户,或者是在家用Modem拨号的用户使用。虽然这些套接字在设计之初从未打算用在发展联网技术上,但是凭着无比乐观的精神,我们开始用他们来开发Linux网络了。
我抱着极大的信心,认为我们能轻而易举地完成这个目标,所以我在编制版本号时大胆了许多,跨出了一大步。1992年3月原本是计划发布0.13版本的,但由于图形用户界面的顺利就位,我信心十足,对于发展完整、可靠并且支持联网的操作系统的目标,我感觉我们一下子有了95%的把握。所以,我将新发布的版本定为0.95版本。
天啊,那时我真是太天真了!无知就更不必说了。
开发网络功能的确很烦人,实际上我们花了将近两年的时间才完成这项工作,弄出来一个像样的版本可以发布。刚增加网络功能的时候,各种新的问题突然之间就从四处冒出来了。说白了就是安全问题。你不知道对方是谁,也不知道他们想干什么,对于别人试图连接你的电脑的行为也变得束手无策了。所以你必须小心翼翼,以防别人试图发送恶意的垃圾程序来攻击你的电脑系统。除此之外,人们使用的网络设备也各不相同,再加上TCP/IP协议的约束,一时半会儿也很难解决所有连接超时的问题。整个进度看不到头,好像要被无限期拖延下去了。到1993年年底,我们有了一套基本算是能用的联网功能解决方案,虽然有些人运行起来还是不那么顺当。像那些网络边界低于8位的电脑,我们还没能实现它们的联网功能。
由于我乐观过了头,将版本的编号直接定为了0.95,后面的事可真是自作自受啊。为了1.0版本能顺利发布,在接下来的两年中,我们在编号上做了不少疯狂的文章。我们经常为补丁程序和新增的功能发布新版本,但你要知道,在95和100之间可没有多少数字啊!在发布了0.99版本之后,我们只好在版本编号后边增加数字来声明补丁级别,后来又依靠起字母,于是就有了0.99版15A级,然后是0.99版15B级,诸如此类的。我们一路追加到了15Z。编到0.99版16级的时候,我们把它改为1.0版了,也终于熬出头了。我们在1994年3月发布了1.0版,而且是在赫尔辛基大学计算机科学技术系的礼堂里隆重发布的。
在这段时间里,彼得·安文在网上组织了一场募捐,募到了3000美元,用来帮我偿还买电脑的钱。我在1993年底终于付清了电脑钱。那年的圣诞节,我把电脑的CPU升级为486 DX266,后来还用了好些年。但这就是我生活的全部了:除了吃就是睡,勉强算是读了大学,编写程序,阅读电子邮件,就这些了。
朵芙
linux最初只是我一个人的狂欢,我没料到它能在我的电脑之外打开一片新天地。我更加没料到,自己能成为这片新天地的领袖。但一切就这么默默地发生了。我们的核心小组由6个人组成,他们5个人承担了绝大多数关键的开发工作,在维护各自领域的工作中承担着重要责任,就像过滤器一样。
我很早就认识到,作为领导者,最好最有效的做事方法,并不是让下属去完成领导吩咐的工作,而是让他们做真正想做的工作。好的领导者自己出了错的时候能够随时自知,并且懂得如何及时补救。此外,他们还会听取他人意见,把策略权交给他们。
我换个说法吧。Linux之所以能成功,大部分都该归功于我的个人缺点:首先,我很懒;其次,我喜欢占别人劳动成果的便宜。要不然,“Linux开发模式”(这应该是人们给我们的合作方式起的名)就只能局限在6个书呆子的小圈子里,只是日常用邮件交流一下开发心得罢了。这种小打小闹和后来那种集思广益的开发模式相比,真是不可同日而语啊。成千上万的开发者依靠邮件列表和彼此之间制定的规范进行联系和开发,加之有些企业予以赞助,所以在开发中的项目时刻都能维持在大约4000个左右。作为整个Linux项目的领军人物,我在操作系统内核的争端上,该仲裁的仲裁,该拿主意的拿主意。因此,我的直觉就是,而且永远都是:不要试图去领导。
按照这种集思广益的模式,Linux系统发展得顺风顺水。我把自己不感兴趣的功能都分给别人去做。首先就是用户级线程,这个功能与内部代码相反,它和内核无关,而是终端用户能够直接处理的系统外部代码。这些系统功能的维护升级,开始是由志愿者自己提出后负责的,后来所有辅助系统的维护升级工作流程就规范了起来。一切工作都按部就班地进行,不用投票表决,不用组织拉票,更不用重新计票,反正大家都知道谁是活跃分子,谁是他们信得过的人。
举个简单的例子,要是两个人分别在维护类似的软件驱动,我往往会把他们的工作成果都拿来试验一下,然后根据运行结果来决定采用谁的方案。但对用户来说,他们会偏向于支持其中一个人的成果,而反对另一个。或者,如果让两个开发者通力合作,他们考虑的方向可能会截然不同,但他们的合作成果反而可能会让你意想不到。
让人们吃惊的是,开放源代码这个模式竟然真能行得通。
我想,开源的举措确实让我更方便地了解那些混迹在自由软件世界里黑客们的心态。(顺便提一下,我一般尽量避免用“黑客”这个词。以前,在和技术人员私下聊天时,我可能会自称黑客。但最近这个词儿却变味了:有些未成年的小毛孩儿闲着没事儿干,用计算机侵入某些公司的数据中心,这种专搞破坏的恶劣分子也好意思叫“黑客”了!你说他们干什么不行,这种年纪就该去当地的图书馆做做志愿者什么的,要不谈谈女朋友也行嘛,干嘛非得干这勾当。)
不消说,1993年这一年,跟1992年、1991年等在之前的年份没什么不同,我把大部分的时间都花在了电脑上。不过,那年过后,情况就有所变化了。
跟随着我外公教书育人的脚步,我成了赫尔辛基大学的一名助教。从秋季新学期开始,我开始用瑞典语教授“计算机科学入门”这门课。我就是这样认识朵芙的。我不是说过安德鲁·坦尼鲍姆的《操作系统:设计与实现》对我一生的影响很深吗?相比之下,朵芙给我带来的影响可远比那本书厉害。我就不细说是怎么个影响法了,免得你们会烦。
我教的这门课有15个学生,朵芙是其中之一。在此之前,她已经取得了一个学前教育专业的学位。虽然她也很想学好计算机这门课,但她的进步没有班里其他同学明显。不过,她最终还是赶上来了。
这门课非常基础————那可是1993年秋,互联网还没普及。你看,有一天我布置的家庭作业,是让同学们给我发电子邮件。这种作业放在今天听起来真是荒诞。
其他学生发来的电子邮件都是写简单的文字信息,或者一些没什么意思的课堂笔记。
而朵芙呢,却邀我约会。
朵芙是第一个通过互联网方式接近我的女人,而我就干脆把她娶回了家。
有了这次约会,我们逐渐走进了彼此的生活。朵芙是一名幼儿学前教育的老师,还曾6次获得过芬兰空手道冠军。她来自于一个“正常家庭”————只要别的家庭不像我们家那么离奇,我一般都会用这个词来形容。而且她还有很多朋友。自打我们在一起的那一刻,我就知道她是我命中注定的女人。反正,我们约会了没几个月,我和我的猫咪兰迪就搬进了她那间拥挤的公寓里。
刚住进朵芙公寓里时,我的电脑等了两个星期才拿过来,我竟然没觉得不习惯。从我11岁那年坐在外公的膝头上摆弄计算机开始,忽略掉服兵役那段时间不记,这两周可是我离开计算机最长的一段时间了。那时候我和妈妈见过几次,听到她喃喃地说些什么“上天真是显灵了”。相比之下,我觉得爸爸和妹妹只是觉得有点儿惊讶而已。
没过多久,朵芙就带回来另一只猫给兰迪作伴。我们的生活安排得很好,晚上我们过二人世界,或者和朋友聚聚会。早上5点我们醒来,她去上班,我就早点到学校去,在别人来找我之前,看看关于Linux的邮件。
1.0版本闪亮登场
1.0版本的诞生,意味着Linux系统需要开拓一个新的方向:公共关系。其实,就像介绍之前的版本一样,我也会非常乐于在新闻组上面写些东西,来向世人介绍新版本,比如说“1.0版出来了,用用吧”
很多人都觉得1.0版本的发布是件大事,他们希望把它推向市场。当时有一些刚刚起步的商业公司开始在出售Linux。对他们来说,1.0在心理学上的意义远比版本的技术革新重要。关于这种观点,我倒没有异议。的确,推销一个0.96版本的操作系统,看起来实在是不够得体。
我之所以会推出1.0版,是因为这对于我来说是一个里程碑,同时也意味着我暂时不用操心怎么打好补丁,可以专门回到开发工作了,而对于商业公司和Linux社团来说,他们则希望能够大张旗鼓地向公众推广Linux系统。
我们需要一套得力的公关策略。至于让我一个人包办这个活计,就免了吧————发布新闻或者声明这种事情,我可不感兴趣。有些人觉得这种事情他们很在行,所以就自然而然地接手了。这倒和Linux系统的开发方式很相像。
把linux首个正式版本的发布搞成一桩大事件,拉兹是个主要推手。他和另外一些人认为,在大学搞正式版的发布最恰当不过了。这确实有道理。要是在我的卧室开发布会,那可就太小了。而要是在商业场所发布,就会开创一种不好的先例,坏了规矩:Linux可不想走商业化道路。于是拉兹自告奋勇和学校联系。我们学校的计算机科学系实在很小,小到他可以直接和系里的头头商量这件事。
赫尔辛基大学非常乐意进行这次合作,主动将计算机科学系的大礼堂借给我们,用作这次Linux 1.0版本的发布会。当然乐意啦!要知道,学校平时可没有什么机会上电视新闻。
当时并非只有记者和linux黑客才对我感兴趣。一时间也有不少富翁找上我,想跟我谈谈他们的技术问题。Unix系统一直以来都被视作有巨大潜力的操作系统,主要是因为它强大的性能和多任务处理能力。所以,原本对Unix系统感兴趣的企业家们将注意力转向了linux系统。其中就有家叫Novell的网络公司,搞了个闭关开发项目(skunkworks project)————一个基于Linux系统的Unix桌面,名为“窥镜”。项目看起来倒是不错,可惜已经到了苟延残喘的境地;它没有依据当时的标准规则————公共桌面环境来设计。
就在1994年8月,他们邀请我造访他们位于犹他州奥勒姆市的公司,和他们谈谈那个桌面项目。对于这么一个免费去美国的机会,我当然愿意!不过我还是提了条件:只要他们能承担我去另一个美国城市的开销,我就接受他们的邀请。他们答应了我的请求。真是划算!看吧,连我这么一个没见过世面的芬兰小子都猜得到,奥勒姆市,甚至盐湖城,在美国的城市中都没有什么代表性。他们建议我去看看华盛顿,但我不想去那儿。华盛顿不过是一个首都,我想它和任何一个国家的首都也不会有什么差别。他们又建议我去纽约,不过我想还是去加州更有意思一些。
novell公司总部的那些人到底有多重视这个项目,我真的看不出来。不过最后,他们决定不再重视这个项目了————他们干脆直接砍掉了这个项目,然后9个项目相关人创办了Caldera。不过在这次造访中,美国给我留下了深刻的第一印象。不知怎的,我萌生了将来某天可能会在此居住的想法。撇开novell公司对Linux的投入不说,在迅猛发展的科技世界中,美国看来应该处于核心地位。
在这次美国之旅中,我颇受触动。首先震撼我的就是,和欧洲相比,这儿的一切都显得更为新颖。当时,摩门教的150周年纪念活动才刚过了没几年,所以他们主要的教堂都拾掇得干干净净的,白得发亮。在欧洲,由于历史岁月蹉跎,所有的教堂都显得老态龙钟,斑驳陆离。看惯了欧洲的教堂,再一看摩门教堂,这白的发亮的墙让我联想到迪斯尼乐园!它看起来不像是教堂,更像是童话里的城堡。另外,在奥勒姆时,我还试了试酒店的桑拿。
不过,我也开始学到了一些在美国的生活窍门。这就好比游客到了芬兰,会很快明白不能在酒吧随便和陌生人搭话。我也很快明白了,在犹他州(后来我才知道在美国其他地方也一样),你不能理性地和别人讨论堕胎和枪支管控。因为可能有一半的机会,你会遇到一些对这两个问题特别敏感的人,从而很容易就陷入一场无谓的争吵之中(那些事的确没必要争执,欧洲人就不会被这些问题烦扰)。美国人之所以那么强烈地捍卫自己的立场,就是因为他们听到太多对立的声音。事实上,芬兰的人均持枪数可能比任何国家都高,但这些枪支大多是用来打猎的,所以这在芬兰并不是什么大问题。
才刚过了一年,我又回到了美国。这一次的目的地是新奥尔良市,去给DECUS(DEC公司的用户协会)的会议作演讲。会议只有40人参加,所以这次演讲对我来说也不是太大的折磨。那次,最棒的是认识了“疯狗”乔恩·霍尔。他是Digital Unix方面提供技术服务的市场人员,也是一位Unix的老用户。当时就是他负责把我送到会场作演讲的。“疯狗”最为人所知的是他那及胸的大长胡子和荒诞的幽默感,更别提他爱打呼噜的习惯了。他现在掌管着Linux国际,这个组织的主要工作是支持Linux系统和linux用户的需求。
新奥尔良的那场演讲的好处之一就是:经“疯狗”安排,DEC公司借给我一台alpha电脑。除了PC机之外,这是Linux系统第一次植入到其他电脑上。在这之前,也有人将Linux植入其他的硬件平台上,比如说,植入到使用摩托罗拉68000芯片的雅达利游戏机和Amiga电脑。但是在这些案例中,Linux并不能同时兼容两个平台。为了让相应的Linux版本能正常工作,你得将一些不能运行的代码弃掉,重新写入代码来代替。然而,alpha电脑是首个能完美植入Linux系统的平台,基本上在PC机上能跑的源代码,在alpha电脑上也一样能工作。我还加了一个抽象层,这样源代码就能以不同的方式编译到两种平台上了。代码还是相同的那套代码,但却能分别适用于不同的平台。
到了1995年3月,也就是我们发布Linux 1.2版的时候,Linux内核已经有了25万行代码。Linux系统也能同时适用于因特尔处理器、DEC的处理器以及Sun公司的SPARC处理器了。Linux跨出了一大步。
版权之争
1995年间,业界涌现出很多的Linux商业版本,那些Linux商业公司也吸引了一大批追随者加入。同年,我在大学里也由助教晋升为助理研究员,这意味着我可以多领些薪水,少上些课。至于我在攻读的硕士学位嘛,内容主要是将Linux普及到不同的体系架构上,进展比较慢,可以说简直慢得不行。同年,朵芙开始叫我打壁球,每个星期我们都会切磋一次。凭良心说,我俩球技还算势均力敌呢。
我的小日子过得正甜蜜呢,突然冒出件麻烦事儿来。波士顿的一个投机分子抢注了Linux一词的商标。这还不算,过分的还在后头呢:他发邮件给Linux Journal和其他Linux公司,向他们索要收入的百分之五,作为使用商标的“酬金”。
听说了这事,我心头一紧,觉得此人似曾相识,他的名字挺耳熟的。我搜索了下归档的邮件,发现原来在大概一年半以前,这家伙曾主动给我发过一封邮件,问我信不信上帝,还说能给我提供一个前所未有的商机。他给我发邮件那会儿,垃圾邮件还没有成为一个困扰全球的问题。那时真可谓纯真年代啊,互联网还没有被某些人“快速致富”的歪理邪说侵蚀呢。不过,我当时也没打算给这个家伙回信,只是觉得这封邮件还挺特别的,就将它保存了下来。
就这样,我们凭空就摊上了这么个小危机。我们是黑客啊,哪儿会想到要主动去检查商标有没有被注册这种事呢。
不过这家伙也不是那种专门抢注商标的,显然他也只干过这一回。商标分很多不同的行业类别,而他只在计算机行业下注册了Linux商标。申请注册时得提交用以佐证的应用程序,当时他向商标管理局提交了一张磁盘,里面装着他所谓的Linux程序。
这件事引发了一些恐慌。Linux圈里所有人都明白,我们得抢回这个商标。但问题是,我们没有一个得力的组织来应战,甚至都没有足够的钱来聘请律师。没有哪一家公司愿意承担这1.5万美元的诉讼费。要是换成现在,他们每个月买百事激浪汽水都能花掉这么多钱了。可是在当时,这么一笔钱对一个公司来说可不是小钱。最后Linux Journal和其他一些公司决定联合提供资金支持,让Linux国际出面打这场官司。linux国际最初是在澳大利亚创办的,旨在全球范围内推广linux系统,创立者是帕特里克·蒂科鲁兹,他在1994年移居美国。打商标官司的那一年,“疯狗”正好在担任Linux国际的执行理事一职。大家都很信任他,到现在都还是如此。
我当时人在芬兰,正忙着在壁球上打赢朵芙,或者在斯诺克上打赢艾弗登,没有兴趣加入这场官司,只希望这场噩梦能早点结束。我当时的想法是废除这个商标,使他的注册行为无效。我们有充分的文字证据证明我们是先于这家伙使用linux一词的,而且这本身就是事实啊。不过麻烦的是,律师劝我们说,我们应该打消将Linux进入共有领域的念头,因为用这种方法来取消对方的商标可能会白忙一场。他解释说,将Linux变作公共财产的唯一方法,是将它变成通用名称,但当时Linux根本算不上是通用名称。就算在今天,商标管理局也不会把它当作通用名称的。他认为,要是这样做,我们可能就会输;即使赢了,这次宣布注册行为无效,也难保今后不会再有人把它注册为商标。
律师给我们的诉讼方案是将商标的所有权转移给某法人。我把票投给了Linux国际,但是很多人都反对这个主意。Linux国际太年轻,没什么名气,也经不起考验。大家普遍担心Linux国际会为商业利益所屈服。此外还有一个严重的问题,要是“疯狗”卸任了,谁会是继任者。
于是,大家把目光投向了我。律师建议,鉴于我是这个名词最初的使用者,如果Linux的商标所有权归给我,这场官司打起来就轻松多了。后来我们的确采用了这个策略。我们最终达成了庭外和解,似乎这是最简单也最省钱的办法了。和绝大多数庭外和解的案例一样,相关的细节我不清楚,而且就算我知道,也不能告诉你们。幸好我对这整件事压根不感兴趣。
经过这件事以后,我算是看清楚了,某些表面上的正人君子骨子里坏着呢。不过当时更让我烦心的是,整个跟商标有关的担子居然丢给了我,大家把我拱出来跟那个家伙抢商标,我可没做错什么啊。
经过这场混战,最终我获得了Linux商标的所有权。那就意味着,如果诸如VA Linux这类公司申请IPO时,必须在招股说明书里讲清他们公司并不拥有Linux商标,哪怕一半的所有权也不行。
接受全美达的邀请
在1996年,有两个关于我的消息在Linux圈子里引起了同样的关注:第一,我决定到全美达公司工作;第二,我们两人总算搞清楚怎么样才能怀上孩子,并且朵芙还成功怀孕了,我们将在1996年底迎来我们的小生命。
1996年,正值春夏交替的时候,我完成了硕士学位的最后一门课程。差不多这个时候,我接到彼得·艾文的信。还记得彼得吗?他是Linux圈子的一个发烧友,三年前他在网上组织募捐,为我付清了我那第一台PC机的欠款。和其他混迹在Linux新闻组的人一样,他知道我就快毕业了。那时他已经在全美达工作了将近一年,找了个机会和他的老板提起了我,说芬兰有这么一个家伙,招揽过来对公司大有用处。于是他趁着到瑞典探望母亲的机会,顺道和我简单地见了一面。他把全美达捧上了天————但实际上他也说不出什么,因为全美达一向都在“潜藏模式”下运作,所以,他其实也透露不了太多细节。当时的圈子里也有一些传言,说这家公司在开发“可编程的芯片”。不管怎么样,就私交而言,能和彼得见上一面确实不错。
回到加州一个星期后,彼得给我发了一封电邮,问我什么时候能动身过去。
这是我生平第一次应聘。我什么也没有准备:没有简历,也不知道全美达公司是干什么的,连全美达的所在地我都完全陌生。
对于能不能拿下这份工作,我倒不是很担心。我更关心的是,要是拿下了这份工作,其实也就意味着我得搬到美国去。这样一来,我就无法把这次会面看做是单纯的面试了。更重要的是,我能借着这个机会看看全美达那些家伙到底是干什么的。说起来,那是一次相当古怪的面试。
第一天过去了,我回到位于全美达总部写字楼对街的酒店里。虽然时差还没倒过来,但我已经觉得这儿挺有意思的了,不过我还感觉全美达那些家伙都是疯子。这家公司虽然坐落于硅谷,但压根没有一点儿的“硅谷气质”,不像是个真正的计算机公司。他们没有任何硬件设备,所有工作都是靠模拟程序完成的。而且,看着他们用模拟器登入Windows系统3.11版本玩纸牌游戏,我简直不知道他们在干什么。这次美国之行似乎白来了。那一天结束之后,我不禁怀疑自己是否完全是在浪费时间。我记得十分清楚,当时自己是这样想的:大概没戏了吧?无论是全美达公司的技术革新,还是我的新工作,都没戏了吧?
管他呢,先睡一觉,明天再考虑————我确实也是这样做的。不过说实话,整晚我都没怎么睡着。我躺在床上,满脑子想着全美达公司的那些计划。一时间,我开始幻想在后院里立着一颗棕榈树,又反复思考白天所看到的模拟器的运行情况。那是个非常难忘的夜晚,总也睡不踏实。
我还和红帽公司谈过,他们邀请我加入,并承诺会提供比全美达公司更高的薪酬————他们根本就不知道全美达的薪酬是多少(因为我也不知道,我还没有和全美达谈到待遇问题)。红帽公司甚至承诺,不管全美达给我多少期权,他们都愿意给我更多。但是我没有兴趣为任何Linux公司工作,哪怕它外在条件得天独厚,坐落在气候宜人的北卡罗来纳州的中心位置。
就这样,我虽然没有正式投递简历,却一下子收到了五分工作邀请。显然,全美达是最令我心动的。
我接受了全美达的邀请,感觉怪怪的。第一件要做的事情就是通知赫尔辛基大学我要走了。要说我在全美达参观的第二天晚上开始感到有压力,那么到了现在这一步,则是切切实实感受到了压力。这件事对我来说是巨大的一步,一旦踏出去就没有回头路。我们会添一个孩子,移居到另一个国家,离开赫尔辛基大学这所“安乐窝”————不过还得先把论文写完。回想起来,一时间作出那么大的改变也挺好的。
我用了整整一个周末的时间写完论文,在把朵芙送进医院前几分钟,才把论文交了上去。40个小时之后,帕特丽夏出生了。那天是1996年12月5日。做父亲似乎是世界上最自然不过的事情了。
接下来的几个星期,我们忙着带孩子,当然也时常操心赴美签证的审批,这种等待可真是漫长。我们觉得要是结了婚,可能会对签证的审批有帮助。所以一月的某天,我们去了政府部门正式领了结婚证。
后来,我们的签证终于批下来了。1997年2月17日这天,我们登上了去旧金山的早班机。我还记得赫尔辛基那天的气温是零下18℃。我还记得道别的那一刻,朵芙的家人都哭了,他们家人之间的关系很亲密。
我们在美国下了飞起,抱着一个婴儿和两只猫过了海关。彼得·艾文等在那儿,特地来接我们。我们租了一辆车,直奔圣克拉拉市那处我们几个月前花了好长时间选定的公寓。一路过来的感觉很奇妙,很虚幻,尤其是这里的气温,竟然和芬兰相差了整整39℃。
我们的行李还得两个月后才到。第一天晚上,我们就睡在一张随行带来的充气床垫上。第二天我们出门买了一张真正的床。在新家具抵达加州之前,帕特丽夏只能睡在她的婴儿车里。
由于我刚搬来美国,又疲于应付全美达的新工作,刚开始的几个月都没有在Linux系统上花多少时间。这份新工作占用了我大部分时间,而工作之余我都陪着朵芙和帕特丽夏,一起去了解这个陌生的地方。那段时间,我确实忙得不可开交。当时也没什么钱。没错,我那时的薪水还算高,但全都花在了买新家具上。买车也是一件麻烦事,因为我们在美国压根儿就没有信用记录,所以也就没法贷款。就连安装电话这种小事,也还得费劲力气证明我们确实是付得起电话费的。
很多人也曾直言不讳地问我:这是不是意味着,作为一个免费的操作系统,Linux会渐渐销声匿迹?我解释说,根据我和全美达公司的协议,我可以继续进行Linux系统地开发。而且,我不会丢下Linux系统不管。
我在全美达干的活儿其实并没有那么神秘。他们指派给我做的第一件事,就是修复全美达Linux系统里的一些问题。全美达公司有很多装有多处理器的电脑都在用Linux系统。我本身从来没有处理过Linux SMP(对称多处理)问题,这才发现很多东西都并未按照预期那样按部就班地运行。这事对我来说是极大的侮辱,我非得修复它不可!
全美达不是一家Linux公司,这一点对我很重要。我可以继续将开发Linux系统当作一项业务爱好,除了对技术的考虑,没有其他的东西可以左右我的决定。
于是,我白天就在全美达上班,编写和维护“x86解释程序”。直到今天,这个程序依然在使用,不过现在是别人负责维护了。基本上,这个解释程序是全美达那个软件的一部分,负责读取和执行CPU的指令(换言之,它把80x86架构的语言指令逐个给“解释”出来)。后来我也做过其他的工作,不过这个解释程序就是我进入千奇百怪的硬件仿真世界的敲门砖。
到了晚上,我就睡觉。
我和全美达公司的协议很明确:公司在一定程度上默许我在上班时做Linux的开发工作。相信我,我从中可占了不少便宜。
有些人喜欢加班加点干活,非得轮上两班、三班甚至四班的活儿不可。我不是那种人。 不管是全美达的项目还是Linux的任务,我都不会牺牲睡眠时间。好吧,如果你非要听真话,其实是我非常爱睡觉。 有些人觉得这只是懒惰的接口,我只想一把抓起枕头朝他们扔过去。我有一个超级高明的借口,而且坚信不疑————如果你多花一点时间睡觉,比如说,睡足十个小时,你可能会损失一些工作时间,但是一旦睡足了觉,那么在醒着的几个时间里,思维就会一直保持敏捷,大脑的状态就会像六缸引擎火力全开那样的————或者就四缸吧,差不多这样。
财富的到来
我常常一觉醒来,觉得自己是全世界最走运的家伙。我不记得1999年8月11日星期三那个早上我醒来时有没有那么想,不过应该是有的。
那天是Linux世界会议与商业展的第二天,活动在圣何塞会议中心举行。SuSE公司的CEO德克·亨德尔从德国过来参加商业展,那晚上就睡在我家起居室里为客人准备的床上。我认识他已经很多年了。他是XFree86系统项目的老成员,非常支持Linux的发展,而且他还是丹妮拉的教父。早上我醒过来,给朵芙和德克煮了克布奇诺咖啡,读完了《圣何塞信使报》上除了体育版和分类广告之外的所有新闻————我一向是这样的,之后我们一起挤进丰田RAV4车里,开了16公里到了圣何塞市中心。
我记得那天和很多人握了手。
那一天是红帽挂牌上市的日志。红帽在很多年前给我了股票期权,不过最近才给了我一些文件。我一直没有兴趣仔细阅读,所以那些文件还待在我电脑旁边的纸堆里。我记得我是真心希望红帽上市后的走势能够顺顺利利,但那和我的股票期权没有什么关系,我并没有因此特别兴奋————我甚至不知道股票期权是什么意思。我是为了另一个原因才这么激动的:从很多方面看,红帽IPO的成功会意味着Linux被大众认可。所以,那天早上我有点紧张,不过恐怕不只我一个人紧张。股票市场已经低迷了好几个星期,人们甚至怀疑红帽能不能成功上市呢。
事实上,这场资金的“流动性事件”还是发生了。在会议上我们得到消息,红帽IPO的开盘价是15美元,还是18美元————我不记得了。重要的是,第一天收盘的时候,每股已经达到35美元。并不是说它破了记录什么的,但是走势还不错。
我记得那天我与朵芙和德克开车回家,在车上我才感觉松了一口气。接着我想到了钱,就激动了起来。直到我们堵在北向101号高速公路上进退不得,我才突然意识到,我本来是几乎身无分文的,但是一天之内就有了五十万美元。我的心跳一下子加速起来,感觉既得意,又难以置信。
我得想办法弄清楚接下来该做什么,但是我对股票一窍不通,于是我给VA Linux公司的CEO拉里·奥古斯丁打去了电话。我告诉他,他是我认识的人当中唯一通晓股票运作的。我是这么说的:“你有没有一个信得过的股票经纪人什么的可以介绍给我?这样我就不用上eBay上买一个了。”
红帽给我的是股票期权,而不是直接把股票赠予我。我不知道该如何行使这个认股权。我想应该会有一个持股锁定期,但是我不知道对我是不是适用,我也没有考虑过税务问题。拉里在这方面很精通,而且人脉很广,给我联系了一个在雷曼兄弟公司上班的家伙。他本不该为我干活,因为我并不是什么大客户。他答应帮我考虑下一步的行动。就在这个时候————红帽IPO两天之后,我收到一封红帽人事部或者他们的律师发来的电邮,告诉我,在红帽IPO之前,公司进行了一次股票分拆。我对这件事一无所知。于是找到了那个装着股票期权文件的马尼拉纸文件袋,开始去阅读我之前没有兴趣看的文件。白纸黑字就写在那儿,浅显易懂的英文:我的股票期权奇迹地翻倍了。
我的50万美元一下子又变成了100万美元!
我已经顾不得媒体给我塑造的那个安贫乐道、清心寡欲地领着一大群人的极客形象,坦白说,我兴奋地快要发狂了。
没错,我说真的。
我坐下来,看完了红帽给我的所有文件,确实,我有180天的持股锁定期。
你能想象,对于一个第一次成为名义上的百万富翁的人来说,180天有多长吗?
我现在有一项新的消遣了:关注红帽的股票价格。所幸接下来六个月,它的价格一直在上涨,要么小幅度持续上涨,要么直接往上跳,总之是不停地涨啊涨。后来,红帽甚至又搞了一次股票分拆。在最高点的时候,我的期权价值达到了五百万美元。
红帽的股票价格起步相对比较低,随着华尔街“发现”了Linux,它一步步升上了天,而一般华尔街只要与和互联网有哪怕只有一点点关系的领域发生了什么关系,都会让人痛苦不堪。1999年底那几个寒冷的月份里,我们成了最时髦的话题。电视和报刊上教人投资的专家们怎么也说不腻这个令人疯狂的小东西,这个甚至有望放倒微软的操作系统。我的电脑响个不停。这一切和12月9日VA Linux公司的IPO一起,达到了一个令人震惊的巅峰。这次上市能得到这么多人的认可,是谁也没意料到的。
旧金山市瑞士信贷第一波士顿银行给VA Linux公司办了一场IPO路演,拉里·奥古斯丁和我一起去了现场。我就穿着我平时穿的衣服:免费T恤配凉鞋。我们还带了老婆和孩子一起去。几个刚学步的孩子们在穿着保守的投资银行家中间跑来跑去,那个场面肯定很糟糕。
一切都来得太快。屏幕上不断跳动的数字显示,VA Linux在第一天的交易中,每股已经卖到了300美元,这可是前所未闻的。就算我们没有看到那些跳动的数字,也能从那些投资银行家被CNN和彭博财经频道的报道给震惊了的表情中看出,这只股票一定创造了记录。看看拉里,他还是和平常一样淡定自若。我想,整个过程中他的眼睛都没有眨一下,不过我倒不敢肯定,因为我忙着追我那到处乱跑的女儿们。
大概连非洲马达加斯加雨林的居民都知道拉里一下子变得多富有了。他开车到旧金山市的时候还没有什么钱,但是他开车返回硅谷的时候身价已经大概有16亿美元了。而且,媒体也不断指出这一点:他才二十几岁。
说到我,我从VA Linux公司得到一些股票赠予和股票期权。和我在红帽的情况一样,这些股份六个月不能卖出。不同的是,红帽的股价一直稳步上涨,而VA Linux的交易价除了下跌还是下跌。在开市一天创下记录之后,这支股票在接下来的一年内不断地下跌,最低跌到每股6.62美元。在一定程度上,这只股票是股票市场调整的牺牲品————那年四月的市场调整重创了大多数的科技股。另外,股票市场上关于Linux的时髦话题也已经随着那年的春暖而消停了。因为VA Linux持股锁定期的关系,我从这支一度价格居高的股票上占不到什么便宜。从心理上说,关注这支股票比关注红帽的股票难受多了————每天晚上爬上床睡觉,我都知道,第二天醒来我的资产净值会变少。
但是,我还是常常觉得自己是全世界最走运的家伙。
道德不应制度化
从卧室钻出来,走到聚光灯下后,我不得不尽快学会一些别人早在幼儿园就学会了的生存技巧。比如说,我就从来没有预料到别人会那么认真地在乎我或我的一举一动。就这个主题,我说两件亲身经历的事情,你就明白了。
还是在大学的时候,我在电脑上建立了一个根目录。每个目录得有一个相对应的名称以便归档和查找,我就把那个根目录命名为“林纳斯·上帝·托瓦兹”。我的确是那台电脑的上帝啊,它只不过是摆在了大学中我的办公室里而已。这有什么大不了的?
咱接着往下说,当时,要是有人在Linux或Unix系统下进行“Finger服务”,那么他就是为了查看有谁登入过,留了些什么信息。因为防火墙的出现,这种行为在今天已经不常见了。但在很多年前就有这么些人,喜欢入侵别人电脑,查看用户有没有登录过,有没有查看电子邮件什么的。这也是一种偷窥别人的“计划”目录或者他们留存在电脑上的个人信息的好方法,就跟我们现在浏览网页差不多,估计网页的出现就是从这儿获得启发的吧。我的“计划”目录下一般会有最新的Linux内核版本。所以,要是有谁想了解这些内容,他们就会用Finger服务进入我的电脑。有人甚至为此编写了自动化程序,每个小时Finger我一次,这样就能掌握Linux的最新动态。不管有意还是无心,他们进入我的电脑时,就会看到我的根目录“林纳斯·上帝·托瓦兹”。刚开始这还不算什么,但没过多久我就收到别人发给我的邮件,指责我说这种行文亵渎了上帝。最后,我只得把名字改掉。这些人太把自己当回事,简直把我逼疯了。
接下来,当然了,还有一件发生在北卡罗来纳州的糟糕事。我的天!这事简直糟透了。一本新进出版的关于红帽公司的书,还把这件事写成是具有潜在性灾难的国际大事件。他们也太夸张了吧!
事情是这样的,红帽公司在达勒姆市的总部组织了一场Linux用户会议,他们邀请我到现场发表演讲。我到场的时候,演讲大厅挤满了人。而我上台的时候,大家还纷纷站起来为我欢呼。当时我的脑海里浮现一句话,也没多想,随口就说了出来:
“我是你们的上帝。”
拜托!那就是一句玩笑话啊!
我又不是说:“我确信我就是你们的上帝,你们要永远记住这句话。”我只是说:“好啦,好啦,好啦,我知道我是你们的上帝了。我由衷地感谢各位的赞赏,但现在请你们先坐下来,等我演讲完了,你们表达赞赏还来得及。”
这种糗事说什么我都不想再经历一次了。
我“粗鲁”的问候声刚落地,在场的每个人都惊呆了。几个小时过后,我那4个字的开场白(I am your God)在新闻组里引起了热议。我承认,这种开场白确实很拙劣,但我那时无心之失啊。说真的,上台的过程中看到这么多人为我起立鼓掌,我难免会感到尴尬,一尴尬我才会不由自主地乱说话啊!
人们对我太苛刻了,他们把什么鸡毛蒜皮的事都看得很认真。不仅如此,这些年领着大家为Linux奔走,更糟糕的我都经历过呢:有些人遇事自己大惊小怪也就算了,还要强迫别人跟他们一起大惊小怪,不达目的誓不罢休。这种人我最受不了了。
你有没有思考过,狗为什么会这么喜欢人类?那可不是因为主人每六个星期就带它们去做宠物美容,也不是因为偶尔在路边帮它们拾掇粪便。都不是!狗喜欢人类,是因为狗喜欢被人使唤,这是让它们活下去的理由。(这点非常重要,尤其是它们大多经历了绝育手术,这让它们从繁衍犬类后代的工作中光荣退休。而且它们也没什么本职工作了,除了在你打猎时帮你搜寻猎物之类的特例。)作为人类,你是狗的主人,自然就由你来告诉狗它们应该做什么。听从你指挥是它们的情感依托,而且它们就好这口。
不幸的是,人类的天性也是如此。他们总想有人能告诉他们做什么,这就是我们的内核。任何社会性动物的本性都是如此。
但这并不意味着你就该卑躬屈膝。这只能说明,你比较喜欢和那些指挥你做事的人待在一起。
当然,一些人很有主见,坚定的信念使他们在某些场合敢于这样表达自己:“少来了,我凭什么要听你的?”这样一来他们就成了领导。成为领导不是难事(肯定是这样,我不就成了一个领导吗)。而那些缺乏主见的,就会倾向于让别人来为他们作决定,听别人的指挥做事。
人们完全有权利按自己的意愿推举领导,并按照这个领导的指挥做事。虽然我对此感到沮丧,但并没有要在这一点上争辩什么。我想说的是,有时候我真是受不了某些人,他们当中有领导者也有追随者,总喜欢把自己的世界观强加给别人。这可不是用失望就能形容的了————简直骇人。令人失望的是,人们随随便便就盲从任何人,包括我。而骇人的是,他们会把自己的盲从心理强加给别人,包括我。
当你坐在电脑前认真思考某个棘手的技术难题时,或当孩子们总算睡着了以后你要享受一下二人世界时,有些穿着光鲜干净的“传教士”,叫他们机器人也行,就爱来敲你的门。这些凡人的陈年旧事咱不提也罢,眼下就有一个活生生的例子摆在开源运行的社团里:某些狂热分子认为全天下任何软件创新都应该在GPL下注册(用黑客的行话来说叫做“被GPL”)。理查德·斯托曼想让全天下的软件都变成开源的。对他来说,这是一场政治斗争,他想用GPL来驾驭开源运动。他认为这是唯一的方法。但事实上,我开放Linux源代码可不是处于这种高尚的情操,我要的是回报。在计算机行业发展的早期,那些在大学里或者国际部门里闭关研发的东西,最终不也成为开源的产物嘛,这是基本规律。别的大学问你要程序代码,你直接就给他们了。自从理查德被迫放弃了他热爱的研究之后,他一心想做的,就是成为自觉开放源代码运动的第一人。
没错,把源代码开放,并像linux或者其他技术革新那样遵守某种许可证条款,产生的效益将是数不胜数的。我说的这些你要是不信,尽管去对比那些质量差劲的闭源软件。GPL和开源模式为最顶尖技术的诞生创造了条件,一切就是这么简单。不仅如此,GPL和开源模式还能防止技术闭锁,保证任何对研究项目和技术感兴趣的人们都能参与开发工作,不被挡在门外。
这可不是什么小事。斯托曼在麻省理工学院的时候曾经参与多项有意义的研究项目,这些项目成功从学院派的开放世界走进了私人公司,他却被挤了出来。斯托曼由此受了启发,开始大力促成自由软件环境的发展。他为了GPL的诞生如此劳心费力,我们简直应该为他立碑塑像。他被迫放弃的项目中最著名的就是LISP计算机了(被设计来高效运行以Lisp语言为主要软件开发语言的通用型计算机)。LISP项目最初是作为人工智能的一部分加以开发的。随着项目内容多了起来,有人突发奇想,觉得这个项目做得如此这般好,是时候该成立一个公司,把它推广到市场,并通过它盈利了。这种事情在大学里比比皆是。但理查德并不想和这些生意人苟合,所以当LISP项目在1981年成为Symbolics公司的一个商业项目时,他突然就从这个项目中消失了。更让人恼火的是,Symbolics公司还把他在人工智能实验室的许多同伴挖走了。
类似的事情在他身上还发生了好几次。我是这样理解的:他推动开源运动的初衷与其说是反商业还,倒不如说是反排斥。对他来说,开源理念不仅意味着对开发程序怀有热诚的人不被冷落,而且意味着即使有人将项目商业化,这些热心人也能够继续软件的开发工作。
GPL之所以伟大,是因为在它的关照下,人人都有得玩。你想想,这可是人类多大的一个进步啊!但这难道就意味着所有的软件创新都必须注册GPL吗?
当然不是!这可以说是科技领域的堕胎问题。要注册GPL还是要用别的更加传统的方式来保护自己的版权,应该是由作者自己来决定。理查德有一点我最受不了的,就是在他的世界里,一切非黑即白,也由此产生了一些不必要的政治分歧。他永远听不进别人的观点。他要是搞教会的,你都可以称他作宗教狂热分子了。
事实上,除了狂热的“传教士”来敲我家的门劝我“入教”之外,最让我反感的,就是别人来敲我家的门(或者用电子邮件轰炸我)告诉我该如何为我的软件注册版权。这可不该是一个政治问题。谁都有权决定自己的想法。劝说别人注册版权之后让他们自己考虑也就是了,何必为了让别人注册软件而争论不休呢!有些人会指责我,说我在为一家商业公司工作,而且这家公司从不为他们的成果注册GPL版权保护,我只想告诉他们别多管闲事。
我对理查德非常反感,并不是因为我对他总试图让我把linux改名为gnu/linux的事感到不满,也不是因为他嫉恨我成为开源理念的代言人(虽说他在分享代码的时候,我还是个睡在洗衣篮里的奶娃娃)。都不是!我之所以对他反感,完全是因为他总是不停地抱怨别人不使用GPL。
我对理查德敬而远之,这我随口就能说出一大堆理由。我认为自己倾向于敬重那些像理查德一样有强烈道德感的人。但是他们为什么就不能把这种观念摆在心里呢?我最讨厌别人告诉我该做什么不该做什么。我尤其憎恶别人自认为有资格把他们的观点凌驾于我的个人决定之上(不过,我妻子可能就另当别论了)。
纵观Linux的发展过程,像埃里克·雷蒙这样的权威人士就认为,Linux系统能成功、开源运动能保持长久的活力,有部分取决于我实用至上的作风和在争执中不偏不倚的能力。虽然埃里克可能是开源形象最好的发言人(同时我非常非常不赞成他顽固地支持枪支合法化的事),但是我觉得他对我的看法有点离谱。我不是有能力在争执中不偏不倚,只是对那些将自己的道德观念强加给别人的人非常反感。“道德观念”一词你也可以用“宗教信仰”或者“对科学技术的爱好”之类的词来替换,反正都是这个意思。
正如我们不应该把道德观念强加给别人,我们更不应该把道德观念制度化。我十分尊重个人的选择,这就意味着当面对道德问题时,我理应有权作出自己的决定。
我想把决定权掌握在自己手里。对于社会上强加的一些不必要的规则,我是极力反对的。我始终这么认为:只要不碍着谁,你尽可以在家这个私人空间里做任何你想要做的事。如果有什么规定禁止这种做法,那这规定就十分差劲。世界上还真有这种规定呢!我就发现有一些很可怕的法规,尤其爱找学校和孩子下手。在教育改革上强制推行某些规则,将教育引向错误的方向,这种事情光想想都觉得可怕。这就是所谓的“社会良知”,明明和它毫不相干,它却总爱把丑陋的头颅探出来指指点点。
与此同时,我相信在我和我的个人道德准则之上,还有更重要的东西,那就是进化,这比人类本身重要多了。在那个程度上,我在作个人决定时就会把社会因素考虑进来。不过,我觉得这种观念大概是与生俱来的,应该已经植入了人体————通过进化,我们的确会考虑各种社会因素。否则,人类老早就不存在了。
还有一件值得大声疾呼的事:那些过于唠叨的人,你们该消停一下了!这不合理嘛,但反正他们就是爱给你传教,还自以为有理。
而且听起来,我好像就是这种人。
总之,当别人太把你当回事的时候,你得多加小心,那可是温柔陷阱啊。
知识产权
这些天,关于知识产权的争论火得不得了。火到什么程度呢?就好像人们不管走进哪儿的卫生间都能看到涂鸦似的,我总能时不时听到谁支持谁或不支持谁的言论。有些人认为,对于自由世界来说,专利法和其他各种形式的知识产权法规都是祸害,这些法律非但已经走入歧途,而且极其邪恶,非尽快取缔不可。有些人则相信,世界上几乎所有的经济都是由知识产权推动的。不仅如此,这些人还想要竭尽所能来提高知识产权的法律地位。
结果,这些“涂鸦”时不时还搞得场面挺大的。
当然了,关于这个问题的大部分“涂鸦”可不是涂在圣何塞的人们过夜生活最爱混迹的那些地方的卫生间里,而是涂在了互联网上的虚拟“卫生间”里。网络上充斥着关于知识产权法规特定问题的混战。人们从第一修正案所涉及的权利,争论到知识产权法规是否会在未来扼杀开源模式的开发活动时,火药味十足。
我已经被这个问题搞得精神分裂了。
在这个问题上我并不是没有自己的主张:我个人非常看重知识产权的价值,但说到底,我的观点好像对争论双方的立场都能支持。我可以告诉你,这种情况是非常令人困惑的,因为这意味着,我得同时和双方争论。我想,也许是因为这虽是围绕知识产权这一主题展开辩论的两个对立方,但他们争论的却不是同一回事。
对很多人,包括我来说,知识产权与人类的创造能力有关,与那些使我们成为人类而不是禽兽的东西相关。在这个背景下,“知识产权”这个名称本身就是一种冒犯:这不是财产,不能像卖动产那样随随便便就拿去卖。这可是一种创造性的活动,是人类能做到的最伟大的事情。这可是艺术!艺术的艺!艺术的术!它美得如同蒙娜丽莎,不过它也是漫漫长夜编写出来的程序,是能令程序员特别骄傲的东西。它实在太宝贵了,轻易不会拿去卖:它可是你赖以证明自己的不可或缺的东西。
那种创造力,不管在什么方面,绘画、音乐、雕塑、写作,或是编程,都是神圣不可侵犯的。创造者与他创作出来的东西之间有一种无法切断的关系。这关系就像是母亲与孩子,或者说是跟菜与调味料之间的关系如出一辙。但是,它同时也是世界上应该为所有人共同拥有的东西,因为它就是人道精神。
话说回来,换一个角度看,每年知识产权能产生七万万亿美元的交易额,这可不是小买卖。人类的创造力被贴上了价格标签,而且价格还不便宜。创造力这玩意儿并不多见,所以它不仅昂贵,还非常能来钱。这一点惹来了不少截然不同的争论,也惹来了意见完全不同的人。那些人把人类创造力产生的最终结果称为“财产”,不用说,那里面肯定少不了律师。
再看一遍这个章节的标题吧。很明显,那些持“财产”观点的人赢了。说到底,这尴尬的名字已经是板上钉钉的事实了。那么,问题到底出在哪儿呢?
知识产权最有名的例子,就是版权的申明————“版权所有”。从根本上说,版权就是每一个创造者从他的作品中得到的所有权利的集合————假如他愿意的话。有了版权,作品的“拥有着”就可以决定这份作品该如何被使用。
要合法地获得版权,其实是很简单的。你不必注册你的版权:不管你创造了什么东西,你都会自动成为这件作品的版权所有人。这一点非常重要,使得版权区别于其他的知识产权法规,主要是因为这样能使个人,而不只是大企业,更容易获得版权。就是这么简单,你写作、绘画,或是创作了一样独一无二的东西,你就能获得版权。如果愿意的话,你可以加一行标注:“©️版权所有2000某某”————“某某”处写上你的名字。但是坦白说,没必要。你说也好,不说也好,这版权都跑不了。把这话说出来,只是方便了别人————当他们想用你的作品的时候,更容易联系上你。
当然了,光是拥有版权其实没有什么用。不过,你拥有你所创造的东西,意味着你就有权决定怎么使用它。比如说,你有权把一份艺术作品卖给别人,除了国税局之外,没人有资格说三道四。不过,版权可不仅仅是钱的事,很多人糊涂就糊涂在这儿。
比如说,你可以利用你作为版权所有人的权利,做一些比出售这作品更有意思的事情。你可以把它授权给别人。这可比卖了它高明多了。你不是把这份作品给卖了,而是卖了一个许可证,让别人有权用它来做一些事情,而版权仍然在你手上。这么说吧,鱼与熊掌,你可以兼得。这也就是比尔·盖茨那帮人创建微软世界的奥秘了:他们无穷无尽地出售使用某物的权利,事实上自己又毫无损失。难怪人们都热爱拥有这一类“财产”。
不知道有没有人看出这当中的问题了?如果你到现在都看不出有什么古怪,我手头正好有一座桥和几处水滨产品可以卖给你,你要不要?
知识产权最根本的问题已经开始显露出来了:作为版权所有人,你可以将作品卖给别人,而自己毫无损失。这买卖对你来说没有一点风险,事实上,你还有权在许可证上撇清你的责任,你可能会这样写————假如版权有什么缺陷,我不会承担任何责任。听起来很荒谬吧?更令你惊讶的还有,接着看。
版权更大的缺陷就是,消费者的权益得不到任何保护。
还有更糟的。版权所有人不但有权毫无损失地把作品一次次卖出去,而且要是外头有人在卖一些类似他作品的东西,他还有权起诉他们。显然,版权所有人甚至对有他作品衍生的作品都拥有权利。
显然?别那么快下结论。要是真这样,你又要如何界定受了启发的灵感创作和抄袭呢?要是不同的人有了相似的创意,那又该如何呢?这么一个能把创意一次次卖出去,还能叫其他人滚开别多管闲事的肥差,他们谁能得到?这已经不是消费者的权益不受到保护的问题了,其他有创造力的人们的权益也丝毫没有受到“知识产权”的保护。
在这一点上,争论变得越来越别扭了,那些强烈支持知识产权法的观点大多集中于给创造者及艺术家更多的“保护”。人们好像从来就没有意识到,给予这些人这么强大的权利意味着同时剥夺了其他人的权利。
听到这个,也许你不会感到惊讶————主张强化知识产权法规的,正是那些从知识产权中获利最多的组织。不是技术家或创造者自己,而是那些知识产权交易所,那些靠别人的创造力挣钱的公司。对了,当然还有律师!结果怎么样呢?版权修正案,比如说不太有名的《数字千年版权法案》等,把消费者使用版权作品材料的最后一点权利给彻底剥夺了。
说到这儿,你要是觉得我认为版权是有害的,那就错了。我恰恰是最爱版权的,我只是觉得作者们的权利被保护得过了头,至少不应该把消费者给压得死死的。我这么说,并不只是站在消费者的立场,我同时是以版权作品(这本书和Linux系统)的创造者身份来表达我的意见的。
作为一个版权所有人,我拥有一些权利。不过,有权利就有义务,或者像有些人在一些圈子所说的,位高则任重。所以我有义务负责任地行使这些权利,并且不能以版权为武器伤害没有同等权利的其他人。正如有个伟大的美国人说的:“不要问你的版权能为你做什么,问问你自己能为你的版权做什么。”大意是这样。
最后,尽管有《数字千年版权法案》的败笔,版权还是一种适度的且循规蹈矩的知识产权形态。“正当使用”这一观念也依然存在,而且一个人持有版权,也不代表他就能对这个作品为所欲为。
要是说到专利、商标、商业机密什么的,那情况就不一样了:它们可是重量级的知识产权。尤其是有关软件专利的讨论,在技术圈子里争辩的情势可谓剑拔弩张,各种意见纵横交锋,以至于软件专利和枪支管制、堕胎权利、药用大麻,还有到底是百事可乐好喝还是口可可乐好喝这几个问题并列成为社交场合中最不适宜提及的问题。专利之所以能引起这么大的反响,是因为专利在很多方面和版权类似,也能赋予专利权人对新作品的控制权,但与版权保护不同,即使掌握了控制权,专利权人也未必能从中捞到那么多好处。
和版权保护不同,专利权最尴尬的一个问题就是,并不是你创造了一件新作品,就能凭空获得专利。没那么简单,你得向专利局提交申请,经历那痛苦而漫长的申请手续,然后才能获得专利权。顺便说一下,这个漫长的等待过程,就好像是在车管所排队等审批似的,不过你得明白,你面对的可是十二个专利律师,而且这队伍得排上整整两年。简而言之,这可不像星期五晚上孩子们都睡着了之后你可以寻的那种乐子。
更糟糕的是,专利局还未必有足够的资源来核查你的作品是不是真的那么具有开创性。当然了,专利局又没有爱因斯坦坐镇,所以给新作品以恰到好处的核查是相当困难的。这就意味着,在很多情况下,伪造的专利也能通过审查。你可以把它想象成一个由哲学博士经营的邮局————弄不好枪支也可以邮寄了。
结果怎么样呢?很明显,只有少数的人能拿到专利。另一方面,商业公司却拿到了一大堆专利,这些专利是他们用来对付其他公司的武器,其他公司要是有什么风吹草动,就可以威胁他们说要以侵权专利权提起诉讼。现如今的专利系统与版权之间更像是冷战关系,而不再是核战关系。不过这种局面也好看不了多少。被迫躲在防空洞蜷缩成一团的人们,也就是那些个人创造者,不比那些商业公司,他们不得不和一个乱了套的专利体系打交道,他们也没有资源,请不起一万两千个律师来伺候这么一个专利申请手续。
那么,要是不想遭遇申请专利的这些麻烦,你可以走知识产权最重量级的那一条路:商业机密。商业机密的优势在于你压根就不用烦心“商业机密局”什么的————只需要将作品封存起来,贴上一个“机密”标签,就够了。你还是可以把这件事告诉别人,不过你得跟他们说这是机密。
以前人们就是这么做的,这其实也是后来引入专利的相关法规的原因。为了鼓励个人和公司公开自己的秘密,专利法规会在商业市场上给予你一定期限的保护。当然了,你得把你成功的秘诀公开才行。这是一种“投桃报李”的基本形式:你告诉大家你是怎么做到某事的,我们就给你一定年限的专有权。
在专利出现之前,人们会小心翼翼地守着他们的技术优势,一直到把这些秘密带入坟墓。有前途的技术从来不暴露给其他人,这显然是不利于技术进步的。而专利为创造者提供的专有权利,恰恰促使了创造者公开他们的机密,因为他们不必再担心竞争对手发现他们在干些什么了————就这一点上看,要是他们把作品藏着掖着不愿公开的话,作品就得不到保护了。
不过,那都是以前的事了,现在就不同了。现在连商业机密也有法律保护了,不过原因就不太好理解了。正常人能懂,一旦秘密泄露出去,就不是什么秘密了。在知识产权法规中,却有一个古怪扭曲的例外————就算人人都知道了这些秘密是什么,它们依然可以继续是秘密。哪怕你对某些秘密知识一知半解,要是你碰巧跟错了雇主,弄不好你还会因此吃上官司。是啊,有一些知识产权法规真是太恐怖了。
很大程度上,在知识产权战争中寻找和平之道,正是开源运动的宗旨。开源运动究竟想要干什么,很多人都有自己的理解,不过你可以把它看做是一场高技术的缓和政策,既支持支持产权战争,又反对在战争中把版权作为武器。
版权是一种法律武器,开源运动却更愿意把它当作邀请函,邀请其他人加入项目一起来玩,而不愿当作武器来对付其他人。就像俗语所说的:要做爱,不要作战(Make Love,Not War),除非事情发生在一个稍微显得抽象些的层次。
话说回来,这跟所有大哲学命题一样,总会有另一面。我的精神分裂就是在这儿被搞出来的。
我已经试着解释过了,为什么很多人都觉得知识产权————尤其是强化知识产权法规的主张,是邪恶的。对开源社区里的很多人来说(说实话,开源社区外也一样),没有比销毁所有的核武器、完全废除知识产权的冷战更加喜闻乐见的事了。其他人可就不同意了。
他们会从另一个角度看————没错,知识产权是不公平的;没错,知识产权法规的设计确实是比较偏向于满足大公司的目标,而非保护独立作者或个人创造者的权利。喂,这样不是能利益最大化吗!知识产权法规把焦点聚集在威力最大的地方,不正是其成为在商业市场上发挥高效作用的最有力武器吗?就像核武器在冷战中成为终极武力一样,版权在科技战争时代也大受欢迎。科技因此而繁荣。
这也形成了一个有力的正反馈循环。因为知识产权是一项极好的收入来源,为了创造更多的知识产权,大量的钱就会被投入进来。这件事是至关紧要的。历史上不少战争成为了许多伟大发明和工程的进步源泉(当初人们也是为了军事目的才研发计算机的),同样的道理也适用于知识产权的虚拟战争,它也促进了工程的进步,还为科技发展带来了前所未见的资源。这是好事。
当然了,作为一个势利的知识产权所有人,我认为,光是源源不断地用掉资源,未必就能启发真正的创造力。看看今天的音乐行业,你就明白了。每年为了发掘新星,大把大把的钱就这么花出去————可还是没有人觉得辣妹组合(她们因为对艺术的贡献而获得了不少巨额奖金)能够和莫扎特(他去世时一贫如洗)相提并论。所以,虽然钱是投入进去了,但未必成就得了天才。
然而,像我这种势利眼的看法————天才是花钱也买不到的,在长期的商业模式中未必行得通。创造力的源泉是无法预测、无可捉摸的,所以长期的商业计划不应当把精力集中与发展存粹的天才这一件事上。今天的科技发展(很遗憾,音乐也是)不是仰仗爱因斯坦的能耐(音乐也不是仰仗莫扎特),而是靠着一大群埋头苦干的工程师(对于音乐来说,则是一群身材较好的年轻女性)走起来的。这些人不是天才,而是历经百转千回才偶然灵光一闪,迸发出创意的火花。源源不断加入的资源并不能成就伟大的艺术品,但是能造就稳步渐进的发展。说到底,这才是最佳的模式。
“埋头苦干的工程师”听起来可能没有“古灵精怪的天才”那么具有浪漫的吸引力。想想有多少电影是关于“疯狂的科学家”的,又有多少电影是关于“埋头苦干的工程师”的?不过,要是说到商业,你确实还需要偶尔天才般的灵光一闪,但更重要的是,你需要长期保持稳定不断的小进步。
这就是知识产权力量的闪光点了:知识产权非常能来钱,它已经成为了现代科技公司的圣杯,维持着整个商业机器的运转。因此,公司能够无阻碍地平稳进步,都要感谢知识产权的保护。知识产权可能不再那么有创新意义了,但它是可靠的。
那么,双方的观点我都顾及到了。不过我的承认,多数时候我还是宁愿看到一个更好玩、更激动人心的技术世界。在这个技术世界里,经济因素不会总是占优势。我有一个梦想————我梦想有一天,知识产权法规由品行端正的人来制定,而不是由那些从知识产权中得益最多的人来制定。
相信我,我真的懂经济问题。同时,我禁不住想,要是经济问题不曾对现代知识产权法规产生如此严重的负面影响,那该多好。为强化知识产权而采取的经济刺激和法律上表述“正当使用”和“品行端正”的苦难,导致在知识产权问题上,双方的观点渐行渐远。这就好像邻里间的争端,在两个极端之间的某处其实是有一个恰当的解决办法的,怪只怪双方都不愿意承认这一事实。
《数字千年版权法案》不幸被通过了,说明在这方面,经济上的刺激还是很有效的。问题是,究竟什么样的知识产权法规,才能不总是被那些拼命弄钱的人牵着鼻子走,同时又能推进发展呢?
现代科技(尤其是互联网)的发展正在削弱许多传统的知识产权保护形式,它的速度快得我们始料不及,削弱的方式千变万化,谁也没法预料。这个事实使得上述的问题更加突出。谁能想得到,中西部的老太太们会在互联网上剽窃你的绣花针技术呢?大规模地复制艺术作品的能力和复制技术本身已经传播得十分广泛,而且还不难,以至于拥有既定知识产权的机构竭尽所能到处奔走,尽力去维护他们自己的权益。他们全力以赴想要界定这类复制为非法行为,并且引入新的措施来惩戒那些剽窃技术的行为。
这样的情形有什么不对呢?问题在于,假如采用了新的措施,虽然非法使用别人的知识产权作品会变得困难,但同时,合法使用也变得更加困难。Linux世界就有一个经典的案例,所谓的“DeCSS案”
在DeCSS案中,那些研究DVD影片解码的人被娱乐公司起诉了,因为他们把这些代码共享到互联网上。在这个案件中,他们做这个项目的终极目标是完全合法的,但在法官看来,这已经无关紧要了。问题是,这个项目极有可能被用于非法用途,这一点使得这个项目变成非法的了————在美国,就算只是传播获得解码器的途径,也是非法的。这个解码器叫做DeCSS,是因为它的作用是破解DVD的内容加密技术(Content Scrambling System)。用了这个解码器,你“De-CSS”了影片,解除了影片的加密,就可以在你的电脑上观看影片了。
这是一个完美的例子。知识产权法规并没有被用于鼓励创新,而是用在控制商业市场上了,规定消费者什么能干,什么不能干。这是知识产权法规过了火的一个例子。
顺便说一下,这种对知识产权权利的误用不仅仅是在技术圈子里。另一个典型的例子,是利用商业机密法规来起诉和迫害那些试图向大众揭露山达基数(Scientology)真相的人。山达基数成功地把他们从圣经中摘抄的教义片段(“先进技术”)给归入到商业机密保护法下,利用知识产权法规为自己辩护,以免于向大众公开他们的教义。
保护知识产权,难道就没有其他的办法了吗?想象一下,有这么一部知识产权法律,把其他人的权利也考虑周全了。想象一下,知识产权法规鼓励开放和共享的理念。在这样的法律下,你当然可以保有你的机密,技术机密也好,宗教机密也好,但是你就不能再强行采用法律的形式来保护这类机密了。
对啊,我知道,我太不切实际了。
开放源代码的意义
IBM这个公司历来就爱把消费者玩弄于鼓掌中,它通过哄骗消费者和垄断市场来牟利。事实上,以前绝大部分电脑公司都是这么做的。还有部分公司今天依然在这么做。后来当IBM开发PC机的时候,无意间公开了自己的技术,这样一来人人都可以复制了。这一小步史无前例地引燃了PC机革命,PC革命又引燃了信息革命、互联网革命、新经济,说不清楚还有什么革命也被引燃了,反正整个世界就要大变样就对了。
都说抱着开源理念的心态做事能获得前所未有的效益,这就是最好的证明了。尽管pC机的技术开发从没有采用开源模式,但作为一种开放给所有个人和企业,任由别人复制、改进和销售的技术,PC机已经是一个绝佳的例子了。开源模式以一种动机最单纯的形式,允许任何人参与到某个软件的项目开发或商业推广上来。Linux无疑是开源模式最成功的例子。Linux开始于我赫尔辛基老家那个乱糟糟的卧室,如今已经成为世界上有史以来最大型的协作项目。而开放源代码最初不过是软件开发者们共同的理念,他们认为电脑源代码应该免费开放和自由分享,并将GPL条款————就是那个“反版权”许可,作为开源运动的强有力工具。开源模式如今已经成为顶尖技术持续发展的一种十分有效的方法。而且随着持续的推广,开源模式也获得了市场的广泛认可,已经有越来越多的公司把Linux作为网络服务器的操作系统,这种形势如滚雪球一样,申请IPO的公司更是多得超乎你的想象。
作为一种由开源理念激发的技术,Linux已经充分地证明了自己,并且在市场中赢得了一席之地。如今开源模式已经不仅仅局限在技术和商业范围了。哈佛大学法学院的拉里·莱西格教授和查尔斯·尼森教授已经把开源模式应用到了法学范畴。他们开展了“开放法律”计划,这个项目由律师和法学院的学生组成志愿者,他们针对《美国版权期限延长法案》的相关问题提出意见和进行研究,并把相应的结果发布到该项目的网站,协助完善驳斥该法案的依据和要点。这个计划的指导理论是:当大量有法律头脑的人聚集起来为一个项目出谋划策时,就能得出最有力的论据。而且通过发布和转发,这个网站收集到的信息不可估量。网站将传统的交流模式有机地整合起来:“我们悄无声息流走的智慧,有望在群体深度的信息和广泛的辩论中重新获得。”(放在IT领域的语境就是:一百万双眼睛盯着,所有软件的Bug都会无所遁形。)
学术研究虽然历经多年探索,但在众多的前沿研究里能取得成果的寥寥无几。这无疑是一直以来困扰研究人员的难题。运用开源模式,许多问题也许就能迎刃而解了。比如,运用开源模式来加速疾病治疗方案的提出,或者通过开源模式聚集最有智慧的核心人员来加强和巩固国际外交。随着世界变得越来越小,生活和商业的节奏越来越快,科技和信息越来越普及,人们逐渐意识到那种关起门来想办法的方式已经过时了。
开放源代码背后的理论很简单。以操作系统为例,源代码,即那些构成系统的程序指令,是自由的。任何人都可以对这些代码加以改进、修改或者利用。但是这些改进、修改和利用又必须是其他人可以自由获得的。这大概和禅宗是一个意思。这个项目不属于某个人,而属于所有人。某个项目一旦用了开源模式,就能获得迅速而持久的进步。你想啊,一旦开了源,就能同时拥有许多团队并驾齐驱地投入工作,很多问题就能快速地迎刃而解,这个项目也会更加成功。关起门来开发和这个根本不可同日而语。
这种情况,我们在开发Linux那会儿早就经历过了。想象一下:你身边是一个庞大的开发团队,而不是一个与世隔绝的开发小组在秘密工作。就这一个项目,也许就有几百万个才华横溢的程序员投入工作,而且他们互相之间,呃,尽管看不见对方,还能互相评论彼此的工作成果。
人们头一回听说开源模式时,都觉得不可思议。这也就解释了为什么经过了那么多年以后,它的好处才被人们所理解。单靠其背后的开源理念,这种模式就无法传开的,只有当人们开始注意到开源模式原来是发展和完善最佳质量的技术的最好方式,它才能逐渐获得人们的青睐。如今开源模式在市场中已经获得巨大的成功,这种成功也使开源理念获得了前所未有的认同。围绕着无数的增值服务,许多公司如雨后春笋般纷纷建立————也有公司将开源理念作为推广技术的方式。当财富如潮水汹涌而来,人们也开始对开源理念的魅力深信不疑了。
开源运动如此神奇,其中最令人费解的一点,就是为什么会有这么多聪明绝顶的程序员愿意在完全无报酬的情况下去屈尊工作。用一个动机来概括这一切,最合适不过了。在生存已经或多或少得到保障的社会里,金钱不是最大的动机。众所周知,人们被热情驱使的时候,就能把工作做到最好。要是他们能享受工作的乐趣,更是如此。对软件工程师来说是如此,对剧作家、雕塑家和企业家来说也是如此。开源运动不仅给人们提供了一个在生活中释放热情的机会,也能使他们获得乐趣。在开源环境中,软件工程师不再只能与公司里雇来的那几个同行一起工作,而是能够与世界上最优秀的程序员一起工作。他们必须使出浑身解数才能赢得同行的敬重。这难道不是一种高效的激励模式吗?
也许比尔·盖茨就不懂得欣赏这些了。当时他给参与开源运动的程序员写了一封信,信中他问道:“你需要做的,就是防着别人写出优秀的软件。谁愿意从事这么专业的工作而又不索取报酬呢?”现在,他或许已经被自己在1976年问的这个令人不快的夸张问题感到难为情了吧。
事实上,要理解开源现象的话,可以将它和许多个世纪以前宗教如何看待科学这件事摆在一起看(如果科学的发展不是今天这个情形的话,那我刚才说的话就得改成“一些怪老头如何看待科学”)。最初,科学被当成危害性极强的、极具颠覆性的事物,从事科学工作是不被允许的。基本上,有时候软件公司就是这么看待开源模式的。但是,正如科学的诞生不是为了破坏宗教制度的根基一样,开源运动也无意于破坏软件行业的根基。开源运动的诞生,是为了创造最好的技术,并且让这种技术发展到它所应该达到的程度。
科学本身是不能创造财富的。创造财富顶多算是科学的连带效果。开源模式也是这样。它促成二级产业的诞生,并由此引发了二级产业对现有产业的挑战,这点就类似于科学的副产品向教堂发起挑战那样。你会发现像VA Linux这样的小公司只不过沾了开源模式的光,突然间就能和传统的公司竞争了。借用牛顿的话来说,这就是站在了巨人的肩膀上。
没错,随着开源运动在世界经济中发展壮大,随着参与开源运动的程序员们越来越多地获得认可,他们逐渐成为雇主眼中的摇钱树。相关开源软件项目通常都会附加致谢名单,借此感谢那些为项目作出贡献的开发者,以便决定是谁作了最大的贡献。这些公司搜集“开发者名单”,然后通知人力资源部门将一车的金钱和股票期权送到最有潜力的程序员手上。在前面的段落我就说过,对这些开发者来说,挣钱不是最主要的动机,而且在我要说的下一个句子里,也没有改变这个观点。但我也不否认,作为辛勤工作换来的报酬,金钱不是什么坏东西。尤其是当我想要给我的宝马车加油的时候,手里有点钱其实也不赖。
正如科学本身,开源运动的连带效果是不可估量的。它正在创造一些直到现在还被人们认为不可能的东西,并且打开了许多前所未有的市场。有了Linux和其他的开源软件,很多公司就可能拿来开发他们自己的版本,作自己需要的修改,要是没有开源运动,这些是绝对不可能实现的。人们惊喜地发现,只要是用Linux来工作,他们从一开始就不会孤独无依。而且,Linux甚至在中国也得到了迅猛发展。以往,亚洲的软件行业一般都是靠翻译美国或欧洲的软件来发展的。如今,这群生活在地球另一边的人们正在用Linux开发他们自己的软件。更让我感到骄傲的是,在Comdex博览会上竟然有人找上我,要给我展示Linux如何在他们的加油泵中运行。这是一个在Linux环境下运行的加油泵软件,拥有网页浏览器,能够让顾客在等待加油的三分钟时间里浏览CNN.com。他们也是站在了巨人的肩膀上。
那是1998年的春天,网景作出一个相当前卫的决定,他们将开放其新一代浏览器(即mozilla)的源代码。网景最终花了很长时间,才总算真正兑现了开放浏览器源代码的诺言。网景内部的一些人员组成反对阵营,声称他们不会接受外来人员制作的那些小补丁。公司内部的人员大家彼此很熟悉,而且即使他们不实际坐在咖啡厅里商议公司决策,他们也会在一个让大家互相感觉很亲近的“虚拟咖啡厅”商议决策。结果,网景不但没有把这个现存商业项目的开源运动做大,反而引起了很多负面新闻。直到关于公司内部的某次消极的决策会议传出去以后,网景再也不能故作高尚了。他们为了平息舆论,只能下狠心将相关的源代码向外部人员开放。开放之后,这个项目终于有活力多了。
当人们第一次听说某一样现存的商业项目要进行开源的时候,他们老爱问几个相同的问题。其中一个是,要是出现外部人员比公司内部的自己人做得更好的情况,这种事情不仅是自己人会知道,而且天下人都会知道,公司内部人员会作何感受。我觉得他们应该为此感到高兴,因为大部分繁重的工作不用他们做,而薪水是照打不误的。从那个角度来看,开放了源代码或者其他什么东西是不可原谅的,竟然导致了内部人员“吃饭不干事”的行为。开放了源代码,就能明明白白地看出谁能够完成工作,谁能够做得更好。而且,谁也无法再向管理层掩饰他们的无能了。
开源运动是充分利用外部资源的最佳方式。不过,公司内部仍旧需要安排人干事,这样才能根据公司的需求管理项目的开发过程。这个人甚至不一定非得是项目的领导者。事实上,要是外部的某个人愿意无偿地接手项目管理的工作,对公司来说也是一件好事。如果他能做得比内部人员更好,就再好不过了。但问题是,如果由外部人员来管理项目,项目也许就不能向公司希望的方向发展了。所以,公司本身就必须负责好自己的需求了。项目的开源能使公司节约自身的资源,但那并不意味着内部资源就一无是处了。项目可能会发展壮大,到时规模可能比公司自己开发时还要大。外部资源能够使公司成为一个能节约更多成本、更加完善、更加平衡的系统,当然也会存在另一方面的问题:这一系统将不再只考虑公司自身的需求,而会把客户的需求也考虑进去。
也许,在整个过程中最令人烦恼的就是放弃自己的控制权,并且接受这样一个事实————外部人员可能懂得更多。另一个难题是,公司内部必须任命一个有魄力的技术领导。这个人必须是从技术和政治两个层面来说,公司内部和外部两个阵营都能够信得过的人。必要的时候,这个人得有勇气去承认这么一个事实————这个项目可能从一开始就出了岔子。这个人必须能说服每个人,与其把这些问题藏着掖着,还不如从头来过,这意味着要说服别人放弃幸苦工作的成果。这可不是人们愿意听到的。然而,这些话如果是来自一个受尊敬的人的口中,人们总归是能接受的。
由于要同时兼顾办公室政治和公司的典型运作方式,这个领导者必须是极富个人魅力的人。他必须习惯在工作中经常用邮件沟通的方式,遇到争端时还必须做到不偏不倚。我并不想用军队常用的“联络”这个字眼,因为这就意味着会有两个阵营————内部阵营和外部阵营。事实不该是这样发展的,既然开发同一个项目,大家本该不分内外才是。技术领导者应该由公司聘请,但他自己应该清楚,而且所有的人也该清楚,就是即使领着公司的薪水,领导者也不该只为公司说话,而应该只为这个项目说话。领导者要是与公司走得太近总是很危险的。人们也许会相信他技术方面的能力,却未必会相信他在技术方面的判断。
公司内部能找到这样有外交手腕的人吗?
就好像是“给我找一个诚实的人”。
这就是为什么在数年前,我要极力避免与Linux公司有任何瓜葛。关键是,金钱越来越物质化了。要是别人发现你身边的金钱滚滚而来,他们就会开始怀疑你的动机。对我来说,我一直以保持中立为荣。你绝不会懂得保持中立对我来说有多重要,这简直快要把我逼疯了,我容易吗我!
好吧,你是对的。我应该消停一下了。开源运动不是对每个人、每一个项目或每一家公司都有用。但是,人们对Linux的成功观察得很多,他们就越能够意识到,上面说的一切绝不是那种两腿直哆嗦、喜欢空想而又无知的高中生的激昂演讲了。
放开一切事物,就会激发无限的可能性。在过去的五年里,记者问我多少次,我就提到多少次开源运动。过去,我需要解释开源运动是什么,开源运动有什么好处,但是老实说,这就像是一次看不到尽头的艰苦跋涉,像是在沼泽地里蹒跚前行。
现在大家总算明白了。