为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

程序员cxuan

共 3759字,需浏览 8分钟

 ·

2023-03-11 12:12

作者:默默默默默 

原文链接:https://www.zhihu.com/question/63187737/answer/1415937231

cxuan 在之前就写过类似的文章,来源于一个跨界大佬给我推荐了一下 Linus 的自传《Just For Fun》,这本书读起来有如王小波一样的洒脱,洋洋洒洒、轻描淡写的就把故事给写明白了,虽无太多华丽的文笔和辞藻,但是句句读完就想让人说一句:"写的真 TM 的精辟",这可能就是大佬吧,他的每一句话琢磨起来都像是让你仿佛置身于 DOS 命令窗口下,你觉得他简单,它就真的简单;你觉得他难,他也可以是万丈深渊。

这是之前我写的文章:

李纳斯是个怎样的人?

下面是原作者回答:


你看Linus自传就完事了。

Linus研究生时期开始写操作系统(大约是91年),那时候个人电脑(PC)虽然兴起一些年了,但是还只是小部分程序员和狂热爱好者的玩具。硬件基本上都靠自己攒,软件也是用开源系统各种魔改。所以普通人根本没有折腾PC的动力和理由。

Unix已经霸占了许多生产力场景,唯一的缺点就是贵,而且很多发行版是闭源的。个人用户根本不要考虑。

那时候Linus自己攒了一套386,但是找不到好用,廉价/免费的操作系统用。当时社区里当然也有一票免费且开源的系统,但是要不就是兼容性差,要不就是各种坑,要不就是没软件,总之各种各样的问题。而兼容性是最主要的问题,那时候的CPU不像现在的流行架构就那么两种(x86,Arm),那时候叫的上名的架构有十几种,所以操作系统的兼容性是非常重要的。

Linus开始自学操作系统,发现了一本很好的教材《操作系统:设计与实现》,然后花了一个暑假看完,开始自己写操作系统。

《操作系统:设计与实现》这本书的作者是塔雷鲍姆,写书的时候已经是业界大牛了,他在大学为了教学操作系统,但苦于学生买不起太贵的Unix发行版,于是自己写了一个兼容Unix标准操作系统(主要是兼容POSIX标准),叫Minix(名字上就很对仗,[Universe - mini])。

Minix这个系统就是为了教学而生的,只要买了这本书,就免费邮寄一份Minix源代码。Minix为了方便教学,保持代码的简洁,塔雷鲍姆拒绝向里面添加太多复杂的功能,。所以Minix虽然实现得优雅,但是社区的玩家要自己日常用,要魔改很多东西。

对了,Minix是微内核的。对,微内核的概念存在几十年了,而不是2019年诞生的。

微内核的结构非常优雅,文件系统,内存管理,硬件驱动都是以进程形式存在的,而不是内核代码,这意味着驱动挂了不会带着内核一起挂。缺点就是系统调用开销太大,以至于慢到无法接受。所以现在的桌面系统,没有纯微内核的。

对于教学系统来说,微内核不是问题,毕竟是教学,不是生产工具。

社区和Linus都很喜欢Minix,但是都不满足于Minix作者因为教学目的而放弃兼容性和可扩展性。于是Linus在自己运行Minix的PC开始了Linux的开发。Linux是宏内核的。Linux本来不叫Linux,Linus是一个很内向的人,不好意思取这么自恋的名字,但是合作者强烈建议用这个名字,所以就用了,x代表unix的联系(都兼容POSIX)。提一句,Unix不是为开源和免费而生的,而是为商业而生的,但是Unix的发展催生了最好的开源环境(比如GNU)。

注意,这几年的社区,属于『军阀混战』,大家都缺一款好用的免费操作系统,但并不只是Linus想到要解决这个问题,理查德斯托曼领导的GNU组织在90年代就一直酝酿一款免费的操作系统,因为他们的目的是与商业的Unix对抗,光有一个GCC编译器还不够,还需要有自己的操作系统。

社区里各种技术人员也对GNU的操作系统非常期待,但是这玩意儿难产了。直到很久之后,Linux流行起来后,依然没做出来。

最开始的Linux版本,只有几千行代码,现在基础扎实的CS本科生,花一段时间都可以看懂,甚至有些OS教材就是用Linux最初的版本来教学的,比如哈工大李志军的课程。

Linus从一开始就不断在minix论坛上发布自己的进展,搞得论坛上一堆人非常感兴趣,于是许多人加入了开发,这时候Linus用邮件接收每个人的代码,然后手动合并。没过一段时间,minix论坛上就全是讨论Linux的了,虽然塔雷鲍姆不是个小气的人,但是这么搞也让塔雷鲍姆很不爽。

