Categories
科技報導

Linux Kernel 5.6 開發者已準備好應對 2038 年問題



新十年伊始,Linux Kernel 5.6 的開發者已經準備好著手解決將在下一個十年到來的 2038 年問題(又稱 “Y2038” 或 “Unix Y2K” 問題)。 Linux 5.6 也成為第一個為 32 位系統準備運行到 2038 年之後的主線內核。

Linux Kernel 5.6 開發者已準備好應對 2038 年問題 1

2038 年問題與千年蟲問題類似,它可能會導致某些軟件在 2038 年 1 月 19 日 3 時 14 分 07 秒之後無法正常工作。屆時,在大部分32 位操作系統上,依據“time_t” 標準,時間將會“繞回”且在內部被表示為一個負數,並造成程序無法工作,因為它們無法識別2038 年,而可能會跳回1970 年或1901 年。

現階段,還沒有針對 2038 年問題的通用解決方案。 Linux 5.6 已率先做好準備,並極有可能反向移植到 5.4/5.5 穩定分支。

Linux Kernel 5.6 開發者已準備好應對 2038 年問題 2

在 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