诞生背景
MPL(Mozilla Public License)最初是 1998 年初 Netscape 的 Mozilla 小组为其开源软件项目设计的软件许可证 。Netscape 公司认为 GPL 许可证没有很好地平衡开发者对源代码的需求和他们利用源代码获得的利益,于是设计了 MPL。截至 2021 年 1 月 5 日,此许可证当前版本为 MPL 2.0 ,它融合了 BSD 许可证和 GNU 通用公共许可协议的特性,试图平衡专有软件和开源软件开发者之间的顾虑。
主要条款
- 定义
-
- 贡献者:指创建、参与创建或拥有受保护软件的每个个人或法人实体。
-
- 贡献者版本:指特定贡献者的受保护软件。
-
- 受保护软件:指初始贡献者随附了附件 A 通知的源代码格式、该源代码的可执行形式或该源代码的修改,在每种情况下都包括其部分。
-
- 与二级许可证不兼容:满足以下情况之一,① 初始贡献者已将附件 B 中的通知附加到受保护软件;或 ② 受保护软件是根据 1.1 版或更早版本的许可条款提供,但不是根据二级许可的条款提供的。
-
- 可执行形式:指源代码以外的任何形式的作品。
-
- 大型作品:指将受保护软件与其他材料组合在一个或多个单独文件中的作品,该作品不属于受保护软件。
-
- 许可证:即 MPL2.0 文件本身。
-
- 可许可:指有权在最大范围内授予本许可所传达的权利,无论是在最初还是后续时授予。
-
- 修改:包括因添加、删除或修改受保护软件的内容而产生的源代码形式的任何文件,以及源代码形式的、包含受保护软件的新文件。
-
- 专利声明:指该贡献者可授权的专利中的权利要求,包括但不限于方法、工艺和设备权利要求,如果没有授予许可,则会因其贡献或贡献者版本的制作、使用、销售、进口或转让而受到侵犯。
-
- 二级许可证:指 GNU 通用公共许可证 2.0 版、GNU Lesser 通用公共许可证 2.1 版、GNU Affero 通用公共许可证 3.0 版或这些许可证的任何后续版本。
-
- 您:指根据本许可证行使权利的个人或法人实体。对于法人实体,“您” 包括控制您、受您控制或与您共同受控制的任何实体。
- 许可授予和条款
-
- 授予:每位贡献者授予全球范围的、免版税的、非排他性的许可。包括根据该贡献者可授权的知识产权(专利或商标除外),在未经修改的基础上,或作为更大作品的一部分,使用、复制、提供、修改、显示、执行、分发和以其他方式利用其贡献;根据该贡献者的专利声明,您可以制作、使用、销售、进口或以其他方式转让其贡献或贡献者版本。
-
- 生效日期:与贡献有关的许可在贡献者首次分发此类贡献之日生效。
-
- 授权范围的限制:第 2 节中所授予的权利是本许可下授予的唯一权利。根据本许可分发或许可受保护软件不意味着额外的权利或许可。在没有贡献的情况下,受保护软件侵犯的专利权,本许可证不授予任何贡献者商标、服务标记或徽标的任何权利(除非为遵守第 3.4 节中的要求所必需)。
-
- 后续许可证:如果选择根据本许可证的后续版本或二级许可证的条款(如果第 3.3 节的条款允许)分发受保护软件,则任何贡献者均不会因此提供额外的授权。每位贡献者都认为其贡献是原创作品,或其有足够的权利授予本许可证转让的贡献的权利。本许可证无意限制您在合理使用、公平交易或其他同等适用版权原则下拥有的任何权利。
- 责任义务
-
- 源代码形式发布:所有以源代码形式分发的受保护软件,包括创建或贡献的任何修改,都必须遵守本许可证的条款。必须通知接收人,软件的源代码受本许可证条款的保护,以及他们如何获得本许可证的副本。
-
- 可执行形式发布:以可执行形式分发受保护软件时,此类涵盖的软件还必须以源代码形式提供,并且必须通知可执行形式的接收者如何通过合理的方式及时获得此类源代码格式的副本,费用不超过分发给接收方的费用;可以根据本许可证的条款分发此类可执行表单,或者根据不同的条款对其进行再授权,前提是可执行表单的许可证不试图限制或更改接收者在本许可证下对源代码表单的权利。
-
- 较大作品的分发:可以根据自己选择的条款创建和分发大型的作品,前提是也遵守本许可证对受保护软件的要求。如果大型作品是受保护软件与受一个或多个二级许可证保护的作品的组合,并且受保护软件与二级许可证不兼容,则本许可证允许根据该二级许可证的条款额外分发该受保护软件,以便大型作品的接收者可以自行选择根据本许可证或二级许可证来进一步分发受保护的软件。
-
- 通知:不得删除或更改所涵盖软件源代码格式中包含的任何许可声明(包括版权声明、专利声明、免责声明或责任限制)的实质内容,除非可以更改任何许可声明,以纠正已知的事实不实之处。
-
- 附加条款的适用:可以选择向一个或多个受保软件的接收者提供保修、支持、赔偿或责任义务,并收取费用。但必须明确表示,此类担保、支持、赔偿或责任义务均由单独承担,同意赔偿每位贡献人因上述行为而产生的任何责任。还可以包括针对任何司法管辖区的额外免责声明和责任限制。
- 特殊情况处理
-
- 因法令或法规而无法遵守:如果由于法令、司法命令或法规的原因,无法遵守本许可证中关于部分或全部受保护软件的任何条款,则必须最大限度地遵守本许可证的条款;以及描述其影响的限制和代码。此类说明必须放在本许可证下涵盖软件的所有发行版中的文本文件中。
-
- 终止:如果未能遵守本许可证的任何条款,则根据本许可证授予的权利将自动终止。但是,如果合规,则根据本许可证从特定出资人处授予的权利将被恢复(临时,除非该出资人明确并最终终止您的授予;在持续的基础上,如果该出资人未能在 60 天后以某种合理方式通知您不合规情况)。此外,如果某个特定出资人以某种合理的方式通知您违规行为,这是第一次从该出资人处收到不符合本许可证的通知,并且在收到通知后的 30 天内合规,则将继续获得该出资人的授权。如果通过主张专利侵权索赔(不包括声明性判决诉讼、反索赔和交叉索赔)对任何实体提起诉讼,声称贡献者版本直接或间接侵犯了任何专利,则本许可证第 2.1 节项下由任何和所有贡献者授予受保护软件的权利将终止。如果根据上述情况终止协议,在终止之前由或经销商根据本许可证有效授予的最终用户许可协议(不包括经销商和转销商)应在终止后继续有效。
- 其他条款
-
- 许可证的版本:除许可证管理员外,任何人都无权修改或发布本许可证的新版本。可以根据最初收到受保护软件的许可版本条款或许可管理者发布的任何后续版本的条款分发受保护软件。如果创建不受本许可证约束的软件,并希望为此类软件创建新的许可证,可以创建和使用本许可的修改版本,前提是重命名许可并删除对许可管理者姓名的任何引用(除非注意此类修改后的许可与本许可不同)。
-
- 分发与二级许可证不兼容的源代码形式:如果选择根据此版本许可的条款分发与二级许可不兼容的源代码形式,则必须附上本许可附件 B 中描述的通知。
特点
- 弱 Copyleft 特性:它不像 GPL 那样严格,仅对修改过的文件要求保持同样的许可证,不影响整个项目。也就是说修改后的文件必须开源,但其他未修改的文件可以闭源 ,这在一定程度上平衡了开源与商业利益,允许混合使用开源和闭源代码。例如一个项目中使用了 MPL2.0 协议的开源代码,开发者只需要将修改的部分以 MPL2.0 协议开源,未修改部分可以根据自身需求选择闭源或者其他开源协议。
- 专利相关规定:贡献者授予使用者根据其专利声明使用、制作、销售等相关专利的权利。但对于贡献者从覆盖的软件中删除的任何代码,因使用者和任何其他第三方对涵盖软件的修改,或其贡献与其他软件的组合(作为贡献者版本的一部分除外)造成的侵权,以及在未提供专利权的情况下,受管辖软件侵犯的专利权,贡献者不授予专利许可。
- 商标等权利限制:本许可证不授予任何贡献者商标、服务标记或徽标的任何权利,除非为遵守通知要求而有必要。
应用场景
- 商业公司部分开源场景:对于商业公司来说,如果希望在利用开源代码的同时,对自己核心的部分代码闭源以保护商业利益,MPL2.0 是一个不错的选择。例如公司在开发一款软件产品时,使用了基于 MPL2.0 协议的开源库,只需要将对该开源库修改的部分按照 MPL2.0 协议开源,而公司自己开发的核心业务逻辑代码可以选择闭源,通过这种方式平衡开源和商业利益。
- 社区开源项目:一些社区开源项目希望在保证代码开源的同时,允许开发者在一定程度上将代码用于商业用途,并且不会对整个项目的开源性质产生过度 “传染性” 影响。例如一些小型的工具类开源项目,采用 MPL2.0 协议,既鼓励了开发者参与贡献代码,又方便其他开发者在不同场景下使用该项目代码。像 Mozilla Firefox、Mozilla Thunderbird 等 Mozilla 软件 ,以及 Adobe Flex 产品线、LibreOffice 4.0 等众多产品都应用了 MPL2.0 协议。
与其他开源协议对比
- 与 GPL 对比
-
- 传染性不同:GPL 具有强传染性,只要软件中使用了 GPL 协议的代码,整个软件都必须采用 GPL 协议开源。而 MPL2.0 仅对修改的文件有开源要求,项目其他部分可闭源。例如一个大型项目,如果引入了 GPL 协议的库,整个项目都要开源;但如果引入的是 MPL2.0 协议的库,仅修改部分需按 MPL2.0 开源。
-
- 对专利态度不同:GPL 没有明确关于专利授权方面的细致规定,而 MPL2.0 对专利授权范围有明确界定,如对贡献者在何种情况下授予专利许可进行了详细说明。
- 与 BSD、MIT 对比
-
- 开源要求不同:BSD 和 MIT 属于宽松式许可证,对代码使用限制很少,允许代码被用于商业用途且闭源。而 MPL2.0 虽然也允许一定程度的商业使用,但对修改部分有开源要求。例如使用 BSD 或 MIT 协议的代码,开发者可以完全闭源使用和修改;但使用 MPL2.0 协议的代码,修改部分要开源。
-
- 对代码保护程度不同:BSD 和 MIT 协议下,原作者对代码后续修改和分发的控制较弱;MPL2.0 通过对修改部分开源的要求,一定程度上保护了开源代码的开放性和后续可维护性。