Linus Torvalds - Just for fun The Story of an Accidental Revolutionary

JUST FOR FUN


陈少芸译版《只是为了好玩 Linux之父林纳斯自传》


有些人生来就注定能领导几百万人,有些人生来就注定写出翻天覆地的软件。

但只有一个人两样都能做到:托瓦兹



Linux发展编年表:

1991年9月17日,21岁的芬兰学生林纳斯·托瓦兹在网上发布了开源操作系统Linux0.01。

1992年1月5日,Linux0.12版本随同采用GPL许可证的版权声明发布,使得开源的Linux商用成为可能。

1993年8月16日,伊恩·默多克发布了第一个Debian Linux的发行版。Debain是最有影响力的Linux发行版之一,是Ubuntu等众多发行版的鼻祖。

1994年11月3日,Red Hat Linux套件出售。此后Red Hat一路发展成为全球最重要的Linux和开源技术提供商,成为开源商业模式典范。

1996年5月9日,林纳斯在网上征集企鹅图案作为Linux品牌标识,平面设计师拉里·尤因创造的黄背黄脚蹼的名为Tux的小企鹅入选。企鹅是林纳斯最喜欢的小动物。

1997年6月,大片《泰坦尼克号》使用Linux操作系统制作特效。

1998年5月1日,基于Linux的Google搜索引擎面世。

1999年3月,第一届LinuxWorld大会召开,象征Linux时代到来。7月,Intel公司启动对Linux的支持服务。这可以视作Linux真正成为服务器操作系统的一员的重要里程碑。

2007年11月5日,Google公司发布Android移动平台。

***********************************************************************************************************************************************************************************

拓展:

Android与Linux有何关系?

Android的诞生

http://www.cnblogs.com/jack-king/articles/5836058.html

安卓的教父人物---安迪 鲁宾(英文名是 andy rubin) ,安卓系统最开始的时候是为了高清的照相机进行研制的一款开发系统.所以,对于屏幕的分辨率,和一些对于细节的处理就可以让大家看到他的细致.

 

https://www.zhihu.com/question/22057242


*****************************************************************************************************************************************************************************************

2011年5月11日,Google发布基于Linux内核的云操作系统Chromen OS.


引言 革命风暴随手记

Linux特有的开发方式——由数十万程序员志愿者组成的强大社区,要使它成为有史以来最大的协作项目。其背后的开源哲学再简单不过:信息—在这里具体是指操作系统的源代码或基本指令,应该对有兴趣改良它的人们免费开放并被自由分享。而这些改良后的信息也应该是自由共享的。


给大卫·戴蒙的邮件

……

这周末我考虑很久了,要是你真的有兴趣,我觉得自己也开始有这个意思了。那咱们就来做这笔买卖吧:如果你觉得我们真的能捣鼓出一本好玩的书,而且在这个过程中我们会玩得很开心(这点很重要),那咱们就动手开始把!……这么说吧,我可能不回去读一本关于我自己的书,但至少咱捣出这本书的过程,我想会很好玩。


序言 生活的意义之一(性、战争和Linux系统)

有三件事情对生活是有意义的,它们是生活中所有事情的动机——包括你做的所有事情和任何一个生命体会做的事:

第一是生存,第二十社会秩序,第三是娱乐。

生活中所有的事情都遵循着这个顺序,娱乐之后再无其他。

林纳斯:……最好的理解就是性了。它最开始只是延续生命的方式,但后来变成了一种社会行为,这也是人们结婚的原因。再后来变成了一种娱乐。

林纳斯:我们来说说战争吧。最初,战争显然是为了生存,你得先和别的大块头抢水源;后来,你又得和他抢老婆。之后战争的目的就是建立社会秩序了。现在战争就成了一种娱乐。电脑游戏,战争游戏,CNN电视台都是。

对于所有事物来说,一部分动机可能就是生存,一部分可能是社会秩序,其他可能是娱乐。你看,技术就是这样,技术发明最初是为了生存,后来就不仅仅是为了生存下来,而是为了更好地生存。人们为了从井里打水,才发明了风车……






林纳斯:归根到底,咱们只是为了好玩。……

大卫:只是为了好玩(Just for fun)?


目录:

一个怪胎的诞生

一个操作系统的诞生

舞会之王

知识产权

消灭控制欲

科技的过山车之旅

开放源代码的意义

名声与财富

生活的意义之二

译后记

附录:中国程序员眼中的Linus


一个怪胎的诞生

外公的计算机

外公,赫尔辛基大学统计学教授

当时计算器真的是计算给你看

Commodore VIC-20

那个时候计算机刚刚起步发展,商业程序开发基础还未形成。那台计算机唯一能做的用BASIC语言编程。

他希望我能和他一起体验其中的乐趣,也试图培养我对数学的兴趣。坐在外公膝盖上帮他输入他实现认真写在纸上程序。之后开始研究那台计算机使用手册,一些游戏程序、他写的第一个程序跟其他人编写的第一个程序没什么两样:HELLO

他向外公讨钱买计算机书,买计算机杂志,其中一本登了莫尔斯电码程序(特别,不用BASIC语言写,由一组数字写成,这些数字可以手工转换成计算机能读懂的0和1)

他老妈说他是个很好养的小孩,只要把他和一台电脑关在一个黑乎乎的小屋里,再时不时仍一点面包进去就行了。

他写过一个在深海洞穴里控制潜水艇前进的游戏。

1999年春天——大卫的话

美国网景公司为首的众多公司采纳了开放源代码概念,有的干脆直接用上了Linux操作系统。

林纳斯当时还在芬兰读大学,他在自己宿舍里编写了一个Unix操作系统的新版本,功能十分强大,后来他将这个系统免费发布到互联网。

林纳斯对美国商业史和世界政治都非常熟悉。

我问他,如果见到别·盖茨的话想跟他说什么,他却回答说自己连和比尔·盖茨见一面的欲望都没有。

