公开 ≠ 许可
即使是在 GitHub 上公开的仓库,如果没有 LICENSE 文件,其代码也不是开源的。版权在编写代码的那一刻自动产生(大多数《伯尔尼公约》成员国),如果没有另行许可,只有版权所有者才能复制、修改、分发和创作衍生作品。GitHub 文档也说明,没有许可证时适用默认的版权法,版权所有者保留所有权利,他人不得复制、分发或创作衍生作品。
GitHub 条款允许的范围
根据 GitHub 服务条款(D.5「授予其他用户的许可」),在公开仓库上传内容的人,授予 GitHub 用户在 GitHub 服务内使用、显示和执行该内容,以及在 GitHub 功能允许的范围内(如复刻)复制该内容的权利。也就是说,以下行为是可以的。
- 在网页上查看和阅读代码
- 在 GitHub 内复刻
但条款并不允许超出这一范围的权利,例如放进自己的产品中分发,或在其他地方公开修改版。
想使用无许可证代码时
- 向版权所有者请求:通过 issue 或电子邮件请求添加许可证。很多情况下只是忘了,对方会欣然加上 MIT 等许可证。
- 获得书面许可:如果难以添加许可证,可以另行取得写明使用范围的许可并妥善保存。
- 寻找替代品:寻找功能相同的开源库。
- 自己实现:不看代码,只参考规范或行为重新编写(即所谓净室实现)。照抄原代码可能构成复制,需要注意。
README 中只写了「随便用」的情况比较模糊。虽然意图看起来明确,但范围(修改、再分发、商业使用)并不清楚,请求对方添加标准许可证更为稳妥。
常见的模糊情况
- 没有 LICENSE,只在 package.json 中写了
"license": "MIT":意图似乎是 MIT,但 MIT 要求在副本中包含版权声明和许可声明,没有全文就难以履行声明义务。最好请求对方在仓库中添加 LICENSE 文件。 - Stack Overflow 回答中的代码:用户发布的内容以 Creative Commons BY-SA(依发布时间为 2.5、3.0 或 4.0)提供。它带有署名和相同方式共享的条件,因此移入产品代码时请确认公司政策。
- 博客和教程中的代码:如果网站使用条款或文章中没有另行说明,默认保留版权。
如何为自己的仓库添加许可证
- 在生成器中选择许可证,填写年份和版权所有者,获取
LICENSE文件。 - 将其提交到仓库根目录。GitHub 会识别此文件,并在仓库信息中显示许可证。
- 在
package.json、Cargo.toml、pyproject.toml等文件的 license 字段中写上 SPDX 标识符(SPDX 指南)。 - 如果混有他人的代码,另行整理该部分的许可证和声明(应用实务)。
有意不添加许可证的情况
像作品集或作业这样只想展示代码、不希望被重复使用时,不添加许可证也是一种选择。此时在 README 中写上「保留所有权利(All rights reserved)」和联系方式,可以减少误解。但只要是公开仓库,就无法阻止 GitHub 条款所允许的浏览和复刻。
本文为一般信息,不构成法律意见。重要决定请咨询专业人士。
参考来源
- GitHub Docs, Licensing a repository — https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/licensing-a-repository
- GitHub Terms of Service, D.5 — https://docs.github.com/en/site-policy/github-terms/github-terms-of-service
- choosealicense.com, No License — https://choosealicense.com/no-permission/
- Stack Overflow 内容许可 — https://stackoverflow.com/help/licensing