Linus 久违“开炮”,怒喷谷歌大佬:“你的代码就是垃圾!”
“我承认很多粗暴的攻击既不专业、也没必要,尤其有时我还把技术争论变成个人恩怨……我知道这样很不好,真的非常抱歉。”——Linus Torvalds,写于 2018 年。
自 2018 年,Linus Torvalds 向 Linux 社区的程序员和项目贡献者们就过去“邮件中的轻率攻击”道歉后,近几年他的“开炮”频率相对降低了不少,很多事情属于是能忍就忍:前阵子,长期从事 Linux 内核开发的 H. Peter Anvin 高调建议“Linux 内核应从 C 转到 C++”,对此,曾大骂“C++ 真是一门很烂的语言”的 Linus Torvalds 竟也没有开口回应。
不过,近日 Linus Torvalds 在与一位来自谷歌的 Linux 贡献者争论有关“inode”的话题,双方激烈讨论了几天后,他久违地没忍住,直接开骂:“你的代码就是垃圾!”
一场由 inode 引发的争论
老样子,这次的战场还是 Linux 内核邮件列表,而事情的起因是谷歌工程师 Steven Rostedt 发起了一个主题为“确保所有文件和目录的 inode 都相同”的邮件。
所谓 inodes,即索引节点,是一种文件系统中的数据结构,用于描述文件系统对象,如文件或目录。一般在创建文件时,会为其分配一个名称和一个 inode 编号,其中 inode 会存储文件相关属性信息而非数据,包括有关数据在存储介质上的位置信息等。
Steven Rostedt 在邮件中指出 tar 命令要求所有文件的 inode 号都是唯一的,因此他认为文件的 inode 号还是很有用的。然而,面对 Steven Rostedt 的看法,Linus 则反驳称 inodes 早已过时:“inode 号早已不再是唯一的描述符,我们也不是生活在 20 世纪 70 年代,文件系统已经发生了变化。”
但这个说法并没有说服 Steven Rostedt,他还是坚持“最好让所有文件都具有唯一的 inode 编号”,并表示:最初 Linus 建议对所有文件和目录使用相同的 inode,可人们发现,如果目录的 inode 编号相同就会扰乱“find”命令。后来 Linus 提出在 64 位机器上,eventfs_inode 结构中存在一个由对齐而造成的漏洞,可以用来存储目录的 inode 编号。这解决了目录地问题,但文件仍有它们自己的 inode 编号。
而“tar”命令依赖 inode 编号来确定文件之间的唯一性,这反而可能会破坏其功能——由于所有文件大小都显示为零,tar 无法在 tracefs 上正常调用,也不会复制任何内容。
基于这个问题,Steven Rostedt 认为,不仅 tar 依赖于 inode 编号,可能还有其他应用程序也有这种情况,因此“最好让所有文件都具有唯一的 inode 编号”。为此他建议,可将 VFS 层的 get_next_ino() 函数复制到带有“files”参数的 tracefs_get_next_ino() 中:
由于 eventfs 目录中有固定数量的文件,因此在创建 eventfs 目录时就已知道目录文件所需的 inode 数量。tracefs_get_next_ino() 会返回一个新的 inode 号,同时也会保留下一个“files”inode 号,供调用者自由使用。 然后,当为文件创建一个 inode 号时,它的 inode 号将是其父目录的 inode 号加上该目录文件数组的索引,这样每个文件就有了唯一的 inode 号,可以随时检索。
Linus 怒骂:“你的代码就是垃圾”
对于 Steven Rostedt 始终坚持己见、并进一步提出相关建议的执着,Linus 的暴脾气终于还是被逼出来了:“Steven,别再把事情搞得太复杂了,也别再抄袭 VFS 层功能了。上次你说的是个馊主意,这次也是个糟糕透顶的馊主意,我已经不想再听这种废话了。”
在 Linus 看来,Steven Rostedt 跟他争论的 inode 问题,完全就是”编造出一个问题,然后编写出很复杂的垃圾代码来解决问题“的行为。
”如果 VFS 函数不适合你,你可以不使用它,但不应该在不了解它的作用和必要性的情况下盗用它们。“Linus 解释称,get_next_ino() 之所以重要,是因为它被管道和套接字等以很高速度创建的东西所使用,而 inode 编号绝对不会被缓存。
基于此,他骂道:“你复制了这个函数,却不明白它为什么要这么做,结果你的代码就是垃圾。”除此之外,Linus 还对 Steven Rostedt 发出警告:
下次再让我看到你抄袭 VFS 函数(或任何其他核心函数),却不明白它们到底是做什么以及为什么要这么做,我就把你关进我的垃圾邮件过滤器一周。我真是受够了,总是看到这些垃圾邮件。
这样看来,Linus 对 Steven Rostedt 的主要批评是,他在没有完全了解 VFS 函数的情况下,却试图将其作为解决方案——关于这一点,Steven Rostedt 后来也承认了。
双方争论持续了几天,后来 Linus 的语气逐渐缓和,也针对这个问题提出了一些他认为更好的建议。不过他也补充道不会立刻处理此事,因为”我在这上面浪费的时间已经够多了,而且我在其他方面的工作也远远落后,所以这不是我现在能做的事情。“
被骂”代码是垃圾“的谷歌工程师,实际上是位大佬
至于这位跟 Linus 激烈争论了几天、被怒斥其”代码是垃圾“ 的 Steven Rostedt,也并不是一位普通的谷歌工程师。
根据 Linkedin 上的公开资料,Steven Rostedt 曾在红帽担任了十年的首席软件程序员,后又在 VMware 任职四年,2022 年开始加入谷歌,目前主要在 ChromeOS baseOS 性能团队工作。
参加了多场 Linux 基金会活动、进行了 80 多场演讲的 Steven Rostedt,是 Linux 内核官方跟踪器 ftrace 以及与 Linux 跟踪接口交互的用户空间工具和库的主要开发者和维护者,也是 Linux 基金会技术咨询委员会(TAB)和 Linux Plumbers 编程委员会的成员,他还开发了内核中的 ktest.pl,并创建了“make localmodconfig”选项。
开发者评论:Linus 并非天生嘴炮,只是别人的愚蠢让他变成这样
对于 Linus 时隔许久后的重新“开炮”,许多开发者都感慨“熟悉的味道回来了”、“就是这个味儿”,并表示支持:
“这就是我喜欢 Linus 的原因之一。作为一名程序员,我可以大方承认我的代码就是垃圾,所以我很喜欢对方能清楚地告诉我问题在哪里。我可以从中学习,并提出明显更好的东西。哪怕我从 1978 年就开始从事这个行业,但我仍在学习。”
“Linus 的问题在于他的行为和人身攻击。然而,如果你关注一下他的评论内容,会发现他几乎总是正确的,而且逻辑推理也很好。他并不是天生的嘴炮,只是别人的愚蠢让他变成这样——碰巧的是,制造愚蠢是他现在的全职工作。”
甚至还有开发者担忧以后没有 Linus 的日子:“我很想知道,当 Torvalds 退休或去世后,Linux 内核会发生什么,因为这个人是用他的每一根神经来捍卫他的内核的。”
但同时,也有部分开发者对这种沟通方式表示反对:“问题在于,直接的愤怒或辱骂并不能有效地促进沟通。这是一种极具破坏性的表达方式,而且很容易被误解。”
参考链接:
https://www.linkedin.com/in/steven-rostedt-0159437a/
https://lkml.iu.edu/hypermail/linux/kernel/2401.3/04208.html
https://ossna2022.sched.com/speaker/steven_rostedt.1uvjfs44
▶Mac 应用开发者的困境:使用 Electron 还是原生技术?
▶2024全球机器学习大会上海站重磅官宣,首批演讲嘉宾和12大议题揭晓!