矛盾的很,Go1.24 將需要更新的 Linux 內(nèi)核!
大家好,我是煎魚。
一門編程語言總是要適配多個平臺多種架構(gòu),其中莫過于適配 Windows 和 Linux 的不同版本。
老的可能會被逐漸廢棄,穩(wěn)定版本的逐漸占據(jù)主流。Go 有 Go1 兼容性保障,導(dǎo)致取舍之間總是會糾結(jié)要不要繼續(xù)保留老的 Linux 版本內(nèi)核支持。
Go1.24 期望用 Linux 內(nèi)核 3.2
最近 Go1.24 的規(guī)劃已經(jīng)提上日程了,其中包含一項內(nèi)核變更《all: require Linux 3.2 kernel for Go 1.24[1]》:
圖片
在 2021 年,Go 將 Linux 內(nèi)核的最低版本提高到了 2.6.32。至此 3 年多再也沒變過。
Rust 和 glibc 在去年決定將內(nèi)核的最低版本定為 3.2。Linux 生態(tài)系統(tǒng)的其他部分也逐步開始采用 3.2。
作為 Go 的最低版本,rsc 認(rèn)為選用 3.2 這似乎是合理的。Go 團隊計劃在 Go 1.24 中做出改變。每個人都應(yīng)該使用更新的內(nèi)核進行安全更新。
Go 創(chuàng)始人的糾結(jié)
Go 創(chuàng)始人 Rob Pike 還是挺糾結(jié)的,他表示:總體而言,我對這一趨勢持矛盾態(tài)度。對于 Go,它也有點違背兼容性承諾。
圖片
制造商放棄對舊硬件的支持,要求我購買昂貴的升級產(chǎn)品,但沒有任何回報,這讓我多次感到困擾。
我仍然在實驗室中運行 32 位 x86 Mac,因為沒有它,我無法控制只能與舊版 macOS 交互的重要設(shè)備。我甚至無法將其連接到網(wǎng)絡(luò),因為擔(dān)心某些更新會導(dǎo)致我的設(shè)備無法工作。
雖然我理解 “更新更安全,更新更好” 的隱含價值,但讓 Go 二進制文件在舊操作系統(tǒng)上運行對項目的實際成本是多少?這似乎是評估該提案的更好方法。
最終結(jié)論
本次是由 rsc 直接當(dāng)機立斷,表示即使是改向支持 Linux 3.2 也都已經(jīng)是 12 年前發(fā)布的了??隙ú凰闶窍冗M技術(shù)!得變!
同時他們在 crypto/rand: crash process on error reading randomness[2] 的討論中發(fā)現(xiàn),Linux 3.17 增加了 getrandom(2) 方法,可以滿足 Go 的使用訴求。將原定的 Linux 3.2 版本要求下調(diào)了。
最終 Go1.24 將 Linux 內(nèi)核所需的最低版本定到了:Linux 3.17。另外 Linux 3.10 版本中追加補丁后添加了 getrandom(2) 系統(tǒng)調(diào)用也是能夠支持的。
參考資料
[1]all: require Linux 3.2 kernel for Go 1.24: https://github.com/golang/go/issues/67001
[2]crypto/rand: crash process on error reading randomness: https://github.com/golang/go/issues/66821

































