皇上,还记得我吗?我就是1999年那个Linux伊甸园啊-----24小时滚动更新开源资讯,全年无休!

专访笨叔叔:Linux 绝对霸主,Linux 开发者未来可期

Linus Torvalds 在上个月正式发布了 Linux Kernel 5.0 全新版本,版本号虽然直接从 4 升到了 5,但其实这只是 Linus 不喜欢子版本号太大的“任性操作”。

版本号大升级是否意味着 Linux 内核也发生了重大的变化?

目前 Linux 在物联网、云计算、超算、人工智能等领域扮演着越来越重要的角色,诸如 5G、边缘计算等技术也开始逐渐铺开,技术的革新对 Linux 从业者又会带来怎样的机遇和挑战?作为一个“超级”开源项目,虽然 Linux 总是藏身幕后而不怎么为普通人熟知,但作为开发者的我们应保持对它的关注。

为此,我们邀请到了资深 Linux 内核开发者笨叔叔一起探讨关于 Linux 开发者的职业发展前景、Linux 未来发展,以及如何为 Linux 内核贡献代码等话题。

下面是采访内容整理。

笨叔叔您好,先自我介绍一下吧,顺便和大家分享下最近和 Linux 内核相关的工作

大家好,我是笨叔叔,目前在上海紫竹一家芯片公司担任 FAE 职位,FAE 就是 Field Application Engineer,技术支持工程师,负责客户支持工作。

我本人从大学毕业到现在工作已经有 15 个年头了,从事的工作基本都是和 Linux 相关。第一份工作恰好也是客户支持,当时 Intel 的 XScale 移动处理器十分热门,而我们做的正是 XScale 处理器的开发板。在这之后也曾投身过一段时间的研发工作,几经折腾现在又回到 FAE 的老本行。

平时除了在工作中会和 Linux 内核打交道以外,还会利用业余时间编写与 Linux 内核相关的书籍和录制相关视频。从业多年,也一直在思考一个问题:作为有志进入 Linux 内核领域的小伙伴,如何能快速入门?最近本人刚出版的《奔跑吧Linux内核 *入门篇》分享了我对于这个问题的一些心得和经验。

在 Linux 内核领域深耕多年,您认为 Linux 开发者的职业发展如何?

整体来看,Linux 开发者在中国的职业道路是十分光明的。因为除了桌面领域,Linux 现在称得上是操作系统的绝对霸主,国内对 Linux 职位的需求也很旺盛。

另外一方面,自从去年中兴事件发生后,国家对芯片和操作系统领域的重视程度越来越看重。操作系统虽然已发展多年,但目前还没有一款真正意义的完全自主研发的通用操作系统。据了解,很多大公司都在秘密自主研发操作系统,比如有消息称华为一直在研发操作系统以作备用。

Linux 内核作为底层项目,那么 Linux 开发者的工作是不是也比较偏底层,主要有哪些?

围绕 Linux 内核的工作有很多,取决于不同的公司和不同的工作岗位。

举例来说,如果就职的公司是云服务器厂商或者游戏厂商,而所在的部门是IT基础设施部门,那你的基本工作就是 Linux 运维,即大家俗称的「网管」。

对于 Linux 运维,业内也有约定俗成的评估标准,粗略分成初、中、高三个等级:

  • 初级:掌握主流 Linux 服务器发行版的安装,如 RHEL 和 CentOS 等;维护多台服务器,熟练掌握常用 Linux 命令和 RHEL 常见的服务。
  • 中级:熟练掌握 SHELL 脚本或 Python 语言,能为运维工作开发自动化脚本。
  • 高级:深入了解 Linux 内核代码。根据企业需求,深入了解内核的某个模块并进行代码级别的优化。

像 BAT 和华为等公司的 Linux 运维里面,就有不少 Linux 内核专家,他们对内核某些核心模块有深厚的理解和造诣,比如内存管理、文件系统、IO 性能以及虚拟化等。他们平时会积极参与 Linux 社区的技术讨论,并且也给 Linux 内核提交了很多补丁。这一块国内的阿里巴巴和华为做得最为出色。薪水方面,初级运维薪资普遍较低,而上面说到的高级运维,基本是百万年薪起步。

