首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linus 久违“开炮”,怒喷谷歌大佬:“你的代码就是垃圾!”

“我承认很多粗暴的攻击既不专业、也没必要,尤其有时我还把技术争论变成个人恩怨……我知道这样很不好,真的非常抱歉。”——Linus Torvalds,写于 2018 年。

整理 | 郑丽媛

出品 | CSDN(ID:CSDNnews)

自 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

  • 发表于:
  • 原文链接https://page.om.qq.com/page/O2fYjNf181dty_QOjs8dqCPg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券
http://www.vxiaotou.com