巨頭公司避談的祕密:“活化石”程序仍是今日數字世界的中流砥柱

來源: 更新:

今年早些時候,科技界迎回了一位代碼界的“老朋友”——ELIZA。作爲世界上第一個能進行看似有意義對話的人工智能聊天機器人,ELIZA曾令20世紀60年代中期的計算機科學家們驚歎不已。最近幾十年,人們都以爲ELIZA已經失傳,因爲其創造者、美國麻省理工學院的約瑟夫·魏岑鮑姆從未公佈過他創建ELIZA時所寫下的420行代碼。

然而,美國斯坦福大學的傑弗裏·施拉格和同事們對魏岑鮑姆的成就十分着迷,併爲此成立了一個ELIZA考古項目。幾年前,他們在麻省理工學院魏岑鮑姆的舊文件盒中發現了丟失的代碼,爲ELIZA的復活鋪平了道路。

能再次與這位在人工智能歷史上佔據過重要地位的聊天機器人對話,不僅令人驚歎,也引出了一個令人好奇的話題:在ELIZA代碼之外,今天是否還有更古老的代碼片段仍在執行着某些重要任務?爲此,有人啓動了對於最古老代碼的追蹤,並發現了一些意想不到的情況:大部分古老代碼遠未得到ELIZA那樣的尊重。總體上,企業和組織對舊代碼呈現出一種奇怪的矛盾態度:一些人似乎不信任它,另一些人則對其充滿信心,而幾乎所有人都不願公開討論它。

很少被提及,從未被遺忘

對技術的追根溯源通常不難。你可以在公開資料上很快找到當今最古老卻還能飛行的飛機,那是英國的一架修復後的布萊里奧11號,歷史超過115年;或是世界上最古老但仍在使用的燈泡,就在美國加利福尼亞州利弗莫爾,點亮至今已有124年。但尋找仍在使用的最古老計算機代碼卻沒這麼容易。

英國數學家阿達·洛芙萊斯在19世紀40年代設計了世界上最早的計算機程序。但實際上,洛芙萊斯的程序依賴於英國數學家查爾斯·巴貝奇設計的機械計算機,這款設備卻從未被製造出來,因此這段代碼就從未真正運行過。

英國劍橋大學開發的電子延遲存儲自動計算器EDSAC或許是世界上最早的通用計算機之一。如今,英國國家計算機博物館的志願者們正在製作一臺EDSAC的複製品,一旦完成,它就能運行20世紀40年代到50年代發表在科學論文中的EDSAC軟件,它們可能是世界上現存的最古老代碼之一。

在這項工作完成前,要尋找仍在運行的舊代碼,或許可在現代軟件中獲得線索。幾乎與EDSAC投入使用同時,計算機科學家開始簡化代碼編寫的方式,“高級”計算機語言由此問世。這些語言的結構與人類語言相似,能使編程變得更直觀。多年來,世界上已開發出許多高級計算機語言,包括IBM的Fortran(1957年)、COBOL(1959年)和JavaScript(1995年)。即使某種計算機語言已不再常用,它也不會被完全遺忘,因爲如今的程序往往包含着用多種語言編寫的代碼,這意味着用幾十年前的語言編寫的舊代碼片段,現在仍會隱藏在常見的應用程序中。

基於這些信息,一條線索很快浮出水面——根據吉尼斯世界紀錄,如今用來預訂機票的網站,通常依賴美國航空公司於1960年開發的Sabre全球分銷系統。這意味着,當今軟件版本中的一些代碼,可能比ELIZA更古老。

然而,試圖聯繫Sabre的結果是石沉大海,發送給其他機構的聯繫請求,包括達美航空、美國航空、聯合航空、漢莎航空和英國航空,英國銀行業的“四大”——匯豐、勞埃德、國民西敏寺和巴克萊,英國倫敦勞合社和貝寶,甚至蘋果、微軟、惠普、德州儀器等科技公司,都沒有給出任何迴音。維薩(VISA)和萬事達在最初似乎表現出興趣,但最終表示無法提供幫助。

這種拒絕討論舊代碼的態度,着實讓外界費解。對此,英國LEO計算機協會受託人文森特·博德斯沃斯說:“企業可能感到緊張,不願讓人注意到他們的產品中存在古老代碼,因爲他們不知道這些代碼如何工作,以及如何維護以確保其繼續運行。”LEO計算機協會是一個旨在保存英國一家已停產計算機品牌歷史的公益性機構。

淡出不退出,多虧“老江湖”

尋找古老代碼的難點還在於,源代碼可能丟失,同時理解或修改這些代碼所需的專業知識也會失傳,後者可能更爲常見。

LEO計算機協會的博德斯沃斯曾談起他聽到的一個故事。那是1971年英國改用十進制貨幣時,倫敦一家不知名的銀行遭遇問題,它有一個計算機程序主要針對非十進制貨幣進行金融計算;但由於程序源代碼丟失,因此沒辦法對這個程序進行修改,使其完成向十進制的切換。後來,銀行並沒有爲重寫軟件而投入重金,而是簡單操作,編了一段代碼,將十進制的英鎊、便士轉換爲非十進制的英鎊、先令和便士,並將數值交給舊程序計算,最後再利用另一段代碼,將計算結果從非十進制轉換到十進制。博德斯沃斯說,這種補救措施雖然笨拙,但也算是沿用至今的古老代碼。

