结束语 第一次看内核代码,我也很懵逼

你好,我是邵亚方。

我们的专栏就要接近尾声了,一路走来,非常感谢你的支持。我在这里想跟你分享一下我学习Linux内核的经历,希望我的个人经历能够给你带来一些启发。

我在从事Linux内核开发工作之前,几乎没有接触过Linux内核源码,只是对Linux操作系统略微了解一些,这还得益于大学期间Ubuntu的流行。那个时候我对什么都感到好奇,看到Ubuntu忽然流行起来,就在自己的电脑上也安装了Windows+Ubuntu双系统,天天折腾Linux命令和一些Ubuntu的使用技巧。然后没过多久,我就觉得自己是一个Linux专家了,开始在一些论坛上“指指点点”,觉得自己无所不能。

我们说,从0到1是一个从无到有的过程,对于发明创造来说这很难,但对于学习新东西而言,从0到1就相对容易了。不过,我那个时候把“学习”当成了“发明创造”,认为自己跨越了从0到1的阶段,就算是突破了学习Linux最难的部分,再往后就会顺其自然。

直到我开始实现一个Linux内核特性,才意识到自己对Linux的认知有多么肤浅。我之前掌握的那些Linux知识,只是让我从0迈出了一小步,而后面实际上还有99步要走。好在我及时意识到了自己的狂妄自大,开始埋头对照着Linux内核源码学习《深入Linux内核》这本书。在我的师傅手把手的指导以及周围同事的热心帮助下,我终于实现了Linux内核特性。

后来,在我能够独立实现Linux内核特性后,我又开始飘了,认为自己是Linux内核专家了。没错,我又在犯之前的错误,以为掌握一个新技能,只要从0迈向1就是突破了最难的部分,剩下的路就会一马平川。

这种狂妄自大一直伴随着我,直到我开始参与Linux社区的工作。当我与来自世界各地的开发者们讨论问题时,我再一次发现自己对Linux内核的认知有多肤浅。这并不是说我周围的同事不如社区里的开发者,而是我的同事们会在我遇到困难时帮助我一起想办法解决,与Linux社区的开发者们打交道则不同,我需要自己解决他们的质疑。

当然,Linux内核社区是很开放的,里面也有很多既热心又谦逊的人帮助你。与他们打交道越多,讨论的越多,你就越会觉得自己对Linux内核的认知很肤浅。有时候,为了反驳他们的质疑,甚至只是为了单纯指出他们逻辑上的缺陷,我会去看大量的内核代码,写大量的内核代码以及大量的测试用例……每当Linux内核子系统的maintainer承认他们的观点是错的,而我的观点是正确的时候,我都会感觉很快乐,因为自己的努力没有白费。

不过,即便如此,我并不觉得自己对Linux内核的理解已经到了多么深刻的地步,因为我知道我还在从1到99的道路上艰难前进着,我也不知道自己到底走了多少步,不过,这对我来说已经不重要了。俗话说,事不过三,你会发现我的心态已经变了,我不再犯之前的错误了。

我只是想告诉你,对于Linux的学习者而言,从0到1真的是最简单的一步,往后的每一步会越来越难。走完99步之后,你可能才开始面临最艰难的那一步。也许当你从第99步正式跨越到第100步时,就能够发明创造一个新的东西了?就像Linus向社区发布Linux内核的第一个版本一样,他从0到1创造了Linux。而我们不断地对它学习、研究,在壮大Linux的同时,也在走着自己的0到99步。至于我们从99迈向100时究竟会实现怎样的突破,我并不清楚,因为我自己还没有达到这样的境界,不过,未来的你和我或许有机会能验证它。

最后,再次感谢你一路以来的支持与陪伴,我们后会有期!

《Linux内核技术实战课》就要结束了,这里有一份毕业问卷,题目不多,希望你能花两分钟填一下。十分期待能听到你说一说,你对这个课程的想法和建议。

精选留言(9)
  • 我来也 👍(5) 💬(1)

    感谢老师的辛苦付出! 台上一分钟,台下十年功. 每次看到老师贴上提交的的`patch`,像如数家珍一样的. 想必每一个都让老师印象深刻吧! 别看每次提交的patch也许只修改了几行代码,但排查的过程肯定是非常艰难的. 像内核这种大型的项目,对代码的要求肯定是非常苛刻的. 即使是分析出了问题的根因,内核维护者对接收`patch`的要求也是非常高的吧. 这些`patch`还只是被合并了的. 想必未被合并,或者是排查出来了,但是在新版中已经修复的bug也不会少吧. ----- 我比较好奇,老师公司对系统内核有没有什么要求. 像老项目可能是没办法了,不能随便迁移. 但是新项目总会有些要求吧. 要不然这查起代码内核代码来,也是相当繁琐啊. ----- 另外,现在的趋势是应用上云,上k8s. 但是在容器中分析内核问题,比直接在宿主机上分析问题,又会复杂不少. 老师会有什么意见或建议么?

    2020-10-08

  • 机制小风风 👍(0) 💬(1)

    作为一个运维,也有研究一下ebpf,或者改改别跟的代码实现一下自己的想法。许多老师提到的排查思路,正是我特别特别缺的,即使找书来啃也是相当茫然,问题就摆在那,但不知道怎么尝试解决。老师这个课程简直太棒了,短小精悍,收益匪浅,让我有了无数想法。以后遇到类似问题,也能心中不慌。真是非常之感谢。期望老师更多的分享。

    2020-11-18

  • 于栋 👍(0) 💬(2)

    感谢老师让我学习了很多,老师牛逼👍,与老师相比,我还只是个小菜鸟,路途漫漫,其修远兮,一起加油😎

    2020-10-08

  • Linuxer 👍(3) 💬(0)

    这个课程我已经看了三遍了,感觉还是有新的收获,把老师讲的知识转化成自已的知识还是需要些时间,不过感觉收获挺大,PageCache方面的知识,最近也帮助解决了不少问题,第三遍的时候来留个言,表示一下感谢!

    2020-12-08

  • Geek_3afe6c 👍(0) 💬(0)

    老师的内核学习路线是怎样的?如何从一个只会调用内核的接口的人变成一个内核开发人员?谢谢老师

    2022-02-20

  • Wade_阿伟 👍(0) 💬(0)

    跟着老师把整个系列课程学习下来了,真的收货很大,尤其是page cache管理和TCP重传量大章节。其他章节感觉自己功力还不够深厚,需要再跟着老师重复学习。最后,有个问题想得到老师的建议。我们现在生产环境开始使用基于ali kernel的4.19内核了,主要是算法和大数据业务。之前有专门学习了bcc-tools这类分析工具。但是对tracepiont kprobe和ePBF 理解还不够深厚。老师能提供这些知识的学习方法和相关资料吗?期望老师的回复

    2021-10-27

  • Geek_396cce 👍(0) 💬(0)

    醍醐灌顶,意犹未尽。 后会有期,江湖再见!

    2021-10-02

  • 五十九秒 👍(0) 💬(0)

    “从 0 到 1 真的是最简单的一步,往后的每一步会越来越难。”,受教了。

    2021-05-26

  • Su 👍(0) 💬(0)

    这就结束了,意犹未尽啊

    2020-10-08