快递站的风扇在头顶吱呀转着,吹不散午后那股闷热。沈夜把最后一摞包裹码上货架,工装后背已经被汗洇出一片深色。他看了眼墙上的挂钟,下午两点四十七分,还有十三分钟换班。
“沈哥,门口有个件,写着你的名字。”
苏晴从柜台后面探出半个脑袋,手里举着一个牛皮纸信封大小的包裹,晃了晃。她齐耳的短发被汗粘在额角,眼睛弯着,像在邀功。
沈夜走过去接过来,掂了掂,很轻,几乎感觉不到内容物。他翻到正面,快递单上收件人一栏确实印着“沈夜”两个字,宋体,黑色,规规矩矩。
寄件人一栏是空的。
不是模糊或者磨损,就是空白。像印刷时漏了一道工序,那块区域白得干干净净。
“没有寄件人?”苏晴凑过来看了一眼,“可能是商家漏打了,你拆开看看是不是发错了。”
沈夜没急着拆。他翻过快递单背面,想找有没有手写的备注或者电话。背面也是空的,只有右下角有一行极小的印刷体数字,像是批次号或者内部编码,但字体比其他地方都小,不仔细看根本注意不到。
“428571。”
他默念了一遍,没看出什么规律,随手把包裹夹在腋下,掏出手机准备扫单号。屏幕亮起来的瞬间,一个黑色的图标正在桌面上生成。
像水渍在宣纸上洇开,从无到有,几秒之内,一个纯黑的方块就占据了手机屏幕中央的位置。图标下方没有名字,只有一个白色的对勾,像签收时画下的那个勾。
沈夜盯着那个图标,手指悬在屏幕上方,没有点下去。
“你手机怎么了?”苏晴看他脸色不对,也掏出自己的手机,“我这儿没推送啊。”
沈夜没回答。他把包裹放到柜台上,拇指点了一下那个黑色的图标。屏幕一黑,然后像有什么东西从屏幕深处浮上来。
一行白色的字,在纯黑的背景上逐字显现。
【欢迎使用“死亡工单”。】
【您已被绑定为工单派送员。绑定不可解除。】
【请阅读以下规则。任何违反规则的行为,将导致即时终止协议。】
沈夜的手指僵在屏幕上。那行字一动不动,安静地等着他往下看。
他滚动屏幕,第二屏出现。
【规则一:您每日将收到一份工单。工单内容为派送一件包裹至指定收件人。】
【规则二:工单必须在倒计时结束前完成派送。倒计时开始后不可暂停。】
【规则三:派送过程中,您不得拆开包裹,不得询问收件人身份,不得告知收件人包裹来源。】
【规则四:收件人签收后,工单即视为完成。您将获得下一份工单。】
【规则五:若收件人拒绝签收,或工单超时未完成,您将被即时终止。】
“终止”两个字用了更大的字号,比其他规则文本都粗。像是有人在排版时特意加粗了这两个字。
沈夜把手机屏幕转向苏晴,她看了一眼,脸上的笑容慢慢消失了。
“这是什么恶搞软件?”她伸手想拿手机,“我帮你卸了。”
沈夜收回手,没让她碰。他盯着屏幕上的规则文本,脑子里已经自动开始拆解。做了五年桌游设计师,什么规则他没读过。
“即时终止”,没有定义具体是什么。可能是指游戏结束,也可能是指别的。规则三和规则四之间存在一个模糊地带:“不得告知收件人包裹来源”,但如果收件人主动问起,他应该怎么回应?规则没有说“不得回答”,只说了“不得告知”。
这算是一个可能的漏洞,但沈夜没有立刻往深处想。他先试了最直接的办法。
长按图标,点击卸载。
弹窗跳出来:【该应用受系统保护,无法卸载。】
他关机,再开机。屏幕亮起后,那个黑色的图标依然躺在桌面中央,纹丝不动,像长在那里。
苏晴看着他操作,声音发紧:“沈哥……这到底是什么?”
“不知道。”沈夜把手机放进口袋,拿起那个包裹,“我先走了。”
他走出快递站,站在街边的梧桐树荫下,又掏出手机。屏幕已经自动切回了那个纯黑的界面,下方多了一行新的文字:
【今日工单已生成。倒计时:23:59:47。】
倒计时的数字在跳动,一秒一秒地往下走。
沈夜点开工单详情,屏幕上弹出一段文字:
【工单编号:0001】
【派送物品:自杀包裹】
【收件人:陈默,男,32岁,住址:青禾路17号3单元502室】
【备注:包裹内为自杀工具。收件人已决定结束生命,您的派送将帮助其完成这一选择。】
【请勿拆开包裹。请勿告知收件人包裹来源。请勿阻止收件人使用包裹内容物。】
【倒计时结束前未完成派送,或收件人未签收,您将被即时终止。】
沈夜盯着“自杀包裹”四个字,喉咙里像是被什么东西堵住了。
他低头看了眼手里的牛皮纸信封,轻得几乎没有重量。一个决定去死的人,等来的却是这样一件东西。
他重新打开规则文本,逐字逐句地看。
“派送过程中,您不得拆开包裹”——所以如果包裹还没开始派送,拆开就不算违反规则?但规则三和规则五之间存在一个逻辑闭环:如果他不派送,倒计时结束,他被“即时终止”;如果他派送了,陈默签收了,他就亲手送出了一件自杀工具。
规则没有禁止他“提前联系收件人”。规则只禁止了“派送过程中”的某些行为。如果他在派送之前,先给陈默打个电话,提醒他不要签收呢?
但规则五说,“若收件人拒绝签收,或工单超时未完成,您将被即时终止”。
如果陈默拒绝签收,死的是沈夜。
这个游戏的设计者把所有的路都堵死了:派送是死,不派送是死,收件人拒收还是死。唯一活下来的路径,是让陈默签收,然后用那个包裹里的东西结束自己的生命。
沈夜站在梧桐树下,阳光透过树叶的缝隙落在他的工装上,碎成一片一片的光斑。他低头看着手里那个轻飘飘的牛皮纸信封,忽然觉得它重得让人喘不过气。
手机又震了一下。屏幕上方弹出一条通知:
【提示:工单派送期间,请保持手机开机。本应用将实时监控您的行动轨迹。】
【提示:您不得寻求任何第三方协助。不得报警。不得将本应用的存在告知任何人。】
【提示:若检测到违规行为,将触发即时终止程序。】
沈夜把手机翻过来,屏幕朝下扣在掌心。他站在树下,沉默了很久。
风从街口吹过来,卷起地上的落叶,打着旋儿地飞过去。远处有快递三轮车按着喇叭驶过,鸣笛声拖得很长,像某种不祥的预兆。
他忽然想起快递单背面那行数字。
428571。
他重新翻开那个包裹,把快递单对着光仔细看。那行数字印在右下角,印刷体,和单号、批次号都不在同一栏,像是被人手动加进去的。它会是什么?坐标?编码?还是某种提示?
沈夜不知道。但他知道的是,这个游戏的设计者留下了一个不是规则的痕迹。一个没有写进规则文本里的东西。
他把数字记在手机备忘录里,然后重新看了眼倒计时。
23:47:12。
“陈默。”他念了一遍这个名字,把包裹塞进工装口袋里,朝青禾路的方向走去。
走了两步,他停下来,回头看了一眼快递站的方向。苏晴还站在柜台后面,隔着玻璃窗看着他,脸上的表情像是想说什么,但最终只是抿了抿嘴。
沈夜转过身,继续往前走。
手机在口袋里震了一下。他没有掏出来看,但屏幕亮起的余光从布料缝隙里透出来,一闪一闪的,像某种催命的信号。
那是倒计时在走。
一秒,一秒,一秒。
青禾路不算远,步行大约二十分钟。沈夜沿着人行道走,包裹在工装口袋里硌着大腿,每走一步都能感觉到那个牛皮纸信封的存在。他尽量不去想里面的东西,但“自杀工具”四个字像钉子一样扎在脑子里,拔不出来。
走到十字路口,红灯亮了。他停下来,掏出手机又看了一眼。
倒计时还在走,23:41:05。屏幕右上角的电量显示46%。他忽然想到一个问题:如果手机没电了怎么办?APP还能运作吗?
他试着锁屏,又解锁。APP始终停留在工单详情页,右上角没有关闭按钮,也没有返回箭头。他长按电源键,屏幕上弹出“滑动以关机”的选项,他滑了一下,屏幕黑了。
三秒后,屏幕重新亮起,APP自动弹出,倒计时继续走。
沈夜盯着那行数字,心里涌起一股寒意。这台手机就像被什么东西焊死在了这个界面上,更准确地说,是被“绑定”了。他试过关机,试过卸载,试过强制清除数据,全都失败了。APP像是长在了手机里,和系统融为一体,任何常规手段都无法剥离。
绿灯亮了。沈夜把手机塞回口袋,继续往前走。
青禾路17号是一栋老旧的居民楼,外墙的涂料剥落了大半,露出灰色的水泥底子。单元门虚掩着,楼道里光线昏暗,声控灯感应到脚步声,亮了一盏,又灭了一盏。
沈夜站在3单元门口,抬头看了看五楼的窗户。窗帘拉着,看不出里面有没有人。
他深吸一口气,抬脚上楼。
502室的门是老式防盗门,门漆已经褪色,露出斑驳的铁皮。沈夜站在门口,伸手去按门铃,手指悬在按钮上方,迟迟没有按下去。
他想到了规则文本里的那些字——“请勿告知收件人包裹来源。请勿阻止收件人使用包裹内容物。”
如果他按了门铃,陈默打开门,他把包裹递过去,陈默签收……然后呢?他走下楼,那个叫陈默的人会在某个时刻拆开包裹,用里面的东西结束自己的生命。而他,沈夜,一个破产的桌游设计师,一个半路出家的快递员,就成了这件事里不可或缺的一环。
他收回手,靠在走廊的墙上,闭了闭眼。
不对。他想。这不对。
他重新打开手机,把工单详情页的规则文本又看了一遍。逐字逐句地看,像以前设计桌游时核对规则书一样,每个标点都不放过。
“派送过程中,您不得拆开包裹。”——派送过程中。这三个字是关键。如果包裹还没开始派送,拆开它,算不算违反规则?
“请勿拆开包裹”——这五个字没有限定时间状语。但规则三的原文是“派送过程中,您不得拆开包裹”,规则五的原文是“若收件人拒绝签收,或工单超时未完成,您将被即时终止”。
他反复咀嚼这两条规则之间的关系。如果“派送过程中”是规则三的限定条件,那么在派送开始之前,拆开包裹并不违反规则三。但规则五没有“派送过程中”的限定,它说的是“收件人拒绝签收”——也就是说,只要工单生成,无论处于哪个阶段,收件人拒收都会导致他死亡。
这看起来是一个死局。但沈夜从设计桌游的经验里知道,任何一个规则体系,只要用文字写成,就一定有缝隙。文字是有歧义的,规则是有边界的,而边界之外的东西,规则管不着。
比如——规则说“请勿告知收件人包裹来源”,但没说“请勿告知收件人包裹内容”。规则说“请勿阻止收件人使用包裹内容物”,但没说“请勿在收件人使用之前,提前告知其包裹内物品的性质”。
如果他在派送之前,先拆开包裹,确认里面的东西是什么,然后在派送时告诉陈默:“这个包裹里是自杀工具,你确定要签收吗?”——这算不算“阻止收件人使用包裹内容物”?
不算。因为“阻止”意味着物理意义上的阻拦,而告知信息不是阻止。
但问题在于,如果陈默因此拒绝签收,他还是死。
沈夜把这个思路推翻,重新推演。他需要一个让陈默签收、但陈默不会死的方案。或者说,让陈默签收了,但包裹里的东西无法发挥作用的方案。
比如——拆开包裹,把里面的自杀工具替换成无害的东西,再重新封好,派送给陈默。这样陈默签收了,工单完成了,但他不会死。
这个方案可行吗?沈夜在脑子里快速过了一遍规则文本。“派送过程中,您不得拆开包裹”——如果他在派送之前拆开,就不算违反。替换内容物后重新封好,派送时包裹是完整的,他也没有在派送过程中拆开它。
但规则五的“收件人未签收”条款依然存在。只要陈默签收了,工单就算完成。至于包裹里装的是什么,规则没有规定必须和工单描述一致——规则只规定了“派送物品:自杀包裹”,但没有说派送物品必须与包裹实际内容一致。
沈夜的心跳微微加快。他找到了一个可能的漏洞,一个用文字缝隙搭出来的生存路径。
但他没有立刻行动。因为他知道,任何规则设计者都不会留下这么明显的漏洞。如果这个游戏的设计者真的像他想象的那样聪明,那么“派送之前拆开包裹”这个动作,一定还藏着别的陷阱。
他重新看了一遍规则文本,目光停在最后一行:“倒计时结束前未完成派送,或收件人未签收,您将被即时终止。”
“即时终止”——这四个字没有定义具体方式。是心脏骤停?是意外事故?还是别的什么?
沈夜想起之前尝试卸载APP时,屏幕上弹出的那行字:“卸载本应用将触发即时终止程序。”他当时手指悬在“卸载”按钮上方,犹豫了两秒,最终还是没按下去。他不知道“即时终止”是什么概念,但一个能强制安装APP、能让手机无法关机的存在,想要“终止”一个普通快递员的生命,大概不需要太复杂的手段。
他靠在墙上,沉默了很久。声控灯灭了他没注意,楼道里重新陷入黑暗,只有手机屏幕的微光映在他脸上,倒计时的数字在跳动。
23:29:38。
他做了个决定。
先上楼,按门铃,看陈默是什么人。在派送之前,他还有时间。
沈夜直起身,走到502室门前,按下了门铃。
门铃响了很久,久到他以为里面没人。就在他准备再按一次的时候,门内传来一阵拖沓的脚步声,然后是锁扣转动的声响。
门开了一条缝,露出一张男人的脸。三十出头,头发乱糟糟的,脸色蜡黄,眼袋很重,像是很久没有睡好。他穿着件起球的灰色T恤,领口松垮垮地挂在锁骨上,整个人透着一股疲惫到极点的气息。
“谁啊?”男人声音沙哑,带着明显的不耐烦。
“快递。”沈夜说,从口袋里掏出那个牛皮纸信封,“陈默是吧?签个字。”
陈默低头看了一眼包裹,又抬头看沈夜,眼神里闪过一丝说不清道不明的光。他没有立刻接,而是靠在门框上,盯着沈夜看了好几秒。
“什么包裹?”他问。
“不知道,没拆过。”沈夜说,“单子上没写发件人。”
陈默接过包裹,翻过来看了看快递单。他的目光在“收件人:陈默”那一栏停留了片刻,然后落到右下角。
沈夜注意到,陈默的目光在快递单背面停留了比正面更长的时间。
他看到了那行数字。
陈默没有说话,转身从鞋柜上拿了一支笔,在快递单的签收栏里划了个名字,然后把单子撕下来递给沈夜。
“签好了。”他说完,退后一步,把门关上了。
沈夜站在门口,手里捏着那张签收单,看着关上的门板,愣了几秒。
就这么简单?
他低头看了眼签收单,陈默的字迹潦草,笔画歪歪扭扭的,像是随手画的。签收栏上方印着快递单号,下方是时间戳——23:27:15。
手机在口袋里震了一下。他掏出来,看到屏幕上弹出一行新的文字:
【工单0001已完成。派送确认:陈默,23:27:15。】
【奖励结算中……】
【提示:您已获得1枚规则碎片。集齐10枚可解锁规则修改权限。】
沈夜盯着“规则修改权限”几个字,瞳孔微微收缩。
他还没来得及细想,手机又震了一下——这次不是文字弹窗,而是一段音频自动播放了。
那是一个男人的声音,低沉的,带着一种近乎愉悦的从容感,像是隔着很远的距离在说话。
“恭喜完成第一单,沈先生。我知道你在想什么——那个包裹里的东西,已经被你替换过了,对吧?”
沈夜握着手机的手指微微收紧。
“你确实很聪明,拆开了包裹,把里面的自杀工具换成了无害的替代品。你甚至没有违反任何一条规则——至少在字面上没有。”
那个声音顿了顿,像是在品味什么。
“但你有没有想过一个问题:为什么我要在快递单背面印那行数字?”
沈夜的呼吸停了一瞬。
“428571——这个数字,你记在备忘录里了。你猜它是坐标,是编码,还是提示?”
声音里带上了一丝笑意。
“都不是。它是下一单的倒计时起点。”
手机屏幕骤然变红,一行新的文字弹了出来,同时那个声音还在继续——
“第二单工单已生成。请前往下一个地点签收。”
“欢迎来到死亡快递,沈先生。游戏,才刚刚开始。”
沈夜低头看向屏幕,倒计时重新开始跳动。而在他身后,502室的门内,传来一声极其轻微的、像是在强忍着什么的声音。
他没有回头,但握着手机的手,指节发白。
作者寄语: