作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.
大卫·马林的头像

大卫·马林

David是一名开源和开放数据爱好者,拥有18年的专业web开发经验.

专业知识

以前在

Entelgy
分享

并不是所有的开源许可证都是一样的. 其中一些规定要求软件供应商向软件的用户和开发者授予专利许可. 其他许可证要求使用许可产品或库的开发人员在相同的条款下提供该产品或库的源代码. 还有一些人只是免费提供代码,没有任何形式的保证或任何顾虑. 在本文中,我将尝试从软件用户和软件开发人员的角度强调最常用的开源许可证之间的主要区别.

揭开深奥的神秘面纱——开放源码许可证

揭开深奥的神秘面纱——开放源码许可证

1984年,Richard Stallman开始了GNU项目,以创建一个自由的操作系统, 他恢复了软件应该在开发者之间共享的想法, engineers and users; and they should be able to improve it in a collaborative way in the same way that science is usually done.

这一选择与大多数软件公司和开发人员为分发和销售他们的程序而选择的许可软件的通常概念形成对比. 今天, 三十多年后, 开源软件慢慢地继续征服我们行业的广泛领域:Linux, 安卓, Apache和Git是各自类别中领先的开源产品的例子.

开源或免费软件?

开源:自由的意思

在本文中, 在提到软件或许可证时,我将使用“开源”和“免费”作为同义词. 在我看来,这两个词表达的意思是一样的. “开源”以一种实用和技术的方式表达了它, 而使用“Free”则将焦点放在了这个概念的哲学和政治意义上.

不幸的是,英语中的“免费”这个词, 除了作为与“自由”相关的形容词之外, 也表示“没有成本”. 这就是我通常喜欢说“开源”的原因。.

开源软件的共同属性

开源并不仅仅意味着访问源代码

我想您已经大致了解了什么是开源软件. 但是我们会讨论不同许可证的细节, 首先,我们需要谈谈定义开源软件的具体属性.

首先,我不是律师,这也不是法律建议. 如有疑问, 请参考我所说的许可证的实际文本, 还有你的法律顾问.

所有开源软件, 根据开源促进会的说法, 是在授予用户和开发者(被许可方)一些权利的许可下发布的. 完整的列表可以在 开源定义,但这里有一个基本的总结:

  1. 软件的自由再分发:软件可以作为产品出售或赠送,也可以包含在软件包中. 这样做无需支付任何版税.
  2. 许可软件的源代码要么包含在发行版中, 或者至少有广为宣传的获取源代码的方法. 该源代码可用于开发该软件的修改版本.
  3. 允许创作衍生作品, 许可证允许它们在与原始软件相同的条款和许可证下分发. 取决于原始软件的许可证, 在某些情况下,这些衍生作品必须通过更改其名称或版本号来与原始软件区分开来, 或者只能以源代码补丁的形式分发.
  4. 该软件可以被任何人或一群人使用, 在任何努力的领域, 没有限制.

但是您必须记住,软件许可证只涉及使用或分发由版权所有者授予的许可. 开源许可证可能允许您自由地重新发布软件或派生作品, 但在一些禁止出口加密软件的国家,这一额度也可能受到限制. 同样地, 开源许可证允许您出于任何目的使用该软件, 但这并不意味着他们允许你使用开源许可软件入侵银行. 软件专利是另一个例子:一些开源许可证授予自由使用专利的许可, 但不是所有的.

那么,我们可以在产品或项目的开发中使用开源软件吗? 基本上, 它取决于所使用软件的许可证和最终产品的预期许可证. 当您希望将自己的代码作为开源发布,并决定应该使用哪个许可时,不同的许可也很重要.

版权

强copyleft vs弱copyleft

关于开源许可的一个非常有趣的概念通常被称为copyleft, 版权的反义词. 版权在哪里被用来保护知识产权(包括软件)不被复制或分发, 版权用于确保开源知识产权和软件可以作为开源复制或分发.

