⭐楔子

离职那天下午五点四十七分,云栖科技总部的消防通道里飘着桂花香,林昭抱着纸箱站在安全门旁边,听见身后市场部办公室爆发出开香槟的闷响——同一秒,她手腕上的旧智能手表突然震动,屏幕跳出一行从未见过的红字:核心库心跳终止,乱码已覆盖全部用户画像。

她没回头,纸箱边缘那张工牌掉在地上,照片上的自己还穿着三年前入职时的蓝衬衫。香槟泡沫从门缝漫出来,像一条甜腻的蛇,把技术部十八个人三年的指纹、代码和深夜泡面味,一点一点舔干净。

赵启明签完最后一份离职协议,抬头对林昭笑:“市场部这个月的奖金,够买你们十八个人半年的沉默。”她没有说话,只是把工牌捡起来,擦掉上面的灰,轻轻放回纸箱最上面。那一刻她不知道,三个小时前周衡在系统里跑的最后一个脚本,已经触发了她两年前埋下的那个连自己都差点忘掉的协议。

故事要从裁员前三十一天说起。那时林昭还是云栖科技技术部主管,办公桌靠近服务器机房,每天闻着机器散热口吹出的温热气,像守着一座不冒烟的火山。技术部十八个人,十一个后端,四个前端,两个测试,一个运维,加上她,正好凑成一支能熬夜也能喝冰美式的队伍。他们负责的产品叫“栖云”,一个看似普通的社交应用,主打情绪日记和圈子分享,上线三年,用户量卡在三百四十万,日活不过二十万,在资本眼里像一块嚼不烂的甘蔗渣。

市场部不一样。市场部总监周衡是林昭大学同学,也是她前任。分手两年,两人在公司电梯里碰见,周衡还能笑着问一句“昨晚又通宵啊”,语气像问邻居家洗衣机响没响。市场部的人会穿西装喷香水,会把“用户增长”说成“破圈”,会把每次失败的活动包装成“品牌沉淀”。赵启明喜欢他们,因为赵启明自己也穿西装喷香水,开会时把“情怀”和“闭环”挂在嘴边。

三月一号,星期一,早上九点零七分,林昭收到人力系统发来的全员邮件,标题是“关于组织架构优化与业务重心的通知”。她点开,眼睛被“技术部整体优化”七个字刺了一下。邮件里说公司决定聚焦市场与运营,技术开发将全面外包给一家叫“星链智联”的外部团队,技术部十八人于下月最后一天离职,补偿方案为N+1。

她第一反应是去敲赵启明的门。赵启明办公室在走廊尽头,玻璃墙上贴着“拥抱变化”四个大字。她推门进去,赵启明正在打电话,笑得眼睛眯成一条缝,说“星链那边下午就到,你们准备一下”。他挂掉电话,看林昭站在门口,也不让坐,只说:“小林啊,市场部周衡的方案通过了董事会,业务重心要转,技术部暂时用不上了。你们这三年做得不错,但公司要活下去。”

“用户数据怎么办?”林昭问。

“星链会全面接手,数据迁移已经排了期。”

“什么时候?”

“下个月十五号,你们走之前配合交接。”

林昭点点头,转身出去。她没有回工位,而是拐进楼梯间,靠着水泥墙站了一会儿。水泥墙冰凉,像一条沉默的脊柱。她想起三年前赵启明拉她入伙时说的话:“技术是云栖的灵魂,你来了,灵魂就稳了。”那时候技术部只有五个人,办公室还是孵化器里两间玻璃房,夏天空调漏水,冬天暖气不足,但他们把第一版“栖云”写了出来,上线那天赵启明在楼下烧烤摊点了八十串羊肉串,说“以后上市了请你们吃米其林”。

三年过去,米其林没吃到,灵魂要被拆了。

回到工位,技术部的同事已经炸了锅。陈默把机械键盘敲得噼里啪啦,屏幕上全是聊天框:“真他妈离谱”“我们做的东西说不要就不要了”“数据迁移给外包?他们连我们接口文档都看不懂”。林昭敲了敲自己桌面,声音不大,但整排安静下来。她说:“别慌,先把手头的活收尾。迁移交接我们按规定做,但数据安全底线不能破。陈默,你待会儿把核心库的备份策略再核一遍。”

