20年前偷懶修復的千年蟲bug歸來,程式設計師:該來的總會來

2021-01-10 DeepTech深科技

新的十年開始了。

二十年前,在千禧之年鐘聲敲響的時候,諸多 Y2K 應急隊的程式設計師坐在電腦前惴惴不安,他們此前剛剛用最簡單易行的 「懶人方法」 修補了一個被稱為「千年蟲」(Millennium Bug,又稱 Y2000 problem,簡稱「Y2K」)的大 bug。二十年後,這群程式設計師老了,但是新一代的青年程式設計師又要為老一輩的懶惰而付出代價。

據《紐約時報》報導,紐約的停車收費表從 2020 年 1 月 1 日開始不支持信用卡付款,整個城市的一萬多個計費表已手動更新,僅通過現金或 ParkNYC 接受付款;波蘭公司 Novitus 生產的收銀機由於記錄時間故障而無法列印收據;視頻遊戲 WWE 2K20 於 2020 年 1 月 1 日午夜停止工作;華為手錶和部分設備丟掉了新年伊始兩三天的 TrueSleep 睡眠數據,需要更新並重啟……

圖 | 紐約市交通局表示,停車計時器的信用卡支付軟體設定在 1 月 1 日失效,導致了一起大規模故障(來源:The New York Times)

程式設計師 Jef Poskanzer 在推特上發文:似乎有相當數量的系統出現 #2020 錯誤。當年解決 Y2K 問題的方案把這個問題推遲了 20 年……20 年後的今天,當時的一些系統仍然還在使用,系統以為我們在 1920 年。」

圖 | Jef Poskanzer 的推文(來源:Twitter 截圖)

千禧年前後出生的青少年們或許很少有人知道「千年蟲」。

大約在 20 世紀 80 年代中期以前投用的系統上,囿於存儲空間有限,再加上人們普遍覺得系統更新會很快,所以程式設計師大多採用兩位數來表示年份,比如 06/15/98,而不是 06/15/1998。但是到了 2000 年,系統只知道是 01/01/00,不知道這是 1900 還是 2000。

千年蟲主要集中在配備較早的主機系統上,如在 IBM 4381,IBM AS/400 等機型上運行的應用程式,比如美國的 AT&T 電訊公司,其內部就有超過 3.6 億行的應用程式需要檢測是否存在 Y2K 問題。另外,在自動化儀器儀表、電梯、警報系統、恆溫燈等嵌入式設備也容易存在千年蟲隱患。

計算機在上世紀六七十年代開始普及,到九十年代,人們開始意識到問題的嚴重性:不知道從 1999 年最後一天的 23:59 到 2000 年第一天的 00:00 的轉變意味著什麼?在渲染和炒作下,大眾的驚恐程度不亞於「2012」。人們猜測,如果程序停止運行、崩潰或者發出錯誤指令,是否影響到銀行、電站、航線等等,存款會一夜清零、恐怖襲擊、飛機墜落、股市崩潰,世界陷入混亂?

當時甚至有媒體報導,有人把山洞當做避難所,存儲了很多食物、醫療包等必需品,還有一些人把銀行存款紛紛取出來或者是購買黃金。

圖 | 1999 年 1 月 18 日,TIME 的封面(來源:Time)

為了避免 「災難」 發生,政府和企業動用大量資源查找和修復這個 bug。有報導顯示,當時柯林頓政府和業內人士估計,用 「windowing」 的方式修補 80% 的計算機,預計耗資數千億美元。BBC 報導認為全球花在防備千年蟲上的費用在 3000 億到 5000 億美元之間。真實耗資目前無法考證。也有言論說千年蟲是個商業大騙局。

當時修復 bug 的方式有兩種:完全重寫代碼,或者採用 「windowing」 的方式快速修復。「windowing」就是把 00 到 20 之間的所有日期都當做 20XX 年而不是 19XX 年。很顯然,相比於把所有兩位數表示的年份都修改成四位數,後一種方式更省錢、更快而且更容易。