根据其强度,copyleft有两种:

  • 强copyleft:当作品来源于其他强copyleft许可作品时, 或者链接到这些作品, 必须继续拥有强大的copyleft许可证吗, 甚至是完全相同的许可证. 也就是说,那些开源作品在未来不能被关闭.
  • 弱copyleft:当作品使用弱copyleft许可作品时, 或者链接到它, 可以使用其他许可证吗, 即使是闭源许可证. 在这种情况下,copyleft仅影响原始的弱copyleft许可作品.

也有没有copyleft的开源许可证:他们根本不关心派生软件未来的开放性.

放纵

根据许可证的许可程度,许可证还可以分为:

  • 严格许可:当您不能将强许可软件与闭源软件混合使用时, 或者使用更宽松的许可软件.
  • 宽松许可证:产品通常可以与闭源软件混合使用, 或者使用完全开源许可的软件.

通常, 强大的copyleft许可也很严格, 而弱的copyleft许可证则更为宽松, 但这不是必须的.

开源许可证差异

存在许多开源许可证. 开源促进会已经批准了其中的80多个. 有些是多余的,可以被认为是等同于其他的. 其他则是特定于软件发布者的利益(例如NASA许可证)。, 或为特定的环境或目的(如教育社区许可证), 或开放字体许可证).

许可证的激增是基于许可证中的特定条款, 添加到基本的开源属性, 允许或禁止其他用途. 这些附加条件的例子包括:

  • copyleft类型:弱、强或不存在.
  • 宽容的类型:宽容的或严格的.
  • 在源代码或用户界面中添加版权声明的义务.
  • 自动授予被许可人专利.
  • 考虑到被许可方不仅仅是分发软件的各方, 而且软件的用户(这样使用云服务的人使用这种开源软件应该可以选择下载软件的源代码)

使用不同许可证混合代码的问题

混合使用不同许可证的代码可能会带来有趣的挑战

根据我们之前说过的, 有些许可证是宽松的, 允许用户将代码与不同许可的源代码组合在一起(可能有附加条件). 这种情况将允许将这种开源许可软件与闭源软件混合在一起. 这种许可证的一个例子是MIT许可证.

另一些则更具限制性, 因此,源代码只能与以类似方式获得许可的代码相结合, 最终结果必须使用相同的原始许可. 这种许可证的一个例子是通用公共许可证(GPL)。.

也许您想要组合使用两个不同的限制性开源许可许可的代码. 使用开源的自由来使用软件,你可以做到这一点. 但是最终的程序不能重新分发, 因为它应该在两个互不兼容的许可证下发布.

这种情况的一个例子是ZFS. ZFS是一个非常先进和创新的文件系统,于2005年包含在OpenSolaris中. 它是一个开源软件,在公共开发和分发许可证(CDDL)的条款下获得许可。. 虽然它是开源代码, 它不能集成到Linux内核中,因为源代码 Linux 在通用公共许可证的条款下发布, 另一个限制性开源许可证. 使用ZFS编译的Linux内核二进制文件由于许可证冲突无法分发.

这些冲突只有在某个开源程序的所有所有者同意更改许可证的情况下才能解决, 或者在软件许可中添加例外条款. 例如:很多GPL许可的程序都链接到OpenSSL库. OpenSSL库发行版的许可要求在广告材料和任何再发行版中出现一个短语. 这些附加条件与GPL不兼容, 因此,使用OpenSSL的GPL产品的开发者在他们的许可证中包含了一个例外,特别允许与OpenSSL链接.

开源许可证的差异特性

现在我将尝试分析最流行的开源许可证, 注意它们的不同特征, 还有一些关于何时使用或不使用的指导. 我把它们按使用次数从多到少进行了分类 黑鸭知识库.

GNU通用公共许可证(GPL)

GPL 最流行的开源许可证是什么. 它是由自由软件基金会创建的,作为GNU项目的许可证, 它也是Linux内核的许可证.