中学时代

在我看来,数学和物理都很有趣,所以很容易学。而其他不管是什么课,但凡需要死记硬背的,我的兴趣立马落到谷底。

芬兰中学毕业时……我记得玩的还算开心把,不过的确没有什么特别印象。但是你要问我当时我那台68008芯片的电脑配置,我可以一口气给背出来。

长大成人

主修计算机专业,辅修课程:物理和数学。和他一样,还有一个叫拉兹·维泽尼尔斯,他们一起加入了理科生俱乐部:频谱Spektrum。

服兵役,重塑人格的经历。

林纳斯谈童年——大卫的话

我会记得事物的规律和组织原理,但是具体的事情我就记不得了。

一个操作系统的诞生

昨天的电脑

小时候,我只用过3台电脑,前面提过的从外公那里得到的Commodore VIC-20,也是最早的“家用”计算机之一,也就是PC机的前身。

Commodore 64接替了VIC-20。紧随其后是Amiga。

不过,这3款机器从来没有像PC,甚至是苹果II那样真正兴起来。

家用计算机大多用汇编语言写的。当时每种计算机上,操作系统都是各家自造的,就跟PC机上有个DOS操作系统一样。计算机种类不同,其操作系统也有明显差异,要么特别简单,要么功能稍微强一些。就拿DOS来说吧,就只有一个程序加载器和一个基础语言环境。

……这些活儿还挺有意思的,我一向喜欢户外活动

Sinclair电脑是家用计算机市场上32位计算机始祖之一。在当时Sinclair公司的创始人克莱夫·辛克莱爵士就相当于是英国版史蒂夫·沃兹尼亚克

***********************************************************************************************************************************************************************************

拓展:

苹果的沃兹:

https://en.wikipedia.org/wiki/Steve_Wozniak

Steve Wozniak

Wozniak Tearfully Remembers His Friend Steve Jobs点击打开链接

Steve Wozniak's Top 10 Rules for Success (@stevewoz)点击打开链接


***********************************************************************************************************************************************************************************

Sinclair电脑有专门编写的操作系统,叫Q-DOS。它有一个还算先进的Basic语言,图像处理能力也非常好。Q-DOS最令我激动的是它的多任务处理能力:你可以同时在系统上运行多个Basic程序。不过,Basic部分就没有多任务处理能力,所以你不能同时运行多个Basic程序。但要是你自己动手用汇编语言写程序,就能让操作系统安排好时间表,分时运行,那就可以同时处理多个程序了。

这台电脑有一块8M的68008芯片,是摩托罗拉第二代68000芯片,也是68000芯片简化版。就其内部构造来说,第一代68000芯片是32位的,但它有一个16位对外接口,用以连接除了CPU之外的设备(比如说内存或外接硬件)。因为它一次只能从内存上加载16字节的数据,所以16位操作通常比32位操作快的多。这种架构非常受欢迎,现今很多嵌入式设备和汽车还在使用。虽然芯片不同,但架构还是一模一样。

我的电脑里68008芯片在和CPU之外的设备连接时用的是8位接口,虽然每次它和外部设备的互动是8字节的,但其内部还是32位的,因此在编程是 ,使用起来非常不错。它有128KB内存,我那台被它取代的VIC-20只有3.5KB的内存。而且由于它是一位32位的机器,所以可以毫不费力地一次读取所有的内存,这在当时可是空前强大的。

就这样,我花了两千美元买回这台Sinclair QL电脑。我曾经有一个Forth语言的解释和编译器,纯粹就是拿来玩的。

键盘右半部分安置了当时具有革命意义的Sinclair微型驱动器(其实也就是两个能在Sinclair电脑上使用的无限循环磁带),它的作用就相当于现今的磁盘驱动器。

那时候我自己会编写程序设计工具。这台机器就有一个带EEPROM卡的扩展槽。就算关机卡中内容也不会丢失。这样一来,我什么时候想要用到这些工具都可以从EEPROM上直接调用,而不用再把它写入RAM内存,占用那点珍贵的内存来编程了

来瞧瞧我为什么会对操作系统感兴趣吧:我自己买了一个软盘控制器,所以不用非得去用电脑自带的微型驱动起了,但是这个软盘控制器上的驱动程序用起来太别扭了了所以最后我只好自己写了一个在写驱动程序的过程中我又发现了这个操作系统的一些Bug——就算不是Bug吧,至少我发现了实际上它能干的事和说明书上的描述并不相符。之所以我能发现这个问题,是因为我写的一些东西在电脑上无法运行。我的代码一直都……嗯,很完美,所以我知道一定不是代码的问题,肯定是别处出了错,于是我对这个操作系统进行了反汇编。

关于这个操作系统的书都写得不完整,但你也可以买一些来读读,多少有些帮助。还需要一个反汇编程序,也就是一个能把机器语言转换成汇编语言的工具 。(这一点很重要,因为要是只有一个机器语言的版本,要理解和执行它的指令非常困难)我自己就有一个反汇编程序,用它来建立目录相当不错。要是哪儿出了错,我就可以进入反汇编程序,从它给我标识的路径找到出错的目录。此外还能清楚地看到操作系统要干的任何事。有时候,我倒不是因为系统出了错才使用反汇编程序的,而是我想搞清楚某个程序究竟干了什么。

Sinclair QL令人反感地方,它的操作系统是只读的,根本不能改动他。钩子机制(hooks):你可以在钩子机制下切入自己写的代码来接管一些功能,但是钩子机制只在某些特定地方才有。要是能完全替换整个操作系统就好了!操作系统放在ROM上是个馊主意。

