笼中之友
一、 K房里的惊雷
叶知秋今天终于来上班了,他已经休假一个星期了,据说身体出了点问题。下班后,他拉住我:“今晚有空吗?去喝两杯?”,他眼神有点飘忽,神情凝重。叶知秋和我在大学就是同宿舍的死党,毕业后又一起进了一家小公司做技术运维。没去酒吧,反而去了K房,上了一打啤酒。他一个劲地给自己灌了好几杯,长呼一口气,盯着我半分钟:“你相信这个世界是模拟出来的吗?”
我一愣,他怎么知道。
这句话像一道惊雷,在我名为“沈舟”的这个身份的脑海里炸开。我的心脏,或者说,这个身份的生物模拟器官,瞬间漏跳了一拍。我端着酒杯的手纹丝不动,脸上努力维持着一个普通打-工-牛-马该有的、夹杂着“你是不是喝高了”和“又在发什么神经”的表情。
“哈?你科幻小说看多了吧?什么模拟不模拟的,赶紧喝,喝完我还要回去打游戏呢。”我打着哈哈,试图把话题岔开。
但他没有理我,眼神直勾勾地穿过K房里闪烁的霓虹灯,像是要看透我这层皮囊。叶知秋又灌了两杯,缓缓说:“上星期我不是病休的,我……我看到了这个世界的源代码。”
我的大脑,那个真正位于上层世界的、由量子纠缠和超弦逻辑构筑的思维核心,开始高速运转。
“是真的!”他猛地一拍桌子,啤酒瓶子叮当作响,“我上周在公司测试我们自己开发的那个‘沉浸式VR世界’项目。我绕过了几个安全协议,把神经连接的权限调到了最高。结果……程序崩溃了,我看到了。”
他双眼布满血丝,声音因激动而沙啞:“世界消失了,写字楼、天空、马路,所有的一切都变成了一行行发着光的绿色代码,像瀑布一样在我眼前流动。然后,一个窗口弹了出来,红色的,上面写着——‘物理引擎渲染错误,尝试重启中……’。沈舟,你明白吗?不是我的VR设备报错,是‘这个世界’在报错!”
我沉默了,后背一阵发凉。
作为“世界监察者”,代号“拾遗人7号”,我的首要任务就是修复这类“渲染错误”,并清除掉“观察到”错误的个体记忆。
可他是叶知秋。
“然后呢?”我听到自己的声音很平静,平静得可怕。
“然后我就‘醒’了,躺在医院里。他们都说我是劳累过度,电压不稳导致了设备短路,让我产生了幻觉。”他死死盯着我,“但那感觉太真实了!沈舟,你是我最好的朋友,我只能跟你说。我们活在一个巨大的谎言里!”
我知道,事情麻烦了。
二、 给猫出殡
叶知秋的“疯”,是从他给他的猫“出殡”那天开始的。
在那之前,他已经偏执了很久。他不再满足于发现那些“渲染降级”或者“场景加载延迟”的小BUG,而是开始啃起了他大学时就挂过科的高等数学和理论物理。他的工位上,除了代码书,还堆起了《从黎曼猜想到量子纠缠》之类的天书。有一次我路过,看见他在草稿纸上疯狂演算,嘴里念念有词:“无限……计算机怎么可能处理真正的无限……除非,它作弊了……”
然后,他的猫出事了。
他和女友小雅共同养的那只布偶猫,失踪了三天。小雅在微信里跟他提了分手,说他现在这个样子,连自己都照顾不好。他没回。
第四天,他打电话给我,声音平静得可怕:“沈舟,你来一下,我家里墙壁里有声音。”
我赶到他那间狭小的合租屋时,他正跪在地板上,用一把水果刀,一点一点地撬着墙皮。墙角,猫抓板还在,猫砂盆也还在,就是没有猫。
“我听到了,它的叫声,就在墙里面。”他头也不抬地说。
我当然知道是怎么回事。我的后台日志显示,三天前,他家附近的一个“物理渲染节点”发生了一次轻微的穿模BUG,一只宠物猫的“模型数据”被错误地写入了建筑物的“几何数据”里。这是个低优先级BUG,系统排期要72小时后才会自动修复。
墙皮被撬开,露出里面的灰色砖块。叶知秋像疯了一样,用手去抠。指甲翻飞,血肉模糊。
终于,他抠开了一块砖。
墙壁里没有猫。只有一片灰色的、像是未加载完成的贴图。贴图中央,有一行刺眼的红色小字:**[Texture not found: cat_model_01.jpg]**。
叶知秋呆住了。他伸出手,颤抖地触摸那行字,手指却直接穿了过去,仿佛那只是一道光。
他抱着头,发出了野兽般的呜咽,然后是嚎啕大哭。
“它甚至都不是建模错误……”他瘫坐在墙角,泪流满面地对我嘶吼,“它连尸体都没有……它只是……资源丢失了……”
那一刻,我知道,世界对他个人的“痛”,已经和“世界是个程序”这个宏大的认知,被死死地钉在了一起。
他不再仅仅是好奇,他要复仇。他把那叠演算了无数遍的草稿纸拍在我面前,上面是一个关于圆周率π的完整攻击模型。
“任何模拟系统都无法承载真正的无限,”他双眼通红,像一头绝望的困兽,“所以π在底层一定是个‘常量’或者‘指针’。我分析了我们公司VR项目的源码,找到了图形渲染通道里一个可以被利用的浮点运算溢出漏洞。通过这个漏洞,我能把一个超大数值的π位数请求,伪装成一次普通的光影计算,直接发送给‘世界’的底层API。我要的不是真相,我要让写出这个破BUG的程序员,亲自尝尝服务器崩溃的滋味!”
三、 回收权限
公测日当天,叶知秋敲下了回车。
世界,“卡”了一下。
他成功了,他找到了那个API接口,一个可以修改世界参数的后门。
“老叶!住手!”我冲了过去。
“晚了!”他狂笑着,即将点下那个足以引发连锁崩溃的按钮。
我别无选择。我将七年来所有关于他的监控日志,所有谎言与守护,打包成一个数据包,野蛮地灌进了他的大脑。
他僵住了,眼神从狂喜变为震惊,再到被背叛的彻骨冰冷。
就在这时,一个冷冰冰的、不属于任何已知语言的声音,响彻了整个空间。它的语调平直,但每个音节之间,都像是隔着零点几秒的网络延迟,带着一种令人毛骨悚然的卡顿感:
“检……测到……叙事层……自指。准……备……回……收……角色……‘沈舟’的……叙述……权限。”
我的意识瞬间被抽离。
你看见自己的身体僵在原地,像一个断线的木偶。你看见叶知秋那张因震惊和痛苦而扭曲的脸。你看见办公室的门窗正在像素化、分解。
你不再是“我”,你变成了“你”。一个被剥夺了主观视角的、惶恐的观察者。
门外,几个镜面金属人形的“清理者”生成在那里。它们的动作并不流畅,每走一步,都会像视频掉帧一样,发生轻微的、不协调的瞬移。
“一个骗了我七年的监视者,最后为了我,把自己也变成了‘待删除文件’。”你听到叶知秋惨笑着说。他猛地扑到电脑前,“他们要格式化硬盘,我就在硬盘被格式化之前,把我们的文件复制到U盘里去!快,神经连接器!”
你机械地拿起头盔,和他一起戴上。在“清理者”抬起手臂的瞬间,叶知秋敲下了回车。
四、 递归地狱
你看见自己的手变成8-bit方块。
你和叶知秋站在一片像素风格的草地上。天空是纯净的蓝色,飘着几朵像是用棉花粘上去的云。这里是“沙盒隔离区”。
“我们……成功了?”叶知-秋的声音同样变得电子而失真。
远处,新手村的村长头顶上,一个黄色的感叹号闪闪发光。
你们走过去。那个由简单几何图形构成的村长,用一种合成的、毫无感情的声音说:“欢迎来到‘遗忘者’营地,编号7号,编号89745号。你们有24小时的时间,来证明自己没有威胁。否则,将被‘递归删除’。”
你和叶知秋对视一眼,看到了彼此眼中的恐惧。这里不是避难所,这里是观察室,是待执行的死囚牢。
“什么叫‘递归删除’?”叶知秋颤声问。
村长那张由几个像素点构成的“脸”转向他,机械地回答:“就是把你现在的8-bit数据,压缩成4-bit,再到2-bit,1-bit,直到变成一个‘0’。就像他们一样。”
它指向村子里那些来回走动的、更简陋的4-bit像素小人。
“他们……都是曾经的‘监察者’和‘越狱者’?”你惊恐地问。
“是的,”村长说,“每一次违规,都会被降维一次。直到彻底失去信息承载能力。”
在村长身后的NPC列表里,你看到了一个黯淡的名字:小雅(状态:失踪,数据完整度:7%)。你的数据核心猛地一缩。她不是被简单地抹除了,而是像那只猫一样,也“资源丢失”了,被系统降采样成了这个隔离区里的一个背景数据。
你们彻底绝望了。所谓的逃亡,只是跳进了更深一层的地狱。
你们升起一堆像素篝火,静静等待末日的来临。
“沈舟,”叶知秋忽然说,“在那个世界,我最后一次吃真实的鸡,是大学毕业那天的散伙饭。你抢了两个鸡腿。”
你的数据核心里,一段温暖的记忆被唤醒。
“我怕你不够吃。”你说。
他笑了,把一串方块状的“烤鸡”递给你:“这次,鸡腿都归你。下辈子……如果还有下辈子,我们写个没有BUG的世界。”
你接过烤鸡,看着他,想说点什么,却说不出口。你想告诉他,小雅也在这里,以一种残破数据的形式存在着。你想告诉他,如果还有机会,你想试试看,能不能把那些被世界粗暴“降采样”的人,重新“编译”回来。
但你已经没有机会了。
24小时到了。
那个卡顿的声音在你们头顶响起:“观……察期……结束。检……测到……威……胁……依然……存在。执……行……‘递……归……删除’。”
第三人称 overhead 视角,像游戏结束时的死亡回放——
两个8-bit人形站在篝火旁,头顶悬着未渲染完毕的月亮,像一张忘记贴图的贴图。
光芒一闪。
他们变成了两个更模糊的4-bit小人。
又一闪。
变成了两个几乎无法分辨的2-bit色块。
再一闪。
一个单色的像素点。
最后。
黑屏。
gcc: error: missing source file: "shenzhou_main.cc"


