新十年伊始,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
[admin
]