其差异特点:

  • 强大的版权.
  • 非常严格的许可.
  • 它通常被称为“病毒式”许可:如果你将你的代码链接到另一段遵循GPL许可的代码,并想要分发其结果, 整个产品必须是gpl许可的.
  • 这也是一个“拥抱”许可:如果你正在开发一个软件,并希望根据GPL许可它, 您可以链接它或包含其他开源软件,只要该软件具有与GPL兼容的许可证. 它不需要GPL没有要求的任何义务.

通常, 使用的许可证文本包括说明该软件是根据GPL版本N(或任何更高版本)的条款发布的文本。.

目前使用的GPL许可证有v2和v3两个版本. 版本3于2007年发布,用于解决自1991年版本2发布以来出现的一些问题.

GPL v3包含一些额外的条款和条款, 解决与其他开源许可证的兼容性规则, 强制专利许可, 定义在设备中使用gpl许可软件作为固件的条件, 考虑到数字版权管理的概念.

麻省理工学院的许可

开源许可证通常被称为 麻省理工学院的许可, a.k.a. X11许可证, 是一个非常宽松的非copyleft许可协议,允许每个人基本上使用许可代码做任何你想做的事情,只要你保留版权信息, 并且知道该软件没有任何形式的保证.

这个许可证很受欢迎, 并被几个项目用作X窗口系统, Ruby on Rails, jQuery或Node.js.

它与GPL兼容,因此您可以将mit许可的代码混合到GPL软件中.

Apache许可 2.0

Apache许可 是由Apache软件基金会(ASF)创建的,作为其Apache HTTP服务器的许可证.

就像MIT许可证一样, 这是一个非常宽松的非copyleft许可证,允许将软件用于任何目的, 分发, 修改它, 分发它的衍生作品而不考虑版税. 与MIT许可证相比,它的主要区别在于:

  • 使用Apache许可, 软件的作者向代码的任何用户或分发者授予专利许可. 本专利许可适用于任何专利, 可由任何软件作者授权, 会被他们创造的代码所侵犯吗.
  • Apache许可证要求派生作品中未修改的部分保持该许可证.
  • 在每个授权文件中, 任何原创版权, 专利, 商标或归属通知必须保留.
  • 在每个许可文件更改, 必须有一个通知,说明在文件中进行了更改.
  • 如果apache许可的软件包含NOTICE文件, 此文件及其内容必须在所有派生作品中保存.
  • 如果有人故意向其作者发送apache许可软件的贡献, 这个贡献可以在Apache许可证下自动使用.

这个许可很有趣,因为它是自动的专利许可, 以及提交出资的条款.

它与GPL兼容,因此您可以将Apache许可代码混合到GPL软件中.

BSD许可

有三种不同的BSD许可证. 它们都是非常宽松的许可证,没有copyleft.

2条款BSD许可证 (或简化BSD许可证)完全等同于前面解释的MIT许可证.

3条款BSD许可证 (或新BSD许可证)增加了一个条款, 明确指出,未经事先书面许可,不得使用版权所有者的名字或贡献者的名字来支持或推广源自该软件的产品. 此版本与GPL兼容,允许您将3-clause-BSD许可代码混合到GPL软件中.

4条款BSD许可证 (或原始BSD许可证)添加了另一个条款, 规定所有提及软件功能或使用的广告材料必须显示确认,表明该产品包含版权所有者开发的软件. 这个包含4个条款的BSD许可证与GPL不兼容. 具有此许可的代码不能根据GPL条款进行重新许可, 因为第四个条款增加了GPL中没有要求的要求.

GNU宽松通用公共许可证(LGPL)

LGPL是由自由软件基金会创建的,是对GPL的修改,带有较弱的copyleft, 允许将lgpl许可的软件与任何其他软件链接. 在其起源中,LGPL代表“图书馆通用公共许可证”。, 但后来它以现在的名字“较宽松通用公共许可证”来代表FSF的观点,即所有的软件都应该是自由的, 因此,LGPL不应该被普遍使用.