陈默没说话,只是把键盘推了一下,屏幕上映出他发红的眼角。他二十五岁,去年刚结婚,房贷每月八千,原本计划明年要孩子。

接下来三十一天,办公室里的空气像被抽走了一半。技术部的人还在上班,但活儿越来越少,星链的人开始频繁进出,穿着统一的黑T恤,背着双肩包,像一群来接管仓库的审计员。市场部那边天天开会,周衡有次路过技术部,敲敲玻璃门,冲林昭招招手。林昭没动,周衡就自己推门进来,站在她工位旁边,压低声音说:“今晚一起吃个饭,聊聊。”

“没什么好聊的。”林昭眼睛盯着屏幕,手指在键盘上飞快地敲,其实文档里一个字都没打进去。

“林昭,这事不是我一个人定的。董事会要砍成本,市场部也要背指标,我不提方案,别人也会提。”

“所以你就把技术部十八个人当指标背了。”

“你要这么想,我也没办法。”周衡叹了口气,松了松领带,“你今晚出来,我跟你解释。”

林昭没抬头:“你市场部刚加了薪,别来技术部找不痛快。我们下个月就走了,留点体面。”

周衡站了几秒,转身走了。玻璃门合上,带进来一股他身上的木质香。林昭觉得那股香像一把钝刀,不割肉,只磨骨头。

日子一天天过。技术部的人开始找下家,但市场不好,十八个人里一半以上还在面试。林昭每天下班后开车绕着软件园转两圈,回家就在阳台上抽烟。她戒烟三年了,和分手同步,但这一阵又捡了起来。她抽的不是烟,是那种被抛弃的感觉,又苦又呛。

四月二十八号,离职前三天。星链的人正式进场,要求技术部提供核心库的完整权限。林昭把权限申请表压在手里,去找赵启明。赵启明说:“林昭,这是公司决定,你配合就行。数据安全我们和星链签了保密协议。”

“保密协议防不住错误操作。核心库有三百四十万用户的关系图谱、位置信息、情绪记录,里面甚至有未成年人。迁移前必须做脱敏和完整性校验。”

“星链说不需要,他们有更高效的工具。”

“他们要是高效,就不会上周把测试环境搞崩三次。”

赵启明脸色沉下来:“林昭,你现在还是公司员工,但我劝你搞清楚状况。你们技术部已经被优化了,配合交接是最后的职责。不要因为个人情绪影响公司利益。”

“公司利益。”林昭重复了这四个字,笑了一下,那笑很淡,像秋末最后一片叶子从枝头落下去,“赵总,你去年让我在后台加一个‘用户数据保护协议’的开关,说怕以后有法律风险。那个开关现在还能用。如果数据真的丢了,法律风险比你想象的大。”

赵启明愣了半秒,似乎想起什么,但很快摆摆手:“星链是大团队,不会出问题。你们做好交接。”

林昭没再说话。

离职前一天,四月三十号。技术部的人开始收拾东西。陈默把服务器上的监控脚本跑了最后一遍,截图发到部门群里。他说:“各位,栖云核心服务健康运行一千一百一十四天,今天交给别人了。”群里没人回复,只有几个流泪的表情包刷过去。林昭看着那个数字,突然觉得嗓子发紧。她走到机房门口,刷了最后一遍门禁卡,机器轰鸣声像海潮。她站在那听了一分钟,然后轻轻把门关上。

五点半,周衡又来了。他这次没敲门,直接走进技术部,手里拿着一沓文件,说:“明天上午十点,星链做数据迁移演练,你们技术部派两个人现场支持。林昭,你安排一下。”

林昭正在给绿萝浇水,那盆绿萝是陈默三年前买的,现在爬满半个文件柜。她说:“明天是离职日,上午我们还要办手续。”

“手续很快,支持完再办也来得及。”

“明天上午十点,我会去机房。但你们别动核心库。”林昭放下水壶,转过身,看着周衡的眼睛,“周衡,我最后说一次,星链那个迁移脚本有SQL注入风险,我已经在交接文档里标了红。你们要是硬跑,出了事,我救不了。”

