本文目录导读:

MPL协议(Mozilla Public License,Mozilla公共许可证)对文件级开源有明确且具体的规定,其核心特点是 “文件级保护” 和 “弱著佐权”,这意味着它既不像GPL那样具有强传染性,也不像MIT/BSD那样完全自由。
以下是MPL(当前主流版本为2.0)对文件级开源的具体规定和理解:
核心原则:基于文件的“复制粘贴”式传染
MPL 2.0 的许可证边界是 单个源文件,它的关键在于:受MPL许可的文件,其代码(以及对其所做的修改)必须继续保持MPL许可,这个文件可以与其他许可证(如Apache 2.0、MIT,甚至专有许可证)的文件进行组合,形成一个更大的作品,而不会污染这些其他文件。
具体规定拆解
对“修改代码”的规定
这是MPL最核心的条款(通常称为“文件级保护”):
- 如果你修改了一个原本是MPL许可的文件,这个 被修改的文件 必须 继续 以MPL许可证进行分发,你不能将一个MPL文件中的部分代码提取出来,放到一个私有文件中使其变为私有。
- 例子:你下载了一个MPL许可的
utils.js文件,你修改了其中的一些函数,当你把修改后的utils.js分发给别人时,这个utils.js文件必须仍然是MPL许可的。
对“组合代码”的规定
这是MPL区别于GPL的关键点,当MPL代码与其他许可的代码组合成一个更大的程序时:
- MPL代码在各自文件中保持独立:只要MPL文件本身没有改动,并且作为独立的文件存在,它就可以与任何其他许可的代码(包括闭源/专有代码)链接、编译或打包在一起。
- 组合后的整体作品:对于整个最终产品(例如一个可执行程序、一个库文件),其整体许可证 可以不是MPL,你可以选择用闭源许可证分发整个产品。
- 重要条件:你必须提供一种方式,让最终用户能够获取到产品中使用到的所有MPL文件的源代码(包括你对它们的修改,如果有的话),典型的做法是在产品中包含一个README或LICENSE文件,说明MPL代码的来源,并提供下载源码的链接或方式。
对“新增文件”的规定
如果你在项目中 新创建了一个文件,且这个文件是你自己独立编写的(不包含其他任何MPL代码或衍生代码):
- 你可以自由选择许可证:你可以选择MPL、GPL、Apache 2.0、MIT、闭源、或任何其他许可证,这个新文件不受项目中原有MPL文件的影响。
对“专利授权”的规定
MPL 2.0 包含了明确的 专利授权 条款:
- 任何贡献者在提交代码时,自动授予了用户对其实施该代码所必需的专利的 免版税、非独占 许可。
- 反诉条款:如果用户(你)因为某个MPL代码的专利问题起诉了原作者,那么原作者授予你的这项专利许可将自动终止。
MPL与其他许可证的区别
| 特性/场景 | MPL 2.0 | GPL系列 | MIT / Apache 2.0 |
|---|---|---|---|
| 传染性 | 中等(文件级) | 强(程序/作品级) | 无(非常宽松) |
| 修改代码后 | 修改的MPL文件必须继续用MPL | 整个作品必须用GPL | 可以改为闭源 |
| 组合代码 | MPL文件本身保持MPL,但整体作品可以闭源 | 整个组合作品必须开源(GPL) | 可以闭源 |
| 专利授权 | 有明确、全面的专利授权和反诉条款 | 部分版本有,部分无(GPLv3有) | MIT无,Apache有 |
| 典型使用场景 | 浏览器(Firefox)、PDF引擎 (pdf.js)、数据处理库 | Linux内核、GNU工具链、WordPress | 大多数前端库(React, jQuery),开发工具(Node.js早期) |
实践中需要特别注意的点
- 不要误解“组合”:MPL的“组合”指的是链接、打包、编译等操作,不包括直接复制粘贴代码,如果你把MPL文件中的一段函数复制到你自己写的文件中,那么那个你自己的文件就变成了MPL的 衍生作品,必须用MPL许可。
- 修改后的MPL文件的完整定义:你修改后的那个MPL文件本身,必须包含你的修改声明、修改日期,以及完整的MPL许可证文本(或指向其副本),这通常通过文件头部的注释块完成。
- 如何提供源代码:即使你的最终产品是闭源的,你也必须确保用户能获得你所使用的所有MPL文件的 对应源代码(Source Code),你可以在产品中附带链接、放在GitHub仓库、或直接提供压缩包。
- 命名约定:MPL不要求修改后的文件有任何特殊的命名后缀(不像LGPL有时要求),但强烈建议你清晰表示这是修改版。
- 对于想要保护核心代码同时允许商业应用的公司:MPL非常合适,你可以将核心算法库用MPL开源,同时允许其他公司在闭源产品中调用这个库。
- 对于个人开发者:MPL能有效防止别人直接复制你的单个文件后闭源,但仍允许他人自由使用和组合。
- 如果你想实现“全开源”(即所有衍生作品都必须开源),选择GPL。
- 如果你想最大程度方便他人使用,不关心别人是否开源,选择MIT。
一句话总结MPL对文件级开源的规定:你修改的MPL文件必须继续开源,但你可以把MPL文件与其他闭源文件打包成一个闭源产品。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播