20年前偷懶修復(fù)的千年蟲(chóng)bug歸來(lái) 程序員:該來(lái)的總會(huì)來(lái)

2021-02-21    分類(lèi): 網(wǎng)站建設(shè)

新的十年開(kāi)始了。二十年前,在千禧之年鐘聲敲響的時(shí)候,諸多 Y2K 應(yīng)急隊(duì)的程序員坐在電腦前惴惴不安,他們此前剛剛用最簡(jiǎn)單易行的 “懶人方法” 修補(bǔ)了一個(gè)被稱(chēng)為“千年蟲(chóng)”(Millennium Bug,又稱(chēng) Y2000 problem,簡(jiǎn)稱(chēng)“Y2K”)的大 bug。二十年后,這群程序員老了,但是新一代的青年程序員又要為老一輩的懶惰而付出代價(jià)。

據(jù)《紐約時(shí)報(bào)》報(bào)道,紐約的停車(chē)收費(fèi)表從 2020 年 1 月 1 日開(kāi)始不支持信用卡付款,整個(gè)城市的一萬(wàn)多個(gè)計(jì)費(fèi)表已手動(dòng)更新,僅通過(guò)現(xiàn)金或 ParkNYC 接受付款;波蘭公司 Novitus 生產(chǎn)的收銀機(jī)由于記錄時(shí)間故障而無(wú)法打印收據(jù);視頻游戲 WWE 2K20 于 2020 年 1 月 1 日午夜停止工作;華為手表和部分設(shè)備丟掉了新年伊始兩三天的 TrueSleep 睡眠數(shù)據(jù),需要更新并重啟……

紐約市交通局表示,停車(chē)計(jì)時(shí)器的信用卡支付軟件設(shè)定在 1 月 1 日失效,導(dǎo)致了一起大規(guī)模故障(來(lái)源:The New York Times)

程序員 Jef Poskanzer 在推特上發(fā)文:似乎有相當(dāng)數(shù)量的系統(tǒng)出現(xiàn) #2020 錯(cuò)誤。當(dāng)年解決 Y2K 問(wèn)題的方案把這個(gè)問(wèn)題推遲了 20 年……20 年后的今天,當(dāng)時(shí)的一些系統(tǒng)仍然還在使用,系統(tǒng)以為我們?cè)?1920 年。”

Jef Poskanzer 的推文(來(lái)源:Twitter 截圖)

千禧年前后出生的青少年們或許很少有人知道“千年蟲(chóng)”。

大約在 20 世紀(jì) 80 年代中期以前投用的系統(tǒng)上,囿于存儲(chǔ)

1999 年 1 月 18 日,TIME 的封面(來(lái)源:Time)

為了避免 “災(zāi)難” 發(fā)生,政府和企業(yè)動(dòng)用大量資源查找和修復(fù)這個(gè) bug。有報(bào)道顯示,當(dāng)時(shí)克林頓政府和業(yè)內(nèi)人士估計(jì),用 “windowing” 的方式修補(bǔ) 80% 的計(jì)算機(jī),預(yù)計(jì)耗資數(shù)千億美元。BBC 報(bào)道認(rèn)為全球花在防備千年蟲(chóng)上的費(fèi)用在 3000 億到 5000 億美元之間。真實(shí)耗資目前無(wú)法考證。也有言論說(shuō)千年蟲(chóng)是個(gè)商業(yè)大騙局。

當(dāng)時(shí)修復(fù) bug 的方式有兩種:完全重寫(xiě)代碼,或者采用 “windowing” 的方式快速修復(fù)。“windowing”就是把 00 到 20 之間的所有日期都當(dāng)做 20XX 年而不是 19XX 年。很顯然,相比于把所有兩位數(shù)表示的年份都修改成四位數(shù),后一種方式更省錢(qián)、更快而且更容易。

