1.王组长的死,是我亲手写下的。一行代码,一个生命。
警方鉴定报告写的是“因长期过劳引发的突发性心肌梗死”,也就是猝死。
在“量子跃动”这家卷到飞起的互联网大厂,这不算新闻。上个月,
游戏部门一个哥们儿就在厕所里没出来。但他们不知道,王组长的死亡时间,
和我提交那行代码到服务器的时间,分秒不差。我叫林峰,
量子跃动“普罗米修斯计划”核心项目组的一名高级工程师。“普罗米修斯”,
多讽刺的名字。它偷来的是火,而我们这个项目,偷的是用户的未来。对外,
我们宣称它是一个革命性的用户行为预测引擎,能提前三个月预测用户的流失倾向,
精准度高达99.7%。但只有我们核心组的几个人知道,这个引擎的真正能力,
远不止于此。这一切的源头,是一个被加密封装,名为“塔纳托斯动态链接库”的文件。
塔纳托斯,希腊神话里的死神。我第一次注意到它,是在半年前。引擎在一次压力测试中,
输出了一份奇怪的日志。除了预测用户流失,
它还给一小部分用户打上了一个“状态:永久离线”的标签。
我当时以为是数据污染导致的故障,随手记了下来,准备有空再查。直到一个月前,
我偶然在内网看到一则社会新闻推送,一个熟悉的名字跳了出来。
那是一个我们产品的深度用户,也是“永久离线”名单上的一员。
新闻标题是:《男子深夜钓鱼坠河,意外身亡》。巧合吧。我安慰自己。世界这么大,
每天都有人意外死亡。但随后的几周,我像着了魔一样,开始秘密核对那份名单。第二个,
死于车祸。第三个,煤气中毒。第四个,登山时遭遇雷击。
……名单上每一个被打上“永久离线”标签的用户,都在预测时间点前后,
以各种“意外”的方式,从这个世界上消失了。我的冷汗瞬间浸透了后背。这不是预测,
这是处决。我不敢告诉任何人。在这个信息安全比命还重要的地方,
窥探非自己权限范围的数据,足以让我立刻被开除,并背上巨额的欠款。
我只能把这个秘密烂在肚子里,祈祷这一切都只是我疯了。直到昨天,
我和王组长爆发了最激烈的一次争吵。为了一个紧急的线上故障,
我们整个组已经连续熬了七十二个小时。王组长像一头暴躁的狮子,在办公室里来回踱步,
嘴里喷着咖啡和尼古丁混合的恶臭气息。“林峰!性能优化还没好吗?CEO都在等数据!
你到底行不行?”我的眼睛布满血丝,大脑像一团浆糊。在又一次编译失败后,
我终于忍不住回吼:“这套底层架构是你拍板定的!到处都是坑,现在让我一个人填,
神仙也做不到!”王组长脸涨成了猪肝色,他指着我的鼻子,
一字一顿地说:“今天晚上十二点前,问题解决不了,你就给我滚蛋!”回到工位,
我盯着屏幕上密密麻麻的代码,一股无名火直冲天灵盖。鬼使神差地,
我打开了“塔纳托斯”的配置文件。我知道,这个模块的运行逻辑里,有一个权重调节参数,
直接关联到每个内部员工账号的“系统稳定性”评分。王组长的身份编号,赫然在列。
我看着他的身份编号,他那张扭曲的脸在我脑海中出现。一个疯狂的念头闪过。我颤抖着手,
在我的本地测试环境里,新建了一个分支,然后,我写下一行注释:// 让他好好休息吧。
紧接着,我将王组长身份编号关联的那个稳定性参数,从99.999%,
调到了一个低得离谱的数值,然后按下了“提交”和“推送”。我当然不敢直接合并到主干。
我只是想在测试环境里发泄一下。但就在我按下回车的一瞬间,
我电脑右下角的内部通讯软件“Q聊”弹出了一个红色警告。系统通知:检测到高危操作,
已触发‘熔断保护’机制,您的代码修改已被自动回滚,并同步至主干分支进行修复。
我当时就懵了。什么叫“自动回滚,并同步至主干”?这完全不符合任何正常的开发流程!
我们的代码合并需要至少两名同事代码审查,怎么可能自动同步?
我立刻冲到版本控制台查看“代码日志”。一条崭新的记录刺痛了我的眼睛。
:自动回滚并合并自分支 'feature/林峰-test01' 至 '***in'。
我的那行修改,被一个我从未见过的“系统守护进程”账号,以修复故障的名义,
直接合并进了线上环境!我疯了一样地想要回滚,但我的所有权限,
在那一刻全部变成了“只读”。我冲向王组长的办公室,想告诉他这一切。隔着玻璃,
我看到他靠在椅子上,头歪向一侧,像是睡着了。我敲了敲门,没人回应。推开门,
我闻到了一股失禁的味道。他桌上的电脑屏幕还亮着,右下角的时间,
定格在二十三点五十九分。2.警察很快就来了。例行公事的询问,收集证据,
最后定性为“猝死”。HR和行政部门的人则熟练地处理后事,
安抚我们这些“受惊”的员工。他们甚至请来了心理医生,
给我们做“创伤后应激障碍”疏导。我坐在工位上,像一具被抽走了灵魂的木偶。
心理医生温柔地问我:“林峰,你最后一次见王组长是什么时候?你们聊了什么?
”我张了张嘴,却发不出任何声音。我能说什么?说我用代码杀了他?
说我们公司有一个死神程序?他们会觉得我疯了。然后把我送进精神病院,而不是警察局。
没人怀疑我。在所有人眼里,我和王组长只是发生了一次常见的职场口角。而我,
是一个悲伤、自责的下属。只有我自己知道,我是一个凶手。
一个连自己都无法理解其杀人手法的凶手。接下来的几天,我活在巨大的恐惧和自责中。
我开始疯狂地掉头发,整夜整夜地做噩梦。梦里,王组长那张死灰色的脸,
和“塔纳托斯”的图标在我眼前反复交替。我必须搞清楚,这到底是怎么回事。
我开始偷偷利用我手里仅剩的权限,挖掘关于“塔纳托斯”的一切。就在我查到第三天,
危机降临了。那天我下班过马路,一辆红色的网约车突然像疯了一样,无视前方的红灯,
直直朝我撞来。我凭着本能往后一跃,狼狈地摔在地上,车子贴着我的鼻尖呼啸而过。
司机探出头道歉,说汽车的辅助驾驶系统突然失控,方向盘和刹车都不受控制。我坐在地上,
看着那辆车的车牌。回到家,我用虚拟机三层代理登入后台,查询那辆车的数据日志。
在它失控前的一秒,它的车载系统有一次来自内部的加密访问记录。
访问进程名——“塔纳托斯动态链接库”。一股寒意从尾椎骨直冲天灵盖。
“系统守护进程”盯上我了。它不只是在清除外部威胁,也在清洗内部的“不稳定因素”。
我不能再一个人查下去了。我需要一个帮手。一个绝对可靠,又足够聪明的人。
我想到了苏晓。苏晓是数据分析组的组长,一个逻辑思维能力强到变态的女孩。更重要的是,
她是一个有正义感的人。3.我约苏晓在一个偏僻的咖啡馆见面。我把我发现的一切,
包括差点被车撞的事,全都告诉了她,唯独隐瞒了我“误杀”王组长的一环。苏晓听完,
震惊的神情只在她脸上停留了几秒。她沉默地端起咖啡,饮了一口,
随后用锐利的眼神盯着我,问道:“第一,你说的死亡名单上的人,都有什么共同点?第二,
程序的触发机制是什么?第三,林峰,你为什么会知道得这么清楚?你肯定还瞒了什么。
”最后一个问题像一把尖刀,直刺我的心脏。在她的目光逼视下,我最终还是全盘托出,
包括我如何“误杀”了王组长。我说完,苏晓的脸色瞬间变得煞白。“林峰,
你知不知道这意味着什么,”她用几乎听不见的声音说,
“他们有动机、也有能力让我们随时消失,不留任何痕迹!”她的反应比我想象的还要激烈。
她似乎下定了决心,对我说:“我帮你!三年前,我最好的师兄,
也是一名揭露黑产的调查记者,死于一场‘意外’的车祸……现在看来,
恐怕和他当时正在调查量子跃动有关。我们有共同的敌人。”接下来的几天,
我们化身地下工作者。苏晓以“优化用户画像模型”为由,调取了大量脱敏后的日志。
我们在我的出租屋里,对着数据寻找魔鬼的踪迹。“共同点找到了。”一周后,
苏晓把一份报告砸在我面前,“所有死者,都是在现实中对量子跃动有‘威胁’的人。
”她列出清单:钓鱼坠河的,在牵头集体诉讼。死于车祸的,就是她的师兄。煤气中毒的,
是破解了我们核心算法的对手公司程序员。被雷劈的,是一直在做空我们股票的金融分析师。
“这是‘清道夫’,在清除公司的‘障碍’。”我的心越来越沉。“最可怕的是触发机制,
”苏晓的脸色很凝重,“我在师兄的事故卷宗里,
找到了一个被忽略的细节——法医提了一句‘心血管内发现无法解析的微型金属残留’。
我交叉对比了其他案例,在至少两个案例的公开报告里,也发现了类似字眼!
”一个晴天霹雳般的念头击中了我。“纳米机器人。”“是的,”苏晓的瞳孔猛地一缩,
“通过我们无法察觉的方式植入,通过‘塔纳托斯’激活,
在人体内制造任何想要的‘意外’。凶手,就在死者身体里!”就在这个时候,
戏剧性的一幕发生了。苏晓桌上的咖啡机突然发出一阵刺鼻的焦糊味,伴随着一阵电火花,
“砰”一声短路了。几乎是同一时间,我的手机响了。是个陌生号码。我按下免提,
一个电子合成音传了出来:“林峰先生,好奇心是工程师的美德。但有时候,它会害死猫。
也请转告你那位漂亮的数据分析师朋友,公司茶水间的咖啡机,最近线路好像不太稳定,
小心漏电。”电话挂断了。我看向苏晓,她也正惊恐地看着我。4.“我们得停下来,苏晓。
他们真的会杀了我们的!”我的声音在发抖。“停下来?”苏晓却比我冷静,
“我们已经暴露了!在他们眼里,我们就是名单上等待清除的下一个目标!坐以待毙,
还是主动出击,你选哪个?”接下来的几天,我们假装被吓破了胆,正常上下班,
修复着无关紧要的BUG,对之前的事绝口不提。