周衡皱起眉:“林昭,别再搞技术傲慢了。星链的负责人说你们的文档又旧又乱,根本没更新。迁移演练必须按时做,这是董事会定的时间表。”

“时间表比三百多万用户的数据安全还重要?”

“你没了技术部,还是这样。你知道吗,我们市场部去年做裂变活动,带来一百二十万新增用户,你把技术部的人当宝,可你的宝撑不起公司增长。”

林昭盯着他,手指微微发颤。她没发火,只是把绿萝的一片枯叶摘下来,攥在手心。过了几秒,她说:“明天我会去。但记住,核心库不能乱动。”

五月一号,离职当天。上午九点,技术部十八个人在食堂吃了最后一顿早餐。陈默点了一碗牛肉面,加了两份牛肉,说“以后吃不到这么便宜的加肉了”。林昭点了一份豆浆和油条,油条泡进豆浆里,软塌塌的,像她此刻的心情。市场部那边传来消息,说今天全员加薪百分之十,晚上聚餐庆祝。苏蔓,市场部经理,特意跑到技术部门口晃了一圈,踩着小高跟鞋,笑着说:“哎呀,你们今天办完手续,是不是就解放了?我们还要加班做下个月的投放方案呢,忙死了。”

没人搭理她。她自讨没趣,走了。

九点四十,林昭带着陈默和另一个后端工程师老吴去机房。星链的人已经到了,五个黑T恤,拿着三台笔记本,像要搞什么大型手术。周衡也在,站在一旁看手机。星链的负责人姓韩,三十来岁,留着小胡子,操着一口南方普通话:“林主管,我们准备开始咯,麻烦你们把数据库账号权限开一下。”

林昭说:“测试库可以开,核心库不行。核心库要做离线备份校验,至少需要六个小时。”

“六个小时?老板说要今天下午六点前完成全量迁移,哪有时间等六个小时。”

“那你们自己负责,我们技术部不背锅。”陈默插了一句,语气很冲。

韩主管看向周衡。周衡把手从手机屏幕上抬起来,说:“林昭,赵总说了,今天必须完成。你们配合一下,账权限给星链。出了事,星链负责。”

“好。”林昭点点头,走到操作台前,输入自己的管理员账号,调出权限面板。她的手指在触摸屏上停顿了一下,然后输入了一串命令。屏幕上跳出一行字:“核心库保护协议已激活——自毁阈值:未授权迁移或非法脱敏。”

韩主管没看到这行字,因为他正在低头连网线。周衡看到了,他脸色一变:“林昭,你干什么?”

“两年前赵总让我加的,以防万一。这个协议需要每天手动确认,过去两年我每天早上第一件事就是确认它。今天我没有确认,它会在中午十二点自动进入待机。如果待机期间检测到核心库有未授权迁移,它就会启动锁死和乱码覆盖。”

“你疯了!赶紧关掉!”

“关掉需要双人密钥,我和赵总各持一半。赵总不会给你的,因为两年前他设这个协议时说过,用户数据是公司的命,谁乱动谁负责。”

周衡额头冒汗,赶紧打电话给赵启明。赵启明在电话里咆哮:“林昭!你马上给我解除!这是公司资产,你无权设置这种后门!”

林昭按了免提,平静地说:“赵总,这是你授权的。当时你说,如果哪天公司要出卖用户数据,必须有反制。现在你问自己要反制谁。”

“你立刻解除!不然我报警!”

“报警?报什么?报我保护用户数据不被非法迁移?星链的迁移脚本我已经查过了,里面有一个隐藏命令,会把用户手机号和关系链打包导出到一个境外服务器。你要不要我发给网信办?”

电话那头沉默了三秒,然后是赵启明压抑到颤抖的声音:“林昭,你走,现在就走,迁移暂停。”

林昭关掉免提,看向周衡:“告诉市场部,加薪的事最好再想想。你们卖的不是洗发水,是三百多万人的情绪日记。每一篇日记下面都有一个真实的人。他们可能正在失恋、失业、失眠,把这里当树洞。如果树洞被人撬开,你们市场部那百分之十的加薪,就是拆树的斧头钱。”

