写点什么

在 Linux 内核社区当开发者是种什么感觉?

  • 2021 年 10 月 18 日
  • 本文字数:5995 字

    阅读完需:约 20 分钟

在Linux内核社区当开发者是种什么感觉?

今年 5 月,经过 Linux Kernel 社区成员的共同努力,Linux Kernel 5.10 维护周期最终确定从 2 年延长至 6 年。作为 Linux 社区的主要贡献者之一,华为公开承诺投入资源,协助进行 Linux Kernel 测试和补丁回合。基于 Linux 内核的 openEuler 操作系统于 2019 年正式开源,至今已经发布三个版本,按照版本计划,openEuler 22.03 将于明年发布,并将基于 Linux Kernel 5.10 构建。openEuler 的快速发展离不开 Linux 内核的稳定开发,更离不开内核开发者的辛勤付出。


几千名内核开发者维护着有近 3000 万行代码的 Linux 内核,保证了无数设备、机器和系统的正常运转。正因为这些开发者参与社区,贡献社区,Linux 才能从一个个人项目发展成世界级的开源项目。内核开发者怎样参与社区?如何为 Linux 内核社区做贡献?它们在社区都有哪些收获?……带着这些问题,InfoQ 与三位 Linux 内核开发者兼 openEuler SIG 组成员聊了聊。

俞玉芬:90 后的女性内核开发者


俞玉芬参与 Linux 内核社区已有三年时间,累计为社区贡献了 60+ 个补丁。

俞玉芬


2017 年从中国科学技术大学硕士毕业后,俞玉芬进入了华为,在内核存储项目组工作。她所在的项目组主要关注 Linux 存储领域,她具体参与的是 Linux 存储 IO 栈相关工作。对她来说,“以前没有接触过 Linux 社区,只是研究方向与内核有关”。在内核存储项目组,团队氛围非常开放,奉行“来源社区,回馈社区”的理念,鼓励大家多给 Linux 社区做贡献,于是俞玉芬开始接触 Linux 社区。


不过,想成为 Linux 社区开发者并不容易,她虽然订阅了很多与存储相关的社区邮件,“但基本看不懂邮件里讨论的内容。同时,看内核代码时,我觉得代码非常好,没什么 bug。并且,我也没有什么新想法,完全没信心可以参与进来”。


俞玉芬向 InfoQ 坦言,“整体感觉内核社区的门槛特别高,好难!”


但是,社区文化给了她信心,“感觉社区的技术氛围很好。这是一个非常好的学习平台。如果能静下心来慢慢看代码,可以学到很多新东西,从而激发自己的兴趣”。Linux 内核很复杂,涉及领域非常多,她逐渐意识到要先从理论上了解这个功能或特性,再去看代码。只有不断地学习,才能慢慢深入,这是一个循序渐进和不断积累的过程。


入门后,她尝试为社区做贡献,2018 年向社区提交了第一个补丁,这个补丁是关于 F2FS 的小特性,让 F2FS 支持 cgroup writeback。为什么提交这个补丁?她说:“看代码时,我发现其他文件系统都支持这个特性,但是 F2FS 是不支持的。在跟内部的技术专家讨论后,我们觉得可以做。然后进行开发,本地验证。”


由于经验不足,她写出来的补丁存在一些问题,内部的技术专家就帮她 Review 代码,最后补丁修改了好几遍才提交到社区。而维护者认为这个补丁挺有价值,就接受了它。在她看来,为社区做贡献需要坚持,不能轻言放弃。这个感悟源自她的亲身经历:


2020 年,产品在 ARM64 平台上使用 RAID5 时,我发现 RAID5 在 PAGE_SZIE 为 64KB 的情况下存在写放大问题,进而影响上层应用。并且,这个问题也存在于社区主线代码。经过跟社区讨论后,我认为修复这个问题很有价值。之后,与技术专家一起讨论方案。在确定方案后,我首次向社区提交了一组特性补丁集。刚开始,并没有信心补丁集能被接受,经过反复讨论,补充测试数据,针对社区提出的反馈一遍一遍的修改,一直到第八个版本才被接受,最终合并到 Linux 5.10 版本。从开始投入到最终合并补丁,前后花费半年时间。这个过程需要韧性,需要坚持。如果你不坚持,那这件事最终就没了。


