最新消息:

Linus大学时期写出了linux内核,那个最初的版本仅就技术而言,有多厉害?

学习 eben 579浏览 0评论

本文系手工从知乎转载而来(zhzz.org)主要用于激励自己学习,与君共勉

作者:Hao Lee
链接:https://www.zhihu.com/question/263589279/answer/274048434
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

我大三读过 Linux 0.12 内核的源代码,读得我差点找不着工作,一共一万多行代码,我不知道老李写了多久,反正我读了一年多才差不多读完,这还是跳过了文件系统里很多琐碎的细节,实在是太复杂了!!!从我的感觉来看,老李水平确实很高,他少年时期就跟着外祖父学编程,22岁写出内核,而且除了网络子系统外其他的都全了,这里面需要大量的基础知识比如AT&T汇编、保护模式、操作系统原理、处理器架构特性、链接与装载、计算机组成原理等。按照本科生的课程进度,单单是学完这些东西就要三年,而学习到能够灵活运用以至于写出内核的程度,我觉得这个事情的难度相当高,绝大部分本科生做不了。此外,在上世纪九十年代,互联网就那么一小撮人用,资料匮乏,交流不便,写内核所需要的基础知识又那么多,很难想象老李到底克服了多大的困难。写内核时他还移植过gcc,看起来对编译器也是非常熟悉,如此水准恐怕不服都不行。

即使是现在让人写操作系统,网上那么多资料随便抄,也绝非易事。写内核最难的不是语言问题、不是理论问题,而是大局观,在脑海里要有对整个内核的宏观架构,不能写着前面忘了后面,写完后面又发现与前面冲突了。有了大局观之后,还需要能正确的实现出每个细节,将理论知识变成现实的代码,这个过程也不简单。此外,内核编程都是C语言和汇编级别的操作,出了问题要debug也是极其麻烦,就拿系统启动来说,在进入保护模式或长模式之前,页表和CPU模式处于不断切换之中,进了保护模式之后也要刷新一两次GDT和页表,在这期间gdb这玩意儿基本就是个烧火棍,你得靠Bochs等模拟器进行机器语言级别的调试,手动计算指令地址打断点;等系统再往后走,到能用gdb时也就用不上了,想想那么个系统在跑着即使打了断点也没法调试,所以只能靠print大法,前提是要首先实现出类似printk的东西。总之,写内核其实是很麻烦很复杂的一件事,非常耗费时间与精力,边边角角的东西太多了,而老李写完内核以后的功力也已经超越当今无数本科生了(不敢说比例,只能说绝大部分人达不到这个水平)。

现如今我的工作内容虽然与内核无关,但是我依然接触过一些内核开发高手,也见过下班后琢磨着写玩具操作系统的人,他们遇到实际问题一般都会去参考Linux内核的实现,看看老李是怎么做的,还有的干脆直接在 Linux 0.11 上做修改。从某种程度上来说,老李开发Linux内核的地位不亚于创世纪。


Linus不是凭空创造出的Linux。在90年代早期学过操作系统课程的人应该都知道,其实之前有个专门用于教育的开源Unix版本叫MINIX。Linus学习了MINIX后,发现MINIX的版权协议只允许应用在教育上,于是基于MINIX开发了Linux。

而MINIX的开发则是因为UNIX的版权属于AT&T,非常昂贵,所以Andrew S. Tanenbaum 在1987年开发了MINIX用于计算机教学,在2000年版权协议改为BSD, 结果Intel又给集成到了CPU里。

而Unix版权属于AT&T则是因为 Ken Thompson, Dennis Ritchie 两位大神开发Unix时,是在AT&T所属的贝尔实验室工作,尽管这只是他们私底下搞得项目,但版权还是属于AT&T的。

而Unix也不是凭空出来的,Thompson和Ritchie两位大神参与过 Multics 的开发。尽管 Multics失败了,但让他们了解了分时操作系统的核心理念及相关的实现细节,为Unix的开发奠定了很好的基础。

每个大牛都是站在前辈巨人的肩膀上,当然,这不妨碍大牛们的伟大。

作者:崔英杰链接:https://www.zhihu.com/question/263589279/answer/274299180来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

巨人在那里,能不能爬到肩膀要看个人能力和造化

现在已经有了那么多优秀书籍就摆在图书馆里,可是一年能啃一两本已经很不错了。。。巨人爬不动啊

AST写出《OS:D&I》,胜过普罗米修斯盗取天火
从代码实现上linux最初版本和minix没半毛钱关系,minix随那本操作系统设计与实现第一版时,minix1.0是个16位系统,这一点恐怕很多人都不知道。

代码上是不一样的,但Linus最早开发Linux时,讨论是在Minix的newsgourp里和Minix的用户一起讨论。 当时他发的帖子里强调是minix-lookalike, 而且Linux初版需要在Minix里setup,这叫没半毛钱关系?

别说写内核了。我可以断言,中国所有计算机相关的应届毕业生中,50%以上都写不出一个整数转字符串的c函数。

itoa有各种corner case,一时容易想不全,缺少情况。而且又完全有现成的代码可以用,不需要自己再重新写一遍。逻辑上也没有难度,作为教学或者训练也没有意义。所以能不能正确写出itoa的实现完全不能体现一个程序员的水平。

第一个版本还不能证明linus有多牛, 熟读386手册, 很多系统级程序员都可以写. 尤其是还有minix可以参考, sysv的代码/bsd4.4 的代码也都有. 算不上多牛. 但是我觉得能证明他牛的,而且牛的让我心服口服的有3点.

1. 统御力极强, 整个kernel社区 是非常难掌控的.

