近日,Linux 內核社區正醞釀一場引人關注的改動:在即將發布的 Linux 6.19 版本中,內核構建系統可能會默認啟用 -fms?extensions 參數,也就是允許使用 Microsoft C 擴展。
內核開發者認為,這次改動可能讓代碼寫起來更順手、更美觀,同時也能提升跨平臺兼容性。據外媒 Phoronix 報道,Linux 之父 Linus Torvalds 對此變動暫時沒有發表反對意見。

“Microsoft C 擴展” 是什么?
從技術上來說,這次變動的核心是讓內核構建系統統一開啟 -fms-extensions 編譯選項。
-fms-extensions 是 GCC 和 Clang 都支持的選項,用來啟用微軟 Visual C/C++ 編譯器的一些非標準語法。其中之一,就是允許在結構體(struct)或聯合體(union)中匿名嵌套其他類型。對內核開發者來說,這意味著代碼可以寫得更簡潔、更優雅——在某些場景下甚至還能節省一點棧空間。
過去多年,社區曾多次有人提議默認啟用 -fms-extensions,但由于堅持標準 C、擔心可移植性問題以及核心開發者意見不一,這些補丁一直沒有被采納。
目前,啟用這一特性的兩個補丁已經合入 kbuild-next 分支——這是負責內核構建系統的子系統。這意味著社區態度更務實——如果核心開發者和 Linus Torvalds 不反對,這項改動很可能會在 Linux 6.19 合并窗口正式啟用。

補丁細節
在提交相關補丁時,開發者 Rasmus Villemoes 在主題為「Kbuild: enable -fms-extensions」的郵件列表中寫道:
“有時啟用 -fms-extensions 能讓代碼看起來更美觀。但每次有人提議啟用 -fms-extensions 時,總有人會說‘不用它也能寫代碼,而且也不算太糟’,不足以為了這一點新增一個編譯標志。
每個用例單獨看確實如此,但這也是一種‘雞生蛋蛋生雞’的局面。
但正如 Linus 所說,如果我們咬咬牙一次性啟用它,那么以后需要用時就能直接用,不必每次都單獨為例子辯解。