周衡脸色惨白,一句话说不出来。

林昭带着陈默和老吴走出机房。陈默回头看了一眼,小声说:“昭姐,那个协议真能锁死数据?”

“能。”林昭说,“但锁死只是第一步。乱码覆盖后,数据会碎片化,分散到十八个节点。每个节点需要一把钥匙,钥匙分布在我们技术部十八个人的个人备份卡上。只有十八个人同时插入钥匙,才能还原。”

“那我们走了,数据岂不是永远锁着?”

“对。所以星链不会得逞。但用户数据也不会丢。”林昭掏出一张黑色小卡片,上面印着云栖的logo,那是三年前他们团队自己做的纪念U盘,“这张卡里是我的钥匙。另外十七张,在你们每个人的工牌夹层里。我上周就放好了。”

老吴瞪大了眼睛:“你早就准备了?”

林昭没正面回答,只说:“技术部可以走,但用户数据不能成为市场部庆功宴上的下酒菜。这是底线。”

十点半,技术部十八个人在会议室办离职手续。气氛很怪,有人想哭,有人想笑,有人低头刷手机看招聘软件。林昭坐在最前面,把工牌一张张收上来,放进一个纸盒里。每收一张,她就在名单上打个勾。陈默的工牌夹层里果然有那张黑卡,他抽出来看了一眼,又默默塞回去。

十一点,赵启明派人来叫林昭去他办公室。林昭去了。赵启明坐在大班椅上,脸黑得像锅底。周衡站在旁边,领带歪了。赵启明说:“林昭,你马上把那个协议解除,不然公司会起诉你破坏生产经营,你和你团队的人都跑不掉。”

“赵总,你起诉我什么?那个协议是你自己让我写的。我每行代码都有你的审批记录。你让我保护用户数据,我保护了。至于今天为什么触发,因为有人想非法迁移。非法迁移的人不是我。”

“你别跟我咬文嚼字!星链是公司正式签约的合作伙伴,怎么算非法?”

“星链的迁移脚本里有数据窃取模块,算不算非法?要不要我把代码发给安全部门?”

赵启明不说话了。周衡终于开口:“林昭,就算星链有问题,你也不能把整个数据库锁死。三百多万用户还在用产品,他们现在登录不了,朋友圈都刷不出来,这事闹大了我们全都完蛋。”

“完蛋的不是我。”林昭看着他,“下个月我就不是云栖的人了。但你们还是。你们要想挽回,可以,按我的条件来:第一,技术部十八个人的离职补偿从N+1改成N+3,补发三倍加班费;第二,星链的迁移终止,核心库由我们技术部独立完成脱敏和交接,确保不泄露任何用户隐私;第三,公司明天发布公告,说明技术部调整原因和数据安全措施,向用户公开道歉。”

“你以为你是谁?你都被裁了!”周衡提高了声音。

“所以我不怕。一个被裁的人,什么都可以不要。但你们还要公司,还要市场部,还要那百分之十的加薪。你们可以试试,晚上十二点如果数据还没恢复,用户投诉会把应用商店评分踩到一星,你们市场部下个月的KPI直接挂零。”

赵启明喘着粗气,手指在桌面上敲了敲。过了很久,他说:“你先把数据恢复,条件可以谈。”

“先签协议,白纸黑字。十八个人的补偿金,今天下午五点半前到账。星链的人今天必须撤出机房。做到这两点,我今晚把数据解锁。”

赵启明看着周衡。周衡咬了咬牙,点头:“我去拟协议。”

十二点整,系统锁死。云栖App所有用户打开后只看到一片空白,头像变成灰,昵称变成乱码,个人主页只剩一行字:“服务暂时不可用,请稍后再试。”社交媒体上开始有人发帖:“云栖是不是被黑了?我的日记全没了?”“卧槽我的情绪日记打不开,里面记录了我三年抗癌过程,有没有人能管管?”“卸载了,垃圾公司。”

市场部那边彻底慌了。苏蔓带着人疯狂删评论,但删不过来。周衡手机被媒体打爆。赵启明躲进办公室,拉上窗帘。

