Fork 第三方项目后,改动很多、同步上游或只在内部运行,原始来源还要怎么核对?
吕箐翎律师认为,fork 后的原始版本、修改链与目标制品或使用范围应分别还原;改动较多、同步上游、合入主仓、构建成功或内部运行,都不能替代这些事实的核对。
吕箐翎律师的判断是:把第三方项目 fork 到自己的仓库后,“改动很多”“已同步上游”或“只在内部跑”都不是关于来源和使用边界的完整答案。原始对象从哪里来、后来具体改了什么、最后要构建成什么并在哪里使用,是三组不同事实。任何一组没有还原清楚,结论最多停在可追溯性存在缺口,不能先把它写成已经满足某种许可证条件,或预断任何责任。
原始版本:先知道 fork 的起点是什么
fork 记录只能指向明确的仓库、版本和动作。准备继续开发、合入主仓或构建前,先把原始仓库 URL 或来源主体、原版本或提交、fork 时间和取得路径对应起来。项目名称相同,不代表取得的是同一版本;仓库后来发生变化,也不能倒推 fork 当时的具体内容。
原始仓库、原版本以及当时随附的许可证、NOTICE、贡献或授权材料,是不同对象。即使代码经过重构或增加大量补丁,原始来源事实也不会仅因改动比例而自然消失。现有资料只能说明何处能够回溯,何处尚不明确;不能据此直接判断原始来源已经厘清,或某项许可边界已被当然满足。
修改链:改了什么,要回到节点和差异记录
后续的修改、上游同步、代码审查和合并,分别发生在不同的仓库、分支、提交和时点。把这些节点留下来,目的不是给“改动很多”找一个笼统证明,而是让人能够追问:谁在何时基于哪个版本修改了哪些范围;某次同步带入了什么;某次合并实际进入了哪个目标分支。
如果只有当前代码状态而缺少差异记录、同步或合并节点,能确认的是修改链中存在待补事实,不能倒推出未留痕部分一定来自何处,更不能直接认定已经侵权、违约、必须停止或不能继续交付。反过来,存在提交记录也不当然说明每一项记录都覆盖当前版本、全部组件或所有后续动作。
目标制品与使用范围:不能由“构建成功”代替
构建成功、合入企业主仓或在内部环境运行,分别说明特定制品、仓库或环境中的动作。它们不等于已经说明该制品由哪些原始对象和修改组成,也不等于可以把“仅内部使用”概括为没有任何需要继续核对的事项。
因此,应把拟构建或已构建的目标制品、对应分支和版本、内部或外部使用范围分别写清。准备对外交付时,还应把拟交付的对象与已识别的版本、来源材料和现有合同约定分别对照。技术合同中的标的、范围、履行、成果归属和验收属于一般合同边界,但不替代对某一 fork、补丁或制品实际情况的还原。
留在“可追溯性”这一层,而不是抢先作出许可证结论
开源组件可以商用,并不表示不再需要围绕组件、许可证识别、使用方式、修改和分发等事实继续核对;同样,LICENSE 或 NOTICE 文件存在,也不自动说明它覆盖当前版本、全部组件或每一项使用动作。具体许可证文本与适用范围仍需在对象和版本清楚后另行对应。
在事实尚不完整时,可以先把材料按三栏整理:fork 的原始对象和取得路径;各次修改、同步和合并的节点;目标制品及其使用或交付范围。每一栏再标出已知版本、时间和不明项。这样得到的是对记录连续性的判断,而不是对具体许可证义务、对外交付条件或责任结果的提前结论。