風風火火的Linux之父,LinusTorvalds,他又躍入公眾的視線。“打開方式”依舊是熟悉的配方——罵人。我們先來看下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開源社區”評論區