定制软件中的代码与数据所有权
关于定制软件项目的源代码、数据、第三方库、访问权限、交付与后续开发,合同应当写明哪些内容。
作者 Argonstack 团队,TechIns Group

仅凭“软件将归我们所有”这句话是不够的。在定制项目中,源代码、数据、设计、文档、既有的库、第三方许可、基础设施,以及由其他团队继续开发的权利,都必须清楚地加以区分。
如果这些内容在项目启动前没有明确约定,争议通常会在客户要求访问代码仓库(repository)、更换服务商或要求导出数据时出现。这个问题不会因为谁支付了开发费用而得到解决,而是取决于合同和适用的法律。
本文是一份商业指南,不构成法律意见。最终合同应由熟悉知识产权与技术领域的律师审核。
源代码所有权的真正含义
源代码是开发人员用来构建和修改应用程序的材料。获得代码的访问权,并不一定意味着全部权利已经转让。一家企业可能持有代码仓库的副本,却只享有有限的使用权;也可能持有该软件的独占使用许可,却并未取得构建该软件时所使用的每一个组件。
欧盟第 2009/24/EC 号指令通过著作权法保护计算机程序。合同必须准确写明转让哪些权利、何时转让、适用于哪个地域范围,以及是否存在使用或修改方面的限制。
代码的四个类别
一个项目中的代码通常并非单一、统一的整体。它包括专门为客户编写的新代码、服务商既有的工具、开源库,以及第三方商业服务。
专门编写的新代码可以转让给客户,也可以通过许可方式授权给客户。服务商既有的框架通常仍归服务商所有,并在交付成果中附带使用权。开源库遵循其各自的许可协议。第三方服务,例如云服务、地图、电子邮件或 AI API,受相应服务商的条款约束。
如果合同只是简单写明“客户取得全部代码”,而没有列出这些例外情况,那么它所承诺的内容可能在技术上或法律上都无法实现。
客户的数据
合同必须写明,客户的业务数据始终处于客户的控制之下。合同必须规定数据如何录入、存储在何处、谁有权访问、如何创建备份,以及合作结束后如何导出。
对于个人数据,还必须依据 GDPR 明确各方角色;在服务商作为数据处理者的情况下,需要签订相应的数据处理协议(Data Processing Agreement)。“数据所有权”并不能替代个人数据保护方面的义务。
必须交付哪些内容
要真正具备继续推进项目的能力,仅有一个包含源代码的 zip 压缩包是不够的。还需要代码仓库的访问权限、安装说明、环境变量(不披露不可转让的密钥)、数据库结构(database schema)、API 文档、依赖项清单、部署流程、备份流程,以及第三方账户清单。
此外还必须明确由谁控制域名、云账户、应用商店账户、分析工具、电子邮件服务和签名密钥。在可行的情况下,关键账户应归客户所有,由服务商获得受控的访问权限。
权利何时转让
一种常见的商业做法是在全额付款后转让约定的权利。这一点必须明确写入合同。同时,合同还必须规定:如果项目在完成前终止,将如何处理;哪些交付成果已经付款;以及客户对已交付的工作取得何种使用权。相关商业条款见 Argonstack 的条款与条件。
服务商锁定与退出权
对服务商的依赖并不总是坏事,任何复杂系统都需要专业能力。但当客户无法取得自己的数据、文档或关键账户的访问权限时,这种依赖就会带来风险。
一份严谨的合同会包含退出计划。它规定导出格式、交付时间、过渡期、额外支持的费用,以及在法定保存义务期满后删除副本。
源代码托管(escrow)
对于关键系统,可以约定源代码托管(escrow)。代码和文档的最新副本由独立第三方保管,仅在特定情况下才会释放,例如服务商停止经营,或严重丧失提供支持的能力。
托管不能替代完善的文档和合理的架构。如果托管材料没有及时更新,或者无法安装部署,其存在的实际价值有限。
签约前客户应当询问什么
客户应要求明确界定交付成果、定制代码的权利、例外情况、第三方许可、代码仓库访问权限、账户归属、数据导出、文档、维护以及退出计划。
Argonstack 在组织每个定制项目时,都会明确项目范围和技术架构。所有权与交付条款应写入该项目的具体合同,并反映实际的合作模式。
下一步
在开发开始之前,明确范围、权利、访问权限和退出计划。
常见问题
如果我支付了开发费用,代码是否自动归我所有?
不一定。付款与权利转让是两回事。合同必须准确规定客户究竟取得什么。
开源库可以归我所有吗?
不能在独占所有权的意义上归您所有。开源库须按照其各自的许可协议使用。服务商应当披露关键依赖项及其附带的义务。
云账户应当登记在客户名下吗?
对于关键的定制基础设施,在访问权限得到妥善管理的前提下,这通常是更稳妥的选择。对于 SaaS 产品,这通常并不适用,因为共享的基础设施归服务商所有。
比“代码归我所有”这句话更重要的是什么?
真正具备运行系统、导出数据、维护系统以及完成系统交接的能力。如果没有文档、账户和部署流程,理论上的所有权可能几乎没有实际价值。