您可以将闭源代码链接到LGPL库或软件,并发布最终结果,只要:

  • 您提供了lgpl部分的源代码,以及您对其所做的所有修改.
  • 任何具有足够知识的用户都可以用修改后的版本替换程序的lgpl部分. 这可以将程序的lgpl部分作为动态库(Windows中的DLL)分发, .(在Linux/Unix中),或者提供程序中非lgpl部分的目标代码.

由于LGPLv3与GPLv3兼容,所以在GPL软件中可以输入LGPLv3的代码.

艺术许可证

艺术许可证,其当前版本为2.0,是一个宽松的开源许可证,没有类似于MIT许可证的copyleft.

MIT许可协议和艺术许可协议的主要区别在于,后者要求对代码所做的任何修改都必须清楚地说明.

这个许可证几乎只在Perl社区中使用.

当前的艺术许可.0与GPL兼容:您可以将艺术许可代码混合到GPL软件中.

微软公共许可证(MS-PL)

微软公共许可证 是由该公司于2008年创建的,作为他们的共享源代码倡议创建的开源许可证之一.

这是严格的, 弱copyleft许可:它允许使用MS-PLed代码创建和分发闭源程序, 但它有义务使用MS-PL作为衍生作品的许可证,如果这些作品以源代码形式分发.

我个人认为这个许可证有点反常,违背了开源的精神, 允许关闭代码,这样在某种程度上版权所有者就不关心你可以用软件做什么, 但是,您不能共享与其他copyleft源代码混合的代码. 换句话说, 版权所有者真的很关心你能做什么, 而且他不希望您出于改进Linux等原因使用这些代码.

MS-PL与GPL不兼容.

Eclipse公共许可证(EPL)

Eclipse公共许可证 该许可证是由Eclipse基金会为其集成开发环境创建的吗. 这是一个限制性的弱copyleft许可协议,在许多方面与LGPL相似. 它还包括自动授予专利许可的条款.

EPL与GPL不兼容.

Mozilla公共许可证(MPL)

Mozilla公共许可证 版本2.0是Mozilla基金会为其产品创建的弱copyleft许可协议.

我们可以认为这个许可证类似于LGPL, 但主要的区别在于MPL还允许将MPL的代码片段静态链接到闭源软件中.

MPL,在其当前的版本2.0与GPL兼容. 这在以前版本的MPL中是不成立的.

共同开发与发行许可证(CDDL)

CDDL 是Sun(现在是Oracle)基于MPL版本1创建的弱copyleft,宽松的许可证吗.1. 基本上,它与MPL具有相同的属性. 它的条款得到澄清,但没有实质性的改变.

CDDL是Sun(现在是Oracle)为其许多产品选择的开源许可证, 如OpenSolaris或NetBeans, 等.

因为这个许可证是基于MPLv1的.1, 本许可证与GPL不兼容, 因此,您不能将cddl许可的源代码混合到GPL许可的软件中. 很多人说这是故意的, 所以OpenSolaris源代码不能被引入到Linux内核中.

GNU Affero通用公共许可证(AGPL)

AGPL GPL的版本是否具有更强、更严格的copyleft. 它不仅有义务向接收软件副本的人提供应用程序的源代码, 同时也向通过计算机网络使用该软件的人开放.

本许可证是由自由软件基金会创建的 开发人员 当开源软件在网络服务器或云中执行时,避免实际关闭的方法, 因为GPL不能强迫服务提供商向用户提供源代码. 在这种情况下,软件不分发.

AGPLv3与GPL3兼容. 您可以将AGPLv3代码放入GPLv3代码中,只要最终结果在AGPLv3下获得许可.

ISC许可证

ISC许可证 是一个由互联网软件联盟(ISC)编写的宽松的自由软件许可证。. 它在功能上等同于2-clause BSD和MIT许可证, 在删除了一些被认为不必要的语言之后.

最初用于ISC自己的软件版本, 它已经成为OpenBSD的首选许可证(从2003年6月开始), 在其他项目中.

它与GPL兼容:您可以将iscc许可的代码混合到GPL软件中.

微软互惠许可(MS-RL)

微软互惠许可 是由该公司于2008年创建的,作为他们的共享源代码倡议创建的开源许可证之一.

