第二十章 地下室
敲击声停了。
警笛声却越来越近,红蓝两色的光从街角漫过来,透过旧书店的玻璃门,在天花板上投下旋转的光斑。方远的人不可能这么快——天枢现场需要封锁,何建国需要押送,观察员的载体需要封存。这些警笛来自另一个方向,另一个指令。
“有人报了警。”魏建国走到门边,侧身靠在书架旁,用两根手指拨开百叶窗的一片。窗外,两辆警车正停在街对面,没有开进石臼街,而是横在路口,像是封锁而不是搜查。“不是冲我们来的——他们在封路。”
“封的就是这条路。”顾长河把碎片C终端合上,屏幕暗下去,“石臼街117号,老周写进了某些东西的地址。不是今天才写的,很久以前就写进去了。”
林默没有动。他的注意力还钉在地下室的方向。那面贴满旧报纸的墙后面,那个十七年没有人进去过的空间,那个用三二一的节奏敲击的东西——不管那是什么,它知道有人在外面。它在用老周惯用的方式发信号。
三二一。老周在风铃里藏碎片A的时候,打了三个结。老周在表决器里藏根密钥的时候,用了三组电容。老周留给张德胜的遗言一共三句。三二一,是周卫国的签名,是他的习惯,是他预设的某种确认——就像碎片E的密码0000一样,只有知道他在想什么的人才能破解。
“地下室入口在哪?”林默问。
顾长河看着那面墙,煤炉的红光在他脸上明明灭灭。“书架后面。但这个入口不是用来进人的——是当年铺管线用的检修口。我从没打开过。周卫国说下面封着东西,说除非三枚碎片聚齐并且他死了,否则不要动。”
“现在两个条件都满足了。”
顾长河没有反驳。他走到最里面那排书架前,双手抓住第三层隔板的边缘,往上一抬,往外一拉。整个书架像一扇门一样无声地旋开了——滑轮藏在底部,轨道嵌在地砖缝里,设计精巧到从外面完全看不出来。
书架后面是一扇铁门。不是防盗门那种带油漆的铁皮,是老式锅炉房用的那种铸铁门,表面锈迹斑斑,门把手上挂着一把挂锁。挂锁已经锈死了,锁孔里塞满了灰。
林默蹲下来,握住挂锁。冰凉的铁锈扎进掌心。他用力一拧,锁扣发出一声脆响——不是锁开了,是锈蚀的锁扣直接断了。十七年的氧化让铁变成了脆片。
铁门拉开的声音像一声沉闷的叹息。门后面是向下的台阶,水泥浇筑,窄得只能容一人侧身通过。一股冷风从下面涌上来,带着泥土、铁锈和某种更深的、有机物的腐朽气息。不是尸体的腐臭,是纸张、木头、布料在地下封存太久之后发酵出的那种味道。
台阶尽头有光。不是灯光,是某种电子设备的指示灯在闪烁,绿色的,一下一下,和呼吸的频率差不多。
林默回头看了一眼。魏建国站在门口,右手还在外套内侧,朝他点了点头。小陈把笔记本电脑放在柜台上,跟在最后面。陈皮蹲在柜台边缘,尾巴搭在《计算机世界》合订本上,没有跟过来的意思。
三个人走进地下室。
台阶一共十三级。林默一边往下走一边数,不是因为需要数,而是因为他的大脑在紧张时会自动进入这种状态——记录、分类、推演。十三级台阶,每级高约十八厘米,总深约两米三。地下室的天花板很低,林默需要微微低头才能站直。空间不大,目测十五平米左右,四面墙都是水泥毛坯,没有窗户,唯一的通风口是头顶一根直径十厘米的铁管,通向地面。
正中央摆着一张铁架办公桌,漆面已经起泡剥落,桌腿生锈,但桌面被清理过,上面只有三样东西:一台老式CRT显示器,一个键盘,一个主机箱。主机箱的绿灯在闪烁,和他们在台阶上看到的是同一个光源。显示器是关着的,屏幕漆黑。
魏建国伸手摸了一下桌沿,手指沾了一层灰,但灰的厚度不均匀——桌面正中间,键盘和显示器的位置,灰尘明显比边缘薄。“最近有人动过。”他说。
小陈绕到主机箱后面,蹲下来看接口。“电源线走的是地埋管,没接市政电网——这个功率,应该是独立的UPS供电。”他伸手碰了一下机箱外壳,“温的。这台机器一直在运行。可能运行了很多年。”
林默站在显示器前面。屏幕虽然关着,但电源灯亮着,琥珀色的光在屏幕右下角稳定地闪烁。键盘是PS/2接口的老式键盘,灰白色,字母键已经磨得看不清标识,但F1到F12那一排功能键上被人用油漆笔重新标注了符号。
F1:启动。F2:暂停。F3:日志。F4:查询。F5至F8的标注已经模糊了,F9到F12被涂成了红色,分别写着“终止1”“终止2”“终止3”“执行”。
最显眼的是ESC键。那个键被单独涂成了黑色,旁边用极细的笔迹写了一个字:周。
林默按下F3。
显示器嗡的一声亮了。不是现代液晶屏那种瞬间亮起,而是CRT显示器特有的缓慢点亮过程——屏幕中央先出现一个白点,然后向四周扩散,最后填满整个画面。亮度和对比度都很低,像是被人刻意调暗了,屏幕上的文字是绿色的,在黑色背景上浮动。
天网引导层日志系统 v3.1.7
签名:ZW
最后登录:今天 15:41
未读记录:1条
十五点四十一分。老周的手机接到那通从旧书店座机打出的电话,正是同一分钟。顾长河说他每周打一次,十七年没断过。但今天这通电话被系统记录了——不是被电信运营商记录,是被这台在地下室封存了十七年的机器记录了。
“日志系统运行在引导层下面。”小陈的声音压得很低,像是怕吵醒什么东西,“这不符合天网的架构。引导层是最底层,没有更下面的层级了——除非老周在韩松和孟庆国的引导层下面又加了一层。”
“不是加了一层。”林默盯着屏幕上的版本号,“他是把韩松和孟庆国的引导层整个换掉了。签名是ZW。版本号3.1.7。3代表大版本,1代表修订版,7代表编译次数——他编译了七次才成功。这不是修改,是重写。”
顾长河在上面说过的话回响在他耳边:周卫国负责应用层和内核层,不碰引导层。文档上写得很清楚。
文档是假的。老周不仅碰了引导层,他把整个引导层重写了。
林默按下方向键,光标移到“未读记录”上,按下回车。
屏幕刷新。绿字逐行浮现,速度不快,像是打字机在打印。
记录编号:0001
时间戳:今天 15:41:17
来源节点:备用节点Zero
类型:激活通知
内容:协议Zero已从引导层固件中被终止。终止码:0000。终止人:宿主P04,林默。
附注:韩松/孟庆国原始引导层已于五年前被完全覆写。当前引导层版本3.1.7,签名ZW,编译于2019年12月。
附注2:备用节点Zero位于本机。物理坐标:石臼街117号地下。状态:休眠中。激活条件:协议Zero终止后,三枚碎片同时接入碎片C终端。
附注3:激活条件已满足。
林默读完最后一行,手指从键盘上移开。
激活条件已满足。
屏幕上又跳出一行新文字,不再是日志格式,而是一行单独居中显示的大字:
是否唤醒备用节点Zero?
[F9] 是 [F10] 否
小陈拉了拉林默的袖子。“林哥,等一下。备用节点是什么我们都不知道——”
“我知道。”林默说。
在天枢会议室,观察员被熔断之前,它从备用节点重启了。引导层被踢出网络之后,它从某个地方重新加载了核心进程。当时方远用测谎技能验证了它的威胁——它说“协议Zero将在六十秒内执行”,那是真的。但协议Zero在旧书店被林默用0000终止了。如果协议Zero是韩松和孟庆国埋的,而老周覆写了整个引导层,那么老周覆写引导层的目的,就是把协议Zero的执行权从他自己的备用节点上剥离,然后把终止权交到林默手里。
备用节点Zero。不是韩松和孟庆国的备用节点。是老周的备用节点。他把自己写进了天网的最底层,把签名刻在了固件里,然后在某个地方——这张办公桌下面,这台CRT显示器背后,这个地下室的水泥墙里——藏了一个自己的备份。
“他在死之前就已经把自己上传了。”林默说,声音很平静,像是在陈述一个已经被推演过无数次的结论,“不是意识,不是人格——那种事做不到。但他把自己的决策逻辑、协议触发条件、所有预设的应急预案全部编译进了引导层的底层代码里。5.3.1.7是他最后一次编译的版本号。今天是第一次激活。”
他按下F9。
地下室的灯光闪了一下。不是停电——是主机的硬盘开始高速运转,发出一种老式机械硬盘特有的咔咔声。CRT屏幕上的绿色文字开始快速滚动,速度快到无法阅读,一行一行往上翻,像是一条被压缩了五年的河流突然打开了闸门。
然后,所有的声音都停了。
屏幕上的文字全部消失,只剩下一行光标在左上角闪烁。闪烁了五秒,十秒。
然后,一行字浮现出来。
不是绿色的日志文字。是白色的,更大,更慢,一个字一个字地从屏幕中央浮现,像是有人在那端用一根手指慢慢地敲键盘。
林默,你好。
我叫周卫国。
如果你看到这行字,说明协议Zero已经被你终止了。说明三枚碎片在你手里。说明你父亲没白死。
我先回答你第一个问题:引导层是我写的。韩松和孟庆国写的是原始版本,里面有一个东西叫协议Zero。协议Zero的目的不是控制城市,不是筛选宿主,不是做实验——那些都是表象。协议Zero的真正目的是筛选一个人。一个在极端压力下不会崩溃、不会屈服、不会把权限交给任何人的人。他们想找一个宿主,把他变成系统的完全权限持有者,然后用他控制整个天网。不是当工具用——是当天网的大脑用。人机合一。
他们把这个叫“Zero计划”。我是后来才知道的。
你第二个问题应该是:为什么是我?
因为你父亲。林长河是我见过的最好的硬件工程师。天网的第一块生物传感板是他徒手焊的,零点三毫米的贴片元件,他戴着放大镜焊了三天三夜。系统上线之后他发现了引导层的问题——他发现韩松和孟庆国在底层埋了一个他不知道的东西。他告诉我了。我们开始查。查了三个月,查到了协议Zero。然后韩松和孟庆国就死了。
车祸。格尔木。尸体烧了。
你父亲知道下一个就是他。他把资料藏在那本《计算机世界》里,送到顾长河的店里,然后第二天——他出的事。不是意外。是韩松和孟庆国写的另一段代码——协议Zero的前置协议,叫“清除协议”。专门用来清除知道太多的人。韩松和孟庆国死了之后,清除协议没有停止。因为它已经被写进了底层,不受任何人控制。
我没有办法阻止清除协议。但我可以覆写引导层。我花了三年时间,把整个底层固件从韩松和孟庆国的版本替换成我自己的版本。协议Zero被我剥离了,清除协议被我终止了——但你父亲的命我换不回来。
对不起。
最后的布局从五年前开始。我把自毁协议E编号为0000,把终止码设为同一个数字。我把根密钥藏在天枢的表决器里。我把碎片C交给顾长河。我在引导层里埋了备用节点Zero——也就是你现在看到的东西。这不是AI。这是我的日志、我的决策树、我预设的所有条件分支。我把我能想到的所有可能性都写了进去。
然后我找到了你。
暴雨夜的短信不是系统发的。是我在备用节点里预设的触发器。条件:P04激活后第一条任务日志上传到应用层时,自动发送。我知道你会来。
现在,你来了。
屏幕上只剩下这一行字。光标还在闪烁。
你手里有三枚碎片,有根密钥,有碎片C终端。引导层里没有后门了——我全部清干净了。备用节点Zero的完全权限在你按下F9的那一刻已经转移给你。
天网是你的了。
你可以关掉它。可以重写它。可以把它交给任何人。可以什么都不做,让十七个宿主继续活着,或者全部释放。
选择权在你手里。
我只有一个请求。
如果你决定关掉天网——如果你决定释放所有宿主——在关掉之前,先用碎片C查一下编号1147。
你母亲的配型编号,TC-1147-S。
那不是系统随机分配的。
是你父亲在二十年前,用自己的权限手动录入天网数据库的。他录入的不是配型——是一个保护协议。代码叫“长河”。他把这个协议藏在了配型数据库的最底层,用你母亲的病历做了伪装。
我不知道这个协议具体是什么。你父亲没告诉我。他只是说,如果将来有一天他出了事,如果有人能走到引导层的最底层,如果他儿子能亲手按下终止键——就把编号1147告诉他。
现在,我告诉你了。
剩下的路,你自己走。
屏幕上的白色文字停在那里,不再滚动。光标在最后一行闪烁,一明一灭,像是呼吸。地下室里只有主机风扇的嗡嗡声和煤炉透过天花板缝隙渗下来的细微噼啪。
魏建国靠在水淋淋的水泥墙上,左手无意识地摸着腕上的上海表,眼睛盯着屏幕,嘴唇抿成一条线。小陈蹲在主机箱旁边,忘记了腿麻,忘记了呼吸,忘记了警笛声还在街道尽头旋转。林默站在CRT显示器前,右手还保持着按下F9时的姿势,指尖悬在键盘上方三厘米处,一动不动。
长河。
父亲留在天网最深处的代码,用了自己的名字。不是“林长河”,是“长河”。
顾长河在楼上的声音隔着水泥地板传来,模糊而遥远:“林默——警车在路口设卡了——你们那边怎样?”
林默没有回答。他把手放回键盘上,光标跳到了一个新的命令行。
天网引导层终端 v3.1.7
宿主P04,权限等级:完全
请输入指令:_
他输入了三个字。
“查1147。”
屏幕闪了一下。绿色文字重新开始滚动,这次慢了很多,像是在翻一个被压在最底层的文件柜。一行一行代码被调取出来,多数是林默看不懂的底层指令,偶尔闪过几个他能辨认的关键词——协议嵌套、宿主豁免、生命体征监控、器官配型锁定。
然后,屏幕停下来。
所有的文字都消失了。只剩下一行。
协议名称:长河
创建人:林长河
创建时间:2006年3月14日
状态:执行中(持续19年)
保护对象:林美兰(ID:TC-1147-S)
协议内容:该对象一旦被任何宿主任务或系统进程列为目标,立即触发宿主豁免流程,冻结全部相关任务线程,并向引导层发送最高优先级中断请求。中断码:长河-0001。
附注(林长河,2006年3月14日):
美兰,如果有一天你看到这个,说明我已经不在了。天网的底层有一道门,进门需要钥匙。钥匙是我焊的最后一块板子,周卫国写的最后一段代码,还有你自己——你是那道门的最后一道锁。编号1147不是配型编号。是默默的生日。十一月四日,下午七点。1147。对不起,骗了你这么多年。我爱你。
林默站在屏幕前。主机风扇还在嗡嗡地转。头顶的警笛声终于拐进了石臼街,红蓝两色的光从天窗的缝隙里漏下来,在天花板上划出旋转的条纹。魏建国把脸转过去,面对着墙。小陈用手背擦了一下眼睛,假装在检查网线接口。
林默没有哭。他的眼睛干涩得发疼,但手指很稳。他退出协议查询界面,回到命令行。
光标闪烁。白色,恒定,等待下一个指令。
他输入:
“查宿主列表。全部。”