本文概述
- 开源还是免费软件?
- 开源软件的共同属性
- Copyleft
- 宽容
- 开源许可差异
- 不同许可证混合代码的问题
- 开源许可证的差异性
- 多重授权
- 请选择一个许可证
文章图片
揭秘奥秘-开源许可证
鸣叫
1984年, Richard Stallman开始创建免费操作系统的GNU项目时, 他恢复了想法, 认为软件应在开发人员, 工程师和用户之间共享。并且他们应该能够像通常科学一样以协作的方式改进它。
该选项与大多数软件公司和开发人员选择的用于分发和销售其程序的许可软件的通常概念形成了鲜明对比。三十多年后的今天, 开放源代码软件一直在继续征服我们行业的各个领域:Linux, Android, Apache和Git是同类产品中领先的开放源代码产品的例子。
开源还是免费软件?
文章图片
在本文中, 我将使用” 开源” 和” 免费” 作为同义词, 同时指代软件或许可证。我认为, 这两个词表达了相同的想法。 “ 开源” 以实用和技术的方式表达它, 而使用” 自由” 则将焦点放在该概念的哲学和政治意义上。
不幸的是, 英语中的” 免费” 一词, 除了与” 自由” 相关的形容词外, 还意味着” 无成本” 。这就是我通常更喜欢说” 开源” 的原因。
开源软件的共同属性
文章图片
我想你已经对什么是开源软件有了大概的了解。但是, 当我们要讨论不同许可证的详细信息时, 首先我们需要谈论定义开源软件的特定属性。
首先:我不是律师, 这不是法律建议。如有疑问, 请参阅我正在谈论的许可证的实际文本以及你的法律顾问。
根据开放源代码计划, 所有开放源软件均根据许可进行分发, 该许可授予其用户和开发人员(被许可方)某些权利。完整列表可以在” 开源定义” 中进行查阅, 但这是一个基本摘要:
- 软件的免费重新分发:该软件可以作为产品出售或赠送, 也可以包含在软件包中。无需支付任何使用费即可完成此操作。
- 许可软件的源代码或者包含在发行版中, 或者至少存在获得广泛认可的获取源代码的方法。此源代码可用于开发软件的修改版本。
- 允许创建衍生作品, 并且许可允许它们按照与原始软件相同的条款和许可进行分发。根据原始软件的许可, 在某些情况下, 必须通过更改其名称或版本号将这些衍生作品与原始软件区分开, 或者只能以源代码补丁程序??的形式分发。
- 该软件可以被任何人或一群人使用, 并且可以在任何领域中使用, 没有任何限制。
那么, 我们可以在产品或项目的开发中使用开源软件吗?基本上, 这取决于所用软件的许可证和最终产品的预期许可证。当你要以开源形式发布自己的代码, 并且在决定应使用哪个许可证时, 不同的许可证也很重要。
Copyleft
文章图片
关于开源许可证的一个非常有趣的概念是通常称为copyleft的著作权, 与版权相反。在使用版权保护知识产权(包括软件)免受复制或分发的情况下, copyleft用于确保开放源代码的知识产权和软件可以作为开源进行复制或分发。
根据其强度, 有两种版权保留方式:
- 强版权保护:从其他强版权保护的许可作品衍生而来的作品, 或与这些作品链接的作品, 必须继续拥有强版权保护许可, 甚至完全相同的许可。也就是说, 这些开源作品将来无法关闭。
- 较弱的Copyleft:使用较弱Copyleft许可的作品或与之链接的作品时, 可以使用其他许可证(甚至是闭源许可证)进行许可。在这种情况下, copyleft仅影响原始的较弱的copyleft许可作品。
宽容 根据许可证的允许性, 许可证也可以分为以下几种:
- 严格的许可证:当你不能将强大的许可软件与封闭源甚至更宽松的许可软件混合使用时。
- 许可许可证:通常将产品与闭源软件或具有完全开源许可证的软件混合使用的许可。
开源许可差异 存在许多开源许可证。开源计划已经批准了其中的80多个。有些是多余的, 可以认为与其他等效。其他针对软件发布者的利益(例如NASA许可证), 或针对给定的环境或目的(例如教育社区许可证或开放字体许可证)。
许可证的这种增加是基于许可证中的特定术语的, 该术语已添加到基本的开放源代码属性中, 允许或禁止其他用途。这些附加条件的示例包括:
- Copyleft的类型:弱或强或不存在。
- 宽容类型:宽容或严格。
- 在源代码或用户界面中添加版权声明的义务。
- 自动授予被许可人专利。
- 不仅将软件分发给的各方, 而且还将软件的用户视为被许可方(这样, 使用这种开源软件的在云中使用服务的人们应该可以选择下载源代码)该软件)
文章图片
根据我们之前已经说过的, 一些许可是允许的, 允许用户将代码与许可不同的源代码组合在一起(也许带有附加条件)。这种情况将允许将这种开放源代码许可的软件与封闭源代码的软件混合使用。此类许可证的一个示例是MIT许可证。
其他限制更为严格, 因此源代码只能与以类似方式许可的代码组合, 并且最终结果必须使用相同的原始许可进行许可。这种许可证的一个示例是通用公共许可证(GPL)。
也许你想将许可代码与两个不同的限制性开放源代码许可结合使用。你可以使用开放源代码的自由权来随意使用该软件。但是最终程序不能重新分发, 因为它应该在两个互不兼容的许可证下分发。
ZFS就是这种情况的一个例子。 ZFS是一个非常先进的创新文件系统, 已于2005年包含在OpenSolaris中。ZFS是根据通用开发和发行许可(CDDL)条款获得许可的开源软件。尽管它是开放源代码, 但由于Linux的源代码是根据通用公共许可证(另一种限制性开放源代码许可证)的条款进行分发的, 因此无法集成到Linux内核中。由于许可证冲突, 无法分发使用ZFS支持编译的Linux内核的二进制文件。
仅当其中一个开源程序的所有所有者都同意更改许可证或在软件许可证中添加例外条款时, 才能解决此类冲突。例如:许多GPL许可程序与OpenSSL库链接。 OpenSSL库分发已获得许可, 要求在广告材料和任何重新分发中出现一个短语。这些额外条件与GPL不兼容, 因此, 使用OpenSSL的GPL产品开发人员已在其许可证中包括一个例外, 专门允许与OpenSSL链接。
开源许可证的差异性 现在, 我将分析最流行的开源许可证, 并介绍它们的差异功能, 并提供有关何时使用或不使用它们的一些指导。根据黑鸭知识库, 我对它们的使用程度从高到低进行了排序。
GNU通用公共许可证(GPL)
GPL是最受欢迎的开源许可证。它是由FSF创建的, 是GNU项目的许可证, 也是Linux内核的许可证。
其差异特征:
- 强权左。
- 非常严格的许可证。
- 通常称为” 病毒” 许可证:如果你将代码链接到GPL许可下的另一段代码, 并且想要分发结果, 则整个产品都必须获得GPL许可。
- 它也是一种” 包容性” 许可证:如果你正在开发软件并希望根据GPL对其进行许可, 则只要该软件具有与GPL兼容的许可证, 就可以链接该软件或包含其他开源软件。它不需要GPL不需要的任何义务。
当前, 存在两个正在使用的GPL许可证版本:v2和v3。第3版于2007年发布, 以解决自1991年发布第2版以来出现的一些问题。
GPL v3包括一些额外的条款和条件, 涉及与其他开源许可证的兼容性规定, 必须授予专利许可, 定义在设备中使用GPL许可的软件作为固件的条件, 并考虑到数字版权管理的概念。
麻省理工学院执照
开源许可证通常称为MIT许可证, 又名X11??许可证, 是一种非常宽松的非copyleft许可证, 只要你保留版权信息, 每个人就可以基本上将所许可的代码用于所需的任何内容, 并且知道该软件不附带任何形式的保证。
该许可证非常流行, 并且被多个项目用作X Window System, Ruby on Rails, jQuery或Node.js。
它与GPL兼容, 因此你可以将MIT许可的代码混合到GPL软件中。
Apache许可2.0
Apache许可证由Apache软件基金会(ASF)创建, 作为其Apache HTTP Server的许可证。
就像MIT许可证一样, 它是一种非常宽松的非copyleft许可证, 它允许出于任何目的使用该软件, 对其进行分发, 修改和分发其衍生作品而无需担心使用费。与MIT许可证相比, 它的主要区别在于:
- 使用Apache许可证, 该软件的作者将代码的许可授予任何用户或代码分发者。该专利许可适用于任何由软件作者授权的专利, 如果该专利被其创建的代码段所侵犯, 则适用于该专利。
- Apache许可证要求派生作品中未经修改的部分必须保留许可证。
- 在每个许可文件中, 必须保留任何原始版权, 专利, 商标或所有权声明。
- 在每次许可文件更改中, 都必须有一条通知, 指出已在文件中进行了更改。
- 如果Apache许可的软件包含NOTICE文件, 则该文件及其内容必须保留在所有派生作品中。
- 如果有人有意向其作者发送对Apache许可软件的贡献, 则可以根据Apache许可自动使用该贡献。
它与GPL兼容, 因此你可以将Apache许可代码混合到GPL软件中。
BSD许可证
有3个不同的BSD许可证。所有这些都是非常宽松的许可, 没有copyleft。
2条款BSD许可证(或简化的BSD许可证)与前面解释的MIT许可证完全等效。
3条款BSD许可(或新BSD许可)增加了一个条款, 规定版权所有者的名称或其贡献者的名称均不得在未经特定的事先书面许可的情况下用于背书或促销从该软件衍生的产品。该版本与GPL兼容, 允许你将3子句BSD许可的代码混合到GPL软件中。
4条款BSD许可(或原始BSD许可)增加了另一个条款, 规定所有提及功能或软件使用的广告材料必须显示确认, 表明该产品包括版权所有者开发的软件。此4条款BSD许可证与GPL不兼容。带有该许可的代码无法根据GPL条款进行许可, 因为第四条款增加了GPL不需要的要求。
GNU较小通用公共许可证(LGPL)
LGPL由FSF创建, 是对GPL的修改, 其Copyleft较弱, 允许将LGPL许可软件与任何其他软件链接。 LGPL最初是” 图书馆通用公共许可证” 的缩写, 但后来却以当前的名称” Lesser General Public License” (最小通用公共许可证)代表了FSF的观点, 即所有软件都应该是免费的, 因此LGPL不应该是免费的。一般使用。
你可以将封闭源代码链接到LGPL库或软件, 并分发最终结果, 只要:
- 你提供LGPLed部件的源代码, 以及对其所做的所有修改。
- 任何具有足够知识的用户都可以用修改后的版本替换程序的LGPLed部分。可以通过将程序的LGPLed部分分发为动态库(Windows中为DLL, Linux / Unix中为.so)或提供程序非LGPLed部分的目标代码来完成。
艺术许可
在当前版本2.0中, 艺术许可证是许可的开源许可证, 没有类似于MIT许可证的版权。
MIT许可证与艺术许可证之间的主要区别在于, 后者要求对代码进行任何修改都必须明确说明。
该许可证几乎仅在Perl社区中使用。
当前的Artistic License 2.0与GPL兼容:你可以将Artistic-Licensed代码混合到GPL软件中。
Microsoft公共许可证(MS-PL)
Microsoft公共许可证由该公司于2008年创建, 是由其共享源计划创建的开放源代码许可证之一。
这是一个严格的, 较弱的copyleft许可证:它允许使用MS-PLed代码创建和分发闭源程序, 但如果这些程序以源代码形式分发, 则必须使用MS-PL作为衍生作品的许可证。
我个人认为, 该许可有点违背开放源代码的精神, 允许关闭代码, 以便版权所有者不关心你可以使用该软件做什么, 但你不能共享与其他copyleft源代码混合使用的代码。因此, 以另一种方式, 版权所有者确实关心你的工作, 并且出于诸如改进Linux之类的原因, 他不希望你使用该代码。
MS-PL与GPL不兼容。
Eclipse公共许可证(EPL)
Eclipse公共许可证是Eclipse基金会为其集成开发环境创建的许可证。这是限制性的且版权保护薄弱的许可证, 在许多方面与LGPL相似。它还包括自动授予专利许可的条款。
EPL与GPL不兼容。
Mozilla公共许可证(MPL)
Mozilla公共许可证2.0版是Mozilla基金会为其产品创建的弱版权左许可许可证。
我们可以认为该许可类似于LGPL, 但主要区别在于MPL还允许将MPLed代码段静态链接到闭源软件中。
当前版本为2.0的MPL与GPL兼容。对于以前的MPL版本, 情况并非如此。
通用开发和发行许可证(CDDL)
CDDL是由Sun(现为Oracle)基于MPL 1.1版创建的一种低版权左许可许可证。基本上, 它具有与MPL相同的属性。它的术语已经阐明, 但没有实质性改变。
CDDL是Sun(现在为Oracle)为其许多产品(如OpenSolaris或NetBeans等)选择的开源许可证。
由于此许可证基于MPLv1.1, 因此该许可证与GPL不兼容, 因此你不能将CDDL许可的源混合到GPL许可的软件中。许多人说这是故意的, 因此OpenSolaris源代码无法引入Linux内核。
GNU Affero通用公共许可证(AGPL)
AGPL是GPL的一个版本, 具有更强大, 更严格的版权保护。它不仅有义务向接收软件副本的人员提供应用程序的源代码, 而且还必须向通过计算机网络使用此软件的人员提供应用程序的源代码。
该许可证是由FSF创建的, 旨在为开发人员提供避免在网络服务器或云中执行开放源代码软件时实际关闭的方法, 因为GPL不能强迫服务提供商向用户提供源代码。 。在这种情况下, 软件不会分发。
AGPLv3与GPL3兼容。你可以将AGPLv3代码放入GPLv3代码中, 只要最终结果获得了AGPLv3的许可。
ISC许可证
ISC许可证是由Internet软件联盟(ISC)编写的许可的免费软件许可证。在删除了一些不必要的语言之后, 它在功能上等同于两节BSD和MIT许可证。
ISC最初用于ISC自己的软件版本, 此后已成为OpenBSD(从2003年6月开始)以及其他项目的首选许可证。
它与GPL兼容:你可以将ISC许可的代码混合到GPL软件中。
Microsoft相互许可证(MS-RL)
Microsoft互惠许可证是由该公司于2008年创建的, 是由其共享源计划创建的开源许可证之一。
它与之前说明的MS-PL类似, 但具有更强的版权保留权, 类似于LGPL, CDDL和EPL的条件。它要求, 如果你将代码与MS-RL许可的源代码混合在一起, 并希望分发最终结果, 则至少原始的MS-RL许可部分必须继续获得该许可的许可。
它与GPL不兼容。
公共领域(CC0)
根据Wikipedia的说法, “ 在公共领域的作品是那些知识产权已过期, 被没收或不适用的作品” 。根据版权法, 作者将作品专用于公共领域, 放弃了其对作品的所有权利。
Public Domain下有多个软件项目, 例如SQLite, 该库实现可嵌入且简单的SQL数据库引擎, 该数据库包含在其他项目中, 例如Mozilla项目, Android等。
有很多方法可以将软件专用于公共领域。知识共享组织创建了CC0公共领域奉献精神, 这是一种将作品分发给公共领域的通用方式。 FSF建议使用此文本将软件专用于公共领域。
公共领域的作品与任何开放源代码或封闭源代码许可证兼容, 并且可以混入任何其他软件中。
多重授权 有些开源软件获得了双重甚至三重许可。这意味着, 获得此多许可软件的人可以选择他或她要分发该许可所依据的许可。由于每个许可证都授予不同的权限并施加不同的义务, 因此必须做出选择以选择最能满足需求的许可证。
对于某些库, 这是常见情况。例如, NSS是Mozilla制造的库, 除了其他与安全相关的功能外, 它还支持SSL / TLS。它获得了MPL, GPL和LGPL许可证的三重许可。
请选择一个许可证 许多人没有任何书面许可就在GitHub平台上发布代码。没有人应该使用该代码。我们不知道我们拥有使用它的权限。如果你使用它, 可能会因此被起诉。就像这些人在逗我们, 说:” 嘿, 看看我的作品!不错, 不是吗?但是你不能使用它, 我只想向你展示!” 。
文章图片
请不要成为其中之一。如果你将代码上传到GitHub或类似的公共站点, 请允许其他人使用它并对其进行增强。如果你不想考虑太多, 以下是我的建议:
如果你想使其简单明了, 并允许每个人使用你的代码来做自己想做的事, 只要他们能向你提供归因且不对你承担责任, 请使用MIT许可证。
如果你想让它放任不管, 允许每个人使用你的代码来做自己想做的事, 但明智地枚举版权法所赋予的权利并授予这些权利, 并向贡献者提供明确的专利权授予用户, 请使用Apache 2.0许可。
如果你关心共享修改, 并且不想在封闭的开发中使用代码(在封闭的软件产品和封闭的硬件设备中都不使用), 请使用GPL v3。
- 如果你不关心软件在封闭式设备中使用的可能性, 请使用GPL v2。但是请使用” 或任何更高版本” 的句子, 这样你的代码也可以在GPLv3项目中使用。
- 如果你不关心软件在封闭软件中使用的可能性, 只要你的软件或使用该软件的部分继续以相同的条款开源, 请使用LGPL v3。
- 如果你希望每个人都可以通过网络使用你的软件来获取其源代码的权利, 请使用AGPL v3。
推荐阅读
- 随处的软件开发(我的分布式远程工作场所)
- 远程团队的Skype提示
- 开源对女性开放吗()
- 鼓励远程工作场所的行动和及时性
- 壮观的众筹失败及其对企业家精神的影响
- WGCLOUD如何设置每页显示多少条数据
- 如何清理磁盘
- Windows10系统下安装SecureCRT & SecureFX
- 在不同的软件中截图的快捷方式