据 InfoQ 获悉,从 2018 年到现在,俞玉芬累计为社区贡献了 60+ 个补丁。看到自己提交的补丁被接受,得到别人认可,“觉得自己的工作挺不错,有价值”。


她说:“我能从 Linux 社区日志里找到属于自己签名的代码,它们在全世界被使用,跑在无数的机器上。我觉得挺有成就感。“


从个人角度来说,参与社区,贡献社区,也给俞玉芬的成长带来了极大帮助。在她看来,一是通过参与社区,提升了自己的沟通表达能力。因为内核社区的日常沟通主要通过邮件,“刚参与社区时,写邮件经常‘词不达意’”,而现在则学会了用邮件进行高效沟通。二是通过贡献社区,学习优秀开发者的诸多经验。这不仅让她对其他领域有更多的了解,而且大大提高了思考深度。“社区对我提交的补丁反馈了很多宝贵的意见,比如补丁是否会引入其他问题、有没有更好的修复方法等。这些方面的积累都能帮助到自己,并提高个人的开发能力”。


不论性别男女,还是年纪大小,你都可以参与 Linux 内核社区。这已经被俞玉芬证明了。通过不断学习,沉淀知识,积累经验,她从一名小白顺利成长为初级 Linux 内核开发者。更重要的是,在这个过程中,她不仅增长了见识,自身能力得到极大的提升,而且让自己的代码在全世界被使用,获得很大的成就感。

吴峰光:Linux 就是我的游戏


吴峰光,接触 Linux 超过 20 年,曾因社区贡献获得 Linux 之父 Linus Torvalds 的好评。

吴峰光


吴峰光在 1998 年开始学习 Linux,此时,他还在中国科学技术大学读书。最初,他和大家一样学习 Windows,但后来无意中接触到 Linux。同学给他取了个不食人间烟火的绰号——“老神仙”,但他却逐渐迷上 Linux,“发现它真的好,非常开放,一旦学会后终身受益。并且,一旦过了 Linux 门槛,它的效率就很高。此外,它是开源开放的,对技术人员非常友好,可以从中学到很多东西“。


吴峰光说:“我平时没有打游戏的爱好,Linux 就是我的游戏。”


目前,吴峰光已经为社区做了 16 年贡献,而第一次为社区做贡献是在 2005 年。那时,他首次向社区提交补丁。但是,补丁提交上去后没有任何响应。为此,他感到很纳闷,因为一般而言,开发者向社区提交补丁后,社区会有开发者反馈,即挑毛病。即使没有反馈,他也在改进补丁,继续向社区提交,“几个月后,收到社区的一个回复,真的很激动,但是那个补丁仍然不被接受”。在花了两年时间,累计写了十几个版本后,这个补丁才真正被接受。


2012 年由于为 Linux 社区提供自动化测试服务的 0day/LKP 系统,他不仅受到广大 Linux 内核开发者的赞誉,而且获得 Linux 之父 Linus Torvalds 本人的好评。因为这个系统极大降低了新内核发布的编译与启动错误、性能 regression 等问题。为什么会开发这个系统?据吴峰光回忆:


那时,我的工作最初是做预读和回写优化,本质是对 Linux 内核的一些算法进行优化。由于 Linux 内核的使用场景非常广泛,因此需要大量测试证明改进是有用的。每做一个新测试就会发现一些问题,然后进行修改,测试量大概占了整个工作的一半时间。其次,大家在参加 Kernel Summit 时谈到对 Linux 的担忧——它的复杂性不断增长。复杂性不仅会导致这个项目超出大家的维护能力,而且会让它失去对新人的吸引力,因为新人只有先理解一个系统,才能去修改它。此外,复杂性还会让系统失去演进能力,导致开发者很难修改系统,因为牵一发而动全身。如果任由内核继续膨胀,最终它会压垮自己。另一个重要因素是所在的内核组正考虑弄一个构建测试,后来把目标扩大,不仅仅只考虑自己所在的内核组,而是为整个社区提供服务。