除了 Linux 运维,还有一类公司会利用 Linux 打造产品,比如消费级的嵌入式产品,手机、可穿戴设备、IoT 和工业嵌入式等。在中国,这类公司正好是 Linux 使用群体的主力军。

通常来说,这类公司都有一个共同点,那就是最终交付给客户的是一个产品,而 Linux 只是一个基础平台或者载体。最终用户可能甚至不知道这个产品使用了 Linux 内核,但这不妨碍他们需要大量的 Linux 开发者 —— 包括 Linux 内核驱动以及 Linux 应用程序开发人员。

对于 Linux 内核开发者来说,这些公司主要提供几类工作岗位,需求最大的岗位是 Linux 驱动开发工程师,其次是 Linux 测试工程师,最后是 Linux 内核优化工程师。此外,这些公司通常采用第三方芯片提供的方案,比如高通,MTK,TI 等。芯片公司会提供一套可用的 Linux 板级开发板(BSP),其中包含了参考方案的 BOM、驱动程序和源代码等。但通常研发产品的公司会替换参考设计的外围器件,一是为了降低成本,二是让产品差异化。比如摄像头、屏幕和 WiFi 芯片等。因此,这类做产品开发的公司需要大量的 Linux 驱动工程师进行移植工作。

使用第三方芯片方案的公司还有一个特点,由于芯片公司提供的参考代码仅仅是可用,并没有经过工业产品级别的压力测试和复杂环境的测试,而这方面工作恰好需要研发产品的公司独立完成,因此他们还需要大量的 Linux 测试人员和研发人员。

最后还有一类公司值得一提,那就是芯片公司,比如高通、Intel、MTK、海思和展讯等,他们对 Linux 内核底层开发人员长期都有大量的需求。要知道开发一款 SoC 不仅仅是开发和 SoC 相关的 Linux 驱动,为争取到客户,芯片公司还需要开发一整套解决方案,即所谓的 Turnkey Solution,其中涉及到的工作需要大量 Linux 底层开发人员参与才能完成。

这部分 Linux 开发人员通常和 Linux 内核社区紧密接触,而大公司也会优先把自己开发的驱动提交到 Linux 内核社区,以获取更好的支持。

对于有志为 Linux 内核贡献代码的开发者,有什么经验分享或指引?

这是一个很好的目标。我的建议是,首先要热爱这个工作。第二,不必抱着急于为 Linux 内核贡献代码的想法,而是采用循序渐进的方式实现目标:

  • 设备的驱动程序相对比较简单,所以不妨先从自己熟悉或者感兴趣的驱动程序开始着手,尝试阅读 Linux 社区最新的驱动代码。
  • 阅读代码之后,可以尝试对代码进行调试,发掘能修改的地方,比如编译警告、不合理的代码等。
  • 针对有问题的代码,可以向社区提交自己编写的补丁,不过要注意提交补丁之前,应学习熟悉 Linux 社区的文化,以及 git 工具的使用等。相关内容在《奔跑吧Linux内核*入门篇》中有介绍。

如果从未接触过 Linux,完完全全是小白状态,不妨先从自己动手安装 Linux 系统开始,比如 Ubuntu 等,并将其作为主力操作系统使用。

事实上,Linux 内核开发涉及到多领域的交叉,比如 C 语言、汇编语言、操作系统和架构。有兴趣的同学可以逐点学习和提高。

Linux 内核的更新比较快,生产环境要保持和社区一致的进度是否有必要,升级的话有哪些考虑的因素?

上个月 Linux Kernel 5.0 正式发布了。整体来看变化不大,从 Linux Kernel 4.20 到 5.0 也只是顺延的版本升级。Linus 本人也表示之所以直接升级主版本是因为不喜欢非常大的子版本号,他觉得双手双脚都数不过来了。

至于是否应该保持和社区一致的版本节奏,我认为这和产品选型相关。拿云服务器厂商来举例,他们通常会使用 RHEL 或者 CentOS 系统,但现在最新的 CentOS 7.6 使用的还是 3.10 内核,这种情况不建议贸然升级到最新的 Linux 内核,因为风险太大。

