目录
2.1、BSD协议(Berkerley Software Distribution)
2.3、GPL协议( GNU General Public License )
2.5、LGPL(GNU Lesser General Public License)
引言
开源运动起源于20世纪60年代末70年代初,当时,计算机程序通常是共享的,软件开发者之间会相互交流代码。然而,随着软件行业的商业化,许多公司开始将软件视为一种商品,并开始对软件实施版权保护,限制了源代码的访问。
到了80年代,1983年,理查德·斯托曼(Richard Stallman)发起了GNU项目,致力于创建一个自由的操作系统,并提出了自由软件的理念。这一理念强调用户自由使用、复制、修改和分发软件的权利。1989年,GNU项目发布了GNU通用公共许可证(GPL)。这是第一个广泛使用的开源许可证,确保软件及其衍生作品保持自由,其核心理念是“Copyleft”,即任何派生作品也必须采用相同的许可证,以维持软件的自由性。
到了90年代,随着互联网的普及,软件开发和分发变得更加便捷。“开源”一词在1998年被提出,同年,开源促进会(OSI)成立,致力于推广开源软件的使用和开发,并制定了开源定义,列出了开源许可证必须满足的一系列准则。
随着时间的发展,出现了各种类型的开源许可证,每种都有其特定的目的和使用场景,旨在平衡开发者与使用者之间的权益。MIT许可证以其简单且宽松的条款著称,允许用户几乎不受限制地使用、复制、修改和分发软件。Apache许可证则允许用户自由使用和修改软件,但要求在分发时保留原始版权声明和许可证。BSD许可证类似于MIT许可证,具有高度的灵活性,但同样要求保留版权声明。 如今,开源软件在各个行业中都得到了广泛应用,从操作系统(如Linux)到开发工具(如Git)。许多大公司(如腾讯、阿里、百度、Google、Microsoft等)也积极参与开源社区,贡献和使用开源软件。通过这些许可证,开发者和公司在法律框架下分享和发展技术,推动科技的进步和创新。不仅改变了软件开发的方式,也对整个科技行业产生了深远的影响。
一、开源协议基本概念
1.1、开源协议的定义
开源协议(Open Source License)是规范开源软件使用、修改、分发条件的法律文件,旨在明确开发者与使用者的权利与义务,保障代码自由共享的同时维护作者权益。其核心特征包括:
- 法律属性:通过协议条款将代码转化为受版权保护的开源软件,赋予用户自由访问、修改和分发的权利,同时约束滥用行为。
- 开发者权益保护:保留原作者版权及署名权,要求使用者在分发或修改代码时遵循声明保留、衍生作品标注等条款。
- 自由共享基础:以开放源代码为核心,确保代码的透明性和可协作性,避免私有化垄断。
通俗来讲,许可协议是指用来授权其他人具有某种使用你的作品的权利。
1.2、开源协议的目标
1、平衡开发者与使用者的权益
- 开发者侧:通过协议条款保护原创作品的署名权、版权及专利权益,避免代码被不当占用或闭源私有化。
- 使用者侧:明确允许自由使用、修改和分发代码,降低法律风险,促进技术普惠。
2、推动开放协作与技术创新
- 通过开放源代码和允许衍生创作,减少重复开发,加速技术迭代与生态繁荣。
- 典型协议如 GPL 通过“Copyleft”机制强制衍生作品开源,保障代码的持续共享。
3、维护开源社区生态
- 制定统一规则,规范社区成员行为,解决潜在的法律分歧(如专利冲突、商业闭源争议等)。例如,Apache 2.0 提供专利授权条款,减少企业集成开源代码时的法律纠纷。
4、适应多样化需求
- 不同协议针对项目目标差异化设计:
- MIT/Apache 2.0:侧重商业友好性,允许闭源和专利保护。
- GPL/LGPL:强调代码共享,限制闭源分发
二、常见开源协议介绍
截至目前,开源协议已达上百种,每个协议适用的场景各不相同,下面选取一些常见的开源协议介绍说明。
2.1、BSD协议(Berkerley Software Distribution)
BSD开源协议是一个给于使用者很大自由的协议。基本上使用者可以”为所欲为”,可以自由的使用、修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。但”为所欲为”的前提当你发布使用了BSD协议的代码,或则以BSD协议代码为基础做二次开发自己的产品时,需要满足三个条件:
- 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。
- 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。
- 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。
BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD由于允许使用者修改和重新发布代码,也允许使用或在BSD代码上开发商业软件发布和销售,因此是对商业集成很友好的协议。而很多的公司企业在选用开源产品的时候都首选BSD协议,因为可以完全控制这些第三方的代码,在必要的时候可以修改或者二次开发。
- 特点:高度开放性和灵活性,允许自由修改、分发及商业化使用。
- 核心条款:
- 保留原始BSD协议声明及版权信息;
- 禁止使用原作者名义进行误导性宣传。
- 适用场景:商业项目需快速集成开源代码且希望保留二次开发控制权。
要点:商业软件可以使用,也可以修改使用BSD协议的代码。
2.2、Apache License 2.0(Apache License, Version 2.0、Apache License, Version 1.1、Apache License, Version 1.0)
Apache Licence是著名的非盈利开源组织Apache采用的协议。该协议和BSD类似,同样鼓励代码共享和尊重原作者的著作权,同样允许代码修改,再发布(作为开源或商业软件)。需要满足的条件也和BSD类似:
- 需要给代码的用户一份Apache Licence
- 如果你修改了代码,需要在被修改的文件中说明。
- 在延伸的代码中(修改和有源代码衍生的代码中)需要带有原来代码中的协议,商标,专利声明和其他原来作者规定需要包含的说明。
- 如果再发布的产品中包含一个Notice文件,则在Notice文件中需要带有Apache Licence。你可以在Notice中增加自己的许可,但不可以表现为对Apache Licence构成更改。
- 特点:强调专利保护,允许商业化和闭源修改。
- 核心条款:
- 需保留版权声明及修改文件标注;
- 对衍生作品无强制开源要求。
- 适用场景:企业级项目需规避专利风险时首选
优势项 | 说明 |
永久权利 | 一旦被授权,永久拥有。 |
全球范围的权利 | 在一个国家获得授权,适用于所有国家。假如你在美国,许可是从印度授权的,也没有问题。 |
授权免费 | 无版税, 前期、后期均无任何费用。 |
授权无排他性 | 任何人都可以获得授权。 |
授权不可撤消 | 一旦获得授权,没有任何人可以取消。比如,你基于该产品代码开发了衍生产品,你不用担心会在某一天被禁止使用该代码。 |
要点:Apache Licence是对商业应用友好的许可。使用者也可以在需要的时候修改代码来满足需要并作为开源或商业产品发布/销售。
2.3、GPL协议( GNU General Public License )
GPL协议和BSD、Apache Licence等鼓励代码重用的许可很不一样。GPL的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但不允许修改后和衍生的代码做为闭源的商业软件发布和销售。我们很熟悉的Linux就是采用了GPL,这也就是为什么我们能用免费的各种linux,包括商业公司的linux和linux上各种各样的由个人,组织,以及商业软件公司开发的免费软件了。
GPL协议的主要内容是只要在一个软件中使用(“使用”指类库引用,修改后的代码或者衍生代码)GPL 协议的产品,则该软件产品必须也采用GPL协议,既必须也是开源和免费。这就是所谓的”传染性”。GPL协议的产品作为一个单独的产品使用没有任何问题,还可以享受免费的优势。
由于GPL严格要求使用了GPL类库的软件产品必须使用GPL协议,对于使用GPL协议的开源代码,商业软件或者对代码有保密要求的部门就不适合集成/采用作为类库和二次开发的基础。其它细节如再发布的时候需要伴随GPL协议等和BSD/Apache等类似。
- 特点:强“传染性”,要求衍生代码必须开源。
- 核心条款:
- 修改后的代码必须以GPL协议开源;
- 分发时需同时提供源代码和二进制文件。
- 适用场景:社区驱动的开源项目,强调代码共享和自由使用
要点:商业软件不能使用GPL协议的代码。
2.4、MIT协议 ( MIT license )
MIT是和BSD一样宽范的许可协议,作者只想保留版权,而无任何其他了限制。也就是说,你必须在你的发行版里包含原许可协议的声明,无论你是以二进制发布的还是以源代码发布的。
- 特点:最宽松协议之一,仅要求保留版权声明。
- 核心条款:
- 允许闭源、商用及无限制分发;
- 不强制衍生作品使用相同协议。
- 适用场景:个人开发者或小型项目追求最大灵活性时使用
要点:MIT 协议是所有开源许可中最宽松的一个,除了必须包含许可声明外,再无任何限制。
2.5、LGPL(GNU Lesser General Public License)
GNU Lesser General Public License v3.0- GNU Project - Free Software Foundation
LGPL是GPL的一个为主要为类库使用设计的开源协议。和GPL要求任何使用/修改/衍生之GPL类库的的软件必须采用GPL协议不同。LGPL 允许商业软件通过类库引用(link)方式使用LGPL类库而不需要开源商业软件的代码。这使得采用LGPL协议的开源代码可以被商业软件作为类库引用并发布和销售。
但是如果修改LGPL协议的代码或者衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都必须采用LGPL协议。因此LGPL协议的开源代码很适合作为第三方类库被商业软件引用,但不适合希望以LGPL协议代码为基础,通过修改和衍生的方式做二次开发的商业软件采用。
GPL/LGPL都保障原作者的知识产权,避免有人利用开源代码复制并开发类似的产品。
- 特点:GPL的宽松版本,允许动态链接闭源代码。
- 核心条款:
- 对库的修改必须开源;
- 调用库的独立模块可闭源。
- 适用场景:开发代码库或框架时兼顾商业友好性
要点:商业软件可以使用,但不能修改LGPL协议的代码。
三、开源协议的选择
3.1、明确项目核心需求
1、是否允许闭源或商用
- 允许闭源/商用:优先选择 MIT、Apache 2.0 或 BSD 等宽松型协议,仅需保留版权声明且无强制开源要求。
- 强制代码共享:若需衍生作品开源,选择 GPL、AGPL 等强 Copyleft 协议,防止私有化垄断。
2、是否需要专利保护
-
专利敏感项目:优先选择 Apache 2.0,其明确提供专利授权条款,降低法律风险。
- 无专利顾虑:MIT 或 BSD 协议更简洁,仅保留版权声明即可。
3、社区协作与兼容性
-
混合开发场景:避免强 Copyleft 协议(如 GPL)与闭源组件冲突,选择 LGPL 或 MPL 等部分限制协议。
- 鼓励协作传播:主流协议(如 MIT、Apache)更易被社区接受,降低协作门槛。
3.2、主流开源协议条款对比
1、宽松型协议(Permissive Licenses)
协议 | 核心条款 | 适用场景 |
MIT | 允许任意使用(商用、修改、私有化),仅需保留原许可声明;无专利条款,不承担使用风险 | 个人项目、希望代码被广泛采用(如 jQuery、React、DeepSeek) |
Apache 2.0 | 允许商用和闭源,需保留版权/专利声明;提供专利授权,修改文件需标注变更说明 | 企业级项目(如 Android、Kubernetes),需专利保护或集成到商业产品中 |
BSD | 类似 MIT,但 BSD 3-Clause 禁止用作者名义为衍生品背书 | 学术研究、轻量级工具(如 FreeBSD、Nginx 早期版本) |
2、Copyleft 协议(传染型)
协议 | 核心条款 | 适用场景 |
GPL | 任何分发或修改后的代码必须开源并采用相同协议;动态链接 GPL 代码的软件也需遵循 GPL | 强制开源生态(如 Linux、Git),防止闭源商用 |
LGPL | 允许动态链接闭源代码,但修改 LGPL 部分仍需开源;静态链接需提供兼容接口 | 开源库希望被闭源软件广泛使用(如 GLib、FFmpeg) |
AGPL | 网络服务(SaaS)使用 AGPL 代码时,必须公开修改后的源码 | 防止云服务商闭源使用(如 MongoDB、Nextcloud) |
3、其他协议
协议 | 核心条款 | 适用场景 |
MPL | 文件级传染性,修改后的文件需开源,但允许闭源项目混合使用 | 需部分开源的混合开发场景(如 Firefox) |
CC | 主要用于非代码内容(文档、图像等),可选条款包括署名(BY)、禁止商用(NC)等 | 非代码内容的共享与限制(如开源文档、设计素材) |
3.3、主流开源协议关键维度对比分析
1、商业友好度
- 宽松型协议(MIT、Apache 2.0、BSD):允许闭源和商用,适合企业集成
- 弱 Copyleft(LGPL、MPL):允许部分闭源,但需开源修改部分
- 强 Copyleft(GPL、AGPL):限制闭源,强制衍生作品开源
2、传染性
- 强传染性(GPL、AGPL):衍生作品需遵循相同协议,适用于维护开源生态
- 弱传染性(LGPL、MPL):仅部分代码需开源,灵活性较高
- 无传染性(MIT、Apache 2.0):允许任意协议分发,推动代码广泛传播
3、专利保护
- Apache 2.0:明确授予专利使用权,降低企业法律风险
- MIT/BSD:无专利条款,使用者需自行承担风险。
4、选择建议
- 商业闭源项目:优先选择MIT或Apache 2.0,兼顾自由度和专利保护
- 社区驱动项目:采用GPL或AGPL,防止代码被私有化垄断。
- 混合开发场景:选择LGPL或MPL,平衡开源与闭源需求
常用开源协议选择器:常用开源协议选择器 - Awesome Top 中文社区
四、开源协议的商用考虑
4.1、协议条款审查
1、明确商用许可范围
- 多数开源协议(如 MIT、Apache 2.0)允许商用,但需遵守特定条款(如保留版权声明、标注修改内容等)。
- GPL 等强 Copyleft 协议要求衍生作品必须开源,若闭源商用将违反协议。
2、警惕传染性协议风险
- 使用 GPL/LGPL/AGPL 协议的代码时,需确保衍生作品的开源合规性:
- GPL:所有基于其代码的衍生作品必须开源。
- AGPL:网络服务(SaaS)使用代码时需公开修改后的源码。
4.2、法律风险规避
1、专利与责任条款
- Apache 2.0 提供专利授权,降低企业因使用开源代码被起诉的风险。
- MIT/BSD 无专利保护条款,使用者需自行承担专利侵权风险。
2、标注与声明义务
- MIT:仅需保留原版权声明。
- Apache 2.0:需标注修改内容并保留专利声明。
- BSD 3-Clause:禁止使用原项目名义为衍生品背书。
4.3、技术实现与合规性
1、动态链接与静态链接限制
- LGPL 允许闭源项目动态链接其代码,但静态链接需提供兼容接口。
- MPL 仅要求修改后的文件开源,允许混合闭源代码。
2、协议兼容性冲突
- 混合使用不同协议时需注意兼容性(如 GPL 与闭源协议不兼容)。
- 优先选择主流协议(如 MIT、Apache 2.0)以降低社区协作门槛。
4.4、商业场景适配
1、闭源产品开发
- 优先选择 MIT、Apache 2.0 或 LGPL 协议,避免强 Copyleft 协议的强制开源要求。
2、开源社区项目
- 采用 GPL 或 AGPL 协议,确保代码生态的开放性。
4.5、其他注意事项
1、避免无效限制条款
- 若开源协议未明确禁止商用(如 Apache 2.0),附加“禁止商用”条款可能无效。
2、社区规范与文档标注
- 在项目文档中明确标注协议类型及合规要求,减少法律纠纷风险。