我们学习什么呢?_开源软件文集书评-查字典图书网
查字典图书网
当前位置: 查字典 > 图书网 > > 开源软件文集 > 我们学习什么呢?
Hansen 开源软件文集 的书评 发表时间:2006-07-12 12:07:13

我们学习什么呢?

Open Source

这本书集合了所有Open Source领域大拿的文章。从Linux, Perl, Apache, NetScape的创建者到Open Source的开创者。虽然写与99年,但他们在文章中阐述的设计思想和Free Software business model不但对于我们深刻理解这场变革对现在固有观念冲击有帮助,并且对于我们的软件设计思路也有非常大的帮助。

The Linux Edge – By Linus Torvalds (Linux的创建者)

记得2001年Linus出了一本自传,名字好像叫,Just for Fun。 这本书中讲了Linus自己的生活和开发Linux的过程,一直后来到美国,进入Transmeta。 (夏新的V3用的就是这家公司的芯片, 不过现在夏新不再生产v3了)。Linus讲了他在赫尔辛基大学的生活和利用学校的网络分发 Linux,建立网上社区的过程。比较有意思的还有Linus从开始到结束,都有着芬兰人是世界上用短信最密集的国家的骄傲,和对泡SPA的着迷。

虽然这本自传是在Linus1991年重写Linux Kernel之后写的,但是这本自传没有讲到太多他的设计思路。它是more entertainment。1991年之前,当时他还没有意识到LINUX可以变的这么流行,需要在不同的architecture上工作。最初的LINUX只是能运行在X86上Linus就高兴了。并且很多结构设计并不能满足后来Open Source 的开发思念 (精诚合作,分头工作)。这5页的THE LINUX EDGE给我们了精练的一个概括和解释LINUX怎么实现在不同硬件平台上的portability和适应新的开发环境的不断进步。

设计一个操作系统,你会选择怎么样的设计结构呢?不外乎俩种。

1: 把所有的hardware specifics 放在core kernel里。这样的话,你得到最大的performance,因为你的主要的功能比如scheduling, process management, signaling, paging, and swapping等都变成了internal process;但是portability就比较差。因为kernel code包括一些和低层硬件的互动。如果要把你的系统在一个新的hardware architecture上运行,你需要重写一个完全新的code base。就像是我们用的fork一样。这样还造成了一个很大的缺点,就是要随着支持硬件平台的增长,就要有很多的code base。这对维护是很麻烦的。

2:把所有的hardware specifics放在user space。这样的话core kernel变的小并且非常portable。不需要根据什么特殊的hardware specifics来修改kernel很多。这就是microkernel architecture。每个microkernel只做原来kernel工作的一个subset。microkernel architecture的基本思路就是建立一个abstract layer来表示(abstracting)底层的process control, memory allocation, 和resource allocation。 我想使用abstract layer大概是我们所有人在处理portability时,第一个想到的解决方案。但是使用abstract layer的一个最大缺点就是performance。因为你的code要经过多一步的abstract。在我们普通的application 设计中,performance的丢失可能不是那么清楚和显见。但在kernel中,我们可以比较容易的看到。

Linus选择了怎么样的设计呢?―― “If you want code to be portable, you shouldn’t necessarily create an abstract layer to achieve portability. Instead you should just program intelligently. ”首先Linus没有采用microkernel architecture。他相信应该在kernel里包含一些machine specifics的code。但是包含多少,他需要在portability和performance之间选择一个平衡点。Linus的聪明之处在于他深刻的研究了所有现在不同硬件平台的结构去发现这些平台的共同处,然后把这些共同处包含在kernel里。比如说内存管理(memory management)。X86, Sparc, Alpha 和苹果的PowerPC在表层内存管理功能上很是不同。但底层的paging和caching却有着很多的共同。大量学习和研究后,Linus把这些共同处包含在了他的kernel memory management里。而把非常hardware specific的都放在了user space,并且把它们模块化。这样当把LINUX deployment在一个新的系统上,就变得容易了。实际上Linus是采取了上面两个解决方案的交集。

文章中还讲到了interface设计的问题,还有compile常数的问题。都是非常好的设计和coding建议。文章中也讲到了LINUX的未来发展方向。Kernel的发展会停止下来,当它到了一个稳定和成熟。 Linus更希望看见LINUX在laptop和desktop上的应用,而不是在super computing上。 LINUX的其他方向,比如为embedded system设计的LINUX;LINUX的multi processing;web serving, clusting等。这些问题可能已经和快要解决了,因为这篇文章是在1999年写的。而我也在2003年离开了软件行业,对以后的发展不是太清楚了。但是这些基础的设计理念是不会经常改变的。就象一个kernel和web server一样,不管你怎么设计,它们需要完成的工作都是一样的。

最后一点就是关于GCC的重要性。- “The portability of Linux is very much tied to the fact that GCC is ported to major chip architectures”. 因为在不同architecture上的GCC 才可以使LINUX to port到这个architecture。UNIX 的流行性就是因为有和UNIX相匹配的各种GCC。现在的问题是,为什么Linux社会不设计一个Portable 的GCC呢?

To be continued

展开全文
有用 4 无用 0

您对该书评有什么想说的?

发 表

推荐文章

猜你喜欢

附近的人在看

推荐阅读

拓展阅读