来源:滚动播报
(来源:上观新闻)
![]()
![]()
![]()
今年早些时候,科技界迎回了一位代码界的“老朋友”——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年后,我们也许仍会在与今天相同的基础上进行建设。”麦金托什说。
原标题:《巨头公司避谈的秘密:“活化石”程序仍是今日数字世界的中流砥柱》
栏目主编:张懿 题图来源:上观题图
来源:作者:文汇报 金奕伶/编译
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.