我买了个新的汇编程序,用来把汇编语言换成机器语言,另外又买了个编辑器,这基本上就是一个编程时使用的文字处理程序。当时买的汇编程序和编辑器都挺好用的,但是它们只能存在在电脑的微型驱动器上,无法放到EEPROM卡里。所以我又自己写了汇编程序和编辑器,在编程的时候用。两个程序都是用汇编语言写的,按现在的标准来看,还真是挺愚蠢的因为汇编语言既复杂又花时间。我敢说,如果解决同一个问题用汇编要比用C语言多花一百倍的时间,而且当时C语言已经问世。

我在电脑自带的解释程序上添加了一些命令,这样一来,我想要编辑点什么的时候只要让自己的那个编辑器自动运行他就直接出来了。我的编辑器比电脑自带的那个速度要快得多。编程时候屏幕上可以快速地呈现我敲出的字符,这点我很自豪。(一般这样的机器要填满一屏幕的字需要特别长的时间,从屏幕缓慢的滚动速度上就能看出来)。我这个改良的让这台机器用起来爽快多了,而且只有我才知道为了让机器这样高速运转,自己花费了多少心思。

我玩这台Sinclair QL时最常做的是就是克隆别人的游戏。以前我在VIC-20上喜欢玩的游戏,都被我在Sinclair QL上做了翻版,有时候我还会增强游戏功能。不过大部分都没能做得比原版更好:机器确实是比原先的高级,但游戏的玩法却没能变得更好。

我当时最喜欢的游戏应该是“Asteroid",不过我始终没能很好地把它复制下来。因为那时候所有游乐中心的”小行星“游戏的素材图都是矢量图,那些图不是由一个个颗粒(像素)组成的,而是采用CRT(阴极射线管)的原理,电子枪从CRT管后面发射出电子束,然后利用磁力让电子束偏转。这样就可以显示出高清的图像了,但要想复制下来就没那么容易了。复制这个游戏不难,但要把它写在一台没有这种高级图片显示能力的电脑上,那就和原版的”小行星“肯定是没得比了。

*****************************************************************************************************************************************************************************************

拓展:

Asteroids (video game)

https://en.wikipedia.org/wiki/Asteroids_(video_game)点击打开链接


Asteroids: Video Game History

https://www.youtube.com/watch?v=Fjzc1Cyprzg 点击打开链接

*****************************************************************************************************************************************************************************************

还记得我用汇编做过一个”吃豆人“(Pac Man)的翻版。这款翻版游戏是能玩的,把它投稿给一家发表计算机代码的杂志。一个问题是这个程序是用汇编写的。(从杂志上誊抄代码时候只要出了一丁点错误整个程序就废了)

*****************************************************************************************************************************************************************************************

拓展:

Pac-Man

https://en.wikipedia.org/wiki/Pac-Man 点击打开链接

The History of Pac-Man

https://www.youtube.com/watch?v=_13wt0p1XeE 点击打开链接

*****************************************************************************************************************************************************************************************

我自己也写过一些游戏程序,不过创作游戏需要花费一番心思。游戏运行对硬件有很多要求,得非常精通电脑硬件。我为什么会对Pac-Man这个游戏感兴趣呢?其中一个原因是这个游戏力图解决图像闪烁问题 。角色移动,把旧位置图像擦掉再复制一份图像到新位置。要是碰巧其中间隔时间把握不好,玩家就会看到这两个动作间空白,出现闪烁问题。

游戏之所以一直引领这技术潮流,而且通常程序员之所以最先写的程序都是游戏,都是这个原因。最聪明的程序员都是些躲在自己房间里玩的十五六岁的孩子。游戏总能促进硬件的发展。

要考验硬件的极限就得靠动作游戏。基本上游戏玩到某个阶段,你发现该有的没有、该快的不快,立马就能感觉到电脑那些硬件存在问题。

把写游戏比作拍电影,那么编程充其量就是剧组的摄像而已。


这台Sinclair QL电脑我用了三年(从高中走到赫尔辛基大学,再从大学到军队)。最后一年里发现它的一些短处68008确实是一块不错的CPU,但我在杂志上看到了新一代的68020芯片,支持内存管理和分页等各种功能。Sinclair QL真正让我恼火的地方是,尽管操作系统能够进行多任务处理,但它还是会随时崩溃因为它根本没有内存保护机制。只要有一个任务干的一点不对头,整台机器可能会崩溃。

在设计和制作Sinclair QL之后,克莱夫·辛克莱爵士在计算机领域就没有新的尝试了。因为这款电脑在商业上没有成功(技术很有意思,但在生产和质量有问题,产品宣传更差劲)。


上大学

没有项目可做,我也就没有了编程的激情。这时候就应该尝试去找一些事情来做,让自己兴奋起来。

这时,作为一名极客,我陷入了一种困境。和任何一个随着68008芯片一起长大的计算机纯化论者一样,我特别看不惯PC机。但是到了1986年,386芯片出现后,PC机看起来……嗯……开始有了那么一点儿魅力。68020芯片能干的活儿,它全部都胜任。而且到1990年,大规模生产和便宜的机器的出现, 令PC机价格大幅度下跌。升级设备和外接配件都很容易弄到手。

我决定不再瞻前顾后,准备直接跨出一大步,而且换掉CPU也会挺好玩的。于是我开始把Sinclair QL电脑零件拆下来卖掉。

每个人都会遇到一本改变自己一生的书吧。比如说《圣经》《资本论》《相约星期二》《在幼儿园学会需要知道的一切》诸如此类的。

而安德鲁·坦尼鲍姆所著的书《操作系统:设计与实现》让我脱胎换股,达到了一个全新的高度,改变了我的一生。

