Python 还能承担下一个时代的发展重任吗?Mojo 语言的横空出世对 AI 研发生态有什么影响? 了解详情
写点什么

在 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:544504
用户头像
万佳 InfoQ编辑

发布了 677 篇内容, 共 312.7 次阅读, 收获喜欢 1775 次。

关注

评论

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

Spring Boot核心技术之Rest映射以及源码的分析,java从入门到放弃

Java 程序员 后端

Spring-boot使用logback实现日志配置,java自学视频网站

Java 程序员 后端

Springboot 使用Quartz定时器执行多个定时任务 配置篇

Java 程序员 后端

SpringBoot2----拦截器和文件上传功能,源码+原理+手写框架

Java 程序员 后端

spring boot 整合Swagger2 构建API文档,linux学习路线图

Java 程序员 后端

Spring 全家桶,永远滴神,spring框架教程

Java 程序员 后端

【LeetCode】提莫攻击Java题解

Albert

算法 LeetCode 11月日更

Spring Cloud Stream 编程模型的基础知识,很多老司机都不知道

Java 程序员 后端

Spring Retry不为人知的技巧,你知道几个?,java程序设计精编教程第三版答案耿祥义

Java 程序员 后端

SpringBoot 实战:优雅的使用枚举参数(原理篇,这一次带你搞懂Spring代理创建过程

Java 程序员 后端

Spring Cloud 分布式事务详解及LCN解决方案,mybatis底层原理

Java 程序员 后端

Spring cloud stream【入门介绍】,java开发实例大全云盘

Java 程序员 后端

Spring Boot 谷粒学院、谷粒商城项目问题汇总,tomcat面试题

Java 程序员 后端

Spring Cloud入门-Consul服务注册发现与配置中心(Hoxton版本)

Java 程序员 后端

spring-cloud-kubernetes的服务发现和轮询实战(含熔断)

Java 程序员 后端

SpringBoot + Vue 开发前后端分离的旅游管理系统,unixlinux编程实践教程

Java 程序员 后端

SpringBoot+Redis基本操作,实现排行榜功能(1),springmvc教程下载

Java 程序员 后端

Spring Cloud入门-Admin服务监控中心(Hoxton版本),java开发面试视频

Java 程序员 后端

springboot+mybatis+druid整合笔记,java程序设计案例教程课后答案

Java 程序员 后端

SpringBoot2----Web模块的基本注解,美的java面试题

Java 程序员 后端

Spring Cloud Gateway限流实战,万字详解微服务的哨兵机制

Java 程序员 后端

Spring Cloud:第四章:Hystrix断路器,mybatis面试常问问题

Java 程序员 后端

Spring MVC框架:第十二章:运行原理,腾讯Java面试题

Java 程序员 后端

Spring--JdbcTemplate基本使用,三年老Java经验面经

Java 程序员 后端

springboot+Redis+Shiro,java编程技术高级八大类

Java 程序员 后端

【Flutter 专题】13 图解最基础的 http 请求方式

阿策小和尚

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

Spring 使用Validation 验证框架的问题详解,springboot原理

Java 程序员 后端

Spring02:基本配置与依赖注入,贼好用的Java学习路线集合

Java 程序员 后端

Springboot 整合Shiro 轻量级权限框架,从数据库设计开始带你快速上手shiro

Java 程序员 后端

SpringBoot+Redis基本操作,实现排行榜功能,javasql优化面试题

Java 程序员 后端

spring boot增删改查,javassm框架面试重点

Java 程序员 后端

  • 扫码加入 InfoQ 开发者交流群
在Linux内核社区当开发者是种什么感觉?_开源_万佳_InfoQ精选文章