在美國得克薩斯州,有家名爲“COBOL牛仔”的諮詢公司,聯合創始人比爾·希恩肖早在1970年就用COBOL語言爲銀行ATM機寫過軟件。實際上,整個20世紀中葉,COBOL對企業運行至關重要;即便如今它不再是程序員的首選,但仍在一些軟件中扮演着小卻重要的角色。

希恩肖估計,目前有8000億行的COBOL代碼仍在運行。由於當今大部分程序員不熟悉它,熟悉它的人也大多即將退休,因此遇到問題的企業只能求助於希恩肖團隊。實際上,這羣“牛仔”最年輕的成員也40歲了,大多數人是六七十歲,希恩肖則是82歲。在他看來,雖然目前使用COBOL不會有問題,但十年後情況可能有變。

在理論上,代碼雖不會磨損或用壞,但經過軟件更新,舊代碼也可能與程序其他部分不兼容。2024年7月,網絡安全公司CrowdStrike在更新軟件時出現故障,導致全球機場、醫院和銀行的數百萬臺計算機癱瘓。好在他們很快識別故障,推出新的更新,讓大多數計算機在幾小時內恢復運行。但是,假如故障涉及一種只有少數程序員才懂的舊代碼,修復就會困難得多。

鑑於這些擔憂,科技公司不願討論舊代碼也算合乎邏輯。另外,他們偶爾也會從現代軟件中刪除舊代碼,最著名的例子是25年前的“千年蟲”——當時爲避免千禧之交全球的計算機因爲難以區分2000年和1900年而大量崩潰,經過一場緊急行動,舊代碼被強行移除。

舊代碼悖論,關鍵是有效

在一些極端重要的軟件中,舊代碼迄今仍很活躍。

Perl基金會主席斯圖爾特·麥金託什說,2024年發佈的最新版本Perl,包含了1987年首個版本的代碼片段。由於Perl支持亞馬遜網絡服務,因此所有亞馬遜網絡服務的用戶,都會用到這段有着近40年曆史的代碼,其中包括蘋果公司,以及美國航空航天局、中央情報局,英國軍情五處和軍情六處等重要組織。

還有一些現代軟件,會用到更古老的代碼。比如負責發行開源操作系統Linux一個版本的軟件公司紅帽(Red Hat)。該公司的邁克·麥格拉思表示,許多版本的Linux都包含一條名爲“縮進”的命令,該命令所用的代碼能追溯到1976年,這也意味着在人工智能和雲計算時代,人們仍在使用近50年前的代碼。

麥金託什說,舊代碼能延續下來的原因很簡單——有效。儘管人們一直擔心舊代碼可能與新代碼不兼容,但事實上,許多舊代碼幾十年來運行良好。這甚至在業內催生了一種矛盾的現象:軟件工程師越來越怕舊代碼出故障,但同時,他們也越來越相信舊代碼有能力持續保持可靠和準確。

航天業是最好的例證。歐洲航天局計算機系統工程師詹姆斯·埃格爾斯頓表示,太空任務的設計、建造和發射成本極高,有些衛星價值數十億美元,因此傾向於使用可靠的舊代碼,而非冒着風險用可能出問題的新代碼,因爲一旦搞砸,航天器就會報廢。

有些仍在使用的古老代碼可能不在地球上,甚至不在太陽系——距地球超過200億公里的“旅行者”號探測器,如今可能仍在運行着與1977年發射時幾乎完全相同的軟件。一位匿名航天內部人士透露,美國航空航天局偶爾會聘請上年紀的程序員,讓他們維護或修改面向舊任務的晦澀代碼,這類似於希恩肖爲保險公司和銀行所做的。

但航天業似乎也不願討論對舊代碼的依賴。美國航空航天局並未回應相關採訪請求。埃格爾斯頓也承認,歐洲航天局對他接受採訪的想法持謹慎態度,主要是擔心航天局使用舊代碼,可能誤導人們認爲其太空任務不值得資助。

那麼,仍在運行的最古老代碼究竟在哪裏?目前唯一能做的可能只剩下猜測。博德斯沃斯認爲,在某間政府辦公室的一臺古老計算機上,它可能正悄然運行,年復一年地執行着相同的任務。儘管舊代碼在未來某一天終究可能出現故障,但誰也說不準那會是多久以後,而且實際上,每個人都樂見它繼續穩定運行。

“我們正處於數字革命的最初階段。展望500年後,我們也許仍會在與今天相同的基礎上進行建設。”麥金託什說。

相關推薦
請使用下列任何一種瀏覽器瀏覽以達至最佳的用戶體驗:Google Chrome、Mozilla Firefox、Microsoft Edge 或 Safari。為避免使用網頁時發生問題,請確保你的網頁瀏覽器已更新至最新版本。
Scroll to Top