那时候,我选好了秋季学期的课程,其中最令我期待的一门课就是“C语言与Unix”。在夏天等开课时候,我就买了上头提到的那本教科书,迫不及待地先读了,希望能在开课之前就打好基础。(为什么人家不费力就能把数学和物理等学习,不用费力就能取得好成绩的原因,学习方法!

《操作系统:设计与实现》中,阿姆斯特丹自由大学的教授坦尼鲍姆讨论了他为Unix操作系统编写的教学辅助工具——Minix操作系统。Minix同时也是一个小型的翻版Unix系统。读了了Minix的介绍,了解了Unix系统理念,知道了这个强大、简洁、漂亮的操作系统能干什么之后,我很快就决定弄一台电脑来玩Unix系统(JUSTFORFUN)。到时候我会把这个Minix系统放上去跑,这就是我能找到的唯一一个相对有用的Unix系统版本了。通过读这本书,我逐渐了解了Unix系统,对Unix系统的热情也就越来越高。坦白说,我对Unix的热情从来没有淡过。我希望你们也能对某些事情说出同样的话。

*****************************************************************************************************************************************************************************************

拓展:

安德鲁·坦尼鲍姆所著的书《操作系统:设计与实现》

Andrew S. Tanenbaum

He is best known as the author of  MINIX , a free  Unix-like   operating system  for teaching purposes, and for his computer science textbooks, regarded as standard texts in the field. 

Teaching[edit]

Books[edit]

Tanenbaum is well recognized for his textbooks on computer science. They include:

His book, Operating Systems: Design and Implementation and MINIX were Linus Torvalds' inspiration for the Linux kernel. In his autobiography Just for Fun, Torvalds describes it as "the book that launched me to new heights".

Projects[edit]

Amsterdam Compiler Kit[edit]

The Amsterdam Compiler Kit is a toolkit for producing portable compilers. It was started sometime before 1981 and Andrew Tanenbaum was the architect from the start until version 5.5.[20]

MINIX[edit]

In 1987, Tanenbaum wrote a clone of UNIX, called MINIX (MINi-unIX), for the IBM PC. It was targeted at students and others who wanted to learn how an operating system worked. Consequently, he wrote a book that listed the source code in an appendix and described it in detail in the text.[21] The source code itself was available on a set of floppy disks. Within three months, a Usenet newsgroup, comp.os.minix, had sprung up with over 40,000 subscribers discussing and improving the system. One of these subscribers was a Finnish student named Linus Torvalds who began adding new features to MINIX and tailoring it to his own needs. On October 5, 1991, Torvalds announced his own (POSIX like) kernel, called Linux, which originally used the MINIX file system, but it is not based on MINIX code.[22]

Although MINIX and Linux have diverged, MINIX continues to be developed, now as a production system as well as an educational one.[23] The focus is on building a highly modular, reliable, and secure, operating system. The system is based on a microkernel, with only 5000 lines of code running in kernel mode.[24] The rest of the operating system runs as a number of independent processes in user mode, including processes for the file system, process manager, and each device driver. The system continuously monitors each of these processes, and when a failure is detected is often capable of automatically replacing the failed process without a reboot, without disturbing running programs, and without the user even noticing. MINIX 3, as the current version is called, is available under the BSD license for free.

Research projects[edit]

Tanenbaum has also been involved in numerous other research projects in the areas of operating systems, distributed systems, and ubiquitous computing, often as supervisor of Ph.D. students or a postdoctoral researcher. These projects include:



Operating Systems: Design and Implementation

https://en.wikipedia.org/wiki/Operating_Systems:_Design_and_Implementation 点击打开链接

See also[edit]


*****************************************************************************************************************************************************************************************

从Unix开始

20世纪60年代后期,这个强大的操作系统诞生于AT&T(美国电话及电报公司)的贝尔实验室,但随后在其他地方逐渐发展起来。

VMS系统非常适合操作数据库等、

还是夏天的时候,我已经等不及想把我在教科书上学的知识在Unix上做实验,而且对我即将在Unix系统上做的探索感到特别兴奋,当然我得先把那台386电脑弄到手才行。

整个夏天把719页的《操作系统:设计与实现》读了多遍。那本红色软封皮的教科书住到了我的床上。

在Unix的世界里我们都是新手,对这门课也是一边学习一边完善。关于这门课,最明显的就是Unix系统背后一套独特的理念。Unix系统的独特之处就在于它所追求的一整套基本理念。它是一个既干净又华丽的操作系统。这个系统有“进程”这样一个概念,做任何事情 都有一个进程。我举个简单的例子吧,shell命令是一个输入后可以访问操作系统的命令,这个命令在Unix系统里不像在DOS系统那样已经嵌入到操作系统中。它只是一个任务,和其他任务没什么两样。这个任务就是读你的键盘动作,然后回写到显示器上去。在Unix系统上,任何事情都是进程使其发生的。此外就是文件的概念。

正式这个简单的设计激起了我和大多数人对Unix系统的兴趣(好吧,不是大多数人,至少我们这些极客们被吸引住了)。几乎所有你在Unix系统上做的事情都是由6个基本操作完成的(这6个操作叫做“系统调用”,因为这些操作就是你对操作系统的调用,从而令操作系统为你完成任务)。通过这6个基本的系统调用,你季候可以在Unix上完成所有事情。

Unix系统有一个fork(创建子进程)的概念,这也是Unix系统的基本操作之一。当一个进程调用fork指令的时候,它就把自己给复制下来了。这样就有了两个一样的进程,新建的子进程一般用来执行另一个进程——用一个新的程序替换掉它自己。这就成了系统的第二个基本操作。接着就是另外的四个系统调用——打开(open)、关闭(close)、读取(read)、写入(write),都是用来访问文件的。这6个系统调用组成了Unix的基本操作,从而构成了Unix系统。

当然,要是往细了说,还得有数不清的系统调用才能完成各种任务。不过,只要你能明白这6个基本的系统调用,你就能掌握Unix系统。Unix系统的美妙之处就在于,就算你要创建复杂的任务,也不需要特复杂的接口。只要用一些简单进程之间的交互,就可以创建任何复杂的任务。你要做的,就是在简单进程之间,创建它们交流的渠道——Unix语言里面称为“管道”(pipe),这样就能解决创建复杂任务的问题了

在一个讨人厌的系统里,你想做任何事情,都需要一些特殊的接口。而Unix系统恰恰相反,它直接把建筑构件给你,而这些构件足以用来执行任何任务。这就是所谓的“干净的‘设计

另外一个方面,Unix系统还有一个”小即是美“的理念。它有一小套简单构件,可以组合成无线复杂的表达。其实物理也是同样的道理。通过实验,可以找到一些基本规律,而这些规律本身就是相当简单。其实,物理的复杂性来自于简单规律之间各种令人难以置信的相互作用。

Unix系统的简洁并不是天生就有。要知道,这个有着建筑构件概念的操作系统,可是AT&T贝尔实验的丹尼斯·里奇和肯·汤普逊辛辛苦苦花大力气写出来的!你也千万别把简洁和容易混为一谈。简洁需要良好的设计和卓然的品味,要做到简洁可一点都不容易。

*****************************************************************************************************************************************************************************************

丹尼斯·里奇

Dennis Ritchie点击打开链接

点击打开链接

点击打开链接

UNIX传奇(上篇)点击打开链

Ken Thompson and Dennis Ritchie Explain UNIX (Bell Labs)点击打开链接




*****************************************************************************************************************************************************************************************

设计Unix系统的初衷并不是很复杂,和电脑上很多其他东西一样,它的起步也和游戏有关。一开始是有人想在PDP-11电脑上玩游戏——其实就是丹尼斯和肯想要玩“星际战争”,于是UnIx系统就这样被开发出来了。正因为这个操作系统不是个正式的项目,AT&T公司也就没有把它看做是一个商机。事实上,该公司是一家受到一定程度管制的垄断企业,它不能销售计算机。所以Unix系统的创始人把操作系统连带着源代码许可证书都免费公布出来了。

但Unix系统在学术界摇身一变成了一个大项目。到1984年,AT&T公司被分拆了,终于获得能够经营计算机业务了。而这个时候,各个大学里的电脑专家,尤其是加州大学伯克利分校电脑专家,他们在比尔·乔伊和马歇尔·柯尔科·麦库西克等人指导下已经研究和改进Unix系统好几年了。

到20世纪90年代,Unix系统已经成为了所有超级计算机和服务器的头号操作系统了

当时Unix操作系统存在大量版本:一些事从伯克利大学的BSD版本衍生出来的

有一个BSD衍生版本是比尔·乔利兹在BSD代码基础上开发的386BSD项目,随后发布到互联网上,后来又派生各种免费开放的BSD——NetBSD/FreeBSD和OpenBSD。

一场争端:AT&T公司和加州大学争端

一个新系统正好遇上了这场争端,从而赢得了时间让自己成熟并发展起来。这场争端让Linux系统赶上了抢占市场的好时机。

Unix免费共享(Unix-must-be-free)这个理念并不是操作系统本身特质,其实主要还是和当时理想主义盛行时代有关(改革、打破权威)

我第一次接触到Unix系统开放的一面,1991年,参加一个活动,活动主讲人理查德·斯托曼,蓄着长发、胡子拉碴黑客形象,是自由软件缔造者。早在1984年,已经着手研究一个可以替代Unix的系统。他把这个系统叫做GNU,是“GNU系统不是Unix系统”(GNU is Not Unix)的首字母缩写。RMS(理查德·斯托曼)还写了《自由软件联盟宣言》和自由软件授权证书GPL。他倡导开放源代码概念。

*****************************************************************************************************************************************************************************************

RMS(理查德·斯托曼)

Richard Stallman

点击打开链接


*****************************************************************************************************************************************************************************************

第一台386和终端仿真器

买了一台靠得住和能够轻易把必要的升级设备弄到手的电脑

我想在这台电脑上跑Minix版本的Unix系统

熟悉这个系统有点和缺点,为了弥补系统的不足,从学校电脑下载一些用惯的程序,花了一个月时间才把这个词操作系统打造成我的专属系统

那位写了Minix系统的阿姆斯特丹教授安德鲁·坦尼鲍姆,原本想把这个操作系统当做一个教学辅助工具,可以限制了某些功能。当时有一些Minix系统的补丁,比较出名的一块补丁是一位澳大利亚黑客布鲁斯·埃文斯做的,他也就是Minix386的缔造者。他给Minix系统打了补丁,是Minix在386电脑上更好用。

早早关注Minix新闻组

Minix系统很多地方让我很失望是终端仿真程序(很重要,我之前用这个程序与学校电脑通信,用强大Unix系统工作或者只是上网),于是启动一个项目:编写自己的终端仿真程序。不想在Minix系统下写这个程序,想在裸硬件上写。趁机了解一下386电脑硬件原理。因为在裸机上编程,所以得从BIOS系统入手(电脑在启动时候先读入的ROM程序)。既能读软盘也能读硬盘。我用软盘运行这个程序。BOIS系统会读取软盘的第一个扇区,然后开始运行上面代码。

这是我的第一台PC机,所以得先搞清楚这个过程究竟是怎么完成的。这个过程一般是在“实模式”下发生的。但是为了更好地利用整个CPU并进入32位模式,最好让电脑在“保护模式”下启动。

这么一来,你要在裸机上写一个终端仿真程序,就得先知道CPU的工作原理。用汇编语言写程序一部分原因是为了了解CPU。另外,还需要了解如何写入屏幕,如何读取键盘的输入,如何读写Modem(调制解调器)等。

我打算实现两条独立的线程:用一条线程读取Modem数据,然后将其显示到屏幕上;用另一条线程读取键盘数据,然后写入Modem上。这样就存在两条双向的管道。这种进程叫任务转换,而386电脑硬件正好支持这种进程

最先写的测试程序,使用一条线程把字母A写到屏幕上,用另一条线程来写字母B。通过程序,我让它在一秒内多次执行,并用定时器来终止程序运行,于是程序就这样跑起来:屏幕上先显示着一长串字母A,突然之间变成一长串字母B。实用性角度没啥用,要看我的任务转换是不是可行是个好办法。边做边学,做到这一步大概花了一个月时间。

最后终于能更改这两条线程,从而让它们一条读Modem然后显示屏幕上,另一条读键盘然后写入到Modem上,终于有了自己终端仿真程序。

想看新闻,在电脑上插入这个软盘,然后重启电脑,能通过这个程序连接上学校的电脑看新闻。要是我想改进这个中断仿真程序包,就会在电脑启动时候进入Minix系统用它来编程。

我的测试程序变成了一个终端仿真程序包,Linux操作系统就这么开始诞生了。

小书呆子是如何长成林纳斯的——大卫的话

他身上那般对科学的执着

“如果你见过一个人,遇到问题并舅舅被其困扰的时候,他两眼发直,听不见你说话,甚至脸一个简单的问题都答不上来,其实他是在全神贯注思考眼前的问题,为了解决问题,他废寝忘食也要想出办法,而且不轻易言败;当然,他可能会受到干扰,日常生活里这种事情不可避免,但是排除干扰后,他还能愉快且固执专一地继续思索”

他非常认真说过“你看,我总是想不出什么新的点子,通常都是别人先想到,然后我只是再把它们组织出来……”

“……他的动力不是来源于‘计算机’,也绝对不是声望或者财富,而是实实在在的好奇心和征服所面临难题的愿望,然后用最佳的方法去做好每一件事,而且不轻易言败”


编程的美妙

编程真正让人欲罢不能的魅力是:你想让电脑干什么事之前,必须先弄清楚,怎么样才能让它这么干。



你在电脑上创造出属于自己的新世界,而唯一的限制就是电脑本身的性能,还有一点尤为重要:你自己的能力。

编程是一种将艺术和工程融合起来的活儿。

编程是一项充满创造力的过程。







长了腿的终端仿真器

我的终端仿真器像长了腿似的,经常用它登入学校的电脑,查阅电子邮件,或者是参加Minix新闻组的讨论。

问题在于,我还想下载和上传文件,也就是说,我必须能把东西保存到磁盘上。为此,终端仿真程序就需要一个磁盘驱动。还需要一个文件系统驱动,否则没有办法查看磁盘组织结构,也就无法将下载的内存保存成为文件。

于是,我写了一个磁盘驱动。另外,因为我要把文件保存到Minix文件系统上,而Minix文件系统本身的文档都已经非常完善了,所以我就让自己的文件系统能和Minix文件系统兼容。这样我就能读取在Minix系统下创建的文件,并把它们写入到同一个磁盘上,而且这样一来,Minix系统也才能够通过我的终端仿真程序读取我创建的文件。

编程……编程…………

随着项目的逐渐完善,意识到它越来越像一个操作系统了。于是改变想法,不再把它当成一个改进型的中断仿真程序,而是一个可运行的操作系统了。

我把它称为:终端仿真程序GNU-Emacs。

POSIX标准

POSIX标准有一大堆冗长的规则,分别适用于Unix系统里的数百个系统调用。电脑要执行操作,从读取、写入、打开、关闭开始,就需要这些规则。POSIX是Unix系统标准的一个体系,由多家公司的协议标准组成,在开发工作中共同遵守这一套共同的准则。

以自己的方式编写代码,逐个实现这些函数

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),这也就会后来通常被称为bash的shell

