开源协议完全指南:有哪些、怎么用、应该怎么选
你是不是经常遇到这种情况:在Github上,打开一个开源项目,发现里面放着一个叫 MIT License 的文件,却不知道它到底是什么意思?
其实,我之前也有同样的疑惑。它为什么几乎到处都是?用了 MIT 代码,是不是必须开源自己的项目?如果把代码放到 GitHub,却不写任何协议,别人还能不能用?后来经过一番了解,我终于把这些常见的开源协议弄明白了。
这一篇,如果你已经是熟悉开源合规的开发大佬,可能可以直接划走;但如果你还只是一个正在做小工具、写 Skill,并准备把作品上传到 GitHub 的新手,我建议你花点时间看完。
我之前的职业做的也是合规方向,所以对这类问题天然比较感兴趣。今天就结合自己查到的资料,尽量不用晦涩的术语,用通俗一点的语言,聊聊开源协议到底是什么、有哪些,以及我们应该怎么选。
因为开源协议它是一份真正具有法律意义的授权文件,决定别人能不能使用、修改、分发、商用你的代码,也决定他们在做这些事时必须履行什么义务。
接下来,我会把常见协议逐个翻译成人话,并解释:
- 什么才算开源;
- 开源协议可以分成哪几类;
- MIT、BSD、Apache、GPL、LGPL、AGPL、MPL 等协议分别允许什么、要求什么;
- BSL、SSPL 为什么能看到源码,却不能叫开源;
- 使用别人的开源代码时要做什么;
- 发布自己的项目时应该怎么选;
- 文档、图片、字体、数据集和 AI 模型应该如何授权。
先说明: 本文是个人做的小科普的通俗介绍,不构成法律意见。个人项目通常可以按本文完成基本选型;如果项目涉及融资、并购、专利诉讼、硬件销售、大规模商业分发或复杂的许可证混用,请让专业律师复核。(如有错误,欢迎大家批评指正)
一、先把「开源」说明白
1. 开源不是「代码放在 GitHub」
把代码上传到公开仓库,只代表别人能看到它,不代表别人自动获得使用权。
一般来说,代码写出来之后,作者就自动拥有相应的版权,无须先放一份 LICENSE。LICENSE 解决的是授权问题:你愿意把哪些使用权交给别人,对方使用时又需要遵守什么条件。
所以,仓库里没有许可证时,相关权利通常仍由作者保留,其他人也不能随意使用。别人可能可以在 GitHub 平台规则允许的范围内浏览或 fork 仓库,但不能仅凭代码公开,就认定自己已经获得复制、修改、重新分发或放进商业产品的完整授权。
换句话说:
没有 LICENSE,不代表没有版权;往往正好相反——作者有版权,但没有明确授权别人使用。公开代码也不等于开源。
真正的开源许可证,会明确允许任何人使用、研究、修改和分发软件,而且不能因为对方是谁、在哪个行业、是否赚钱而区别对待。OSI 的《开源定义》尤其强调:开源许可证不能禁止商业使用,也不能限制某个使用领域。
2. 免费、开源、源码可见,是三件事
这三个概念经常被混在一起:
举个简单例子:
- Chrome 可以免费下载,但它不等于所有代码都以开源许可证发布;
- Chromium 是开源项目;
- 某个项目允许你查看源码,却规定「不得用于商业托管服务」,它是源码可见,不是 OSI 意义上的开源。
判断一个项目是否开源,不要只看宣传页写了什么,要看它实际使用的许可证,以及该许可证是否符合开源定义。
3. 开源不等于放弃版权
大多数开源协议都建立在版权之上。
作者先拥有版权,再通过许可证告诉所有人:「只要你遵守这些条件,我允许你做这些事情。」如果使用者不遵守条件,授权可能失效,作者便可以通过版权法追究责任。
所以,MIT、Apache、GPL 都建立在版权之上:作者保留版权,同时按协议规定的条件向公众授予使用权。
二、这些协议,大致可以分成三类
后面看到再多协议名,也可以先放进三个抽屉里。
第一类:比较宽松
代表:MIT、BSD、Apache 2.0。
它们大致在说:
你可以使用、修改、商用,也可以把自己的产品闭源。记得保留原作者的版权和协议声明。
这类协议比较容易被个人开发者和公司接受。
第二类:你可以用,但改进的部分要分享
代表:LGPL、MPL 2.0。
它们允许闭源软件使用,同时希望别人对原来的库或文件做了修改后,继续公开这些修改。
第三类:发布修改版时,相关项目也要继续开源
代表:GPL、AGPL。
GPL 主要关注软件被交给别人时的情况;AGPL 连放在服务器上给别人使用的情况也考虑进去了。
先用一张表快速理解:
三、MIT:新手最常见,也最好理解
MIT 可以用一句话概括:
代码你可以拿去用、修改、商用和闭源,但请保留原作者的版权声明和 MIT 协议。出了问题,原作者通常不负责。
假设你在 GitHub 上找到一个 MIT 小工具,你可以:
- 在自己的项目中使用;
- 修改它;
- 放进商业产品;
- 做成付费服务;
- 保持自己的项目闭源。
你需要做的核心事情,是把原作者的版权声明和 MIT License 保留下来。
MIT 适合什么项目?
- 个人小工具;
- 愿意让别人自由复用内部模板和工作流的 Skill;
- 学习项目;
- JavaScript、Python 等开发库;
- 希望更多人使用的项目。
如果你正在做一个小工具,想上传 GitHub,又没有特殊的商业计划,选 MIT 通常就够了。
MIT 的代价也很明确:别人可以拿你的代码做成闭源商业产品,不必公开他的项目。
四、BSD:和 MIT 很像
BSD 也允许使用、修改、商用和闭源。
常见的有 BSD 2-Clause 和 BSD 3-Clause。对新手来说,只需要记住:
- BSD 2-Clause 和 MIT 的效果很接近;
- BSD 3-Clause 多了一条「不要拿原作者的名字给你的产品背书」。
比如,某产品使用了一所大学发布的 BSD 代码,可以正常使用,但不能擅自在广告里写「本产品获得这所大学官方推荐」。
普通个人项目在 MIT 和 BSD 之间纠结时,选更熟悉的 MIT 即可。如果你的项目所在社区普遍用 BSD,也可以跟随社区习惯。
五、Apache 2.0:像 MIT,但更重视专利
Apache 2.0 同样允许修改、商用和闭源。
它和 MIT 的主要区别,可以先记住两个词:专利、NOTICE。
专利是什么意思?
有些代码背后可能涉及贡献者的专利。Apache 2.0 会在协议规定的范围内,把相关专利许可一并授予使用者。
简单理解:它希望减少一种风险——贡献者把代码开源给大家使用,之后又拿覆盖这份贡献的专利来起诉使用者。
这不代表 Apache 2.0 能解决所有专利问题,但它比 MIT 写得更明确。
NOTICE 是什么?
有些 Apache 项目会附带一个 NOTICE 文件,可以把它理解成一份需要随项目保留的声明清单。如果你分发相关软件,记得一起检查和保留。
什么情况下选 Apache 2.0?
- 企业参与的项目;
- SDK 和开发框架;
- 基础设施项目;
- 你比较在意专利说明。
个人小工具想省事,选 MIT。项目更大、参与方更多,或者你在意专利,可以考虑 Apache 2.0。
六、LGPL:你的程序可以闭源,改库要分享
LGPL 经常用于软件库。
闭源软件可以使用这个库;如果你修改了库本身并对外发布,通常要公开对这个库的修改。
举个例子:你开发了一款闭源视频软件,其中使用了一个 LGPL 视频库。通常情况下,你不需要公开整款视频软件。如果你修改了这个 LGPL 库,并把修改版随产品一起发布,就需要按协议提供相应源码。
LGPL 还希望用户能替换这个库。因此,使用 LGPL 库时,要留意动态链接、静态链接和重新链接的要求。
如果这些词你还不熟,也不用硬啃。准备商业发布时,把下面三件事告诉有经验的人:
- 你用了哪个 LGPL 库;
- 你有没有修改它;
- 你是怎样把它打包进产品的。
LGPL 适合什么项目?
- 音视频库;
- 数据库驱动;
- 基础运行库;
- 希望商业软件采用,又希望库的改进继续公开的项目。
七、MPL 2.0:改了哪个文件,就公开哪个文件
MPL 2.0 的边界比较直观。
你修改了哪些 MPL 文件,就继续公开这些文件。你自己另外写的文件,可以保持闭源。
比如,一个项目有 100 个文件,其中 10 个来自 MPL 项目。你修改了这 10 个文件并发布产品,通常需要公开这 10 个文件的源码。你自己新写的另外 90 个文件,可以继续闭源。
MPL 适合:
- 可复用的软件组件;
- 需要和闭源代码一起工作的项目;
- 希望别人回馈修改,又不想影响整个项目的作者。
如果你觉得 LGPL 的链接规则太难理解,MPL 的「按文件划分」通常会更直观。
八、GPL:发布修改版时,要把源码给别人
GPL:
你可以使用、修改、发布和收费;如果你把基于 GPL 代码做出的相关程序交给别人,通常也要给对方相应源码和修改权。
GPL 允许商用。你可以卖 GPL 软件,也可以收服务费。
哪些情况通常不用公开?
- 只在自己的电脑上运行;
- 只在公司内部使用;
- 修改后没有对外发布。
哪些情况需要格外注意?
- 把安装包交给客户;
- 发布 Docker 镜像;
- 把 GPL 代码放进自己的程序后发布;
- 把 GPL 软件装进硬件设备再销售。
GPL 会让公司的所有代码都公开吗?
不会自动覆盖公司里的所有代码。它关注的是 GPL 程序以及和它组成的相关作品。
至于哪些代码算作同一个作品,有时要看链接方式和程序结构。个人小项目不用先把自己吓住;商业项目准备发布时,再认真检查边界。
GPL 2.0 和 GPL 3.0 有什么区别?
新手先记住:它们是两个不同版本,不能只看见 GPL 三个字就当成完全一样。
你还可能看到:
- GPL-2.0-only:只能使用 GPL 2.0;
- GPL-2.0-or-later:可以选择 GPL 2.0 或更新版本;
- GPL-3.0-only:只能使用 GPL 3.0。
如果是给自己的新项目选协议,又没有兼容旧项目的要求,可以先了解 GPL 3.0。
九、AGPL:把在线服务也考虑进来
AGPL 可以理解成「网络服务版的 GPL」。
你修改了这个程序,再把它放到服务器上给用户使用,也要让这些用户有机会获得相应源码。
为什么会有它?
使用普通 GPL 软件做在线服务时,用户只通过网页或 API 使用,没有拿到软件副本。AGPL 增加了网络场景下的源码要求。
AGPL 仍然允许收费,也允许提供商业服务。它要求的是按协议提供源码。
它适合:
- 在线协作工具;
- 数据库和后台服务;
- 主要通过网页或 API 提供的产品;
- 希望云服务商也公开相关修改的项目。
需要注意的是,一些公司对 AGPL 比较谨慎。如果你特别希望自己的项目被大公司广泛采用,AGPL 可能会增加阻力。
十、BSL 和 SSPL:源码能看,但使用限制更多
这两类协议主要用来保护商业模式。它们不属于严格意义上的开源协议。
BSL
源码可以看,但某些生产或商业用途暂时受到限制。到了约定日期,相关版本再转成指定的开源协议。
不同 BSL 项目的规定差别很大。看到 BSL 时,要继续看:
- 哪些用途免费;
- 哪些用途要购买商业许可;
- 限制到哪一天;
- 到期后转成什么协议。
SSPL
如果你用它对外提供服务,可能需要开放管理、监控、备份等整套服务相关软件。
它要求开放的范围可能比 AGPL 更大,也没有得到 OSI 的开源认可。
作为新手,看到 BSL 或 SSPL 时,不要直接按照 MIT 项目的方式使用。一定要阅读该项目写明的具体条件。
十一、使用别人的开源代码,要做什么?
不用一上来研究所有法律细节,先按这五步检查。
第一步:找 LICENSE
查看仓库根目录有没有:
- LICENSE;
- LICENSE.txt;
- COPYING。
README 里也可能写着许可证。如果完全找不到,不要默认可以随便使用。
第二步:看清协议名字和版本
MIT 比较简单。遇到 GPL 或 LGPL 时,还要看是 2.0、3.0,还是带有 only、or-later。
同一个项目的新旧版本,也可能使用不同协议。
第三步:想清楚你要怎么用
问自己几个问题:
- 只是本地学习吗?
- 会把代码复制进自己的项目吗?
- 会修改它吗?
- 会把安装包或 Docker 镜像交给别人吗?
- 会放到服务器上提供在线服务吗?
用途不同,要求也会不同。
第四步:保留该保留的内容
MIT、BSD 也有要求,最常见的就是保留原作者版权和许可证。
商业产品可以把第三方协议放在:
- LICENSES 目录;
- THIRD-PARTY-NOTICES 文件;
- App 的「开源许可」页面;
- 产品文档中。
第五步:该给源码时就给源码
使用 GPL、LGPL、MPL 或 AGPL 时,如果你的用法触发了源码要求,就要按协议提供相应源码。
如果你准备收费、交付客户或销售硬件,又不确定自己的做法是否合规,最好再请专业人士检查。
十二、怎么给自己的 GitHub 项目加协议?
最简单的方式,是在 GitHub 创建仓库时点击 Choose a license,然后选择需要的协议。
已经创建好的仓库:
- 在根目录创建一个名为 LICENSE 的文件;
- 放入对应协议的完整原文;
- 按模板填写年份和版权人;
- 在 README 里说明项目使用什么协议。
1 | ## License |
不要只在 README 写一句「本项目采用 MIT」,完整的 LICENSE 文件也要放进去。
如果仓库里同时有代码、文档、图片和 Logo,也可以分别授权。例如:
- 代码:MIT;
- 文档:CC BY 4.0;
- 图片:CC BY-NC 4.0;
- Logo:保留全部权利。
在 README 里写清楚即可。
十三、不同协议的代码能不能混用?
有时可以,有时不行。
新手先记住一个大概方向:
MIT、BSD 这类宽松代码,通常比较容易放进其他项目;GPL 这类要求更强的代码,很难直接放进闭源项目。
几个常见情况:
- MIT 代码通常可以放进 GPL 项目;
- GPL 代码不能直接改成 MIT 再闭源;
- Apache 2.0 通常可以放进 GPL 3.0 项目;
- Apache 2.0 和 GPL 2.0-only 通常不能直接组合。
如果你只是做个人小工具,尽量使用协议清楚、关系简单的依赖。遇到 GPL、AGPL 或多个协议混用时,不确定就先问维护者或有经验的人。
十四、图片、视频和 Skill,用什么协议?
这里很容易混淆,因为一个图片或视频 Skill 往往同时包含两类东西:
- Skill 本身的代码、提示词模板或工作流文件;
- Skill 使用或生成的图片、视频、文案、音乐等内容。
这两类内容可以使用不同协议。比如,Skill 的代码使用 MIT,演示图片使用 CC BY,Logo 继续保留全部权利。
文档、图片和视频常见的 CC 协议
- CC BY:别人可以使用、修改和商用,但必须署名;
- CC BY-SA:可以使用、修改和商用,要署名,公开修改版时还要继续使用相同协议;
- CC BY-NC:可以使用和修改,要署名,但不能商用;
- CC BY-ND:可以使用,也可以商用,但不能发布修改版;
- **CC BY-NC-SA:**不能商用,修改版还要继续使用相同协议;
- CC BY-NC-ND:限制最多,不能商用,也不能发布修改版;
- CC0:作者尽量完全放开,通常连署名也不强制。
可以这样记:
- BY = 要署名;
- SA = 修改后继续用相同协议;
- NC = 不能商用;
- ND = 不能发布修改版。
这里的「不能改」容易产生误解。ND 通常限制的是向外分享经过修改的版本;仅仅为了自己使用而修改,和公开发布修改版,需要分开看。
图片、视频 Skill 里的模板,想保护起来怎么办?
如果一个图片生成 Skill 里包含大量提示词、风格模板、参数组合和工作流,这些内容往往才是 Skill 最有价值的部分。此时不要直接给整个仓库使用 MIT 或 Apache 2.0,因为这两种协议都允许别人复制、修改、商用,甚至放进闭源产品。
你可以按保护强度选择:
方案一:不公开模板,只开放调用方式
这是保护力度最强的做法。把模板和工作流保存在私有服务端,用户只能通过 Skill 或 API 调用,看不到完整模板。
公开出去的客户端代码可以使用 MIT,但服务端模板保持私有。这样既方便别人使用 Skill,又减少模板被整套复制的风险。
方案二:公开可看,但保留全部权利
如果必须把模板放进公开仓库,可以不给模板添加开源许可,并明确标注:
Templates, prompts and workflows: All rights reserved.
这代表别人可以看到这些内容,但没有自动获得复制、修改、重新发布或商用的授权。GitHub 的平台规则仍可能允许用户浏览和 fork 仓库,所以公开仓库无法阻止别人“看到”模板。
方案三:代码开源,模板单独授权
你也可以在同一个仓库中拆分授权:
- Skill 的程序代码:MIT 或 Apache 2.0;
- 提示词、模板和工作流:保留全部权利,或者使用单独的内容许可;
- 示例图片和视频:根据需要使用 CC 协议;
- Logo 和品牌名称:保留权利。
然后在 README 和各目录中写清楚适用范围,避免别人误以为仓库里的所有内容都采用 MIT。
如果你允许别人学习和非商业使用模板,可以考虑 CC BY-NC-ND:要求署名、禁止商用,也不允许公开发布修改版。但它并不属于开源许可,而且是否适合提示词、模板,还取决于这些内容能否达到当地版权法要求的原创性。
还要注意一个现实:版权通常保护模板的具体文字和表达,不一定保护背后的想法、画面风格、制作方法或参数逻辑。提示词过短、过于通用,也可能难以获得充分的版权保护。如果模板构成核心商业资产,最稳妥的方法仍是不要公开完整内容。
最后,Skill 的模板授权和生成图片的授权是两回事。 即使模板归你所有,生成图片能否商用,仍要看模型平台条款、输入素材、字体、音乐、肖像和商标等因素。
字体
字体常见 OFL 1.1。它通常允许使用、修改和嵌入,也允许放进商业软件。
数据和 AI 模型
数据还可能涉及隐私和来源。AI 模型还要分别看权重、代码、训练数据、平台条款和使用限制。
所以,看到数据集、模型或 Skill 名称里有 Open,也不要马上理解成可以随便商用。
十五、怎么选?直接看答案
1、我做了一个小工具、脚本或 Skill,想上传 GitHub
如果里面没有需要保密或限制复用的核心模板,可以选 MIT。
它简单、常见,别人容易理解。对大多数愿意让别人自由复用的个人项目来说,这是最省心的选择。
如果项目中含有你想保护的提示词、模板、数据或工作流,不要直接把整个仓库都授权为 MIT。先把这些内容单独拆出来,再分别决定是否公开和如何授权。
2、我做的是企业项目,比较在意专利
选 Apache 2.0。
3、我做的是一个库,希望闭源软件能用,但改库的人要公开修改
选 LGPL。
4、我希望按文件划分,改过哪些文件就公开哪些文件
选 MPL 2.0。
5、我希望别人发布修改版时,相关程序继续开源
选 GPL 3.0。
6、我的项目主要是在线服务,希望别人做成 SaaS 后也公开修改
选 AGPL 3.0。
7、我想限制云厂商拿去做竞争服务
可以研究 BSL、商业许可或双重许可。这已经涉及商业模式,个人新手项目通常不用急着考虑。
8、我做的是图片或视频 Skill,里面的模板需要保护
不要直接给整个 Skill 使用 MIT。MIT 会允许别人复制、修改、商用你的模板和工作流。
更合适的做法是:
- **最重视保护:**模板不公开,放在私有服务端,只开放 Skill 或 API 的调用方式;
- 代码可以开源,模板不能复制:程序代码使用 MIT 或 Apache 2.0,模板目录明确标注「All rights reserved」;
- 允许学习,但不允许商用和公开改编:模板可考虑 CC BY-NC-ND,同时说明它不属于开源授权;
- 希望模板也被自由使用:再考虑 CC BY 或 CC BY-SA.
无论选择哪一种,都要在 README 中分别写清代码、模板、示例素材和生成内容的授权范围。
如果这些模板是你的核心竞争力,优先选择私有保存。公开仓库里的声明可以提供法律边界,却无法从技术上阻止别人查看或抄走内容。
十六、最后记住这几句话
- 代码放到 GitHub,不会自动变成开源项目。
- 没有 LICENSE,你依然有版权,只是别人没有获得明确的使用许可。
- 个人小工具想简单开源,MIT 通常够用。
- 企业项目或比较在意专利,可以考虑 Apache 2.0。
- 使用 GPL、AGPL、LGPL 等代码时,要多看一眼发布和源码要求。
- 不要自己拼一份新协议,优先使用成熟的标准协议。
协议没有绝对的好坏,关键看你希望别人怎样使用你的作品。
如果你和我一样,还处在边做边学的阶段,也不用一开始就把几十种协议全部研究明白。先把自己的使用场景想清楚,再从最常见的几个协议里选择,就已经能避开大部分问题了。

