當前位置:
首頁 > 科技 > 2038年危機:下一個Y2K災難,我們準備好了嗎?

2038年危機:下一個Y2K災難,我們準備好了嗎?

還記得千禧年Y2K危機嗎?當時人們擔心,當1999年跨入2000年時,電腦系統無法辨識世紀的轉換,日期會被重置為1900年,導致全球依賴電腦的系統崩潰。結果呢?從「電子日曆上的小錯誤」到「文明的崩潰」,各種預測層出不窮。幸運的是,多虧幕後的大規模協調努力,這場災難最終並未發生。但這是否意味著我們從此高枕無憂?

等等,還有續集?沒錯,2038年1月19日,時間將再次「終結」——至少對於使用32位元Unix時間的電腦來說是如此。總部位於華盛頓州柯克蘭的網路安全與系統管理公司Tanium解釋道:「一個有符號的32位元整數只能儲存從–2147483648到2147483647的數字。這意味著這些系統能處理的最高時間戳記是2147483647,對應到2038年1月19日03:14:07 UTC。」

這些數字並非隨機,對於以二進位運作的電腦來說,2,147,483,648是一個重要的里程碑:當計時器達到100,000,000,000,000,000,000,000,000,000,000時,32位元系統無法處理如此龐大的數字,計數器只能重置回起點。Tanium進一步說明:「時間戳記將溢位並變成負數,導致日期和時間錯誤。例如,2038年1月20日03:14:08 UTC的時間戳記是2147483648,由於這不是Unix格式的有效時間戳記,它會溢位並變成–2147483648,對應到1901年12月13日20:45:52 UTC。這就是2038年危機。」

經歷了Y2K危機的喧囂,我們理應學到教訓,提前做好準備。畢竟,我們至少從2006年就知道2038年危機的存在,當時AOL的網頁伺服器軟體就曾遇到類似問題。32年的時間,難道還不足以找到解決方案嗎?

事實上,解決2038年危機的方法相當簡單:過渡到64位元時間支援。獨立顧問公司Paul Budde Consulting的執行長Paul Budde在2022年於《獨立澳洲》撰文指出:「64位元有足夠的空間儲存遠超可預見未來的時間值,即使使用高解析度(奈秒級)的時間值。」雖然64看起來只比32大一點,但在指數運算中,這意味著從「13年」到「宇宙年齡的21倍」的差距。升級到更大的儲存系統,可以說是把問題推到遙遠的未來,幾乎等於完全解決。那麼,我們是否已經大規模轉換了呢?

很遺憾,並沒有。Tanium指出,包括關聯式資料庫和NoSQL資料庫在內的許多資料庫型別仍然依賴32位元時間,基於C語言的程式(如C++和PHP)也是如此。執行Windows、Linux、Android或iOS的裝置可能面臨風險,醫療裝置、發電廠的工業控制系統、交通系統、配備車載電腦系統的汽車、路由器、交換器、感應器以及物聯網裝置(如智慧家電)也可能受到影響。

總體而言,2038年危機具有極大的破壞潛力。那麼,我們準備得如何了?很難確切地說。隨著新作業系統的推出,許多系統已經將64位元整數時間作為標準。但更大的問題在於現有系統:對於基於原始碼的作業系統來說,從32位元轉換到64位元「絕非易事」,Linux發行版Gentoo的開發者Michał Górny在2024年的一篇部落格文章中寫道。

他解釋:「最重要的是,我們談論的是一個破壞性的ABI變更。這是全有或全無的問題。如果一個函式庫在其API中使用time_t,所有與之連結的程式都需要使用相同的型別寬度……混合time32和time64的程式與函式庫可能導致嚴重的執行時錯誤。」

簡單來說,突然從32位元轉換到64位元時間戳記會讓許多現有程式難以理解新系統。這就像你突然被傳送到中世紀的英格蘭,想與當地人交流:技術上你們說的是同一種語言,但實際上你根本不知道發生了什麼。

這只是開始。我們有——而且仍然有——足夠的時間為2038年危機做準備。Budde預測,當危機來臨時,「所有現有的電腦系統都將在此之前升級完畢。」但他也警告:「大多數問題將出現在那些沒人記得更新和測試的舊程式中……這不是電腦工程師會想拖到最後一刻的事情,就像Y2K危機那樣。」

即使每個依賴32位元時間的系統都被找到並升級,這種大規模變更的連鎖反應「也需要先被對映出來,然後徹底研究,以找到防止不良副作用的適當解決方案。」Budde警告:「而這些解決方案本身可能會產生新的副作用。」

所以,嗯……大家還是祈禱吧!讓我們樂觀一點,假設我們完全解決了2038年危機及其所有連鎖反應,沒有任何電腦系統在2038年1月20日03:14:08出現任何問題。我們是否可以鬆一口氣,忘掉這一切?

我們可以——但我們可能不應該。僅僅幾十年後,我們將再次面臨同樣的問題:2106年2月7日06:28:15 UTC,所有使用無符號32位元整數儲存時間的系統都會遇到危機。再過大約相同的時間,Windows將面臨自己的版本:「Windows NT使用64位元整數來追蹤時間,」HowStuffWorks指出:「然而,它以100奈秒為增量,時間的起點是1601年1月1日,因此NT將面臨2184年危機。」

除此之外,還有2262年危機、2446年危機,這些都與20世紀中期程式設計師對協議使用時間的假設有關。我們可以說他們目光短淺——但老實說,很快我們將面臨更大的問題。