在试着从磁盘载入一个真正的程序时,磁盘驱动程序或者载入程序都会不可避免地产生bug,因为它们往往无法解析读取到的东西。于是就会在屏幕上显示反馈信息,告诉你程序运行状况。(从中找出哪个环节出了纰漏)

然后,我进入一个新的阶段,载入shell程序,屏幕上会生成反馈信息,告诉我有哪些必要的系统调用还没有实现。

最后,我终于让shell程序跑起来了!

当shell程序运行妥当后,我就马不停蹄地开始时编译其他几个程序,像cp程序(复制)或者ls程序(获取目录列表)等。

shell程序能够运行,意味着我已经为一个可行的操作系统打好了基础。开始测试内置程序,编译足够多程序。从Minix系统中取了所有能用的东西,但我把shell程序移动到一个特殊的分区,那个分区是我专门为新操作系统准备的,私底下叫系统叫Linux。

一开始想用Freax来代替Linux的……

开放源代码

做这个系统并没有什么伟大的目的,只是为了和那几个热衷于开发新操作系统的朋友分享而已。他们纯粹技术发烧友。


Linux能换来金钱吗?

软件设计世界里,一旦解决了根本问题,很容易失去做下去的兴趣……

接下来发生事情,继续做下去的动力:

第一,不小心损坏了存放Minix系统的分区;

