
【开源生态60问】——开源软件的许可证有哪些类型?它们各自的特点是什么?
开源软件的崛起与普及,不仅在于源代码的公开与可自由获取,也得益于相对完善的法律与许可框架。开源许可证为软件的使用、复制、修改与再发布提供了法律保障和行为准则。
1. 许可证、软件许可证及开源软件许可证
许可证是一种法律文件,通常由版权或其他知识产权的所有者授予他人使用其作品的权利。它规定了使用、分发和复制受保护内容的条件和条款。
许可证可以适用于各种类型的创作,包括软件代码、文档、音乐、图像等。
许可证的主要目的是平衡创作者或权利所有者的利益与使用者的需求,确保创作者能够从他们的工作中受益,同时允许他人在特定条件下合法地利用这些作品。许可证通常包含以下几方面的内容。
-
授权范围:明确用户可以做什么和不可以做什么。
-
分发条款:规定如何分享、复制或修改受保护的作品。
-
许可限制:可能包括商业使用限制、源代码披露要求等。
-
法律责任:定义在违反许可证条款时的责任和后果。
软件许可证则是许可证在软件领域的实例,用于规定用户有权如何安装、复制、修改和分发特定软件产品。
软件许可证通常分为以下类型。
(1)开源软件许可证(Open Source License):这类许可证允许用户自由使用、复制、修改和分发软件。例如,GNU通用公共许可证(GPL)、MIT许可证(MIT License)和Apache许可证(Apache License)都属于此类。这类许可证通常鼓励社区贡献代码,并确保所有衍生作品也必须保持开放。受开源软件的启发,后续还诞生了开源硬件许可证、开放文档许可证、开放数据许可证等类别,欢迎读者自行搜索相关介绍。
(2)商业(专有)软件许可证(Proprietary License):这类许可证限制了用户使用和分发软件的方式。例如,EULA(End User License Agreement)是一种常见的商业许可证类型。商业许可证通常附带特定的费用,并可能包含严格的使用条款和条件。
(3)试用许可证(Trial License):这类许可证用于允许用户在一定期限内免费试用软件,期满后可能需要购买正式许可才能继续使用。
(4)教育许可证(Educational License):这类许可证是针对教育机构提供的特殊条款和条件。这类许可证通常允许学校或教育机构以较低的价格分发给学生和教职员工。
2. 开源许可证的重要性
在未明确授权的情况下,软件的使用、复制和发布都可能受到版权法规限制。直白地说:如果一个“开源的”代码仓库的根目录下找不到名为License的文件,你就要非常当心,它可能并未允许你做任何事情。
开源许可证作为一种法律协议,明确了软件作者与用户之间的权利与义务关系。对开发者而言,它确保他们的劳动成果不会被非法占用或滥用。对用户而言,许可证为他们使用、学习、改进并再发布这些软件提供了明确的合法通道。
开源许可证作为一种法律协议,明确了软件作者与用户之间的权利与义务关系。对开发者而言,它确保他们的劳动成果不会被非法占用或滥用。对用户而言,许可证为他们使用、学习、改进并再发布这些软件提供了明确的合法通道。
3. 开源许可证的分类概览
开源许可证大致可分为以下几类。
3.1 宽松(permissive)许可证
宽松许可证的典型代表有MIT许可证、BSD许可证、Apache许可证、木兰宽松许可证。
宽松许可证具有以下几个主要特点。
-
使用自由度高:这种许可证对代码使用者的限制非常少。用户可自由复制、修改、再分发,无须必须把修改后的作品也以同样的许可证开源。
-
可闭源再发布:用户可以将基于该软件或代码修改后形成的衍生产品闭源发布,甚至进行商业化销售,而无须公开自身的代码修改。
-
责任与担保免责:通常这类许可证会声明软件按“原样”(as-is)提供,不对适用性或质量做出担保,并免除原作者的责任。
宽松许可证适用于以下几个场景。
-
商业软件公司常选择从MIT许可证或BSD许可证下的项目中汲取组件,因为能轻松整合进其闭源产品。
-
个人开发者和初创企业也经常选择这种许可证,以求最大限度推动代码传播与使用。
3.2 强制共享(强Copyleft)许可证
强制共享许可证的典型代表有GNU通用公共许可证通用公共许可证、木兰公共许可证。
强制共享许可证具有以下几个主要特点。
-
强复制条款:GNU通用公共许可证的核心要求在于,只要你修改并发布了基于GNU通用公共许可证代码的衍生作品,你就必须在发布衍生作品时也将其在同样的GNU通用公共许可证下开源。这种条款确保了开源生态的持续循环与贡献。
-
防止“吃白食”现象:通过保证衍生作品的开源性,GNU通用公共许可证确保改进后的代码不会被封闭起来,有助于维护开源社区的公共利益和共享精神。
-
严格程度较高:GNU通用公共许可证在商业化使用方面较为严格,如果企业打算在自身产品中使用GNU通用公共许可证代码,就必须公开相应的修改部分的源代码,这可能使其商业策略受限。
强制共享许可证于以下几个场景。
-
致力于开源事业、希望确保后续开发者也要分享改进成果的项目。
-
普遍用于Linux内核及大量GNU相关项目。
3.3. 弱Copyleft许可证
弱Copyleft许可证的典型代表有LGPL、MPL(Mozilla Public License)。
弱Copyleft许可证具有以下几个主要特点。
-
中间地带:弱Copyleft(也称为“宽松的Copyleft”)在严格性上介于宽松许可证与GNU通用公共许可证等强Copyleft许可证之间。
-
动态链接友好:LGPL允许软件以动态链接的方式集成进闭源软件而无须强制开源整个应用程序的代码,但对直接基于该库修改的部分仍有要求需要开源。
-
模块化共享:例如MPL许可对文件级别的修改进行约束,修改该文件则须开源,但与其他文件隔离的代码部分则无须开源。
弱Copyleft许可证适用于以下几个场景。
-
希望在保护部分开源共享精神的同时,也给商用产品更大灵活度的项目。
-
如要开发一个库或框架,并鼓励商业软件使用但不希望全盘闭源,可选择LGPL。
3.4. 其他特色类许可证
-
GPL v3与AGPL:GPL v3解决了硬件限制与专利问题,而AGPL(Affero GPL)则扩展了对网络服务环境下的共享要求。如果你将AGPL代码用于网络应用,需要在用户可访问的前端提供源代码获取方式,从而避免“通过网络提供服务但不分享改进代码”的情况。
-
CC-BY、CC0等知识共享许可证:这类许可证多应用于内容(文档、图片、音视频)而非软件本身,但在开源项目的文档、设计、模型分享中常被采用。
-
特殊条款许可证:一些组织或公司为特定产品定制了自己的开源许可证,以满足独特的法律或战略需求。
4. 常见开源许可证的特征
通过分析常见许可证的官方原件,其特性如表1-X所示。
下面是表中的具体特性的解释。
-
商业使用:该许可证下的代码和衍生品可以用于商业目的。
-
分发代码:该许可证下的代码可以被分发给第三方。
-
内部使用:该许可证允许修改源代码后在个人及组织内部使用,不必向外部分发。
-
专利授权:该许可证明确提出提供专利授权。
-
合并/修改代码:从要组合的开源软件中取出整体/部分代码,修改或不修改都可以,然后把它添加到你的代码中构成一个作品,分发时必须提供源代码。
-
使用库:在编译或运行时通过链接、导入或其他典型的机制(例如静态与动态链接)把开源代码与自有代码绑定在一起后,自有代码分发时必须提供源代码。
-
不允许修改许可协议:当使用“合并、修改、使用库”等方式组合开源代码与自有代码后,不允许自有代码使用不兼容的开源许可协议或闭源分发。

-
许可证:指法律上授予特定权利的正式文件,强调“单方面授权”(用户无需签署合同,接受条款即可使用)。例如:MIT许可证、GPL许可证。
-
协议:通常指双方或多方达成的合意(如合同),强调权利义务的协商。例如:保密协议(NDA)、商业合作协议、最终用户许可协议(End User License Agreement、EULA)。
-
“授权协议”可能引发的误解:“授权协议”易让人联想到双方协商,但开源场景中用户被动接受条款即可,无协商过程。
-
开源许可证本质是单方授权,用户遵守条款即可行使权利,无需双方签署协议,因此“许可证”更贴切。
转载自 庄表伟 阅读思考与生活 【开源生态60问】——开源软件的许可证有哪些类型?它们各自的特点是什么?