從 1970/01/01 開始,很多程式語言和系統都把日期時間以秒來處理,也叫 Unix time。因此,鑑於中點 1970 的重要性,編碼人員選擇 1920 到 2020 作為標準窗口。

Unix time 被廣泛用於各種行業作業系統,並被視為是一種標準。Unix 和 Windows 系統有環境變量來為系統設置 「轉折年」。「轉折年」 以後的任何一年屬於本世紀,「轉折年」以及 「轉折年」 之前的任意一年屬於上個世紀。但是一些產品,如 Microsoft Excel 95 使用的是 1920-2020 年的 windowing,在解決千年蟲問題之後,僅僅過 20 年就有可能再次出現日期錯誤。

圖 | 2020 年 「Y2K」 又回來了(來源:Popular Mechanics)

當時的專家認為,等到程式設計師投入大量的資金和時間去永久修復好這些 bug 之後,系統早就被更換了。所以,儘管 「windowing」 修復的程序智能使用二三十年,專家也覺得足夠了。

倫敦經濟學院 (London School of Economics) 的迪倫 穆爾文 (Dylan Mulvin) 表示:「windowing 是所有解決方案中最糟糕的一種,即便是在千年蟲問題期間。」

2020 年的到來,意味著我們已經進入到了 1920-2020 窗口期的末端。2019 年 11 月,由於被發現容易受到 Y2020「攻擊」,大數據公司 Splunk 向用戶推出了修復服務,它的用戶涵蓋了美國《財富》一百強公司中的 92 家。由於各家公司尚未披露相關細節,目前還不清楚 「Y2020」 將持續多久。

另外,在 2038 年我們將面臨另一個數據存儲問題。32 位的 Unix 和 Linux,能存儲的最大數字為 2 的 31 次方,即 2147483647。從 1997 年開始計算,2147483647 用來表示的秒數最多只能用到 2038 年 01 月 19 日 03 時 14 分 07 秒,在這個時間之後,系統會回到 - 2147483648,代表的時期是 1901 年 12 月 13 日 20 時 45 分 52 秒。

不同於千年蟲,2038 會影響的不僅僅是應用層,而是會影響到最底層的時間控制功能。不過幸運的是,如果能在 2038 年之前把所有 32 位系統淘汰並採用 64 位的話,我們將會巧妙地躲開 2038 問題。