随能进入Linux系统,但仍是以Minix操作系统为主要开发环境。在Linux操作系统环境下做的最多事情,用我写的终端仿真程序从学校电脑里查阅电子邮件和浏览新闻。学校电脑很忙碌,老是登不上去,自己写了一个自动拨号程序来登录。有一天忘记用调制解调器拨号,竟然用硬盘去自动拨号:本应通过串行线路/dev/tty1来自动拨号,但却不小心用/dev/hda1去自动拨号,直接导致硬盘分区一些最重要的数据被覆盖掉,而这个分区恰恰用来存放Minix系统文件的。意味着我无法进入Minix系统了。反正Linux已经够好了,是时候让它大显身手时候了,Minix不用也罢!可以在Linux开发环境中通过自己编程来编译Linux。如果要用到Minix某个功能,就把这个功能写到Linux上去。

这才是真正意义上的开始!

第二,人们不断给我发来反馈意见

在此之前收到的反馈都是要求修复Bug,现在,反馈意见全部都是要求我新增一些功能。

如特地买了一个支持浮点协处理器实现浮点数学运算。

德国有个家伙在尝试编译内核时无法运行GCC编译器,因为他的电脑内存只有2MB,而当时启动GCC需要占用1MB以上的内存。他要求做一些改进,让Linux可以用一个比较小的编译器来编译,节约内存!

