共计 2192 个字符,预计需要花费 6 分钟才能阅读完成。
最近,Linux 邮件列表呈现了一封名为《Please don’t waste maintainers’ time on your KPI grabbing patches (AKA, don’t be a KPI jerk)》的邮件。Linux 内核维护者 Qu Wenruo 在邮件中指出,华为开发者提交的补丁有刷 KPI 的嫌疑,在社区引发热议,详见:《Linux 内核维护者批华为开发者刷 KPI》。
后续,华为 Linux 内核贡献者 Leizhen 在邮件列表对此事作出了回复。他在邮件中提到本人过来对内核的次要奉献是优化 Arm64 SMMU 驱动的性能,包含 iova 优化、严格模式优化以及懒模式优化,此外还曾参加 Arm SoC 驱动的开发。而在工夫和精力容许的状况下,他也为 Linux 内核的其余模块进行奉献,尝试找到能够改良的中央,在此期间他做了一些“清理”工作。最初,Leizhen 示意将来将持续为 Linux 社区做出越来越重要的奉献。
原始邮件的发布者 Qu Wenruo 也很快回复了 Leizhen。他对 Leizhen 过来对 Linux 内核做出的重要奉献表白了认可,同时表明了对“清理”工作的态度——并非不重要,但请将这些细小的修复合并成一个更大的 patch 再进行提交,毕竟 maintainer 的审核工作十分忙碌,不要让他们将工夫节约在这些无关紧要的问题上。最初,Qu Wenruo 列举了一些对 Linux 内核社区有意义的尚待实现的奉献工作。
依据 2020 年 12 月公布的 Linux 内核 5.10 开发统计数据,华为向 Linux Kernel 5.10 提交的补丁数量排名第一,批改代码行数排名第二,仅次于 Intel。
那么华为在 Linux kernel 的奉献到底是刷 KPI 还是实在的?该如何主观评估华为对 Linux kernel 的奉献状况?
如何主观评估华为对 Linux kernel 的奉献状况?
如果 依照提交次数来统计奉献状况,华为的奉献仅次于个体开发者(gmail.com 和 kernel.org 邮箱后缀),位列寰球科技公司之首。
如果咱们想屏蔽掉邮件中指出“刷 KPI”的状况,则还有另外两种排名形式 —— 依照开发当量(代码逻辑复杂度指标)或 影响力排名,又会失去新的后果。
如果咱们按开发当量 ELOC 计算,通过程序剖析 在代码层面剖析工作量,并屏蔽空行、死代码等乐音 ,那么华为的排名会掉到 十名 左右,如下表所示。排在前三名的科技公司是 Intel、AMD 和 NVIDIA。
如果咱们把 代码间的依赖关系 也算进来,则 综合影响力排序 如下:
咱们能够看到 华为仍然排在十名左右,与 Google、微软等公司相近。
从提交数这种浅层指标,到 ELOC 或 Impact 这类深度指标,华为的奉献排名有所不同,可见程序剖析能为奉献的度量提供陈腐的视角和信息,评估一位开发者在我的项目中的奉献,不能仅看提交数,还有 ELOC、Impact 等指标,它们更能反映开发者在我的项目中的奉献状况,升高不同的开发习惯对度量准确性造成的影响。
当然即使依照更迷信的评估指标,华为依然排在寰球科技公司的前十,是国内公司做出奉献最多的。从这个层面来说,尽管咱们更激励外围奉献,但也不能一刀切认为华为的“第一”是刷 KPI 所得。
最初,咱们心愿通知初学者或者刚刚参加开源的敌人“勿以善小而不为”,初学者不用过分在意奉献是否足够外围,开始奉献大于所有,哪怕只是批改几个错别字一样值得点赞。
相干名词解释
对于 ELOC(开发当量)
开发当量是对程序员代码产出的一种正当量化和测量。与代码行数、提交数等浅层统计指标相比,开发当量的劣势体现在两个方面:一是不易受到编程习惯或特定代码行为的烦扰(如换行、空行、正文、括号等),并且能更好地反映代码开发所波及的逻辑量。
具体来说,开发当量计算形象语法树的复杂度。咱们既能够计算开发当量的绝对值,也能够计算开发当量的累积值。软件开发是一个动静的过程,代码随着提交发生变化,相应的形象语法树也会演变。
开发当量的绝对值,能够了解为对代码在一个提交切面上的形象语法树进行计算,会思考形象语法树的高度、节点数、不同节点的权重等。开发当量的绝对值随着开发过程而高低浮动,通常出现“继续减少—小幅回落”的模式并一直重复。
开发当量的累积值,则是对代码在各个提交前后变动的计算,基于每个提交前后的形象语法树之间的最小编辑间隔累加,其中代码删减也被视为奉献,只是权重会显著低于代码减少。开发当量的累积值是一个枯燥递增的变量,次要用于反映团队或我的项目的产出和进度。
对于 Impact(开发价值)
开发价值是综合了开发当量和代码调用关系的综合指数。为便于了解,咱们以百分比的模式计算该指数,能够直观了解为奉献比例。
其中调用关系反映代码间相互依赖的关系,包含函数的调用、类的继承、接口的调用等。代码并非线性的表白,而是基于依赖关系形成的图,越多代码间接或间接地依赖于某段代码,那么该代码的影响力就越高;也意味着,如果该段代码作出批改,回归测试的范畴相应越大;通常来说,这类代码批改的老本和重要性也越高。
相干浏览:
- 查看残缺榜单可拜访 https://ranking.merico.build/oss-orgs/,背地的数据和剖析工具来自这个我的项目 https://github.com/merico-dev/build
- Linux 内核维护者批华为开发者刷 KPI
- 知乎:华为 Linux 内核贡献者被质疑刷 KPI,真实情况是怎么的?有哪些信息值得关注?