from: http://tech.ccidnet.com/
Linux 诞生的十二年,是其不断寻求发展的十二年,是经历各种磨练的十二年,也是逐渐成熟、逐渐清晰的十二年。
十二年一轮,只是历史长河中的短短一瞬。 Linux 用 2.6 版内核开启了其新一轮的发展,我们则将以对 Linux 十二年的回顾来揭开 Linux 内核的神秘面纱。
我没有从头开始经历 Linux 发展的所有大事,只是想从一个 Linux 用户的角度来描述一下 Linux 十二年成长经历中的点滴。
正因为如此,我的资料都来自于互联网。尽管年代已久远,但是广阔的互联网空间仍然随处可见 Linux 诞生以来的点点滴滴。将它们收集起来, Linux 十二年的发展逐渐在眼前展现。
Linux 诞生记
目前公认,Linux 诞生于 1991 年 8 月 29 日,一切从下面这封邮件的发出开始。
Newsgroups: comp.os.minix
Subject: What would you like to see most in minix?
Summary: small poll for my new operating system
Message-ID:
Date: 25 Aug 91 20:57:08 GMT
Organization: University of Helsinki
Hello everybody out there using minix -
I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).
I've currently ported bash(1.08) and gcc(1.40), and things seem to work.This implies that I'll get something practical within a few months, and I'd like to know what features most people would want. Any suggestions are welcome, but I won't promise I'll implement them :-)
Linus (torvalds@kruuna.helsinki.fi)
PS. Yes - it's free of any minix code, and it has a multi-threaded fs.It is NOT protable (uses 386 task switching etc), and it probably never will support anything other than AT-harddisks, as that's all I have :-(.
上面这封邮件的译文如下:
各位使用 Minix 的朋友们,大家好。
我正在为 386( 486 )的兼容机做一个自由的操作系统。它仅仅是一个业务爱好,不会很大,也不像 GNU 那么专业。从 4 月开始我就着手于这项工作,现在差不多就要完成了。我欢迎任何喜欢或不喜欢 Minix 的朋友能给我反馈,因为在某种程度上我的这个操作系统和它很像。比如,它们都使用了相同的文件系统物理组成(这是由实际情况所决定的)。
目前我已经将 Bash 1.08 和 GCC 1.40 移植到这个操作系统上,它们都能够正常地工作。这意味着在这几个月的努力下,我终于完成了一些实际的东西。我很想知道对于这个操作系统,大多数人到底需要哪些功能和特性。我欢迎各种建议,虽然我并不敢保证能够实现它们。
Linus ( torvalds@kruuna.helsinki.fi )
又及:这个操作系统从 Minix 代码而来,有一个多线程的文件系统。它不具备很好的灵活性(使用了 386 的任务切换机制),而且因为我所拥有的资源有限,它也许永远都不能支持除了AT硬盘之外的东西。
文中提到的 Minix 是一个微型的 Unix 操作系统,完全免费且源代码公开。作者是荷兰的 Andy Tanenbaum 教授。他编写这个操作系统的目的是为了教学和演示,因此他一直拒绝在 Minix 中加入不必要的特性而使其变得复杂。但是很多爱好者们热衷于改进 Minix , Linus Torvalds 就是其中的一个。
现在再看这封信,谁能想到它对今后十多年中 IT 业造成的冲击呢?
如果注意到 1991 年时 Linus 的许多邮件,我们会发现那个时候的他并不是现在这样的一个顶级开发高手。那时候的 Linus 只是一个 OS 新手,他自己也在回忆录中承认,当时向很多人请教了很多基本的问题。
谁又能说十二年后不会再出现这样一个传奇呢?
十年磨一剑
1991 年 11 月, Linux 0.10 版本推出。早期的 Linux 只有很少的一些程序,直到 0.11 版本, Linux 仍然缺少 init/login 、 rename system call 、 named pipes 、symbolic links 这些基本的特性。 0.12 版本之后,版本号直接跳到了 0.95 , Linux 开始逐渐接近一个真正成熟的系统。
Linux 开发的版本号惯例是,中间的数字为偶数代表稳定版,中间的数字为奇数代表开发版。因此到目前为止, Linux 经历了以下几个稳定版本,他们的版本号和维护者分别如下: 1.0.x ;1.2.x;2.0.x 由 David Weinehall 负责维护; 2.2.x 由 Alan Cox 负责维护; 2.4.x 由 Marcelo Tosatti 负责维护。
直到 2003 年 12 月 18 日推出 Linux 2.6.0 ,由 Linus Torvalds 亲自负责维护。
微内核与巨内核之争
Linux 以一种难以置信的速度流行起来。在它高速发展的历程中,不能不提到著名的 Linux 是否过时之争。双方当事人恰恰就是 Linus 和 Minix 的作者 Andy Tanenbaum 教授。在这次争论中,双方对操作系统的很多方面都进行了深入的讨论,至今看来仍然很有意义。
最先发难的是 Andy Tanenbaum 教授。 1992 年 1 月 29 日,他在题为“ Linux is obsolete ”的 E-mail 中说到了对未来一段时间内操作系统发展的观点。
(1)是微内核还是巨内核
传统的操作系统使用的都是巨内核结构。这意味着操作系统是一个整体可执行文件,进程管理、内存管理和文件系统全部运行在内核模块中。而目前较新的一种设计方式是微内核,操作系统的大多数部分作为独立的进程运行,存在于内核以外,内核通过消息传递、中断处理、低级进程管理,以至于 I/O 来完成各种工作。
他认为微内核明显优于巨内核,而 Linux 使用的恰恰就是巨内核。 Andy Tanenbaum 教授认为这是历史的倒退,相当于在 20 世纪 90 年代仍然使用 70 年代的技术。
(2)灵活性 ( Portability )
Andy Tanenbaum 教授还认为,不应该对于一种特定的体系机构编写操作系统,因为体系结构的进化是非常快的,这样将导致移植非常困难。目前的 Linux 过于依赖 80386 架构,而这样显然是不对的。
之后 Linus 在回复的邮件中承认,微内核的确好一些,至少在理论上是这样。但是 Linus 认为在当时拥有一个可用的操作系统更加重要。他说,如果前一年的春天 GNU 的内核 Hurd 推出的话,那 Linux 就没有存在的必要了。 Linus 认为,不能仅仅用是否是微内核作为评论操作系统优秀与否的标准。
Linus 说的是很重要的一点。微内核模式在开发和调试上都带来了一定的难度,这也许是 Hurd 迟迟不能推出的一个重要原因。在很久以后的 Revolution OS 记录片中, GNU 的主教 Richard Stallman 承认, Hurd 各部分之间的配合和调试是个大问题。也许Linus的确有远见。他认为应该迅速推出能用的系统,而不是在做了最优化设计之后再推出系统,这个观点值得我们深思。
对于灵活性,Linus 认为只是某些不愿意写新程序的人的借口。他认为事实上由于 POSIX 标准的缘故, Linux 比 Minix 更具灵活性,因为往 Linux 上移植程序会更加方便。灵活性是一个好主意,但是过犹不及, OS 应该最大限度地利用架构的特点,这样会让开发变得更加容易。
后来双方又进行了很多争论,涉及到不少技术细节,也有不少别的人参与进来,他们说的话对于想学习 OS 的人很有启发意义。
今天的 Linux 已经不能简单地说是一个微内核系统或巨内核系统了,它同时具有这两种系统的不同特点。不过我们可以看到,正是像上面这样的讨论,构成了今天这一庞大的 OS 理论基础,这也正是 Linux 自由、开放的精神所在。