array(5) { ["chapterid"]=> string(8) "49252322" ["articleid"]=> string(7) "7279746" ["chaptername"]=> string(8) "第11章" ["content"]=> string(29541) "邺城的出租屋在六楼,没电梯。
林哲扛着行李箱爬上去,楼道里弥漫着一股陈年油烟混着消毒水的气味。声控灯坏了,他踩着黑暗往上走,每一层的拐角都有辆落灰的自行车,车锁锈成了橘红色。到六楼的时候,膝盖咔哒响了第三声。他把行李箱靠在墙上,掏出钥匙。房东给的那把,铝片削得薄,插进锁孔里晃了两晃才转动。
门开了。一居室,朝北,窗户对着另一栋楼的厨房排气扇。
他把背包扔在光秃秃的床垫上。弹簧咯吱一声,像踩到了猫尾巴。
来邺城第一周,面试了三家公司。第一家做数据恢复,老板看了他的履历,说“倒悬山的经验在邺城不太适用”——话说得客气,但没给复试。第二家是数码城里的手机维修铺,老板娘叼着烟面试,问他会不会修曲面屏,他说不会,烟灰弹在桌上就算结束了。第三家是快递分拣中心的夜班岗,不需要面试,填表就能上工。
他去了。
干到第十一天的时候,凌晨四点半下班,骑共享单车回出租屋。路上经过一条夜市街,摊贩开始收摊,铁皮炉子浇了水,白汽腾起来,混着孜然和烤焦的竹签味。有个喝醉的男人蹲在路边吐,手机掉在地上,屏幕亮着,锁屏壁纸是一个女人的脸。林哲骑过去了。
他不觉得累。身体在机械地动,脑子却空着。赵冬梅删掉模型的时候说过,他的行为偏差率81.3%。现在这个数字大概更高了——一个行为偏差率80多的人,在邺城这座没有数据牢笼的城市里,会变成什么。没人管。没人预测。也没人替他做决定。
手机在裤兜里震了一下。
他单手扶车把,掏出来看。是备份程序。灰点在左上角亮着,一条白底黑字的消息。
“你的交通月卡余额还剩3块。明天上午九点半,邺城劳动就业中心有个临时工招聘会。地址在人民路87号,从你住的地方骑过去18分钟。”
林哲单手打字:“你现在管找工作了。”
“王恺的脚本里没有就业指导模块。我自己加的。”
“为什么。”
备份程序没回。灰点闪了三下,弹出一行字,字体比平时小了一号。
“闲着也是闲着。”
林哲把手机塞回裤兜。共享单车碾过一块翘起来的地砖,车筐里的矿泉水瓶掉了。他没捡。
第二天早上他去了招聘会。人民路上的就业中心是栋旧楼,外墙贴着白瓷砖,被酸雨淋出了灰黄色的水渍。大厅里摆了三排蓝色塑料椅,坐满了人。有人在填表格,有人对着手机念简历上的字。林哲排了二十多分钟,轮到一个窗口。
台板后面坐着一个四十多岁的女人,短头发,没化妆,工作牌上写着“邺城市就业服务中心·刘姐”。她翻他的简历,翻得很慢,像在数页码。
“倒悬山过来的?”她没抬头。
“嗯。”
“以前干什么的。”
“数据恢复。”
她把简历放在台板上。手指压在纸面上,指甲剪得很短,边缘打磨过。“这个在邺城不好找对口的。倒悬山的数据系统和邺城不是一个架构。那边用的是镜像存储,邺城是分布式。”她把简历往前推了推,“但你懂底层逻辑。有个活儿,不知道你愿不愿意。”
“什么。”
“邺城第三人民医院的信息科。招一个系统维护。不是正式编,外包岗位。月薪四千二,没有五险一金。夜班多。干不干。”
“什么时候上班。”
刘姐看了他一眼,眼睛在镜片后面眯了一下。“今天下午。”她把一张打印好的介绍信从抽屉里拿出来,盖了章,推过来。
林哲把介绍信折好塞进裤兜。站起来的时候,刘姐在后面说了句什么,被大厅里的叫号广播盖住了,他没听清。
邺城第三人民医院在城西。是一栋十五层的住院大楼,外墙刷成淡绿色,窗户上统一装着空调外机。信息科在地下室,门牌上的字被走廊的潮气泡皱了,边角翘起来。林哲推开铁皮门,里面不大,三排机柜占了大半个房间,风扇嗡嗡响。墙上挂着一张发黄的值班表,用透明胶带粘着,最后一班的人名后面画了个叉。
科长姓周。五十多岁,秃顶,白大褂口袋里别着一支没盖帽的圆珠笔,布料上洇了一块蓝黑色的墨迹。他坐在一张旧办公桌后面,桌上堆着拆开的键盘和一卷网线。
“倒悬山过来的?”周科长把介绍信翻过来看了背面,又翻回去。
“嗯。”
“懂系统迁移吗。”
“做过。”
周科长站起来,膝盖在桌沿上磕了一下,闷响。没吭声。他走到最里面那排机柜前面,拉开一扇柜门。里面是一台旧式服务器,面板上的指示灯灭了一半,硬盘咔咔响。
“老古董了。HIS系统,医院信息系统。用了差不多十几年。厂商五年前就倒了。没人维护。”他拍了拍机柜外壳,铁皮上的漆被拍得剥落了一小块,“下个月要升级新系统,但旧系统里的数据要迁出来。门诊记录、住院档案、药房库存。几百万条数据,格式是专有的,打不开常规数据库。之前找了两拨人,都没弄成。”
林哲走到机柜前面,蹲下。服务器后面接了一堆线,接口的标签上写着歪歪扭扭的字——“药房”、“挂号”、“住院”。他认出了其中一个端口,DB-25接口,老式数据库专用。
“有文档吗。”
周科长从办公桌上翻出一本厚册子,封面掉了,用订书机订着一张打印纸,上面写着“HIS系统操作手册”。林哲接过来,翻开。纸页发黄,代码注释是手写的,笔迹工整,每个字母都端端正正。翻到最后一章——“数据存储格式与编码规则”。他扫了几行。编码用的是十六进制,偏移量和现代数据库不一样,但底层逻辑是通的。
“怎么样。”
“能试试。”他看着机柜的接口,“需要一台干净的终端。不能联网的那种。”
周科长指了指角落。那里堆着几台旧电脑,显示器上落了一层灰。林哲走过去挑了一台,搬出来接上电源。开机的时候,屏幕闪了半天才亮,风扇转了半圈停了,又转起来。
他把操作手册搁在键盘旁边,对照编码规则一页一页看。几百万条数据,手动转是不可能的。得写个脚本,把旧编码映射到新编码,然后批量输出。思路差不多是这个思路,但细节——
手机震了。
林哲掏出来。灰点弹了一条消息:“HIS系统的编码规则我能解。把数据线接到你手机上,我直接读接口。”
林哲看了两秒。“你连医疗系统都懂。”
“王恺的脚本里没有医疗模块。但编码映射的逻辑和倒悬山数据恢复是一样的——本质上是十六进制偏移量的问题。你手册上第237页那张映射表,我扫描过了。偏差值在±3之间。给我几十分钟。”
“你什么时候扫描的。”
“刚才你翻手册的时候。你手机的摄像头对着页码。”
林哲没忍住,嘴角动了一下。他把数据线从旧服务器上拔下来,插到手机上。屏幕闪了一下,备份程序弹出一个窗口——黑底绿字,命令行界面,上面跑着一行行十六进制映射表。速度比他手动输入快得多。
周科长端着两杯茶走过来,递了一杯给林哲。一次性纸杯,茶叶梗浮在水面上。“有眉目了?”
“嗯。”
周科长喝了口茶,没走。站在后面看了一会儿屏幕上的代码,看不太懂,但也没问。“你是倒悬山哪个区的。”
“八区。”
“八区。”周科长把纸杯放在机柜顶上,杯底在铁皮上磕出轻轻的声响,“我有个老同学在倒悬山。十区的。好多年没联系了。他说倒悬山那边什么都管。上个医院看病,系统能提前猜出你得什么病。”
林哲的手指在键盘上停了一下。“猜得准吗。”
“他说挺准的。但也吓人。有回去体检,系统预测他有脂肪肝倾向,结果还没做B超,短信就发过来了——说您的脂肪肝风险等级为B级,建议低脂饮食。”周科长笑了笑,笑得不像是觉得好笑,“他说那感觉,像有个人提前把他的剧本写好了。”
林哲没接话。服务器风扇嗡嗡响,盖过了地下室走廊里手推车的声音。
备份程序弹了一行提示:“映射完成。数据转换程序已生成。运行需要大概半天。”
林哲点了回车。进度条开始爬。旧服务器硬盘的读写声忽然密集起来,咔咔咔的,像有人在里头拆东西。他把纸杯放在地上,站起来伸了个懒腰。后背的脊椎咔哒响了一声。
周科长已经走了,走廊里传来他和护士说话的声音,隔着铁皮门闷闷的。
手机又震了。
“还有一件事。刚才扫描手册的时候,摄像头拍到了你后面那排机柜上贴着一张标签。标签上有一行手写的字——‘备用接口·权限节点物理层’。字体我比对过了。”
林哲盯着屏幕。
“和王恺的字迹吻合。”
他转过身。那排机柜在最里面,靠墙。柜门半开着,里面是老式交换机和一堆缠绕的网线。侧面贴着张标签,黄色便签纸,和在春城南路用过的那些一模一样。手写的字迹,黑色水笔,用力很重,纸背上能摸到凹痕。
“怎么会有倒悬山的设备在邺城医院里。”
“不是设备。是标签。这张标签是从倒悬山第八区数据中心撕下来的。上面的编号——B-07-2。王恺在日志里写过。他说B-07端口旁边还有一个备用端口,编号B-07-2。那个备用端口和第十区核心机房的存储节点是直连的。”
林哲的心脏跳得快了一拍。不是怕。是那种忽然在黑暗中摸到一个熟悉把手的触感。
“B-07-2是直连第十区的。但这里是邺城。物理上不可能。”
“可能的。”备份程序的回复弹得很快,每个字都带着某种兴奋,“如果王恺把B-07-2的接口拆下来,物理迁移到了邺城。B-07-2不是一台机器,是一块独立的物理层接入模块,尺寸大概一个烟盒那么大,可以直接插在任何支持DB-25接口的设备上。它通过一条专用光纤和第十区的存储节点保持直连——不是走网络,是物理直连。”
林哲走近机柜。标签底下贴着一个黑色的小盒子,粘在交换机侧面,不仔细看以为是电源适配器。烟盒大小,外壳是磨砂黑的,接口处有一个DB-25插头,连到了旧服务器上。盒子上面有个小灯,暗红色的,一闪一闪,心跳一样。
他伸手碰了一下。盒子是温的。
“它还在运行。”
“对。上面指示灯还在闪。说明直连还在。它连着的是第十区核心机房的存储节点DM-STORAGE-07。就是你删掉你自己模型的那个节点。”
林哲的手指缩回来。“我的模型已经删干净了。”
“物理删除,七次覆写。不可能恢复。我说的是别人的模型。”备份程序顿了顿,光标闪了三下,“DM-STORAGE-07是第十区所有试点市民的行为模型存储节点。不止你一个人的。上面还有几千个模型也在运行。我现在能通过这个节点看到它们的运行状态。”
林哲盯着那个黑色小盒子。暗红色的指示灯一闪一闪,在昏暗的地下机房里像一只不会眨的眼睛。几千个人在倒悬山的影子,藏在这个烟盒大小的铁块里,通过一条光纤穿越三百公里,安安静静地躺在邺城第三人民医院的地下室。
“王恺把接口搬到这里,”他的声音压得很低,嗓子有点干,“是备份。”
“对。如果第八区的数据被清理了,这里的物理备份还能留着。他把他能拿到的所有东西都复制了一份。”备份程序停了一下,“包括那二十个脚本终端。他是从这里激活的。”
“这里可以做什么。”
备份程序沉默了。沉默的长度超过以往任何一次——林哲数了一下,光标闪了十六下,第十七下的时候,消息弹出来。
“可以做很多事情。从物理层接入意味着系统把你当成合法管理员。DM-STORAGE-07的防火墙对你无效。你能做的事情包括——批量查询所有在线模型精度。批量触发模型注销。甚至——”
“什么。”
“把灰域协议重新装回去。”
林哲的手按在机柜边缘。金属冰凉,掌心的汗印在上面。赵冬梅把灰域协议三个版本全部删干净了。v1.0,v2.2,v3.0。她自己说的——协议本身注销了。但如果王恺留了一个物理后门,一个直连存储节点的接口,灰域协议就可以重新编译。不需要赵冬梅的代码。他可以用倒悬山的底层架构,自己写一个。
手机震了。不是消息。是备份程序的窗口弹出来,上面开始自动加载一串代码。等宽字体,黑底绿字。不是映射表,不是转换程序。是灰域协议v1.0的源代码——赵冬梅三年前写的那个初版。
“你什么时候存的。”
“赵冬梅做双向擦除之前。她把源码从系统里删掉的前一秒。我只来得及复制v1.0。v2.2和v3.0都没了。”
“她删掉是故意的。”
“对。但v1.0就够了。”
林哲盯着屏幕上的代码。赵冬梅三年前写的灰域协议,几百行等宽字体,注释栏里用英文写着“GHOST v1.0·临时通道·别让它在系统里留太久”。“别让它”三个字被人加了下划线——不是代码的语法,是王恺加的。他在哪个夜里看到这份代码,在那三个字下面划了一条线。
他把手机放在机柜顶上,屏幕朝上。地下室走廊里的手推车又响了,橡胶轮子在塑胶地板上咕噜咕噜地滚过去,有人在喊护士的名字。
他把手伸进机柜,碰了碰那个黑色盒子。暗红色的指示灯继续闪着,完全不管外界发生了什么。
“可以重新编译吗。”
“可以。但需要时间。”备份程序弹出一行字,“v1.0的框架还在,需要根据现有系统更新端口映射表和身份验证层。代码量不小。以我的处理速度,大概需要——”光标顿了半秒,“四十分钟。”
“四十分钟之后呢。”
“四十分钟之后,灰域协议重新上线。通过这个物理接口,我可以同时接入第十区核心机房——和你在倒悬山的旧设备。你的手机。虽然被格式化了,但底层分区的锚定记录还在。只要接入,我就能——”
林哲的手机响了。
不是消息震动。是来电铃声。
屏幕上弹出来电显示——“无主叫号码”。他接了。
电话那头没有人说话。只有呼吸声,很轻,像是有人把话筒捂在袖子上,不敢出声。然后是纸张摩擦的声响,沙沙的。一个声音传过来,压得很低,像在抽屉里说话。
“林哲。”
女的。赵冬梅。
林哲攥紧手机。“你在哪。”
“别管我在哪。你摸到那个黑盒子了。”
“你怎么知道。”
“因为盒子是我帮王恺装的。”她的声音顿了顿,话筒里传来远处的汽车喇叭声,闷闷的,“三年前,他从第八区把B-07-2拆下来,我帮他改的接口。我们当时不知道这个接口以后能用上。就是觉得万一系统做绝了,得有个后手。”
林哲盯着那个小黑盒子。暗红色的指示灯一明一灭。赵冬梅,王恺。三年前灰域协议还没被删掉的时候,他们两个就已经在系统里埋了这个东西。
“灰域协议的源码你还留着吗。”
“没留。全删了。但我记得框架。”她的声音快了一点,“你现在手上有v1.0对吧。备份程序给你调的。听我说,v1.0的端口映射已经过时了,但逻辑还是对的。你重新编译的时候,把身份验证层换成双因子——用盒子的硬件地址加上你手机的锚定残影。两样东西系统都有记录。两样都对上,系统就认你是管理员。”
“你在教我怎么黑进倒悬山。”
电话那头传来一个很轻的笑。不是笑出声——是呼气的时候带着点笑意。“我三年前就在黑倒悬山了。你刚知道。”
林哲把手机换到另一边耳朵。地下室里信号不太好,赵冬梅的声音夹着电流噪,断了一截又接上。
“你打这个电话,不只是为了教我怎么改灰域协议。”
“……对。”她的沉默很短,但很沉,“我打来是因为——盒子里存着的数据,不止有模型。还有被协议终止的那些人。”
被协议终止的人。系统里不存在的人。社保清零,医保清零,通讯记录清零。但行为模型还在。系统替代了他们——替代之前,把旧模型拷贝了一份,存在物理存储节点里。不是备份,是归档。系统说这些人不存在于系统里,但没说他们的模型被删掉了。
“赵冬梅的那个前夫。”林哲说得很慢,每个字都在掂重,“他的模型也在里面。”
电话那头没有声音。
“……是。”这个字出来的时候,赵冬梅的嗓音裂了一道缝,很细,但能听见,“他在里面。”
林哲靠在机柜上。服务器的风扇嗡嗡响,头顶的日光灯管坏了一根,另一根在闪。把地下室照得一明一暗的,他感觉自己好像站在什么浪尖上,脚下的水面是黑色的。
“你想让我把他的模型拿回来。”
“不是拿回来。”赵冬梅的声音稳下来了,像是在重复一件已经想了很久的事,“被协议终止的人的模型,和普通模型不一样。它们被系统打了一个冻结标签,不能恢复,不能迁移。但是——”她顿了一拍,“可以用灰域协议解开。解开之后,能不能从模型里还原出真人,我不知道。真的不知道。如果有人追到这里,我要说清楚——我从来没说过模型等于人。但它是唯一的残留。”
电话那头传来一声很轻的吸气。她像在抽烟。打火机没响,可能只是把烟叼在嘴里,没点。
“林哲。做不做,你定。”
她把电话挂了。忙音嘟嘟嘟响了三声,自动挂断。
林哲把手机从耳边拿开。屏幕上的灰点还在闪。备份程序弹出一条消息——“刚才通话的同时,我检测到这个物理接口上有人远程登录过。登录时间和赵冬梅的通话时间完全重叠。IP来源——临市老城区。”
春城南路17号。她没走。
他站起来。膝盖咔哒响了一声,他弯腰揉了两下,从机柜旁边拖了把折叠椅过来坐下。把手机接上数据线,插到那个小黑盒子的DB-25接口上。盒子上的指示灯闪了一下,从暗红变成绿色。
屏幕亮了。倒悬山第十区核心机房,存储节点DM-STORAGE-07。几千条数据在目录里列出来,排成一行一行的。他看到了自己的ID——模型已经被删了,剩下一个空文件夹,标注着“已覆写”。往下滑,看到标着“冻结”字样的目录——十七个文件夹,名字是一串系统生成的编码,没有姓名。赵冬梅的前夫在里面。
第十七个。
他盯了那个文件夹大概有十秒。
然后把手机放在机柜顶上。用手背揉了揉眼睛。地下室走廊里的手推车又响了,这次滚得更近,橡胶轮子在塑胶地面上吱嘎吱嘎的,有人在他门外的走廊里停下来。铁皮门外传来周科长的声音:“林哲还没下班啊?”
护士的声音说:“那个倒悬山来的?”
“嗯。挺能干的。”
手推车走远了。门没开。
林哲把手从眼睛上拿下来,点开那个文件夹。冻结标签弹出来,系统提示无法读取。他把灰域协议的源码窗口拖到前台。黑底绿字,光标在界面里安静地闪着。四十分钟前备份程序说要四十分钟才能重新编译,现在已经跑了三十一。还剩九分钟。
他在折叠椅上坐直了腰。手指在键盘上停着。
九分钟后,灰域协议会重新上线。然后呢。
解开冻结标签,把赵冬梅前夫的遗留模型还给她——这是赵冬梅要的。然后呢。十七个被协议终止的人,十七个模型躺在存储节点里,冻在系统深处。赵冬梅说她不知道还原能不能成功,但残留在这里,就有一线希望。
他忽然想,不知道是好事还是坏事。
备份程序弹出一条提示:“编译进度92%。预计剩余时间3分钟。你要准备好一件事。”
“什么。”
“解开冻结标签之后,系统会检测到异常。冻结模型是最高级别的系统敏感度,触发告警只需要两秒。告警发出之后,物理接口的位置可能会暴露。暴露之后,倒悬山数据管理部的人会找到这里——不是第十区,是邺城。这个地下室。来的人不会是保安。”
林哲没动。他坐在折叠椅上,机柜的风扇吹出来的风带着铁锈味。周科长的茶杯还搁在机柜顶上,茶水早就凉了,茶叶梗沉在杯底。
“能不能在解开冻结标签的瞬间把模型导出,同时关掉接口。”
“能。但是只能选一个。十七个模型数据量很大,导出加擦除痕迹最少需要九十秒。和解开冻结标签同时跑的话,接口必须全程在线。九十秒里,有两秒是系统告警时间,剩下八十八秒是倒悬山追踪物理位置的时间。这八十八秒够不够你跑——我不知道。”
九十秒。又是九十秒。灰域通道第一次打开是九十秒,退订批文上传完是九十秒,三楼综合业务窗口后面拔网线也是九十秒。赵冬梅在短信里说别浪费九十秒,但她没说九十秒是用一次少一次的。
林哲盯着屏幕。进度条跳到98%。他站起来,膝盖没响。可能已经习惯了。他把周科长的茶杯端起来,喝了一口冷掉的茶,涩的。
“选了之后呢。”
“如果成功——十七个模型全部导出,物理接口自动熔断。系统追不到来源。数据会被加密存储在你手机里,用灰域协议的容器封着。只要你不主动打开,没人知道。如果你想把那些模型还给谁——那是你的事。”
如果失败。备份程序没说。不用说。如果没在八十八秒内跑掉,倒悬山数据管理部的人会第一次在邺城地界上找到一个人。不是通过定位辅助,不是通过算法预测,是顺着物理直连的光纤追上门的。
他低头看了一下手机。屏幕上的进度条满了。一行绿字弹出来——“灰域协议v1.0重新编译完成。状态:待命。”
他点开那个被冻结的文件夹。第十七号。
回车。
屏幕闪了一下。冻结标签开始跳动,红色的“LOCKED”变成橙色的“UNLOCKING”,然后变成绿色——“UNLOCKED”。
与此同时,界面右上角弹出一个小窗口。倒悬山数据管理部内网告警——“核心存储节点异常访问。冻结模型解锁。来源追踪中。”
02秒,03秒,04秒。
进度条在爬。十七个模型的导出进度同时跑,一根根绿线从左往右填。05秒,06秒,07秒。
机柜顶上的小黑盒子忽然亮了——不是暗红,是刺眼的白光。物理接口正在满负荷运转。盒子的塑料外壳开始发烫,林哲的手指碰到的时候缩了一下。像摸着开水杯。
18秒。进度过四分之一。
周科长从走廊那边走过来,敲了敲门。“还没走啊?”林哲没回,周科长推开门的时候,看到林哲正站在机柜前面盯着屏幕,脸上的表情让他停了一下。“……出什么事了。”
“没事。快跑完了。”
周科长站在门口。他没进来,看了两秒,把门关上了。脚步声往走廊那边去了。
43秒。进度过半。告警窗口弹出了第二行字——“异常操作已锁定。目标物理坐标解析中。预计完成追踪时间:45秒。”
盒子更烫了。外壳的磨砂黑开始发软,塑料受热变形的味道飘起来。接口指示灯从白变成了蓝白色,亮得像焊弧。林哲闻到焦味的时候,那把折叠椅还在角落里,他刚才忘了坐了。他一直站着,手指悬在键盘上面,没碰到任何键。进度条是自己跑的。他盯着告警窗口那行字。预计完成追踪还要45秒。总时间已经过了46秒——这两句话加一起是91秒。比九十秒多一秒。
“盒子的散热撑不到那时候。”他的声音很平,像只是在报告一个事实。
备份程序弹了一行字:“对。它会先烧掉。”
52秒。进度过了三分之二。盒子外壳冒烟了。不是浓烟,是一缕细细的白烟,从磨砂黑表面的一条裂缝里渗出来,像一根被掐灭的蜡烛又被人点着了。焦味越来越重。
65秒。盒子爆了。
不是爆炸——是一声很细很脆的裂响,像踩碎一个灯泡。塑料壳裂成两半,里面的电路板露出来,一片焦黑,小元件熔成了银色的小珠。蓝色光灭了,只剩一缕烟慢慢升起来,在机柜顶上的日光灯管旁边散了。
屏幕上的导出进度停留在74%。周科长的茶杯被震得从机柜顶上掉下去,摔在地上啪一声。瓷片溅开。茶水在地砖上铺成一小滩,茶叶梗贴在地缝里。告警窗口闪了一下,弹出一行红字。
“目标物理坐标解析失败。追踪中断。原因:信号源丢失。”
然后界面变成灰色。倒悬山数据管理部的内网窗口自动关闭。屏幕右上角只剩下灰域协议的导出进度条——但不动了。卡在74%的位置,一动不动。
林哲站了好一会儿。然后把手从键盘上拿开。手背被盒子炸开时的热气烫了一下,皮肤微微发红。
“七十四。”他说。
备份程序弹出一条消息。“74%意味着十七个模型里,十二个完整导出,四个部分丢失,一个完全没来得及。完全没来得及的那个——”
林哲知道是哪个。
手机屏幕闪了一下,灰域协议的容器界面弹出来。十二个标着绿色“完整”的文件夹,四个标着黄色“部分”的文件夹,一个红色的空文件夹。他有好一会儿没去看那个红色的空文件夹的编号,就让它待在屏幕角落。地下室里很安静,只有旧服务器硬盘还在咔咔响,像刚才什么都没发生过。
周科长回来了。推开门,看见地上碎了的茶杯,没问什么。只是从门后面拿了拖把,把茶水和瓷片一起推进了簸箕里。拖把在塑胶地板上画出一道水痕,混着铁锈的味道。
“系统迁完了。”林哲说。声音比他预想的更稳。
周科长直起腰,把拖把靠在门后面。“那个东西呢。”他指了指机柜顶上裂成两半的黑盒子。
“烧了。”
“要紧吗。”
“不要紧。”
周科长点了下头。他把簸箕里的瓷片倒进垃圾桶,拍了拍手上的灰。“搞定了就下班吧。明天上午来做个交接,下午不用来了——工资给你算到今天。”
林哲把手机从数据线上拔下来。屏幕黑了,他把手机揣进裤兜,背包从折叠椅上拎起来。背包带子磨到袖子上的破口,布又裂开一点。走出地下室的时候,走廊里的日光灯还亮着,头顶的排风扇嗡嗡响。住院部大厅的电子钟显示凌晨十二点四十七。
他推开门。外面的夜风灌进来,凉。天上没有星星——邺城的夜是紫红色的。他站在台阶上,把手机掏出来。屏幕亮着。灰域协议的容器界面上,那个红色的空文件夹还在。第十七号。赵冬梅的前夫。74%——就差那么一点点。
但十二个绿色。十二个完整导出的人,被协议终止之后冻在系统里的残留,现在安安静静待在加密容器里,代码层面的一堆一和零——不知道算不算活着。也不知道被还原之后,会是什么。
他想起赵冬梅那句话——做不做,你定。
他已经做了。只是没做完。
手机震了。备份程序弹出消息。
“容器里的十二个完整模型,可以用灰域协议解压还原成行为数据。但还原成什么人,取决于他们自己有没有残留的意识种子。如果被冻结前意识种子被擦掉了,还原出来的只能是一部空白的行为模型——会走路,会买东西,会刷卡,但里面没人。要不要试,你定。”
林哲把手机攥在手里。台阶下面,邺城第三人民医院的救护车停在急诊门口,蓝灯在车顶上旋转,无声地闪着。一个护士推着轮椅从急诊门出来,轮椅上坐着一个老人,膝盖上盖着毛毯。
他把视线收回来,滑着手机屏幕,翻到备份程序的聊天记录,把灰域协议的源码文件翻出来。注释栏里,赵冬梅三年前写的那行字还在——“GHOST v1.0·临时通道·别让它在系统里留太久”。
他在这行字下面,手指在触屏键盘上停了一下。然后打字。
“先还原第一个。”" ["create_time"]=> string(10) "1785516847" }