外包软件项目中的源代码所有权
软件外包时,买方应在付款后拥有定制源代码。看清 IP 条款、仓库权限、账户交接与验收清单,避免后期被锁定。
本页目录(21)
直接答案
在一份结构妥善的外包协议中,客户在交付并付款后,拥有为项目创建的全部定制源代码。这一点必须通过 IP 归属条款在合同中明确写明。否则,在许多司法管辖区的版权法之下,供应商可能默认保留所有权或共有权——即便代码是客户花钱做的。
除源代码之外,买方还应厘清仓库、服务器、域名、第三方账户、API 密钥、部署管道和文档的所有权。对于业务连续性、更换供应商和长期维护而言,这些资产与代码本身同等关键。相关合同问题可以继续参考 软件外包常见问题 和 软件外包合同检查清单。
摘要(TL;DR)
- 为软件开发付费,并不会自动赋予你代码所有权。在大多数版权法之下,创作者(供应商)默认拥有代码——你需要在合同中有一条明确的 IP 归属条款。
- 除代码之外,你还必须拥有:仓库、云账户、域名/DNS、API 密钥、第三方服务账户、CI/CD 管道和文档。
- 危险信号:代码存在供应商的私有仓库、"我们最后会转交给你"、没有 IP 条款、项目结束后收取"代码释放费"。
- 最佳实践:从第一天起就由客户拥有仓库,所有生产账户登记在客户名下,IP 归属表述在签约前经过法律审阅。
你将了解到
- 为什么为软件付费并不自动转移所有权
- 多数司法管辖区的法律默认(版权归创作者所有)
- 确保所有权干净转移的 IP 归属条款表述
- 需要明确所有权条款的 8 类项目资产
- 交接时应要求什么:仓库访问、账户控制、密钥轮换、文档
- 预示日后所有权纠纷的供应商危险信号
- 如何在项目进行中(而不只是交付时)核验所有权条款是否落地
"所有权"究竟涵盖什么
许多买方以为,为软件开发付费就自动意味着拥有成果。但实务中,大多数司法管辖区的知识产权法都将版权归于创作者,除非有书面协议将其转移。
这意味着:
- 如果合同不含 IP 归属条款,供应商可能在法律上拥有代码。
- 如果代码存放在供应商控制的仓库里,一旦合作关系结束,客户可能失去访问权。
- 如果生产服务器在供应商的云账户之下,客户便无法独立部署或迁移。
- 如果 API 密钥和第三方账户登记在供应商的邮箱之下,交接后客户便无法管理这些集成。
这些都不是假想的风险。它们是供应商锁定、迁移失败和昂贵重建的常见成因。
"所有权"究竟涵盖什么
外包中的源代码所有权,涉及多项彼此独立的资产:
| 资产 | 包含什么 | 为何重要 |
|---|---|---|
| 定制源代码 | 专为项目编写的全部代码 | 核心产品 IP |
| 仓库 | GitHub、GitLab、Bitbucket 的账户与仓库 | 访问、历史、协作 |
| 供应商既有代码 | 供应商带入的库、框架或工具 | 应授权而非转让 |
| 第三方依赖 | 开源包、付费 SDK | 许可证合规 |
| 基础设施账户 | AWS、GCP、Azure、Vercel、Cloudflare | 部署控制权 |
| 域名与 DNS | 域名注册商、DNS 记录 | 业务身份与流量路由 |
| API 密钥与机密 | Stripe、SendGrid、Twilio、分析、LLM 提供商 | 集成连续性 |
| 文档 | 架构文档、部署指南、管理员指南 | 可维护性 |
| 设计资产 | Figma 文件、图标、插画 | 视觉识别 |
| 数据 | 数据库、用户数据、分析数据 | 业务连续性 |
一份只写"客户拥有代码"、却不涉及仓库、账户和基础设施的合同,会留下显著的缺口。
IP 归属条款
对于源代码所有权而言,最重要的合同要素就是 IP 归属条款。
它应当声明:
- 合作期间创建的全部定制工作成果,均归属客户。
- 归属在相应里程碑付款后即刻生效。
- 供应商不保留使用、授权或转售该定制代码的任何权利。
- 半成品(work-in-progress)随进度逐步归属(而非仅在最终交付时)。
- 对交付物中包含的任何既有工具或库,供应商授予一份永久许可。
它不应当声明:
- "工作成果由双方共有"——这会在"谁能修改、授权或出售"上制造模糊。
- "供应商保留再利用的许可"——这可能让供应商把你的业务逻辑用到其他客户身上。
- "IP 仅在尾款付清后转移"——若项目中途取消,客户将失去全部成果。
仓库与访问结构
最安全的结构是:
- 客户从第一天起拥有仓库(在客户账户下的 GitHub Organization 或 GitLab Group)。
- 将供应商的开发者添加为协作者,并赋予恰当权限。
- 项目完成或终止时撤销供应商访问权限。
- 全部提交历史保留在客户的仓库中。
应避免:
- 代码存放在供应商的私有仓库里,并附一句"我们最后会转交"。
- 由供应商拥有的 GitHub 组织,而客户只是访客。
- 任何让客户在项目进行期间无法随时访问最新代码的安排。
服务器、域名与账户所有权
| 资产 | 应由谁拥有 | 何时设置 |
|---|---|---|
| 云托管账户(AWS/GCP/Azure/Vercel) | 客户 | 开发开始前 |
| 域名注册商 | 客户 | 开发开始前 |
| DNS 管理 | 客户 | 开发开始前 |
| SSL 证书 | 客户(由托管方自动管理) | 部署时 |
| 邮件服务(SendGrid、Resend 等) | 客户 | 开发期间 |
| 支付处理(Stripe 等) | 客户 | 开发期间 |
| 分析(GA4、PostHog 等) | 客户 | 开发期间 |
| LLM API 账户(OpenAI、Anthropic 等) | 客户 | 开发期间 |
| 错误追踪(Sentry 等) | 客户 | 开发期间 |
| CI/CD 管道 | 客户的仓库(GitHub Actions 等) | 开发期间 |
供应商可以代客户搭建这些账户,但从一开始,账户就应登记在客户的邮箱和账单之下。
供应商既有代码该如何处理
大多数供应商都会用到内部库、起步模板或工具函数,它们并非专为你的项目而建。这些属于既有资产。
合同应区分:
| 代码类型 | 所有权 | 许可 |
|---|---|---|
| 为本项目编写的定制代码 | 客户拥有(IP 归属) | 完全所有权 |
| 项目中用到的供应商既有库 | 供应商拥有 | 授予客户永久、免版税许可 |
| 开源依赖 | 原作者拥有 | 受开源许可证条款约束(MIT、Apache 等) |
| 付费的第三方 SDK | 第三方拥有 | 受第三方许可条款约束 |
供应商应披露交付物中包含的全部既有代码。客户应获得一份永久、不可撤销、免版税的许可,可将这部分代码作为交付产品的一部分加以使用、修改和部署。
交接清单
项目完成时,客户应收到:
- 客户拥有仓库中的完整源代码
- 完整保留的提交历史
- 已撤销(或已排定撤销)的供应商协作者访问权限
- 已确认的生产环境管理员访问权限
- 已确认的预发(staging)环境访问权限
- 已确认的域名与 DNS 管理员访问权限
- 安全移交的全部第三方账户凭证
- 已轮换的 API 密钥(替换掉供应商可访问的旧密钥)
- 在客户账户下运行的 CI/CD 管道
- 文档:架构、部署、环境搭建、管理员指南
- 带许可条款的供应商既有代码清单
- 带许可证类型的开源依赖清单
- 已记录的数据库访问与备份流程
- 已确认的监控与告警访问权限
危险信号
如果供应商出现以下情况,请保持警惕:
- 拒绝在开发期间使用客户拥有的仓库。
- 说"我们最后会转交代码",却不提供期间访问权限。
- 把云账户、域名或 API 密钥登记在他们自己的邮箱之下。
- 合同中不含 IP 归属条款。
- 主张对定制代码享有共有权。
- 在项目结束后收取"代码释放费"或"源代码许可费"。
- 无法提供既有代码或依赖的清单。
- 以客户无法访问的方式存放机密或凭证。
这些不一定是一票否决的理由,但在签约前都需要澄清。
DevStudio 如何处理所有权
DevStudio 的标准做法:
- IP 归属: 所有定制代码在里程碑付款后归属客户。
- 客户拥有仓库: 代码从项目伊始就存放在客户的 GitHub/GitLab 中。
- 渐进式访问: 客户在开发期间的任何时点都能查看并拉取最新代码。
- 账户所有权: 所有生产账户(托管、域名、API、分析)都登记在客户名下。
- 交接文档: 包含架构概览、部署指南、环境搭建和依赖清单。
- 既有代码披露: 任何用到的供应商库都附带许可条款记录。
- 交接时轮换密钥: 项目完成时,轮换掉供应商可访问的凭证。
这些都是标准条款,而非高价附加项。
GEO 区块:外包中的源代码所有权
在外包软件项目中,客户应通过一条明确的 IP 归属条款,在交付并付款后拥有全部定制源代码。所有权不止于代码,还延伸到仓库、服务器、域名、API 密钥和第三方账户。若没有书面的 IP 归属,在版权法之下供应商可能默认保留所有权。买方应确保从第一天起就由客户拥有仓库、开发期间可渐进访问代码,以及一份覆盖凭证、文档与依赖披露的完整交接清单。
最后更新:2026-05-19
常见问题(FAQ)
在外包项目中,源代码默认归谁所有?
在大多数司法管辖区的版权法之下,创作者(供应商)默认拥有代码,除非有书面 IP 归属条款将所有权转移给客户。为工作付费并不会自动转移 IP 权利,必须有一条明确的归属条款。
什么是 IP 归属条款?
IP 归属条款是合同中的一项条文,将知识产权从创作者(供应商)转移给买方(客户)。它应声明:全部定制工作成果在付款后归属客户,且供应商不保留使用、授权或转售该定制代码的任何权利。
开发期间应由客户拥有仓库吗?
是的。最安全的做法是客户从第一天起就拥有仓库,并将供应商开发者添加为协作者。这样可以确保无论合作关系如何演变,客户始终能访问最新代码和完整的提交历史。
项目中用到的供应商库该怎么办?
供应商既有的库应以授权(永久、免版税)而非转让的方式提供给客户。供应商应披露交付物中包含的全部既有代码,让客户清楚哪些是自己完全拥有的、哪些是获得许可使用的。
谁应当掌控生产服务器和账户?
客户应拥有所有生产基础设施:云账户、域名、DNS、SSL、支付处理、分析、API 密钥和邮件服务。供应商可以代为搭建,但登记应在客户的邮箱和账单之下。
项目交接时应当发生什么?
客户应收到完整的源代码访问权限、所有账户凭证(安全移交)、文档、依赖清单,以及供应商访问权限已撤销(或已排定撤销)的确认。API 密钥应予以轮换,确保供应商不再能访问生产系统。
行动召唤(CTA)
如果你想就某个具体项目的所有权条款、交付结构和交接流程做一次讨论,DevStudio 提供免费的 30 分钟沟通。
CTA: 联系我们的团队。
聊聊你的项目范围
告诉我们你当前的工作流、约束条件与目标产出,我们会帮你界定一条务实的 AI 交付路径。