为了做这个测试系统,吴峰光另辟蹊径。传统上,“先跑一些测试用例,跑完后把所有问题放在一个 Web 界面,让开发者们看”。他直言,“这个效果不好。因为 Linux 社区很大,有几千个开发者,把一堆测出来的问题放在 Web 界面,里面有噪音,可能只有几个问题与自己有关,大部分都是别人子系统的问题。这就导致测试系统与开发者之间是割裂的,它没有一个好的指向性”。


吴峰光抓住一些关键点进行改进,按照自己的思路设计,定义出关键要素,可以精准识别开发者的痛点。同时,好钢用在刀刃上,聚焦关键点。刚开始,这件事的挑战不小,只有吴峰光一个人,一台机器,最初的测试系统甚至连 Web 界面都没有,测试很慢,”我后来在实验室用各种途径搜刮可用资源,慢慢才积累起更多的测试资源。在成功后,更多人才加入进来“。


他说:“我每个开发都要实实在在的,做那种能落在开发者心坎上的功能。”最终,这个测试系统获得很大成功。那段时间,每天都有人发邮件感谢吴峰光。甚至参加 Kernel Summit 时,开发者们集体给吴峰光鼓掌,“那是我参加 Kernel Summit 后从未遇到的事,以前也没有这样的事”。


十几年参与 Linux 社区的过程中,他对核心开发者的邮件印象深刻。“我特意把 Linux 邮件列表的一部分人用语法加亮,因为他们写的邮件很值得阅读,比如 Linus Torvalds”。这些核心开发者很善于在邮件里表达观点,邮件内容可以写的非常生动和活泼,“感觉就像本人在那里讲话一样”。在他眼中,内核社区的所有核心开发者,邮件的表达能力都非常强。在邮件里就某一话题进行讨论或辩论时,提出鲜明观点,摆事实,讲道理。同时,其逻辑性非常强。


以 Linux 为游戏的吴峰光,为社区做了 16 年贡献,早已是资深 Linux 内核开发者。想成为资深 Linux 开发者,不是靠权力、财富或地位,而是看你对社区的贡献。更大的社区贡献意味着你能赢得更广泛的赞誉,即我为社区做贡献,我因社区更精彩。

Mauro Chehab:从一名终端用户到 Linux 社区核心贡献者


Mauro Chehab


Mauro Chehab 是华为 Linux 内核专家,自 2005 年以来一直担任 Linux 内核 Media 子系统维护者。据他介绍,Media 子系统涵盖了对各种设备的支持,还支持 HDMI 接口功能。作为维护者,其主要职责是审查向 Media 子系统提交的代码,检查代码质量是否过关,是否可以添加到内核中,并向开发者对打回的修改提供反馈建议。


据悉,他最早是 Linux 的终端用户。为了将本地网络的数据包路由到互联网,他安装了 Linux。上大学时,他对信号处理领域产生了兴趣,还写了这方面的本科和硕士论文。当打算再进修时,他买了一张支持 Linux 的电视采集卡,用来开发一些编码视频的工作。然而,在测试卡时,“我注意到驱动程序上有一个错误,导致它无法与巴西的电视编码系统一起工作。所以,我开始修复它的代码”。修复方法很简单:虽然巴西电视标准使用的颜色信号频率与美国的非常接近,但两者间的差异足以让敏感的主板滤波器拒绝信号。虽然这个修复很微小,但是他花了两周时间理解代码,阅读芯片文档,才确定错误的位置。在修复结束后,他添加了两行额外的代码让驱动程序感知这种差异。


在写出补丁后,Mauro Chehab 便向社区提交。他说:“一位热情的内核开发人员指导我修改补丁,并且介绍了 Linux 编码风格。根据 Linux 编码风格,我又重新修改了几次。“


成功提交第一个补丁后,他在 Linux 内核社区非常活跃,开始修复驱动程序其他几个错误。


这引起了开发人员的注意,他们也请求 Mauro Chehab 帮他们提交代码。事实上,当时 Media 维护者转移到另一个子系统,正好缺人,这样 Mauro Chehab 成为了这个子系统的维护者。


