你是不是经常遇到这种情况:在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 库时,要留意动态链接、静态链接和重新链接的要求。

如果这些词你还不熟,也不用硬啃。准备商业发布时,把下面三件事告诉有经验的人:

  1. 你用了哪个 LGPL 库;
  2. 你有没有修改它;
  3. 你是怎样把它打包进产品的。

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 时,要继续看:

  1. 哪些用途免费;
  2. 哪些用途要购买商业许可;
  3. 限制到哪一天;
  4. 到期后转成什么协议。

SSPL

如果你用它对外提供服务,可能需要开放管理、监控、备份等整套服务相关软件。

它要求开放的范围可能比 AGPL 更大,也没有得到 OSI 的开源认可。

作为新手,看到 BSL 或 SSPL 时,不要直接按照 MIT 项目的方式使用。一定要阅读该项目写明的具体条件。

十一、使用别人的开源代码,要做什么?

不用一上来研究所有法律细节,先按这五步检查。

第一步:找 LICENSE

查看仓库根目录有没有:

  • LICENSE
  • LICENSE.txt
  • COPYING

README 里也可能写着许可证。如果完全找不到,不要默认可以随便使用。

第二步:看清协议名字和版本

MIT 比较简单。遇到 GPL 或 LGPL 时,还要看是 2.0、3.0,还是带有 onlyor-later

同一个项目的新旧版本,也可能使用不同协议。

第三步:想清楚你要怎么用

问自己几个问题:

  • 只是本地学习吗?
  • 会把代码复制进自己的项目吗?
  • 会修改它吗?
  • 会把安装包或 Docker 镜像交给别人吗?
  • 会放到服务器上提供在线服务吗?

用途不同,要求也会不同。

第四步:保留该保留的内容

MIT、BSD 也有要求,最常见的就是保留原作者版权和许可证。

商业产品可以把第三方协议放在:

  • LICENSES 目录;
  • THIRD-PARTY-NOTICES 文件;
  • App 的「开源许可」页面;
  • 产品文档中。

第五步:该给源码时就给源码

使用 GPL、LGPL、MPL 或 AGPL 时,如果你的用法触发了源码要求,就要按协议提供相应源码。

如果你准备收费、交付客户或销售硬件,又不确定自己的做法是否合规,最好再请专业人士检查。

十二、怎么给自己的 GitHub 项目加协议?

最简单的方式,是在 GitHub 创建仓库时点击 Choose a license,然后选择需要的协议。

已经创建好的仓库:

  1. 在根目录创建一个名为 LICENSE 的文件;
  2. 放入对应协议的完整原文;
  3. 按模板填写年份和版权人;
  4. 在 README 里说明项目使用什么协议。
1
2
3
## License

This project is licensed under the MIT License. See [LICENSE](./LICENSE) for details.

不要只在 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 往往同时包含两类东西:

  1. Skill 本身的代码、提示词模板或工作流文件
  2. 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 中分别写清代码、模板、示例素材和生成内容的授权范围。

如果这些模板是你的核心竞争力,优先选择私有保存。公开仓库里的声明可以提供法律边界,却无法从技术上阻止别人查看或抄走内容。

十六、最后记住这几句话

  1. 代码放到 GitHub,不会自动变成开源项目。
  2. 没有 LICENSE,你依然有版权,只是别人没有获得明确的使用许可。
  3. 个人小工具想简单开源,MIT 通常够用。
  4. 企业项目或比较在意专利,可以考虑 Apache 2.0。
  5. 使用 GPL、AGPL、LGPL 等代码时,要多看一眼发布和源码要求。
  6. 不要自己拼一份新协议,优先使用成熟的标准协议。

协议没有绝对的好坏,关键看你希望别人怎样使用你的作品。

如果你和我一样,还处在边做边学的阶段,也不用一开始就把几十种协议全部研究明白。先把自己的使用场景想清楚,再从最常见的几个协议里选择,就已经能避开大部分问题了。