但现在她知道,独立不是不需要任何人。独立是你可以选择需要谁。
因为你有选择的能力,所以你不需要依附于任何人。因为你有选择的能力,所以你可以选择留下一个人,而不是被迫留下。因为你有选择的能力,所以你可以对一个人说“我要你”,而这句话的意思是“我选择了你”,不是“我需要你”。
这五年她所有的成就——论文、专利、实验室、团队——不是为了证明她值得被爱。它们证明了另一件事:她有能力选择。她有能力建立一个不需要任何人的生活,然后在这个基础上,选择让一个人进来。
不是因为她缺了什么。是因为她想要什么。
温以宁拿出手机,打开和程越的对话框。上一次的讯息还停在昨天晚上,她发的“外套我拿了。明天还你。”他没有回。不是不想回,是不知道怎么回。她了解他——他在不确定的时候会选择沉默,因为他怕说错话,怕打扰她,怕自己的存在本身就是一种压力。
她打了一行字:“你还在酒店吗?”
发送。
十秒后收到回复:“在。”
又过了五秒:“需要我过去吗?”
她没有回这条。她拿起桌上的外套——昨天挂在门把手上那件深蓝色西装,她拿进来之后一直挂在椅背上,没有穿,也没有收。她把外套叠好,放在包里,走出实验室。
电梯下到一楼。大厅里只有保全在值班,看到她点了点头。她推开玻璃门,外面的风比昨天小,空气里有春天的味道——泥土的、草叶的、正在发芽的植物的气味。她走到停车场,打开车门,坐进去。
发动引擎的时候她犹豫了一下。酒店在四公里外,开车十分钟。她不知道自己在犹豫什么。她已经决定了要去找他,已经决定了要说什么,已经决定了边界条件是什么。所有的输入参数都设定好了,只需要按下运行。
但她坐在驾驶座上,手放在方向盘上,没有动。
因为她突然意识到一件事——这是她第一次主动走向他。
五年前是他追的她,是他牵的手,是他说的我喜欢你。重逢之后是他回来的,是他提出合作的,是他留在实验室的,是他说的“我想继续测量”。她一直是那个回应的人,那个设定条件的人,那个站在原地等他走过来的人。
现在她要走过去了。
不是因为他没有走过来,是因为她不想再站著等了。她等了五年,等一个解释,等一个道歉,等一个决定。现在解释有了,道歉有了,决定也有了。她不需要再等了。她可以自己走过去。
温以宁挂挡,踩油门,车子驶出停车场。
酒店在研究院东南方向,四公里,经过三个红绿灯,两个路口左转,一个路口右转。她开得很稳,限速多少就开多少,变道打灯,不抢黄灯。她开车一向这样——冷静、守规则、不给任何人添麻烦。
但她握方向盘的手指比平时紧。
第三个红绿灯的时候她停下来,看了一眼副驾驶座上叠好的外套。深蓝色,羊毛混纺,领口和袖口已经磨软了。这件外套她穿了三年,从她成为实验室负责人的第一天开始穿。她穿它去谈判、去开会、去见投资人、去申请经费。它是她的盔甲,她的制服,她的“请不要靠近我”的标志。
现在她要把这件外套还给他。不是因为她不需要盔甲了,是因为她不需要用盔甲来保护自己不被靠近了。
绿灯亮了。她踩下油门。
酒店的大厅很亮,水晶吊灯从三层楼的高度垂下来,把大理石地面照得像一面镜子。她的高跟鞋踩在上面,每一步都有回声。前台的工作人员问她找谁,她说了房间号,工作人员打了电话确认,然后告诉她电梯在左边。
电梯里的镜子照出她的样子。头发有点乱,是风吹的。嘴唇有点干,是忘记涂护唇膏。眼睛下面有黑眼圈,是这几天没睡好。她看起来不像一个来谈判的人,也不像一个来约会的人。她看起来像一个走了很远的路、终于走到目的地的人。
电梯到了。走廊很长,地毯很厚,脚步声被吸收了。她找到房间号,站在门口,深呼吸。一次。两次。三次。
敲门。
门几乎是立刻就开了。程越站在门口,穿著白色的T恤和灰色的运动裤,头发是湿的——他刚才在洗澡。他的眼睛在她脸上停了一下,然后移到她手里的外套上。
“你——”
“我来还你外套。”她把外套递过去。
他接过来,没有说话。
“顺便说一件事。”她说。
“什么事?”
“你那个模型的前提条件。”
程越的手指在外套上收紧了。
“你说条件不成立。”他说,“我改了一版,把“她会原谅你”的权重调低了——”
“不是权重的问题。”温以宁打断他,“是变量定义的问题。你的模型把“她会原谅你”设为因变量,把其他所有行为设为自变量。但逻辑反了。”
程越看著她,没有说话。
“不是因为你的行为导致她原谅你。是她选择原谅你之后,你的行为才有意义。”她的声音很平静,像在陈述一个物理定律。“原谅不是计算结果,是初始条件。”
走廊里很安静。远处有电梯到达的提示音,有人在走廊另一头刷卡进房间,门关上的声音闷闷的。
“所以前提条件是——”程越开口,声音有点哑。
“前提条件是,你要承认一件事。”温以宁看著他的眼睛,“当年你做错了。不是因为结果不好,不是因为你妈的病最后没有治好,不是因为你在机场坐了六个小时很可怜。是因为你替我做决定这件事本身,就是错的。”
程越沉默了很长时间。
走廊的灯在他头顶,光线穿过他的湿头发,在额头上投下一片阴影。她看不清他的表情,但她看到他的喉结动了一下——他在吞咽,在压抑什么。
“我承认。”他说。
这三个字说得很轻,但很确定。没有解释,没有辩解,没有“但是”。就像他写的代码——承认错误,不为错误写注释。
温以宁等著后面的话。没有。他就说了这三个字。
“好。”她说。
然后她转身走向电梯。
走了三步,听到身后的声音。
“温以宁。”
她停下,没有回头。
“我也有一件事要说。”
她等著。
“你这五年,不是因为我才变强的。”他的声音从走廊那头传来,很低,但每一个字都很清楚。“你是因为自己。你的论文、你的专利、你的实验室——都是你自己做出来的。我不是你的原因,也不是你的动力,更不是你证明自己的工具。你是因为自己才变成现在这样。”
温以宁站在走廊里,没有动。
“我以前觉得,我离开是为了保护你。但现在我知道,你根本不需要我的保护。你需要的是一个不会替你做决定的人。”他顿了一下,“你找到了吗?”
她转过身。
程越站在房间门口,手里攥著那件深蓝色外套。走廊的灯光打在他身上,他的T恤领口有点歪,头发还在滴水。他看起来不像一个首席技术顾问,不像一个算法鬼才,不像一个在谈判桌上冷静到冷酷的人。他像一个二十三岁的男孩,站在机场的登机口,不知道该往前走还是往后退。
温以宁走回去。
一步一步,高跟鞋踩在地毯上没有声音,但她知道他在听。她走到他面前,停下来。两个人之间的距离不到一步,近到她能看到他睫毛上还挂著水珠。
“找到了。”她说。
程越的眼睛红了。他没有哭,但红了。他把外套换到左手,右手伸出来,小心翼翼地碰了碰她的手指。和五年前一样轻,和昨天在实验室里一样轻。
“那我可以——”
“可以。”
她握住他的手。不是被动地让他握,是自己主动地、确定了力度和角度之后、像在键盘上按下一个确定的键那样——握住了他的手。
他的手比她的大很多,指节分明,指甲剪得很短。指腹有薄薄的茧,是长期敲键盘磨出来的。他的手心是热的,比她的热很多。她以前觉得这是因为他体温高,现在她觉得这是因为他一直站在门口等她。
“程越。”她说。
“嗯。”
“你刚才说的那件事。”
“哪件?”
“你说我这五年不是因为你才变强的。”她抬头看他,“你说得对。但有一件事你说错了。”
“什么事?”
“你不是我的动力,也不是我的证明工具。但你是——”她想了想,找到一个词,“你是我的边界条件。没有边界条件的函数没有意义。你可以不存在,但如果你存在,函数的定义就不一样了。”
程越看著她,嘴角动了一下。
“你在用数学表白。”他说。
“不喜欢可以不要。”
“没说不喜欢。”
他握紧了她的手。力度比之前大了一些,确定了一些,像一个终于被证明过的定理。
走廊的灯在他们头顶,光线很白,很亮,没有桂花,没有路灯,没有凌晨三点的校园。但温以宁觉得这条走廊和五年前那个夜晚一样——都是一条线的起点。五年前那条线从路灯下开始,走到宿舍楼下,然后断了。现在这条线从酒店走廊开始,不知道会走到哪里,但她决定不再让它断。
“你的外套。”程越把手里的外套举起来,“还你。”
“为什么?”
“你穿比较好看。”
温以宁接过外套,没有穿,搭在手臂上。
“明天早上八点。”她说,“实验室。别迟到。”
“不会迟到。”
她转身走向电梯。这次她没有回头。但她知道他在看她——那种专注到近乎固执的认真,从五年前到现在,从来没有变过。
电梯门关上的时候,她拿出手机,看到程越发来一条讯息。
“边界条件已确认。函数定义域更新。”
她笑了。不是那种精确的、被校准过的笑。是真正的、从眼睛开始的笑。电梯里的镜子照出她的样子——头发乱了,嘴唇干了,黑眼圈很重,但她在笑。
她回了一条讯息:“明天重新跑模型。用新的初始条件。”
秒回:“收到。”
电梯到了一楼。门开了。她走出去,穿过大厅,推开玻璃门。外面的风停了,空气里春天的味道比刚才更浓。她站在酒店门口,抬头看天空。没有星星,但有一弯月亮,细细的,像一道被精准切割过的弧线。
她想起程越刚才说的话:“你是因为自己。”
他是对的。这五年她所有的成就,都是她自己赚来的。没有人帮她写论文,没有人帮她跑实验,没有人帮她争取经费。她一个人坐在实验室里,从凌晨到深夜,从深夜到凌晨,一行一行地写代码,一组一组地跑数据。那些成就不是她的盔甲,不是她的证明,不是她用来反驳谁的子弹。那些就是她。不需要任何人来定义,也不需要任何人来认可。
但她选择让一个人参与。不是因为她需要他,是因为她想要他。这两个的区别,她花了五年才搞清楚。搞清楚之后,她发现答案其实很简单——简单到不需要证明,不需要推导,不需要任何算法。
她拿出手机,打开和程越的对话框。打了四个字:“明天见。”发送。
走到停车场的时候,回复来了:“明天见。”
她把车开出停车场,汇入高架的车流。城市的灯光在她两侧流动,像一条不会停下的河。她在这条河里开得很稳,速度不快不慢,方向很确定。
因为她知道明天早上八点,实验室里会有一杯热的蜂蜜柠檬水放在她的键盘旁边。杯套上会写著“温姐”,字迹工整,横平竖直。
她知道自己会喝掉那杯蜂蜜柠檬水,然后打开电脑,看到他在注释里留的话。她会回,他会再回。键盘声会在实验室里响一整天,她的快,他的稳;她的轻,他的重。
温以宁是在周三清晨发现的。
她习惯每天早上到实验室之后先检查服务器日志,这是她从入职第一天就养成的习惯。周一检查系统状态,周二检查数据备份,周三检查访问记录。规律、重复、不会出错。
但这天早上,日志里出现了一条她不认识的记录。
时间是周二凌晨两点十七分,来源IP地址不在实验室的白名单上,访问路径指向她的核心代码库——量子加密系统的底层实现,整个项目最关键的部分,没有上报专利之前连宋晚晴都没有完整权限。
被访问的文件有四个。不是浏览,是下载。
温以宁盯著萤幕上那条记录,手指放在滑鼠上没有动。她先确认了防火墙设定——正常。确认了权限分级——正常。确认了内部网路的登录日志——正常。所有防御系统都在正常运作,但攻击已经发生了。不是系统被攻破,是有人用合法的权限做了不合法的事。
她把那条记录复制出来,保存在一个单独的文件里,然后关掉日志窗口。
“宋晚晴。”
宋晚晴从机房探出头来。“在。”
“上周的内部权限审计报告给我。”
“现在?我还没——”
“现在。”
宋晚晴的脸色变了一下,把报告调出来发给她。温以宁打开报告,逐页检查。核心代码库的访问权限只有三个人:她自己、宋晚晴、以及上周刚刚加入系统的——程越。
她把报告关掉,靠在椅背上。
程越的权限是她批的。上周一,合作项目正式启动的时候,她亲手在权限管理系统里勾选了“核心代码库-只读”的选项。当时宋晚晴提醒过她“要不要再等等”,她说不用。她信任他。不是因为感情,是因为专业判断——他的工作需要这些权限,没有这些权限他没办法做优化。
现在这条信任变成了一把刀,架在她的脖子上。
她没有立刻做任何事。她花了半个小时,把过去一周的所有访问日志重新过了一遍。程越的帐号在核心代码库的操作记录有三十七条,每一条都在正常工作时间内,访问的文件与他的工作内容完全匹配。那条凌晨两点十七分的记录,使用的是一个不属于任何人的临时凭证——不是程越的,不是宋晚晴的,不是她自己的。
有人在系统里开了一个后门。
九点整,院办的电话来了。打电话的是科研管理处的处长,语气比平时客气了三倍,客气到温以宁在听到第三句话的时候就知道出事了。
“温博士,麻烦你来一趟院办。有些事情需要当面沟通。”
“什么事?”
“来了再说。”
她挂掉电话,站起来。程越刚到实验室,正在脱外套。他看到她站起来的动作,停了一下。
“怎么了?”
“院办找我。”她拿起桌上的笔记本电脑,“你在这里等我。”
“我跟你一起去。”
“不用。”她走到门口,回头看了他一眼。他站在工位旁边,手里还攥著外套,表情平静,但她看到他另一只手的手指在裤缝边上轻轻摩挲——他在紧张。
“等我回来。”她说。
院办在行政楼四层,走廊比实验室的宽一倍,地板是深棕色的实木,擦得很亮,能照出人的影子。温以宁走进会议室的时候,里面已经坐了四个人。科研管理处处长、信息安全办公室主任、院办副主任,还有一个她不认识的中年男人,西装领带,面前放著一个笔记本电脑和一个牛皮纸信封。
“温博士,请坐。”处长指了指对面的椅子。
她坐下来,把笔记本电脑放在桌上,没有打开。
“长话短说,”处长推了一下眼镜,“我们接到通报,你的量子加密项目核心技术可能已经泄露。泄露时间大概在一周之内,泄露途径是实验室的内部网路。”
温以宁没有说话。
“信息安全办公室已经做了初步调查,”处长继续说,“泄露的源头指向一个外部IP,但这个IP是通过内部权限进入系统的。拥有核心代码库访问权限的人目前有三个——你、宋晚晴、以及新加入的合作方技术顾问程越。”
会议室里很安静。空调的风口对著她吹,冷气打在脸上,她没有躲。
“院里的意见是,”处长看了一眼那个不认识的中年男人,“在调查结果出来之前,终止与程越的合作,收回所有访问权限。同时,你需要配合信息安全办公室做一次全面的安全审计。”
“终止合作的依据是什么?”温以宁的声音很平。
“目前的证据指向——”
“目前的证据只能说明有人用了内部权限,不能说明是谁用的。”她打断他,“程越的权限是我批的,他的所有操作记录都在正常工作时间内。凌晨两点十七分的那次访问,使用的是一个临时凭证,不是任何人的个人帐号。”
处长和那个中年男人交换了一个眼神。
“你已经看过日志了?”中年男人开口,声音低沉。
“我是实验室负责人,检查系统日志是我的日常工作。”
“那你应该知道,那个临时凭证的生成时间,是在程越加入项目组之后。”
“生成时间和谁在使用是两回事。”
中年男人打开牛皮纸信封,从里面抽出一张纸,推到她面前。那是一份网路访问记录的摘要,上面用红笔圈了几个时间点和IP地址。其中一个时间点是周二凌晨两点十七分,IP地址指向一个海外伺服器。摘要的最下方写著一行注释:“该IP与程越前雇主公司的伺服器位于同一网段。”
温以宁看著那行注释,没有说话。
“我们不是说程越一定做了这件事,”处长的语气软了一些,“但目前的证据指向他。在事情查清楚之前,继续合作是有风险的。院里的决定是——”
“我要见他。”
“温博士——”
“在做出任何决定之前,我要见他。”她站起来,“你们可以收回他的权限,可以暂停合作,但我要当面告诉他这件事。这是基本的尊重。”
会议室里沉默了大约五秒。处长看向那个中年男人,中年男人点了一下头。
“可以。”处长说,“但今天之内,权限必须收回。”
温以宁走出行政楼的时候,阳光很刺眼。她站在台阶上瞇了一下眼睛,拿出手机。有三条未读讯息,都是程越发的。
“院办找你什么事?”——九点十二分。
“需要我过去吗?”——九点十八分。
“温以宁?”——九点二十五分。
她打了四个字:“在实验室等我。”发送。
回实验室的路上她走得很慢。不是犹豫,是在想一件事。从看到日志的第一秒到现在,她从来没有怀疑过程越。不是因为感情,是因为逻辑。如果他要偷她的技术,不需要用这种方式。他已经在合作项目里了,有合法的权限访问所有文件,有合法的理由获取所有数据。他只需要多花几个晚上,把文件复制到自己的电脑里,没有人会发现。没有人会检查合作方技术顾问的个人设备——这是行业惯例,也是信任的基础。
但他没有。他的操作记录全部在正常工作时间内,全部与工作内容相关,全部可以被追溯。一个打算偷技术的人不会留下这么干净的痕迹。
真正偷技术的人,会让痕迹看起来像别人留下的。
她走进实验室的时候,程越站在她的工位旁边。他看到她的第一秒没有说话,只是看著她的脸,像在读一行需要仔细理解的代码。
“他们要终止合作。”温以宁说。
程越的表情没有变化。他点了点头,像在确认一个已经预期到的结果。
“因为泄露的事。”
“你知道?”
“我早上看到了日志。”他说,“凌晨两点十七分,临时凭证,海外IP。”
温以宁看著他。“你看到了为什么不告诉我?”
“我在查。”他的声音很平静,“那个临时凭证的生成方式很特殊,不是通过正常的权限管理系统,是通过一个漏洞——上个月系统更新的时候留下的一个安全缺口。我在追那个缺口的来源。”
“追到了吗?”
“还没有。但有一件事可以确定——”他看著她的眼睛,“那个凭证不是从我的设备生成的。生成地点在实验室内部,用的是服务器机房的一台备用机。”
温以宁的心跳加速了。
服务器机房。备用机。实验室内部。
这意味著做这件事的人不是外部黑客,不是程越,是实验室里的某个人。一个有权限进入机房的人,一个知道系统更新时间的人,一个了解核心代码库价值的人。
她转头看向服务器机房的门。门关著,但没有锁。机房里有六台服务器、三台备用机、一个监控萤幕。任何一个实验室的人都可以在正常工作时间进去,在备用机上执行一个预先写好的脚本,生成一个临时凭证,然后在凌晨两点用这个凭证下载文件。没有人会注意到,因为机房没有监控摄像头——她当初觉得没有必要。
她错了。
“你知道是谁。”她看著程越。
“不确定。但有个方向。”他打开自己的电脑,萤幕上是一个网路追踪的界面,红色的线条在地图上标注了一条路径——从实验室的伺服器到一个中转节点,再到一个海外IP,最后指向一个她认得名字的公司。
她竞争对手的公司。
“这是——”
“嗯。”程越关掉萤幕,“我昨晚追到的。但还不够。中转节点用了三层代理,我需要时间拆解。本来打算今天下午跟你说。”
温以宁站在那里,手指攥著笔记本电脑的边缘,指节泛白。
她想到了实验室里的每一个人。宋晚晴?不可能。宋晚晴是她的助理,跟了她三年,是她最信任的人。但信任不是证据。其他研究员?有三个人有机房权限,两个是博士生,一个是资深工程师。每个人都有动机——更好的职位、更高的薪水、更快的晋升。每个人都有可能。
她的实验室里有一个人,在她不知情的情况下,打开了她的核心代码库,复制了她的技术,卖给了她的竞争对手。这个人每天早上跟她打招呼,跟她讨论实验数据,跟她一起开会、一起吃饭、一起加班。这个人看著她写代码、跑测试、申请专利,看著她一步步把这项技术从理论变成产品,然后在凌晨两点十七分,把这一切打包下载。
“温以宁。”程越的声音从旁边传来,很低,很稳。“这件事不是你的错。”
她没有说话。
“你是实验室负责人,但你不可能二十四小时盯著每个人。系统漏洞是更新时候留下的,不是你设计的。权限管理是按照院里的标准流程做的,不是你一个人决定的。”他停了一下,“你不会把责任推给我,所以你也不要推给自己。”
她抬头看他。他的表情很平静,但她看到他眼睛里有一种东西——不是同情,不是心疼,是一种很深的、被她压了五年的、终于找到出口的理解。
“你为什么不早点告诉我?”她问。
“因为你不需要我保护你。”他说,“你需要的是——自己做出选择。”
温以宁愣了一下。
然后她明白了。
他从周二凌晨就发现了异常。他花了两天的时间追踪,没有告诉她,不是因为他想隐瞒,是因为他在等她发现。等她用自己的方式看到日志,等她用自己的判断分析证据,等她用自己的立场做出决定。他不替她做决定。这是她给他设的边界条件,他在遵守。
“现在我发现了。”她说,“现在我需要你做一件事。”
“什么事?”
“帮我抓住他。”