“在工作几个月后,以前的维护者看到我的工作,在交谈后,我们发了一个补丁,宣布从那时起,我正式担任 Media 维护者。”


对 Mauro Chehab 来说,Linux 社区每个版本聚合了 2000 多个来自不同文化习惯和时区的贡献者,“持有不同见解的贡献者,我相信这是 Linux 内核维护工作中最具挑战性的部分”。这种巨大的多样性让 Linux 成为一个如此庞大而重要的系统。但这也带来了相当大的挑战,即如何融合和使用这些想法与观点,让整个系统顺利运行,并带来全面的改进,帮助来自全球所有国家的人们。


作为维护者,他工作的大部分时间主要审查提交的补丁,并作出反馈。


他表示,“我们一直欢迎新的社区贡献者加入,成为开发人员的唯一基本要求就是对它感兴趣。不要害怕交谈或提问,我们向来欢迎并且乐意帮助每个人。”


Mauro Chehab 不仅是 Linux 内核 Media 子系统维护者,而且是 Linux 社区核心贡献者和维护者,并在 Fedora 社区和 KDE 社区维护多个核心包。他在 Linux 5.8 版本补丁数和修改代码行数均排名第一,提交代码 549 次,占比 3.4%,修改代码行数占到所有人修改的 1/4。并且,他在 Linux 5.10 的版本贡献排名第二。


究竟是什么支持他 16 年来不断为 Linux 社区做贡献?他回答:


我之所以持续为 Linux 社区做贡献,是因为我有机会协助开发一个在全球范围内使用的现代操作系统,它可以在大量设备和计算机上使用,为许多不同的硬件提供支持,其功能每 2.5 个月更新一次。我有机会在变化最多的领域工作。最近用于从火星表面视频制作的机智号直升机使用的就是 Linux。所以,现在我们的代码已经冲出地球,到达了另一个星球!我很自豪能够为这样的成就做出某种贡献。


在 Mauro Chehab 看来,Linux 社区的主要价值观念是开源。这样,任何人都可以访问 Linux 的源代码,将其用于任何目的并将改进它。这意味着人们可以从代码中学习,任何人都可以随时随地对它做出改进。它有一个非常包容的环境,所以吸引和招募了来自不同国家和文化的开发者。


十几年 Linux 内核维护工作让他遇到过很多伟大的开发人员,并在采访中重点提到了以下五位:


  • Linus Torvalds 作为 Linux 创始人,他是一个非凡的开发人员和维护者,能够从一开始就协调内核开发。

  • Greg Kroah-Hartman 是一位非常有才华的开发人员和维护人员。他管理 staging tree,这对初学者来说是一个有趣的地方,因为它包含的驱动程序不完全遵循编码风格,需要进一步的审查和编码。

  • Jonathan Corbet 撰写了一些 Linux 著作,他为 Linux 内核开发人员维护了一个非常有价值的网站,专注于开源和 Linux。他也是文档子系统的维护者,并开发了几个 Linux 驱动程序。

  • Randy Dunlap 让我最难忘。当我开发内核的第一个补丁时,他帮了我很多忙。

  • Andrew Morton 的工作也很出色,他除了维护内存子系统,还主动去维护那些无人维护的子系统,合入补丁。


在采访最后,他说:“为 Linux 工作是令人高兴愉快的,我觉得做自己真正喜欢的事情,并能够在世界和社会中带来影响,真的很有成就感。作为华为团队的一员,我们专注致力于帮助 Linux 内核改进,为其添砖加瓦。”


以开源为核心,Linux 社区的包容、开放氛围似乎具有一种魔力,源源不断地吸引着来自全世界的优秀开发者。这或许才是 Linux 社区的生命力。

写在最后:


无论是俞玉芬,还是吴峰光,或 Mauro Chehab,他们不仅是 Linux 内核开发者的代表,而且是 openEuler 社区的内核 SIG 组一员。正是因为有他们的贡献,Linux 内核才能越来越好,而这也为 openEuler 社区的蓬勃发展奠定了坚实的基础。openEuler 社区从成立到现在,已经拥有 5200+ 社区开发者,社区版本下载量超 15 万。社区迅速发展壮大,版本如期稳定发布。这一切都离不开开发者的辛勤付出,向每一位开发者致敬!