從 1970/01/01 開(kāi)始,很多編程語(yǔ)言和系統(tǒng)都把日期時(shí)間以秒來(lái)處理,也叫 Unix time。因此,鑒于中點(diǎn) 1970 的重要性,編碼人員選擇 1920 到 2020 作為標(biāo)準(zhǔn)窗口。

Unix time 被廣泛用于各種行業(yè)操作系統(tǒng),并被視為是一種標(biāo)準(zhǔn)。Unix 和?Windows?系統(tǒng)有環(huán)境變量來(lái)為系統(tǒng)設(shè)置 “轉(zhuǎn)折年”。“轉(zhuǎn)折年” 以后的任何一年屬于本世紀(jì),“轉(zhuǎn)折年”以及 “轉(zhuǎn)折年” 之前的任意一年屬于上個(gè)世紀(jì)。但是一些產(chǎn)品,如 Microsoft Excel 95 使用的是 1920-2020 年的 windowing,在解決千年蟲(chóng)問(wèn)題之后,僅僅過(guò) 20 年就有可能再次出現(xiàn)日期錯(cuò)誤。

2020 年 “Y2K” 又回來(lái)了(來(lái)源:Popular Mechanics)

當(dāng)時(shí)的專(zhuān)家認(rèn)為,等到程序員投入大量的資金和時(shí)間去永久修復(fù)好這些 bug 之后,系統(tǒng)早就被更換了。所以,盡管 “windowing” 修復(fù)的程序智能使用二三十年,專(zhuān)家也覺(jué)得足夠了。

倫敦經(jīng)濟(jì)學(xué)院 (London School of Economics) 的迪倫 · 穆?tīng)栁?(Dylan Mulvin) 表示:“windowing 是所有解決方案中最糟糕的一種,即便是在千年蟲(chóng)問(wèn)題期間?!?/p>

2020 年的到來(lái),意味著我們已經(jīng)進(jìn)入到了 1920-2020 窗口期的末端。2019 年 11 月,由于被發(fā)現(xiàn)容易受到 Y2020“攻擊”,大數(shù)據(jù)公司 Splunk 向用戶(hù)推出了修復(fù)服務(wù),它的用戶(hù)涵蓋了美國(guó)《財(cái)富》一百?gòu)?qiáng)公司中的 92 家。由于各家公司尚未披露相關(guān)細(xì)節(jié),目前還不清楚 “Y2020” 將持續(xù)多久。

另外,在 2038 年我們將面臨另一個(gè)數(shù)據(jù)存儲(chǔ)問(wèn)題。32 位的 Unix 和 Linux,能存儲(chǔ)的大數(shù)字為 2 的 31 次方,即 2147483647。從 1997 年開(kāi)始計(jì)算,2147483647 用來(lái)表示的秒數(shù)最多只能用到 2038 年 01 月 19 日 03 時(shí) 14 分 07 秒,在這個(gè)時(shí)間之后,系統(tǒng)會(huì)回到 - 2147483648,代表的時(shí)期是 1901 年 12 月 13 日 20 時(shí) 45 分 52 秒。

不同于千年蟲(chóng),2038 會(huì)影響的不僅僅是應(yīng)用層,而是會(huì)影響到最底層的時(shí)間控制功能。不過(guò)幸運(yùn)的是,如果能在 2038 年之前把所有 32 位系統(tǒng)淘汰并采用 64 位的話,我們將會(huì)巧妙地躲開(kāi) 2038 問(wèn)題。

分享名稱(chēng):20年前偷懶修復(fù)的千年蟲(chóng)bug歸來(lái) 程序員:該來(lái)的總會(huì)來(lái)
轉(zhuǎn)載來(lái)于:http://www.bm7419.com/news42/102192.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、企業(yè)建站、網(wǎng)站維護(hù)、網(wǎng)站策劃、企業(yè)網(wǎng)站制作網(wǎng)站導(dǎo)航

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

營(yíng)銷(xiāo)型網(wǎng)站建設(shè)