Linus新年首罵:和谷歌大佬大吵4天,“你的代碼就是垃圾”
風風火火的Linux之父,Linus Torvalds,他又躍入公衆的視線。
“打開方式”依舊是熟悉的配方——罵人。
我們先來看下Linus怒怼的名場面:你的代碼就是垃圾。
我要把你丟進垃圾郵件一周。
而這一次的“受害者”,是來自谷歌的一位程序員,Steven Rostedt。
而且他並非是隨隨便便的一位開發者,用網友的話來說“也算是大佬了”。
△圖源:“OSC開源社區”評論區
不僅如此,從時間線上來看,雙方已經交鋒了足足有4天之久……
那麽這到底是怎麽一回事?
* 一個“inodes”,吵了四天
這場激辯是發生在Linux內核郵件列表。
Steven起初是發了個帖子,主題是關于eventfs(事件文件系統)的補丁。
具體而言,就是想探討一下inodes(索引節點)是否應該保持唯一性的問題。
(注:inodes是Linux文件系統中的一個核心概念。它是一個數據結構,用于存儲文件或目錄的元數據,而不是文件的實際內容。)
Steven認爲: Linus之前建議在eventfs中使用相同的inode來簡化getdents()的實現,這意味著所有文件和目錄都將使用相同的inode。
然而,這種做法後來被發現會導致“find”命令出現問題,因爲目錄和文件的inode相同。
Linus隨後發現在64位機器上,eventfs_inode結構中存在一個由于對齊而産生的空洞,可以用來存儲目錄的inode,這解決了目錄的問題,但文件仍然保留了自己的inode。
在Steven看來,由于tar命令依賴于inode來確定文件的唯一性,這種做法會破壞tar命令的功能:
目前,tar命令在tracefs(事件文件系統的一個變體)中已經出現問題,因爲它顯示所有文件的大小爲零,導致tar不複制任何內容。
除此之外,Steven也給出了自己想到的解決辦法——建議將VFS層的get_next_ino()函數複制到tracefs的tracefs_get_next_ino()函數中,並添加一個“files”參數。
這樣,當創建eventfs目錄時,就可以預先知道所需的inode數量。tracefs_get_next_ino()將返回一個新的inode,並預留下一個“files”個inode供調用者使用。
當創建文件的inode時,其inode將是其父目錄的inode加上在該目錄文件數組中的索引,從而爲每個文件提供一個唯一的inode。
然而,如此提案卻被Linus強烈反對。
Linus的核心觀點是“inode已經不再是唯一的描述符,我們不應該繼續依賴于這種舊有的機制”。
不過對于Linus的回複,Steven並沒有買賬,他堅持認爲:
所有的文件和目錄應該有唯一的inode,這樣做可以對文件系統的某些方面起到簡化的作用。
然而在幾輪探討過後,Linus就坐不住了,隨即就出現了剛才怒怼的名場面:不要把事情變得那麽複雜。
你沒有充分理解這些函數的用途和必要性
你的代碼就是垃圾。
雙方似乎都是各執己見,來來回回博弈了良久,從1月26日一直battle到了1月29日……
不過戲劇性的一點是,Linus在爭吵之余,後來還發布了Linux內核6.8-rc2版本。
他希望這個版本能夠解決之前版本中發現的問題,並鼓勵用戶進行測試。
* 並非第一次公開“交鋒”
其實在此之前,Steven也曾在2020年初之際,在一場活動演講中,公開與Linus“交鋒”過。
他甚至直接將演講的主題定位“Arguing with Linus Torvalds”,內容依舊是圍繞著如何讓Linux效率得到改善而做出的建議。
不過對于這次最新的battle,網友們也是各抒己見。
有認爲應該抛棄歷史包袱的,有認爲只是二人設計理念的差距:
△圖源:“OSC開源社區”評論區
你覺得呢?---[金磊 發自 : 凹非寺*量子位 : 公衆號 QbitAI/來源: 量子位]
參考鏈接:
[1]https://lkml.iu.edu/hypermail/linux/kernel/2401.3/04208.html
[2]https://www.youtube.com/watch?v=0pHImHVrI2I
[3]https://mp.weixin.qq.com/s/S0R_5OBSiSbDnl1-U6I4wg