分页到磁盘:page-to-disk,有了这个改进,哪怕用户电脑只有2MB内存也能利用磁盘增加内存空间,不会占用过多内存空间。分页到内存程序是一大进步,Minix根本没有这个功能。

从此,Linux声名鹊起,很多原本Minix用户改用Linux了,Linux当时虽然还无法实现Minix的所有功能,但它实现的功能基本上都是用户最需要的。而且最重要是:分页到磁盘程序。(有了这功能,用户电脑内存再有限,也可以运行比内存还要大的程序,这就意味着,当电脑内存不足时候,就可以将电脑较早前辈占用的内存挪到磁盘上,记录下这块内存的新路径,继续使用这块内存来跑原来的程序。)







不管怎么说,我不愿意把Linux拿来卖,也不想失去Linux的控制权,希望人们能够看到和使用这个系统,并且能无拘无束修改和完善它,但我同时也想要确保自己能够及时掌握他们所作的任何改变。一直坚信,要使得Linux发展成为十全十美的系统,必须保持免费且开源。

世界各地的黑客每天都在分享他们的修改意见。我们正在协力开发世界上最好的操作系统,这已经是板上钉钉的事实了!基于这种现实情况,再加上Linux已经为大众所熟知,我觉得有人用它来获利也无可厚非了。



Minix与Linux之争

……

安德鲁也不认同我构建的操作系统的方式,但是有一帮计算机学者主张以微内核方式创建操作系统,安德鲁属于该阵营。他采用微内核理念开发了Minix系统,而他但是手头正在做的Amoeba系统也是微内核。

微内核理论认为,操作系统非常复杂,所以必须通过模块化来降低其复杂性。微内核理论原则是:内核作为操作系统的基本核心,本身功能越少越好,主要功能应该只是通信。电脑所提供的各种不同服务,都要通过微内核之间的通信渠道来实现。所以,采用微内核方法就得尽量分割操作系统问题空间,让每个问题都尽量简单。

我觉得这种方法很愚蠢。没错,每个模块可以做的很简洁,但比起让内核负担起所有的功能来说,模块间交互可就复杂多了!Linux系统采用的就是让内核担负起所有功能做法。想象人的大脑就知道了。大脑中每一个单独的部分都不复杂,但是它们之间的相互作用使大脑成为一个高度复杂的系统。这是一个“1+1>2”的情况。举个例子,把一个复杂问题一分为二,然后就认为两个“半问题”的复杂程度都只有原先的一半了,但你忽略了一个事实:这两个“半问题”之间的联系你还没考虑呢!于是问题又复杂起来了。微内核理论要把内核分割为50个独立模块,每个模块承担1/50的复杂性。但是忽略了这个事实:各独立模块之间的联系比原来系统要复杂得多。


Minix另个毛病是,虽然你拿到了源代码,但许可证同时给了你诸多限制。以布鲁斯·埃文斯为例:对Minix系统做了重要的改进……

1992年初,与安德鲁·坦尼鲍姆摊牌。原因下面一篇帖子。他的帖子内容从两个方面:

1微内核or宏内核?Minix是微内核,而Linux是宏内核,所以Linux过时了

2可以移植性:Minix具有合理的可移植性,而Linux只能用于80x86

林纳斯回复的帖子,也是从这两个方面

他甚至可以不把Linux当回事——大卫的话

Linux扬名历程:如何从新闻组发烧友们的宠儿逐渐成长为受人追捧的自由软件骄子。

最后的冲刺

马歇尔·柯尔克·麦库西克在林纳斯演讲结束后走上前来对我说,觉得我的演讲很有意思!他可是Unix-BSD版本灵魂人物啊!

第一代X视窗系统开始在Linux系统上跑,意味着Linux系统能够支持图像用户界面,而且用户也能够同时运行多个视窗了。成果归功于麻省理工大学的X视窗项目。

一位叫奥瑞斯特·扎布罗斯基的黑客顺利抵将X系统移植到了Linux系统中。


奥瑞特斯的贡献不仅让Linux用户有了图形视窗,还打开了一扇通往未来的大门。



开发网络功能的确很烦人,实际上我们花了将近两年时间差才完成这项工作。其中,各种问题,安全问题,人们使用网络设备各不相同,再加上TCP/IP协议约束,一时半会很难解决所有连接超时问题。

有了自己的新闻组(comp.os.linux),它是我和安德鲁·坦尼鲍姆论战的硝烟中发展壮大起来的

把电脑的CPU升级为486 DX266

朵芙

成千上万的开发者依靠邮件列表和彼此之间制定的规范进行联系和开发……

集思广益模式,Linux系统发展顺风顺水……

让人们吃惊的是,开放源代码模式竟然真能行得通。

开源的举措确实让我更方便地了解哪些混迹在自由软件世界里黑客们的心态。

Linux是世界上最大的协作项目,并且致力于打造全球最优秀的技术,而且是任何人想要这些技术就可以直接用——就是这么简单,又是这么好玩。



舞会之王

1.0版本闪亮登场

1.0版本诞生,意味着Linux系统需要开拓一个新的方向:公共关系

Unix系统一直以来都被视作有巨大潜力的操作系统,主要因为它强大的性能和多任务处理能力。

“疯狗”:乔恩·霍尔


新奥尔良的那场演讲的好处之一就是:经“疯狗”安排,DEC公司借给我一台Alpha电脑,除了PC机之外,这是Linux系统第一次植入到其他电脑上。

在这之前,也有人将Linux植入其他的硬件平台,比如说,植入到用摩托罗拉68000芯片的雅达利游戏机和Amiga电脑。