相關焦點

  • 一個在計算機誕生之初,遺留下來的巨大Bug
    其實千年蟲是和計算機有關的一個事,在千禧年到來時達到了高峰。可能下意識的會認為它是某個人研製的厲害病毒,給當時的計算機造成了巨大的傷害。其實不是,千年蟲不是病毒,它是計算機的一個程序錯誤問題,說白了就是一個「bug」。
  • 那些臭名昭著的軟體bug,史上留名的有哪些?
    軟體史上有哪些著名的bug呢?這個發現奠定了Bug這個詞在計算機世界的地位,變成無數苦逼程式設計師的噩夢。 從那以後,Bug這個詞在計算機世界表示電腦程式中的錯誤或者疏漏,它們會使程序計算出莫名其妙的結果,甚至引起程序的崩潰。Grace Murray Hopper是歷史上最早一批程式設計師,而且還是個女程式設計師,服役於美國海軍,官至準將。
  • 程式設計師編程入門必知!程式設計師需要學什麼
    資訊時代的大背景下,計算機的應用顯得舉足輕重,精通計算機的人才對於龐大的市場需求量來說還是顯得很匱乏,因此計算機行業的前景是很可觀的,但是也有不少人對於編程處於一竅不通的狀態,那編程該從何入手呢?學習語言的過程中還要有機會進行檢驗,不能只編寫代碼,還要檢驗代碼的結果運行是否正確,也就是某些可以運行結果的軟體我們要有,不過許多的程式語言都要求有被程式設計師設計來講代碼轉換成機器能理解的語言的編譯器。其他一些語言,比如Python,使用可以立即轉換成程序而不需要編譯。一些語言有自己的往往包含著代碼編輯器、調試器和/或者翻譯以及調試的IDEs(集成開發環境)。
  • 自動編程還能自主檢測Bug,有了機器編程人類可更專注於創造
    隨著異構時代的到來,海量數據由多樣化的專用處理器組合管理,系統功能日趨繁複,管理這些系統所需的軟體就越來越複雜,bug出現的可能性也越來越高。開發人員要花費越來越多的時間來修復bug,而不是編寫代碼。 寫代碼、改bug成了程式設計師996的工作核心;而軟體開發周期未知而漫長,怕是996都無法解決。
  • 截止2014年全球最具毀滅性的20個軟體Bug | 網際網路數據資訊網-199...
    現在,就讓我們按時間順序來盤點下史上最具有毀滅性的20個軟體Bug。以下為譯文:1. 1962年的Mariner Bug損失:1850萬美元經過:Mariner 1航空軟體漏洞直接導致火箭在發射不久後就偏離了其預期軌道,任務控制中心在其發射293秒後就摧毀了火箭。
  • 泰拉瑞亞1.3 bug修複列表 修復遊戲崩潰快速電梯等
    好在製作組非常良心的在這次更新中修復了不少,這裡為大家帶來泰拉瑞亞1.3 bug修複列表,來看看都修正了哪些東西吧,當然這還只是一小部分哦,有的是先前的,有的是1.3版本自帶的。 一起來玩打氣泡吧   泰拉瑞亞1.3 bug修複列表:   1、修復了吊燈在地下木屋生成時自動點亮的bug   2、KO之拳能從雕像召喚出的怪物掉落
  • Atom 1.22.1 和 1.23.0-beta1 發布,修復 Bug
    Atom 是 Github 專門為程式設計師推出的一個跨平臺文本編輯器。具有簡潔和直觀的圖形用戶界面,並有很多有趣的特點:支持CSS,HTML,JavaScript 等網頁程式語言。
  • 20年前差點讓世界崩潰的「千年蟲」,又回來襲擊人類了
    BUG,是程式設計師們的死敵,消滅BUG,是程式設計師們的使命。我們今天故事的主角,就是人類史上最有威脅,也是最難對付的BUG之一 —— 「千年蟲」。可能是覺得自己戲份太少,三星又整了個么蛾子來搶熱搜。從5月23號開始,大批三星手機突然崩潰黑屏、顯示亂碼、無限重啟總之就是罷工了。用戶們也是一臉懵猜著三星手機崩潰的原因,零件有缺陷?黑客攻擊了三星?誰也沒想到,真實原因竟然是一年景不好 。今年是鼠年。按照農曆曆法來算,四月份過完之後並不會到五月,而是要再過一個閏四月。
  • 程式設計師的這108個笑話 你都看得懂嗎?-程式設計師,笑話,編程, ——快...
    答:胤禩,因為他是八阿哥(bug)。5、有一天,程序猿們突然發現他們要漲的工資掉到井裡啦!大家都很害怕,連忙一個吊著一個,從樹上伸到井裡去撈工資。正好他們摸到工資的時候,一個老程式設計師忽然興奮的大叫:別蠢了,要漲的工資還好好的掛在天上呢!6、諸葛亮是一個優秀的程序猿,每一個錦囊都是應對不同的case而編寫的!但是優秀的程序猿也敵不過更優秀的bug!
  • 說程式設計師是最累的,運維的同學不樂意了!
    都說程式設計師很累,同樣也是技術人員的運維同學們不同意了,他們認為最累的不是程式設計師,運維才是最累的那一個,因為運維需要24小時開著手機,隨時待命,隨時都可能打亂自己的生活節奏,關於這個問題就引出了以下的爭論。
  • 好與壞的程式設計師:如何客觀評價程式設計師的水平?
    這發生在幾千年前的對話是不是靠譜我們不知道,但是拿這話來套程式設計師的生態圈,真就是一套一個準。2微軟某個大牛軟體下面兩個不同的組裡各有一個大牛程式設計師,為了不失一般性,我們叫張三和李四吧。張三的特點頗有點大哥的風範,偶爾也充當一下二哥。寫的程序嚴謹,測試也很嚴謹,幾乎不犯錯。組裡其他同事有錯的,也在出大事之前默默的修掉了。
  • 終修復!Google修復iOS8的GMT時間校準bug
    正在閱讀:終修復!Google修復iOS8的GMT時間校準bug終修復!Google修復iOS8的GMT時間校準bug2015-02-04 17:44出處:PConline原創作者:Roy責任編輯:luofushan
  • Bug 引發的 18 次重大事故
    你知道嗎,由於軟體故障(bug),美國經濟每年在浪費生產力、返工和實際毀壞上損失了數十億美元。CAD 程式設計師假設屋頂支撐結構僅需要面臨純壓縮,從而做出錯誤的設計。固定荷載被低估了超過 20%。當頂部其中一個支架被大雪意外壓彎時,便引發了屋頂其他部分的連鎖反應。
  • 魂鬥羅歸來驍電技能屬性分析 驍電入手建議
    導 讀 驍電是魂鬥羅歸來遊戲12號最新上線的新夥伴,驍電是魂鬥羅歸來S級夥伴,魂鬥羅歸來驍電有超強單體控制和無敵火力壓制
  • 2021考研英語詞彙備考:bug的中文釋義
    bugaboo for children,Jehovah for men奶媽發明了妖怪來嚇唬小孩,也發明了耶和華來嚇唬大人。相似短語on bug熱衷於...給...迷上bug outv.暴突,撤退chinch bug高粱長蝽blister bug斑蝥bug key雙向報鍵,快速發報鍵millennium bugmillennium bug【計算機】千禧蟲千年蟲,千禧蟲bug with workaround程序漏洞
  • WhatsApp奔潰死循環bug分析
    研究人員在2019年8月發現了WhatsApp的一個漏洞,並將該漏洞報告給WhatsApp開發人員,該漏洞已在v 2.19.246及之後版本中修復。 技術細節1年前,研究人員就開始分析WhatsApp並嘗試找出其中的漏洞。研究人員搭建了WhatsApp Manipulation Tool工具,並開始測試操作WhatsApp協議的一些新方法。
  • 《CSGO》更新補丁上線,修復BUG
    而在1月8日的補丁中,這種補位機制被取消,退出一個玩家就會少一個人;如果一整支隊伍都退出了,則該隊伍出生點會生成一個不動的機器人佔位。但是很多玩家都很不喜這個更新,現在假如有隊友掉線或者開局退出,那其他人可能就得4打5,非常不公平。
  • 騰訊正式開源面向 Unity 項目的 Bug 修復神器 InjectFix
    InjectFix是騰訊最新對外開源的Unity代碼邏輯熱修複方案,可實現在Unity線上客戶端內,不用迭代新版本,就能快速修復遊戲的線上bug。
  • PostgreSQL 12月5日累計 Bug 修復版本
    PostgreSQL 全球開發者今天發布了所有活動版本分支的補丁修復版本,涉及版本包括:9.1.2, 9.0.6, 8.4.10, 8.3.17 和 8.2.23.
  • bug什麼意思,網絡語言bug什麼意思,什麼是bug一起來看看
    大家在日常工作或者生活中經常會聽到bug這詞,例如遊戲bug,軟體bug以及程序bug,那麼bug究竟是什麼意思那,我們一起來看看吧。bug英文的意思是昆蟲蟲子,竊聽使人惱怒意思,但是網絡上經常說的遊戲或者軟體bug並不是這意思,這裡bug指電腦系統或程序故障,遊戲中的漏洞,軟體以及遊戲中的缺陷,很多程序在製作過程中就會出現很多漏洞bug,因為遊戲是電腦程式設計的,所以很多遊戲也會出現很多bug,尤其是新開發遊戲會有很多漏洞,破壞遊戲內的平衡,嚴重的程序漏洞,對我們電腦安全以及財富安全造成很大的影響