Linus新年首罵:和谷歌大佬大吵4天“你的代碼就是垃圾”
風風火火的Linux之父,Linus Torvalds,他又躍入公眾的視線。「打開方式」依舊是熟悉的配方——罵人。我們先來看下Linus怒懟的名場面:你的程式碼就是垃圾。我要把你丟進垃圾郵件一週。
而這次的“受害者”,是來自Google的一位程式設計師,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開源社群」評論區