在 GitHub 上发布项目时,很多开发者会直接上传源码,却忽略了许可证文件。没有明确的开源许可证,其他人即使能够查看代码,也不能默认获得复制、修改、分发或商业使用的完整授权。

开源许可证用于规定软件的使用条件。不同许可证对商业集成、源码公开、版权声明和专利授权的要求存在差异。选择之前,最好先想清楚三个问题:是否允许他人将代码用于闭源商业软件,修改后的代码是否需要继续开源,以及是否需要明确的专利授权条款。

MIT、Apache 2.0 和 GPL 都是常见选择,但适用场景有所不同。

MIT、Apache 2.0与GPL有什么区别?

对比项目 MIT Apache 2.0 GPL
商业使用 允许 允许 允许,但须遵守协议条件
修改源码 允许 允许 允许,但分发修改版本时有相应义务
用于闭源软件 允许 允许 将代码纳入受 GPL 约束的衍生作品时,通常需要遵守 GPL 的开源和授权要求
版权声明 需要保留 需要保留 需要保留相关版权及许可证信息
专利授权条款 没有 Apache 2.0 那样的明确专利授权条款 包含明确的专利授权及相关终止条款 具体保障取决于 GPL 版本及其条款
分发源码要求 没有一般性的源码公开要求 没有一般性的源码公开要求 分发受 GPL 约束的目标程序时,需按协议提供对应源码或满足相应源码提供义务
主要特点 简单宽松 宽松,明确涉及专利授权 强互惠开源

GPL 有 GPLv2、GPLv3 等版本,具体义务还取决于项目采用的版本及授权方式。表格用于快速理解,不能代替对具体许可证文本的审查。

MIT许可证:适合希望广泛传播的项目

MIT License 是一种简洁、宽松的开源许可证。采用 MIT 协议后,其他开发者通常可以自由使用、复制、修改、合并、发布和销售软件,也可以将代码集成到闭源商业产品中。

主要条件是分发软件时,需要保留原有版权声明和许可证文本。MIT 许可证通常不要求使用者公开自己的修改代码,也不强制衍生项目继续采用 MIT 协议。

例如,你开发了一个 JavaScript 日期处理库、C# 工具类、前端组件或 JSON 格式化工具,希望更多开发者能够直接集成到自己的项目中,MIT 通常是比较合适的选择。

它的优势是使用门槛低、条款简洁,商业公司也容易理解。不过,MIT 没有 Apache 2.0 那样明确的专利授权条款。如果项目涉及较多专利技术,或者你希望在许可证中明确处理相关专利问题,就需要进一步评估其他协议。

Apache 2.0许可证:适合商业化和企业协作

Apache License 2.0 同样属于宽松型许可证,允许商业使用、修改、分发和闭源集成。与 MIT 相比,它的条款更加详细,明确规定了贡献者的相关专利授权。

Apache 2.0 的主要要求包括:

  • 分发软件时附带许可证副本。
  • 修改过的文件需要按照许可证要求保留适当的修改说明。
  • 如果原项目包含 NOTICE 文件,重新分发时需要按协议保留相关通知。
  • 不得将原作者的商标或品牌权利理解为自动获得授权。

Apache 2.0 的专利条款为使用者提供了特定范围内的贡献者专利授权,同时规定了涉及相关专利诉讼时的授权终止机制。

如果你正在开发企业级 SDK、开发框架、基础设施工具或计划长期维护的开源项目,Apache 2.0 值得优先考虑。它兼顾商业集成的灵活性和较明确的专利条款。

还要留意许可证兼容性。Apache 2.0 与 GPLv3 兼容,但与仅采用 GPLv2 的代码存在兼容性问题。

GPL许可证:希望衍生软件继续开源时使用

GPL 是具有强互惠特征的开源许可证,也常被称为 Copyleft 许可证。它允许用户运行程序、研究源码、修改软件和重新分发,但在分发受 GPL 约束的程序或衍生作品时,需要履行相应的许可证义务。

GPL 的核心目标是让软件及其衍生作品在符合条件的再分发过程中继续保有相应的自由使用和修改权利。例如,你开发了一款命令行工具,希望其他人可以自由改进并分享,同时避免有人将受 GPL 约束的衍生程序作为完全闭源的软件发布,那么 GPL 可能符合你的目标。

需要注意以下几点:

  1. GPL 允许商业使用。使用 GPL 并不意味着软件必须免费销售,也不意味着开发者不能通过技术支持、定制开发或软件分发获得收入。
  2. GPL 的源码提供义务主要与受许可约束的软件分发等行为相关。单纯在个人设备上修改程序,通常不会因此自动产生向所有人公开源码的义务。
  3. GPLv2 与 GPLv3 不能一概而论。两者在具体要求和兼容性方面存在差异,不能假定所有 GPL 项目都能直接组合使用。

如果你的目标是让基于项目形成的衍生软件在分发时继续遵守相应的开源条件,可以考虑 GPL。若主要目标是让尽可能多的商业软件直接集成代码,MIT 或 Apache 2.0 通常更方便。

实际开发中应该选择哪种许可证?

可以根据项目目标快速判断:

  • 个人开源工具、前端组件、代码示例: 如果希望开发者自由使用,且不要求修改版本继续开源,优先考虑 MIT。
  • 企业级 SDK、开发框架、基础设施项目: 如果希望允许商业集成,同时明确规定贡献者专利授权,可以考虑 Apache 2.0。
  • 需要保持衍生软件开源的项目: 如果希望分发衍生作品时继续履行开源义务,可以考虑 GPL,并明确选择 GPLv2 或 GPLv3。
  • 商业软件与开源版本并行: 如果希望同时提供开源版本和商业授权,需要确认自己拥有相关代码的授权权利,并合理设计双重授权方案。

选择许可证时,还要检查依赖库的许可证。项目采用 MIT,不代表其中引用的所有第三方代码都可以按照 MIT 的条件使用。如果复制了其他项目的代码,或者将不同许可证的代码组合在一起,需要单独确认授权条件及兼容性。

GitHub项目如何添加许可证?

确定许可证后,可以在项目根目录创建 LICENSE 文件,写入对应的完整许可证文本。以 MIT 为例,通常需要填写版权年份和版权所有者,并保留完整的许可证条款。使用 Apache 2.0 或 GPL 时,也应采用对应版本的正式文本,不要随意删改关键条款。

同时建议做好以下工作:

  1. 在 README.md 中说明项目采用的许可证。
  2. 保留第三方依赖的版权声明和许可证信息。
  3. 对项目中单独引入的代码、图片、字体和模型文件进行授权检查。
  4. 如果接受外部贡献,提前明确贡献代码的授权规则。
  5. 对商业使用、专利风险或复杂的衍生作品问题,必要时咨询专业法律人士。

GitHub 可以根据仓库中的许可证文件识别项目的许可证类型,但平台显示的许可证名称不能替代完整的授权条款。

总结

MIT、Apache 2.0 和 GPL 的主要区别,在于使用限制、专利授权以及分发衍生作品时的义务。

MIT 适合追求简单、宽松授权的项目。Apache 2.0 更适合重视明确专利授权条款的商业化开源项目。GPL 适合希望衍生作品在分发时继续遵守互惠开源要求的开发者。

如果你正在创建一个新的 GitHub 项目,可以先确定商业使用和源码公开方面的预期,再检查依赖项的许可证兼容性。选对许可证,能够减少后续合作、商业集成和代码再分发中的授权争议。