2. 颠覆性的开发git, 直接秒杀clearcase, IBM那么多的钱都白烧了, 堪称万人敌, 分分钟打脸bitkeeper. 初始原型开发时间10天, 10天, 10天! 你没看错!

3. 骂人功夫也很牛, 说实话, 我骂不到这个境界

作者:wiles super
链接:https://www.zhihu.com/question/263589279/answer/274753296
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


linus的个人魅力在于,他愿意分享个人的想法,并且找到正确的方向带领大家走下去,这种心气和眼光是普通学生所缺少的。

linux一路走来用了很多年的时间,现在的辉煌让我们忘记了它诞生时的时代背景,而这正是linus的不易之处。

我们应当谦逊的去学习linus个人的闪光之处,而不是抱着我上我也行的心态去看轻别人在艰苦年代取得的成就。

以上。

# 推荐本书:unix编程艺术,可以通过这本书了解下unix,linux,gnu的发展过程和unix蕴含的哲学。

作者:吃你面包
链接:https://www.zhihu.com/question/263589279/answer/273996629
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:绅士喵
链接:https://www.zhihu.com/question/263589279/answer/274153708
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

其实 Linus 是比乔布斯和比尔盖茨更加“技术派”的人,并且更加得多。Linus 当初是觉得 Minix 上的终端仿真程序太烂,想自己实现一个。逐渐的又由于某些原因不得不自己实现文件系统等内容,以至于后来才成了操作系统。

在他干活的初期,他连一份完整和标准的 POSIX 文档都没有,是边摸索边学习边尝试写出来的。

当然,毫无疑问的是当时的 Linux 是参照 Unix 设计诞生的。虽然是他从零创建了 Linux,但是 Linus 最初对操作系统设计和实现也是一窍不通的,他是看了一本书,名叫《UNIX 操作系统设计》。

所以实际上仅论当时的操作系统设计而言,Linus 并没有达到什么境界。他对操作系统设计的话语权来自于他自身的实践的总结。

例如当初微内核宏内核之争的时候,他就说过他的观点。大致意思是微内核只是理论上更先进更适合操作系统的架构,但实际上微内核的模块拆分看上去是将问题分化和简化,却忽略了拆分后的模块和模块之间的组合困难程度,导致问题变得更加复杂。

也是得益于当初 Minix 的大缺陷(Linux 能运行多任务的时候 Minix 还做不到),即使 Linux 并没有 Minix 完备,却仍然大受欢迎。

再后由于来 Unix 圈一直在互相打官司,而 Linux 的开源免费且没有版权问题,导致 Linux 被广泛的采纳用来替代 Unix。Linus 本人也说过是 Unix 之间的战火导致了 Linux 当初的飞速发展。

————

不过现在的 Linux 是今非昔比的,有许多惊为天人的设计。乔布斯曾经想让 Linus 参与它们的操作系统,实际上就是看重了 Linux 背后的开源力量。乔布斯想让为 Linux 贡献代码的 Hacker 们为它们的操作系统贡献代码。最后以 Linus 瞧不起 Mach 内核而谈崩。所以单纯谈 Linus 本身的技术水平意义早就不大了,它对 Linux 的贡献最大的应该是对项目的领导上,而不是技术上。

Linus 对比尔盖茨也发表过观点(在他的自传上):称比尔盖茨无法给他技术上的见解,同样的他也无法提供比尔盖茨商业上的规划。在我看来肯定存在将比尔盖茨认为是成功的商人而不是成功的技术人的意味。

从技术角度看也能发现这么多年过去了,Linus 还掌握着对 Linux 技术细节的话语权,可见他对操作系统的设计和见解可能已经超越他曾经的许多前辈了。

例如前段不久 Linus 就批判了 Google 的安全专家(并称他们不懂操作系统运作):Linus怒喷谷歌安全工程师

————

回到问题,Linus 最初纯粹由他实现的最后一个内核版本技术究竟多厉害?至少打败了当时非常流行的 Minix,虽然当时 Minix 也只是一个没有多少实际作用的“实验室系统”。而在 Linux 之前,Minix 也被像 Linus 这样的 Hacker 采用而不用 MS-DOS 证明 Minix 也是很优秀的。

—————

所以,相当厉害。


GNU计划 以GNU Hurd为整个GNU 操作系统的核心,然而,GNU 操作系统的核心 Hurd 直至1991年仍不可使用。而在1991年,当年的计算机业余爱好者Linus Torvalds(如今为世界顶级计算机科学家),通过对教学用的Minix操作系统的研究扩展,独立发表了开源的 Linux内核。

说linux最初版本不牛逼的知乎大侠们,你们让当年GNU社区那群屡败屡战写Hurd内核的传奇黑客们情何以堪?

作者:狼牙白菜
链接:https://www.zhihu.com/question/263589279/answer/308328693
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


作者:笨叔
链接:https://www.zhihu.com/question/263589279/answer/274516696
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

linus最早放出来的版本还不到1w行代码,实现的功能有限,而且还有不少hardcode,和当时的硬件条件也相关。不能用现在linux 4.x的内核的眼光来看它。毕竟不是一个时代的。在那个时空下,linus释放的代码,还是相当不错的,要不然不会吸引这么多人…

我觉得现在玩linux,应该玩比较新的内核版本,至少要linux 4.0。当然,想玩小巧玲珑的OS可以玩RTOS

要看最新linux内核有多么复杂,可以看《奔跑吧linux内核》,全球首本linux 4.x内核分析书籍,哈哈,厚脸皮黄婆卖瓜,欢迎吊打

Linus大学时期写出了linux内核,那个最初的版本仅就技术而言,有多厉害?-2

转载请注明:落伍老站长 » Linus大学时期写出了linux内核,那个最初的版本仅就技术而言,有多厉害?

发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址