不久之后Linus和塔雷鲍姆之间爆发了一次冲突。塔雷鲍姆在论坛上写了一篇文章,论证微内核与宏内核的优缺点,其实主要是攻击宏内核,说宏内核除了性能好点,全是缺点,说Linux过时了。Linus是脾气暴躁的人,在技术问题上从不妥协。于是开始嘲讽minix。Linux的可移植性比minix更好,而且免费开源(minix需要买书后获得)。

然后来来去去吵了很多次,具体可以看

https://www.oreilly.com/openbook/opensources/book/appa.htmlwww.oreilly.com/openbook/opensources/book/appa.html

只是他们两个当时谁也没想到,这次论坛上的口水战会成为几十年后人们依然提起的操作系统之争。

Linus并不恨塔雷鲍姆,他说后来有一次去了塔雷鲍姆的演讲,完了之后拿着那本书想要塔雷鲍姆的签名,但是没有等到人。

我想Linus多少还是尊敬他的,毕竟是自己学习操作系统的领路人。

在Linus和社区人员的努力下,通过扩展GCC支持Linux,Linux也兼容了越来越多的平台。其他各类软件移植到Linux也就变得容易了,尤其是在那个许多软件以源代码方式发行的时代,只要有对应平台的编译器,编译一次就算移植好了。

赶上PC发展的浪潮,但还不够,毕竟苹果微软不是好对付的,商业操作系统的易用性依然很强。

但是Linux开始被各类企业青睐了,因为不是每个企业都有钱花高价买一套Unix来用,或者是更贵的软件+硬件一体的大型机来用。Linux让他们看到了省钱的希望。

GNU开始支持Linux,Linux成为了GNU的官方操作系统,所以现在叫GNU/Linux。可以说Linux和GCC几乎是最伟大的两个开源项目。它们合起来就更强悍了。

GCC让软件方便移植,Linux软件生态就好了,软件生态好了用户就多,用户多了就让硬件公司眼馋,各路硬件公司都为Linux开发驱动和各种扩展,以支持自家硬件,这样用户就更多。这个倍增效应是很强的。

Linus在项目达到一定规模后就不再亲自写代码了,主要是合并代码,毕竟全球那么多人提交代码,他一个人审核合并就够忙了,亲自写代码也没时间。

直到有一天他觉得忙不过来了,审核代码会遇到很多傻逼代码和开发者,于是他开发了现在最流行的版本控制工具,git,字面意思就是饭桶。

从整个发展历程来看,Linux在几个十字路口都做了非常精准的选择。

从1991年0.0.1版到1994年1.0版,这期间Linux进行了极其快速的迭代,社区玩家在使用中给出了宝贵的意见,最好的测试就是让用户去测试,这保证所有的更新都是实际有效的。

要知道,Linus在1991年开始开发时,根本没想过Linux有一天能改变世界,那个时候,他跟所有的社区玩家一样,期待着GNU的系统,所以他在论坛上解释,做Linux只是一个业余爱好,最多用来填补GNU系统出来之前的这段空白时间。

但GNU由于各种名誉加身,导致目标定得很高,于是项目一直延期,同时市面上的系统也在发展,GNU又继续调高目标,然后继续延期,最后难产。

而Linus从一开始,就没什么心理压力,每一点成果都在社区上公布,快速获得反馈,然后及时调整。这种开发方式无意中就超越了GNU的闭门造车。

RedHat这种系统免费,服务收费的模式也取得了成功,这大大激励了其他发行版开发商的信心。目前Linux的发行版,至少几百个吧。

96年2.0版发布,开始支持多核CPU,这个重要的更新,让很多企业开始考虑Linux。

之后几年Linux在服务器的份额快速上升。

03年2.6版发布,稍微了解过Linux的人都只要这意味着什么。2.6版本跨越03年-11年,中间有许多小版本更新。2.6版意味着Linux第一次成为真正具有了高稳定性,高可用性,高可伸缩性的工业级别操作系统。

05年git诞生,Linus和核心团队摸也索出一套稳定实用的合作开发方式。

之后就是遍地开花的发展历程了。

不得不说,他对操作系统发展方向的把控是精准的。

总结一下,Linux的成功,以下几个条件必不可少:

  1. Linus强大的开发能力
  2. Linus的项目管理能力
  3. Linus对操作系统发展方向的把控
  4. 一个群雄割据,缺乏免费好用的操作系统的时代。
  5. 一个不仅群雄割据,缺乏免费好用的操作系统,而且程序语言,操作系统理论,编译器技术发展到一定程度,个人PC持续发展的时代。
  6. GNU的系统没做出来
  7. Minix死守着『教育』不放
  8. GNU的支持
  9. 全世界硬件厂商的支持
  10. 全世界软件厂商的支持
  11. 全世界开源开发者的巨大贡献

再总结一下,一个人的命运,当然要靠自我奋斗,但也要考虑到历史的进程。



 往期推荐 

多个段的程序

卷起来?

简单聊聊什么是段

我是如何看待 ChatGPT 的?

Git 就是这么简单!

浏览 23
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报