要知道这些发行版所采用的 3.10 内核,是由红帽大量的 Linux 内核工程师和测试人员经过严格测试再推出的,属于比较可靠的版本,毕竟一般公司缺乏这种体量的实力。大家之所以选择红帽,也正是信任红帽在 Linux 社区的实力和影响力。

因此,为稳定起见,最好跟着厂商的步伐进行升级。

另外,有的公司需要利用 Android 系统进行产品研发,此类公司一般会跟随 Android 的版本,或利用芯片公司提供的 BSP 包的版本进行二次开发,他们也不会贸然升级到最新版的 Linux 内核。

如果是开发者出于个人的兴趣爱好,希望折腾一把,把自己的个人开发环境升级到最新版内核,这自然没问题。

除了桌面领域,Linux 已经是事实上的统治地位,你认为 2019 年 Linux 会如何发展?

虽然现在市场的关注热点放在 5G 和 AI 等一些新兴技术上,但不管 5G 还是人工智能,产品需要落地,都需要操作系统作为基础硬件平台。

除了桌面领域,现在 Linux 系统俨然已成为操作系统的绝对霸主。除了传统的服务器领域和嵌入式领域,我们可以看到越来越多的产业都在使用 Linux,包括工业 4.0、人工智能和物联网等。可以说,Linux 才是操作系统的第一,不仅是装机量第一,而且参与开发的人数和公司数量也是第一,拥有最活跃的社区,人气最高,还有众多大公司的支持和资金投入,这是其他任何一个社区都无法比拟的。

此外 Linux 的生态相当完善,其支持的硬件也是最多的,很多硬件厂商新发布的产品,最先支持的操作系统就是 Linux 系统。

由此可见,围绕 Linux 的产业生态会带来更多的职位需求,而 Linux 内核开发在这些职位当中最有含金量,前景和发展未来可期

了解到笨叔已经出版过两本书了,那最后请和我们分享一下写书的心得和经验吧

写第一本《奔跑吧Linux内核》的初衷是希望把自己多年的工作经验和总结用文字的方式记录下来。

因为工作的关系,作为 FAE,常常需要面对客户的“蹂躏”和白眼,他们常常会甩给你一些刁钻的问题。对于这些问题,FAE 通常的做法是把它转发给后端的研发同事,让他们来回答,而我本人喜欢自己研究代码,自己解决(当然不是所有的问题都能一个人解决),而且在与研发同事的讨论和探讨过程中,自己也有十分大的收获。

另外,我有记笔记的习惯,这里说的是手写笔记,我会把一些思考的问题和思路记录下来,经过多年的积累,我已经记录了两大本笔记。《奔跑吧Linux内核》这本书通过奔跑卷和思考题的方式把我这么多年遇到的问题和思考都分享了出来,这些都是我作为 FAE 多年的吐血总结,对此我感到很开心,因为这本书体现了一个 FAE 应有的独立思考和坚韧的品质。

《奔跑吧Linux内核》出版后,得到了很多 Linux 工程师的喜欢,我也倍感欣慰。但有不少小伙伴纷纷给我留言,说这本书起点比较高,完全看不懂。另外也有大学老师说,书太厚,不适合作为大学本科教材,希望我可以写一本难度稍低,薄一点的书。

所以《奔跑吧Linux内核 *入门篇》这本书融入了很多老师给我的建议,特别是南昌大学的陈悦老师,大连理工的吴国伟老师,以及国防科大的余杰老师。还有一点就是,国内学 Linux 的小伙伴中,有相当的一部分都从事与 Linux 运维相关的职业,但从 Linux 运维到 Linux 专家之间还有一个巨大的鸿沟。入门篇这本书希望读者在阅读完鸟哥私房菜之后,可以通过这本书进入 Linux 内核的世界,从而提升自己对 Linux 的理解,也为此后的职业发展增加实力。

第一次写书的时候,完全没有想到要出版,当时只是为了把自己的积累用电子档案的方式记录下来。第二次写书,也就是这本入门篇,是带着任务写的,反而有点忐忑不安,生怕辜负了读者和老师们的期望,所以在此也忠心希望各位读者朋友可以毫不留情地给我批评和建议,以便后续修改再版的时候能做得更好。

转自 https://www.oschina.net/question/2720166_2305500