中立机构把比对会议安排在一间没有外网的审查室里。
门口两只储物柜,一方一个。手机、电脑和随身存储设备全部封进柜子,进门只带纸笔。房间里三台终端,一台展示经校验的样本,一台记录审查过程,另一台只用于重现双方约定的构建环境。
海拓比约定时间晚交了一材料。
他们起初只提供当前版本的两个文件迹叶澄当场在清单上写明异议:当前代码经过持续迭代,不能证明周衡离职前已经存在什么。中立机构也拒绝接收单一压缩包,要求仓库历史、版本来源和提交导出方式符合双方已签的协议。
第二下午,海拓补交了一份标称为离职前最后稳定版的仓库包,以及企业代码平台出具的导出记录。
两边材料都先由证据管理员核对校验值,再去除公司名、人员名、客户名和品牌资源。涉及争议的函数名、配置名与注释被保留,因为这些本身就是比对对象。审查人员只知道面前是样本甲与样本乙,不知道哪一份来自海拓。
双方律师和技术人员不进核心审查室,只能在隔壁观察过程录屏。问题通过编号表提交,审查人员回答以后同时回给两方,任何一方都不能单独解释某段代码“真正想做什么”。
比对对象也不是随手选两个最新版本。
海拓提交的是周衡离职前的稳定版,刻度云则同时提交最初公开版和律师函所指的当前审查版。最初版用于看核心结构从何时出现,当前版用于确认海拓截图中的功能究竟怎样实现。若只拿海拓旧版对刻度云最新版,后来新增的责任记录和断网缓存会把差异人为放大;若拿双方最新版,又会把周衡离职后海拓自己的修改混进争议。
中立机构把三个时间点画成一条线,每一项结论都标明比的是哪两个样本。
审查终端禁用复制接口和外接设备,代码只能在限定目录内查看。双方观察人员能看到操作画面,无法放大无关文件,也拿不到另一方原文。审查结束后只导出比对记录、必要片段编号和校验值,完整代码继续留在加密工作区,按协议到期销毁。
丁卓隔着玻璃看了十分钟,声问:“连你也不能进去讲?”
“能讲,结论就会变成谁更会讲。”周衡。
第一轮先比结构。
两个样本都接收事件,也都会去重、按时间聚合,再生成可以查看的时间线。若只把产品页面上的四个动词圈起来,相似度很高。海拓律师函正是从这里出发,把“做同一件事”推成“用了同一套代码”。
审查人员把页面功能放到一边,沿入口逐层往下追。
样本甲依附于一个大型监控平台。告警从中心消息队列进入,先按资源编号和错误码落入关系表,再由定时任务扫描尚未关闭的记录。归并结果会回写原告警状态,并调用平台内部的通知与工单接口。
样本乙的入口来自用户自行部署的本地代理。代理只上传被授权的事件摘要,服务端把原始事件按追加方式保存,不修改客户原系统状态;归并后生成的是一条新的关联记录。责任人接手、复核和风险接受都是后来追加的人为动作,任何一项都不能反向伪造为机器最初就知道的结论。
两边都用了时间窗口,数据流却朝着不同方向走。
样本甲围绕“改变原记录状态”组织,样本乙围绕“保留发生顺序”组织。前者的失败恢复依赖数据库任务重新扫描,后者依赖事件序号和幂等键继续投递。即使删掉变量名,只看对象关系、错误分支和测试断言,也很难把其中一份改几个名称就编译成另一份。
第二轮,审查人员不再问结构图,直接把同一组模拟事件送进两个样本。
甲样本把重复告警合成一条平台事件,原记录状态随之变化;乙样本保留六条接收记录,另外生成一个关联组。最后页面都显示“六条事件归为一组”,中间保存的事实却不同。
审查员在甲样本里撤销归并,原记录状态跟着恢复;切到乙样本,关联组消失,六条原始记录从头到尾没有动过。
观察室里,海拓技术代表一直转着的笔停了下来。
丁卓隔着桌子看周衡。周衡没有话,但一直攥着的纸页终于松开了。那是他熬夜写出来的区别,不必靠谁替他提高声音。
第三轮才做表达层面的比对。
审查工具先排除语言自带模板、公开依赖、自动生成代码和双方共同使用的协议字段。排序、哈希、时间比较这些常见写法也单列,不把`if`条件顺序相同就算成独有表达。
剩余代码中没有发现成片相同的函数体,也没有发现同样的非常规错误、相同拼写错误或连续注释。目录组织、接口参数、数据结构和测试用例来源都不同。
一段哈希缓存的初始化写法高度接近,追到依赖清单后,发现两边都来自同一公开组件的官方示例。样本甲保留了原示例的全部配置,样本乙还删掉了其中不需要的远程统计。审查人员将这一段标为公共来源,不纳入双方原创部分。
海拓又通过问题单提出,两边都把默认归并时间设为五分钟,数值完全相同。
审查人员没有把“都是五分钟”直接扔掉,而是查看参数如何形成。样本甲在早期版本中固定为五分钟,理由来自平台告警降噪;样本乙最初是两分钟,后来根据三名测试用户的重复事件反馈改成五分钟,且允许每个接入源单独配置。五分钟当然可能相同,形成路径和使用方式却有记录可查。
另一项看起来更像的,是两边都在异常时返回“事件已存在”。继续追踪后,甲样本据此修改原记录,乙样本只是拒绝重复写入,并保留第一次接收序号。相同提示背后的副作用不同,不能只比较一句中文。
丁卓在隔壁第一次看见,有些页面上最相似的地方,落进代码以后反而最容易分开。
午后四点,机构出具阶段性记录。
记录没有写“周衡胜诉”,也没有写“海拓败诉”。它只给出技术范围内的判断:在当前提交的两个历史样本中,未发现足以支持直接复制的连续代码表达;两者存在相同业务目标和若干通用实现概念,但核心数据模型、调用关系、异常处理与测试体系存在显着差异。
记录递到海拓技术代表手里时,对方没有立刻签字,先把三页差异重新翻了一遍。来时装满材料的文件夹还摊着,其中最醒目的那张功能相似表,此刻被压到了最下面。
叶澄让书记员记录:对方已收到结论。她没有再替谁补一句安慰的话。六十万元赔偿、全量源码、停止服务,海拓开场甩下的三项要求,到现在一项证据也没撑住。
海拓代理律师没有在结构结论上纠缠,转而提交了五组关键词统计。
前四组都是`event`、`timeline`、`merge`和`fingerprint`之类的常用词。审查人员在公开项目和技术文档中找到大量早于双方代码的使用记录,只把它们记作领域术语。
第五组只有一个词。
`replay_indo`。
它没有出现在海拓提交的离职前稳定版代码里。海拓通过问题单补充明,该字段存在于其当前版本的一项告警重放配置中,并要求把当前代码作为命名来源的辅助样本。中立机构接受材料,却明确它不参与前面的核心复制比对,因为当前版本形成于周衡离职以后。
辅助样本中的字段控制告警重放范围,刻度云当前样本中的同名字段控制断线事件恢复上传时允许回看的时间范围。用途不完全相同,拼写却一字不差。
海拓随即补交一份《事件归并与回放窗口设计稿》,页眉日期写在周衡离职的一年多以前,正文里不仅出现“回放窗口”,还列出了英文配置名`replay_indo`。
他们同时提交杜维成签名的时间明:该命名由海拓项目组在设计稿形成时确定,文件自归档后未作实质修改;周衡曾参加相关项目例会,应当知悉。
丁卓看见明上的签名,脸色沉了下来。
“我参加过那几次例会。”他,“当时大家的是重放范围,没听过这个配置名。”
“记忆不能替代记录。”叶澄。
周衡也没有顺着丁卓的话签一份相反声明。他在海拓时确实听过告警重放与时间范围,刻度云的`replay_indo`则来自断网缓存测试时对公开术语的直接使用。两件事可能同时为真,争点在于海拓所谓的旧设计稿,当年究竟写了什么。
中立机构把这处命名列为待核验项,要求海拓提供设计稿原生文件、文档系统版本历史和最早对外流转记录;也要求周衡提交该字段首次出现的代码提交、需求来源与可验证的公开词源。
审查会结束时,其他比对项已经收束。
只剩这一个配置名,像一根细针卡在两份形成时间不同的材料之间。
而海拓,那根针在周衡离职前一年,就已经钉进了他们的旧档。
喜欢神豪:收入按美元,消费按日元请大家收藏:(m.xaoxs.com)神豪:收入按美元,消费按日元笑傲小说更新速度最快。