技术部的人没有走。他们聚在公司楼下的咖啡馆,把十八张钥匙卡摆在桌上,像摆一副牌。林昭说:“协议解锁需要时间,今晚九点开始跑恢复程序,预计明天凌晨四点完成。但我们不能就这么算了。”

陈默说:“昭姐,你真的要帮他们恢复?他们把我们裁了,还差点把用户数据卖了。”

“用户数据没有错。那些写日记的人没有错。我们不能因为讨厌赵启明,就让三百多万人的回忆变成乱码。”林昭喝了一口美式,苦得她眯起眼睛,“但补偿金必须拿到。这是你们应得的。”

下午三点,赵启明让法务送来协议,技术部十八个人轮流看,确认金额无误后签了字。五点半,补偿金到账,每人多出两个月工资和三年加班费总和,数字不小。陈默看着手机银行提示,眼睛红了:“昭姐,这钱够我还两年房贷了。”

林昭点点头:“还有星链的人撤了没有?”

“撤了。”老吴从机房门口打来电话,“走得干干净净,像从没来过。”

晚上九点,技术部十八个人回到机房。机房里灯光明亮,服务器指示灯红红绿绿地闪。林昭把十八张钥匙卡依次插入密钥管理器,每插一张,屏幕上就亮起一个节点。陈默负责跑数据重组脚本,老吴负责校验完整性,其他人盯着日志,像一群守夜的哨兵。

周衡站在机房外面,透过玻璃看着里面。他手里拿着一瓶矿泉水,想进去,又停住。林昭出来拿外卖时看见他,没说话。周衡把水递过去:“喝点水。”

“不用。”

“林昭,今天的事,我没想到会这样。”

“你想到了。你只是觉得技术部不重要,觉得我们做的东西可以随便交给别人。”林昭接过外卖袋,声音平静得像在说一件很旧的事,“三年前你离开我,说我们不合适。去年你抢我的项目,说市场比技术更靠近用户。今天你把技术部当筹码,说优化就优化。周衡,你一直觉得你选的是正确的路。但真正的正确,不是靠牺牲别人来证明的。”

周衡低下头:“我承认我有私心。董事会说如果我不提出技术外包方案,市场部也要砍一半。我为了保我的人,只能推你们出去。”

“所以你就把刀递出去。可你想过没有,今天数据如果真的被星链偷走,那些用户会怎样?他们的隐私被卖,被人肉,被诈骗。你保住了市场部,但可能毁掉三百多万人的生活。”

“我……我没想那么多。”

“所以你不如我。”林昭笑了一下,那笑里有释然,也有遗憾,“你从来只想赢,而我想的是别让相信我们的人输。”

凌晨四点十七分,数据恢复完成。乱码如潮水般退去,用户头像重新亮起,日记一篇篇回来。栖云的服务器状态从红色变成绿色,像一颗重新跳动的心脏。林昭坐在操作台前,看着监控大屏,眼泪突然掉下来。她没擦,就让那滴泪落在键盘上。三年,一千一百一十四天,她带着技术部把产品从零做到三百四十万用户,最后一天,她用一场锁死和重建,给这段生涯画了一个不太圆满但足够硬气的句号。

第二天,云栖科技发布公告,承认系统异常并道歉,承诺加强数据安全。市场部没有加薪,反而因为“误导高层决策”被内部通报,周衡被降职。星链智联被解除合作,赵启明引咎辞职。技术部十八个人拿到了N+3补偿,各自散去。林昭没去新公司,她注册了一家小工作室,叫“十八节点”,专门帮创业公司做数据安全防护。陈默加入了她,老吴偶尔来帮忙。

故事的最后,林昭站在云栖科技大楼楼下,抬头看着那个已经摘掉 logo 的墙面。桂花开得正好,风一吹,细碎的花瓣落了她一肩。手机响了一声,是周衡发来的消息:“我辞职了。你说得对,我从来没有真正理解过你做的事。对不起。”

她没有回复,只是删掉对话框,把手机揣回兜里。然后她转身走进人群,新工作室就在街角,门牌上刻着一行小字:技术可以被裁,但底线不能。

全文完