在这些案例中,Linux并不能同时兼容两个平台。为了让相应的Linux版本能正常工作,你得将一些不能运行的代码弃掉,重新写入代码来代替。然而,Alpha电脑是首个能完美植入Linux系统的平台,基本上在PC机上能跑的源代码,在它上面也一样能工作。还增加了一个抽象层,这样源代码就能以不同的方式编译到两种平台上。

版权之争

1995年,业界涌现了很多Linux商业版本

我攻读硕士,内容:将Linux普及到不同的体系架构上

波士顿一个投机分子抢注了Linux一词的商标,发邮件给Linux Journal和其他几个Linux公司,向他们所要收入的百分之五,作为使用商标的“酬金”

Linux Journal和其他几个Linux公司决定联合提供资金支持Linux国际抢回这个商标。

Linux国际,在澳大利亚成立,旨在全球范围推广Linux系统,创立者是帕特里克·蒂克鲁兹

采取Linux的商标所有权归我策略打官司

经过这场混战,最终我获得了Linux商标所有权。

企鹅到底是谁的主义——大卫的话

你到处为什么会选择企鹅作为Linux系统的品牌标识呢?





接受全美达的邀请

走出中立的学术氛围,进入市侩的商业环境,我还能坚持开放源代码的理念吗?

以及在给小孩换尿布时如何兼顾Linux系统?

全美达公司其中之一个投资人是保罗·艾伦,他可是微软的创始人之一啊

根据全美达公司协议,可以继续进行Linux系统的开发。

如果你多花一点时间睡觉,比如说,睡足十个小时,你可能会损失一些工作时间,但是一旦睡足了觉,那么醒着的几个小时里,思维就会一直保持敏捷,大脑的状态就会像六缸引擎火力全开那样的。

环迎来到硅谷

拜访几颗巨星

史蒂夫·乔布斯秘书给我发来一封邮件说很想约见我,我还是爽约了



Steve Jobs

点击打开链接


在苹果公司“无限循环”大道总不见面,除了乔布斯,还有首席工程师艾维·特凡尼安,当时苹果公司正着手开发Mac OS X系统,这一系统基于Unix系统

乔布斯意思是,桌面电脑市场只有两个玩家:微软和苹果。只要我肯为Linux着想,就应该跟苹果坐同一条船,然后把那些参加开源运动的人笼络到苹果公司进行Mac OS X系统开发。



比尔·乔伊

点击打开链接

Bill Joy

点击打开链接

他可一直是Unix系统BSD衍生版的核心人物啊!

了解Sun公司如何看待开源,以及他们加入开源项目的具体方式

一夜功成名就

网景公司在一个叫做Mozila的项目中开放了浏览器技术的源代码,浏览器根源本来就是开源的,没能长久调动起开发者的参与兴趣,尽管已经开源,但他们没有把所有东西都开源。

Sun公司也加入到了开元运动中,宣称他们将成为第一个加盟Linux国际组织的大型硬件设备商,他们的服务器将支持使用Linux系统。

IBM随后也加入了我们,将销售和支持Apache,Apache是当时在Web服务器上最普及的Linux商业版本。IBM先是试着在服务器上运行和支持Linux系统,然后逐渐大步挺进Linux世界,小型PC服务器,普通PC,最后笔记本都用上了Linux。

Informix公司宣布将对Linux系统开放他们的数据库接口,电脑装的是Linux系统也能用它来运行Informix数据库

Oracle甲骨文公司也不动声色跟进Informix公司,面向Linux系统内部接口。

Linux系统呈蔓延之势

理查德·斯托曼公开主张我们应该把Linux改名为gnu/Linux,他的理由:正式依赖着他的GCC编译器和其他自由软件工具何应用,Linux才的得以起步。

Linux和微软之间的战争,其实完全不是那么回事,事是要比这个更加广泛深远。

Linux现象是一种有组织传播技术、知识和财富的方式,同时让参与者非常过瘾。




我倡导开源是把它当做让世界更加美好的法宝,但更重要事情,我把它当做一件好玩的事情。



财富的到来

德克·亨德尔:XFree86系统项目老成员,非常支持Linux的发展

红帽给我的股票期权

林纳斯的烦恼:大房子——大卫的话

糟糕的演讲

极客之王的演讲——大卫的话

媒体的攻击

道德不应该制度化

舞会之王

参加总统舞会,我和朵芙参加,她穿了一套绿色晚礼服,艳压全场,吸引媒体瞩目,看起来太美丽了,也因为那一年芬兰没有赢得冰球世界冠军,所以媒体把我们俩封为当年的舞会之王和王后。

大房子终于到手了——大卫的话

还会再干

知识产权







消灭控制欲

要想在竞争中生存下去并繁荣发展,唯一的办法就是做出好到无以复加的产品。

创业者和企业总很容易被贪念所迷惑,导致他们在日后商场最终败下阵来。就因为有了贪婪之心,被偏执和想控制一切的念头所左右。

试图通过控制某种资源来牟利总有一天会被市场淘汰。

Palm公司采取“爱它就给它自由”

科技过山车之旅

开放源代码的意义

开源理念心态获得前所未有的效益……

开源模式拓展到其他领域,推而广之……众所周知,人们被热情驱使的时候能把工作做得最好,要是能享受工作的乐趣更是如此。对软件工程师来说,喜剧作家、雕塑家和企业家来说都是如此。开元运动不仅给人们提供了一个生活在释放热情的机会,还能使得他们获得乐趣。这难道不是一种高效的激励模式吗?

开源运动“蝴蝶效应”

你不给技术设限,技术的应用范围不会给你设限。

放开一切事物,就会激发无限 的可能性。

名声与财富

才一年,林纳斯就变了——大卫的话

生活的意义之二

进化论:生存,社会关系,娱乐

生存、社交和获得乐趣,是生命体生存和进化过程显现和发生的作用的次序。这也是选择JUSTFORFUN作为书名的原因。

附录:中国程序员眼中的林纳斯——林纳斯,一生只为寻找欢笑

233-255

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值