今年也是由华为来主办中国内核届最有影响力的峰会 --“中国 Linux 内核开发者大会”(简称 CLK)。CLK 以“自由,协作,创新”为理念,以开源技术的推广和普及为使命,旨在促进 Linux 内核开发爱好者相互交流、共同进步。由英特尔、华为,阿里巴巴、富士通南大软件、清华大学,今日头条、麒麟软件,统信软件等企业组织,每届线下参会人数近 500 人,举办至今已是第十六届。openEuler 社区也会积极参与到 CLK 大会中。

2021 年 10 月 18 日 14:543278
用户头像
万佳 InfoQ编辑

发布了 633 篇内容, 共 245.0 次阅读, 收获喜欢 1635 次。

关注

评论

发布
暂无评论
发现更多内容

元宇宙所带来价值共识的历史回归

Geek_987812

技术管理哲学随笔:如果空降,你会怎么做

dclar

CTO 技术管理 管理经

react源码解析7.Fiber架构

zz1998

React React Hooks React Diff

Git进阶(一):git 管理文件之后文件颜色的含义

No Silver Bullet

git 学习 git revert 12月日更

雪花算法对System.currentTimeMillis()优化真的有用么?

秦怀杂货店

分布式 算法 雪花算法

【LeetCode】 连续字符Java题解

HQ数字卡

算法 LeetCode 12月日更

文章目录 [Index]

dclar

大数据 技术 管理 操作系统 中间件

【架构实战营】模块五

Henry | 衣谷

架构实战营

[Pulsar] 按照KeyHashRange读取消息

Zike Yang

Apache Pulsar 11月日更

大厂算法面试之leetcode精讲13.单调栈

全栈潇晨

LeetCode 算法面试

动态限流下分布式api流量整型设计与实现

X

ratelimiter 分布式限流 令牌桶算法 sentinel集群限流

业务请求量膨胀的扩容技术实践

博文视点Broadview

2021年马上要结束了,这5款Java框架你都了解吗

飞不起来的童年

Java spring

30 K8S之Deployment控制器

穿过生命散发芬芳

k8s 11月日更

.NET 中缓存的实现

喵叔

11月日更

使用nodejs和Java访问远程服务器的服务

Jerry Wang

Java nodejs 28天写作 abap 11月日更

【Flutter 专题】01 图解 Windows 环境下安装配置环境

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 12月日更

Java难吗?Java基础知识最强总结(2021版)

XiaoLin_Java

Java

技术驱动未来,保险极客凭借数字团险领跑

科技热闻

“元宇宙”来了 城市会消亡吗?

Geek_987812

移动支付与支付安全SDL

明亮

网络安全 信息安全 数据安全 支付安全 交易安全

大厂算法面试之leetcode精讲14.排序算法

全栈潇晨

LeetCode 算法面试

一网成擒全端涵盖,在不同架构(Intel x86/Apple m1 silicon)不同开发平台(Win10/Win11/Mac/Ubuntu)上安装配置Python3.10开发环境

刘悦的技术博客

Python ubuntu Mac Python3 win11

在线文本字符串批量替换工具

入门小站

工具

大湾区|Serverless 线下活动两连发

阿里巴巴云原生

阿里云 Serverless 云原生 线下活动 大湾区

react源码解析8.render阶段

zz1998

React React Hooks

使用HTML,CSS 和 JS 创建 Chrome 扩展程序

海拥(haiyong.site)

CSS html 前端 chrome扩展 28天写作

Zillow“炒房”失败,算法神话破灭了吗?

脑极体

在 Flutter 中如何使用TabBar和TabBarView创建选项卡布局【Flutter 专题 13】

坚果前端

flutter 28天写作 签约计划第二季 12月日更

如何使用 Kubernetes 监测定位慢调用

阿里巴巴云原生

阿里云 Kubernetes 云原生 监控工具

区块链技术及其军事应用

Geek_987812

基于英特尔x86平台构建AI软件生态系统

基于英特尔x86平台构建AI软件生态系统

在Linux内核社区当开发者是种什么感觉?-InfoQ