开源许可证怎么选?

wen 网络安全 7

本文目录导读:

开源许可证怎么选?

  1. 核心原则:你的核心诉求是什么?
  2. 第一类:严格“传染性”许可证(Copyleft 强)
  3. 第二类:温和“传染性”许可证(弱 Copyleft)
  4. 第三类:宽松“允许性”许可证(Permissive)
  5. 快速决策流程图
  6. 特别说明:CC 协议(Creative Commons)
  7. 最后,一个简单的建议

选择开源许可证,本质上是在保护代码作者的权利促进代码被广泛使用之间做权衡。

不需要把每种许可证都背下来,下面是一份从实际应用场景出发的选择指南,供你参考。

核心原则:你的核心诉求是什么?

请先问自己三个问题:

  1. 你介不介意别人用你的代码做闭源的商业产品?(别人基于你的代码,修改后不公开源码就卖钱)
  2. 你担不担心大公司用了你的代码后,不把他们的改进反哺回社区?
  3. 你希望你的代码被尽可能多的人使用和传播吗?

根据这三个问题的答案,可以把主流许可证分为三大类。


第一类:严格“传染性”许可证(Copyleft 强)

代表:GPL 3.0

  • 核心特征:“你用它,你的代码也得用同样许可证公开”,这是“病毒式”传染条款。
  • 适合场景:你希望自己的代码永远保持开源,任何基于它的衍生作品也必须开源。
  • 主要缺点:商业公司通常非常排斥GPL,如果你的代码被一个商业软件以GPL方式“污染”了,他们要么不碰,要么宁愿重写。
  • 特别注意:GPL有版本2和3,3.0增加了反TiVo化等条款,更为严格。Linux内核用的是GPL 2.0。

如果你是坚定的开源理想主义者,或者在做的是操作系统、底层工具类项目,希望杜绝闭源商业分支,选GPL。


第二类:温和“传染性”许可证(弱 Copyleft)

代表:MPL 2.0, LGPL

  • 核心特征:传染性是有边界的,修改后的代码文件需要开源,但以库的形式被其他程序调用时,调用方的代码可以不继承开源。
  • 适合场景
    • LGPL:主要用于代码库(Library),你用了一个LGPL的图形库,开发了一个商业游戏。你不需要公开游戏源码,但如果你修改了那个图形库,修改部分必须开源。
    • MPL 2.0:比LGPL更友好一些,修改了某个文件,仅该文件需保持MPL;新增文件可以使用其他许可证。
  • 代表项目:Mozilla Firefox(MPL 2.0)、LibreOffice(MPL 2.0)、一些知名的C/C++库(LGPL)。

你希望别人可以把你的代码用在闭源项目中(比如一个库或组件),但同时要求他们修改了你的代码必须回馈。这是商业公司与开源社区之间常用的妥协方案。


第三类:宽松“允许性”许可证(Permissive)

代表:MIT, Apache 2.0, BSD

  • 核心特征:几乎可以做任何事,你可以修改、复制、再发布、闭源商用,唯一的要求通常是保留版权声明。
  • 适合场景:你希望代码被最大范围地采用,不关心别人是否开源,甚至欢迎别人拿去闭源卖钱,只要他们保留你的署名。
  • 主要区别(如何选)
    • MIT:最简单、最宽松,只需保留版权声明和许可声明。95%的个人小项目、脚本、工具库都选它。
    • Apache 2.0:比MIT多了一个专利授权条款,如果你在代码里包含了自己申请的专利,Apache 2.0意味着你自动授予了用户使用这些专利的许可。这是大公司(如Google、Apache基金会)的首选,能有效避免专利诉讼风险。
    • BSD:有2-Clause、3-Clause版本,3-Clause禁止用你的名字或项目名称进行推广,流行度不如MIT和Apache。

绝大多数情况,选MIT,如果你在大公司或担心专利问题,选Apache 2.0


快速决策流程图

你正在开发一个:

  1. 一个小工具、一个脚本、一个简单的库,或者写来玩的?
    • 推荐:MIT(最简单,无负担)
  2. 一个可能被大公司集成的核心库?
    • 担心他们不贡献改进?
      • -> LGPL 或 MPL 2.0
      • -> MIT 或 Apache 2.0
    • 代码里有重要专利?选 Apache 2.0
  3. 一个操作系统、编译器、或希望强制所有衍生品开源的重大基础设施?
    • 推荐:GPL 3.0(用AGPL 3.0覆盖网络服务场景)
  4. 一个只能通过Web提供服务(SaaS)的应用?
    • 你介意AWS这种云厂商白嫖你的代码,却不公开他们改了什么(比如改个界面就卖钱)?
      • 介意 -> AGPL 3.0(GPL的SaaS版,要求通过网络提供服务的修改也必须开源)
      • 不介意 -> MIT / Apache 2.0

特别说明:CC 协议(Creative Commons)

  • 许可证都是针对软件代码的。
  • 如果你的作品是文档、图片、视频、字体,请用 CC 协议,不要用GPL或MIT。
  • 常见选择:
    • CC-BY:最宽松,署名即可。
    • CC-BY-SA:署名且相同方式共享(类似GPL)。维基百科就用这个。
    • CC0:放弃所有版权,相当于“公共领域”。

一个简单的建议

  • 不清楚怎么选时,默认选MIT。 这是程序员的“国家通用语”,简洁明了,人人爱用。
  • 如果你希望别人修改后也必须开源,选GPL。 但要做好别人因此绕道走的心理准备。
  • 如果想做商业友好型库,选Apache 2.0。
  • 不要自己发明许可证,也不要用什么“仅供学习交流”的非标准文字。 开源社区不认识你的协议,等于自绝于人群。

如果还是拿不准,可以在GitHub上创建一个仓库,在选择许可证时,GitHub会提供每个许可证的简短摘要说明,祝项目顺利。

抱歉,评论功能暂时关闭!