Linux Kernel 5.6 開發者已準備好應對2038 年問題
新十年伊始,Linux Kernel 5.6 的開發者已經準備好著手解決將在下一個十年到來的2038 年問題(又稱“Y2038” 或“Unix Y2K” 問題)。Linux 5.6 也成為第一個為32 位系統準備運行到2038 年之後的主線內核。
2038 年問題與千年蟲問題類似,它可能會導致某些軟件在2038 年1 月19 日3 時14 分07 秒之後無法正常工作。屆時,在大部分32 位操作系統上,依據“time_t” 標準,時間將會“繞回”且在內部被表示為一個負數,並造成程序無法工作,因為它們無法識別2038 年,而可能會跳回1970 年或1901 年。
現階段,還沒有針對2038 年問題的通用解決方案。Linux 5.6 已率先做好準備,並極有可能反向移植到5.4/5.5 穩定分支。
在Linux開發人員Arnd Bergmann寄給Linus Torvalds的郵件中,他提到,Linux Kernel 5.6應該作為基礎,使32位系統能夠運行到2038年以後。他提出的PR包括對time_t的更改,即更改存儲秒數(帶符號的32位整數)。
Bergmann 表示,“我再次遍歷了time_t 的所有用戶,以確保內核處於長期可維護的狀態,用安全的替代方法替換了對time_t 的所有剩餘引用。該系列的一些相關部分被引入nfsd,xfs,alsa和v4l2 樹中。在linux-mm 的五個分支全部合併之後,linux-mm 中的最後一組補丁將刪除當前未使用的time_t / timeval / timespec 類型和輔助函數,以確保沒有新用戶被合併。 ”
由於2038 年問題,Unix 時間戳將在2038 年1 月19 日溢出,因為它無法存儲帶符號的32 位整數,並且將限制更新32 位系統。為了避免這一問題,根據Bergmann 的說法,用戶空間應用程序需要使用現代Linux 內核系統調用,並且需要使用GNU C Library 2.32 和Musl libc 1.2 針對64 位time_t 構建用戶空間。
最後,他還提到,64 位計算機上出現的所有y2038 問題也適用於32 位計算機。
消息來源:fossbytes