它类似于之前解释的MS-PL, 但它有更强的copyleft, 类似于LGPL的条件, CDDL, 和EPL. 如果您将代码与ms - rl许可的源代码混合,并希望分发最终结果,则需要这样做, 至少原始的ms - rl授权部件必须继续使用本许可证.

它与GPL不兼容.

公共领域(CC0)

根据维基百科, 公有领域的作品是指那些知识产权已经过期的作品, 已被没收, 或者不适用。”. 将作品奉献给公共领域,作者放弃他在版权法下对作品的所有权利.

有几个软件项目在公共领域, 例如SQLite, 这个库实现了一个可嵌入的简单SQL数据库引擎,包含在其他几个项目中, 比如Mozilla项目, 安卓, 等.

将一个软件奉献给公共领域的方法有很多种. 知识共享创建了 CC0公共领域奉献一种将作品发布到公共领域的通用方式. 自由软件基金会建议将此文本用于将软件专用于公共领域.

公共领域的作品与任何开放或闭源许可证兼容, 并且可以混合到任何其他软件中.

多个许可

有一些开源软件是双重甚至三重授权的. 这意味着接收到这个多重许可软件的人可以选择他或她想要发布它的许可证. 因为每个许可证授予不同的权限并施加不同的义务, 必须进行选择,以选择最能满足需求的许可证.

这是一些库的常见情况. 例如,NSS是一个由Mozilla制作的库 实现了SSL/TLS支持,以及其他安全相关功能. 它在MPL、GPL和LGPL许可下进行三重许可.

请选择一个许可证

很多人在没有任何书面许可的情况下在GitHub平台上发布代码. 任何人都不应该使用那个代码. 我们不知道我们有什么权限使用它. 如果你使用它,你可能会因此被起诉. 就好像这些人在戏弄我们,说:“嘿,看看我做了什么! 很酷,不是吗? 但你不能用,我只是想给你看看!”.

执照不是奢侈品,它是必需的

请不要成为他们中的一员. 如果您将代码上传到GitHub或类似的公共站点,请允许其他人使用并增强它. 如果你不想想太多,以下是我的建议:

  • 如果你想保持简单和宽容, 允许每个人对你的代码做他们想做的事情,只要他们提供归因给你,不让你承担责任, 使用MIT许可证.
  • 如果你想保持宽容的话, 允许每个人对你的代码做他们想做的事情,但明智地列出版权法下的权利,并授予这些权利, 同时提供一个明确的授予专利权的贡献者给用户, 使用Apache 2.0许可证.
  • 如果您关心共享修改,并且不希望您的代码在封闭的开发中使用(无论是在封闭的软件产品中还是在封闭的硬件设备中), 使用GPL v3.

    • 如果您不关心您的软件在封闭设备中使用的可能性, 使用GPL v2. 但是请使用“或任何以后的版本”句子,这样您的代码也可以在GPLv3项目中使用.
    • 如果你不关心你的软件在封闭软件中被使用的可能性, 只要您的软件或使用它的部分在相同的条款下继续开放源代码, 请使用LGPL v3.
    • 如果你想让每个通过网络使用你的软件的人都有权获得它的源代码, 使用AGPL v3.

在这一切之后,你可能已经厌倦了所有这些几乎毫无意义的准法律的胡言乱语. 但是你知道吗? 这是需要的. 因为没有许可证,您就没有使用或分发任何代码的权利.

聘请Toptal这方面的专家.
现在雇佣
大卫·马林的头像
大卫·马林

位于 Cobena、西班牙

成员自 2015年7月2日

作者简介

David是一名开源和开放数据爱好者,拥有18年的专业web开发经验.

Toptal作者都是各自领域经过审查的专家,并撰写他们有经验的主题. 我们所有的内容都经过同行评审,并由同一领域的Toptal专家验证.

专业知识

以前在

Entelgy

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

世界级的文章,每周发一次.

订阅意味着同意我们的 隐私政策

Toptal开发者

加入总冠军® 社区.