一文读懂 Copyleft 开源许可证


开源组件已改变了我们开发软件的方式。来自开源社区的现成库(ready-made libraries)使忙碌的开发者们能专注于他们的秘密武器,这些秘密武器或将成为未来令人兴奋的新软件产品。而且不需要付费。下载开源组件不需要你提供信用卡号码,但这些组件附带的开源许可证会要求你遵守某些条款。特别是当它们使用了 copyleft 开源许可证时。

虽然 copyleft 许可证曾经是最普遍的开源许可证,但在过去几年中,我们发现 copyleft 许可证的使用情况正在减少,而宽松的许可证(permissive lecenses)的使用情况正在增加。也就是说,copyleft GPLv3 许可证依旧是第三流行的开源许可证。总而言之,copyleft 许可证的使用占开源许可证总体使用情况的近 40%。

考虑到开源组件占了现在软件的 60% 到 80%,你会使用到 copyleft 许可证,同时你也有必要了解这意味着什么。

WHAT

根据 copyleft 开源许可证的创始者 GNU 的说法,copyleft 是一种使软件变得自由(free)的方法,同时也要求所有修改和扩展该程序的版本也都是自由的,并在相同的条款和条件下(under the same terms and conditions)发布。

当一个开源软件项目以 copyleft 许可证发布时,其他开发者有权使用、修改和分享该软件作品,只要他们也保持互惠义务(reciprocity obligation)即可。使用带有 copyleft 许可证的开源组件创建的人呢和软件也必须作为开源软件进行发行。其结果是,任何包含 copyleft 开源许可证的作品——即使仅有几行代码——也都必须免费提供全部源代码,以及修改和分发它们的权利。

HISTORY

Copyleft 开源许可证或对等许可证的诞生是自由开源软件(free and  open source software,FOSS)历史上最重要的里程碑之一,它始于 GNU GPL 许可证。

一切都起始于 1984 年,理查德·斯托曼(Richard Stallman)决定开发 GNU 项目——一个完整的操作系统——将根据他的自由软件的概念进行开发和发布,并赋予其用户四项自由条件需要满足:

  • 用户可以自由地以任何目的来运行此程序(自由条件 0);

  • 用户可以自由地学习和了解程序是如何运行的,并可以根据需求加以修改。可以获得源代码是这个自由条件的前提(自由条件 1);

  • 用户可以自由地分享和传播原软件来帮助他人(自由条件 2);

  • 用户可以自由地分享和传播你修改后的软件,进而所有用户可以得益于你的修改。可以获得源代码是这个自由条件的前提(自由条件 3)。

斯托曼需要找到一种方法来确保他的作品在这四项自由条件下释出。则听起来很简单?这在当时是闻所未闻的事情。

根据大卫·布雷托(David Bretthauer)在发行物开源的历史中的记载,传统使软件可用的方法是将软件发布到公有领域(public domain)或是闭源(closing the source code)并以版权和许可证来防止软件被修改,这给斯托曼带来一个问题。布雷托解释说,「在公共领域发布软件意味着任何人都可以使用它,根据自己的情况进行滥用,比如对其进行版权保护和将其作为专有产品进行签发许可。加上限制性的版权和许可条款来发布它,将有碍于斯托曼认为的有价值的整个用户审查、修复 Bug 和添加功能的机制。」

这就是 copyleft 开源许可证的由来,采用 copyright 的条款并撤销它们。用 GNU 的话来讲,就是「为了对一个程序签署 copyleft 的许可证,就要先声明该程序已受版权保护(copyrighted);然后我们添加分发条款——这是一项法律文书——去赋予人们使用、修改和重新分发程序的源码或任何从它派生出的程序的权利,但前提是分发条款保持不变。」代码和自由在法律上因此而变得密不可分。

专有软件开发人员会使用版权剥夺用户的自由;我们使用版权来捍卫用户的自由。这就是为何我们反转其名,将「copyright」改成「copyleft」的缘由。

Copyleft GNU GPL 第一版诞生于 1989 年,随后第二版发布于 1991 年。在 2007 男,随着软件技术的发展,GPLv3.0 将早前版本变得更为清晰,确保 GPL 与时俱进。

TIMELINE

WHY

总的来说,在 copyleft 开源许可和自由软件下发布软件是一项革命性的概念,从第一个 GNU GPL 发布以来,copyleft 受到各方批评。在早期,它以错误的方式与许多软件开发组织产生摩擦。如今,社区中许多人批评 copyleft 开源许可证是因为它过于严苛,他们更喜欢宽松的开源许可证。

批评者们将有版权的开源许可证视作「病毒」,因为他们认为它「污染」了派生自其的所有作品,并一路践踏用户的知识产权。令人高兴的是,许多人看到了使用 copyleft 开源许可证的好处。

软件开发人员理查德·L·阿波达卡(Richard L. Apodaca)在他博客[1]上解释说,开发人员为其项目选择 copyleft 开源许可证主要原因是是要阻止不想社区提供回报的商业公司使用其软件;其次是希望阻止其他项目使用其开源项目的分支来构建与自己有竞争性的产品。

开源许可证类型

考虑事项

红帽公司的本·科腾(Ben Cotton)建议[2]开发人员考虑一下其理念和项目目标,将 copyleft 开源许可证用于他们的软件项目。他建议开发人员考虑的另一个因素,是项目所使用的技术生态,因为基于特定语言或技术的项目通常具有相同或相似的许可证。

随着开源成为主流,开发者社区呈指数式增长,向开发者提供他们需要的所有信息以选择合适其项目的许可证变得尤为重要。如果你想在 copyleft 或其他许可证之间作出选择,那么 GitHub 的 choosealicense.com 提供了相关开源许可证的简单说明。

无论你最终选择的是 copyleft 开源许可证还是决定选择许可范围更广的许可证,在选择开源许可证时需要记住本·科腾(Ben Cotton)的建议:「如果你希望自己的项目玩的溜,就需要确保所选许可证的兼容性问题。」

参考来源:

[1] https://depth-first.com/articles/2006/12/29/dispelling-open-source-confusion-an-introduction-to-licenses/

[2] https://opensource.com/resources/what-is-copyleft

免责声明:这篇帖子不是法律建议,仅供参考。如果你需要法律建议,你应该咨询具备相关从业资质或经验的律师。

原题:Open Source Copyleft Licenses: All You Need to Know

文章来源:https://resources.whitesourcesoftware.com/blog-whitesource/open-source-copyleft-licenses

作者:Ayala Goldstein


开源许可证相关推荐:

1)一文读懂常用开源许可证
2)一文读懂开源许可证异同

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/311301.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

常用决策树集成模型Random Forest、Adaboost、GBDT详解

常用的集成学习策略 在之前的文章我有介绍过常用的基本决策树模型ID3、C4.5、CART算法,其中提到了一个关于基本决策树模型的缺点,那就是决策树模型学习一棵最优的决策树被认为是NP-Complete问题。实际中的决策树是基于启发式的贪心算法建立的&#xff0…

hdu1213 How Many Tables-并查集

Problem Description Today is Ignatius’ birthday. He invites a lot of friends. Now it’s dinner time. Ignatius wants to know how many tables he needs at least. You have to notice that not all the friends know each other, and all the friends do not want to …

redis spring 切面缓存_今日份学习: Spring中使用AOP并实现redis缓存?

笔记在Spring中如何使用AOP?Spring是如何切换JDK动态代理和CGLIB的?spring.aop.proxy-target-classtrue (在下方第二个链接中,原生doc中提到过)Aspect生命切面BeforeAfterAroundRedis广泛使用的内存缓存常见的数据结构:StringListSetHashZSetRedis为什么…

开源网站云查杀方案,搭建自己的云杀毒。

最近公司的一个客户被勒索病毒攻击了,可悲的是,客户的文件附件太多而且大,没有做双机热备的功能。当客户发现病毒后,还第一时间格式化了服务器。那叫一个惨!!!!!初步分析…

下一个更大元素 leetcode-496

给你两个 没有重复元素 的数组 nums1 和 nums2 ,其中nums1 是 nums2 的子集。 请你找出 nums1 中每个元素在 nums2 中的下一个比其大的值。 nums1 中数字 x 的下一个更大元素是指 x 在 nums2 中对应位置的右边的第一个比 x 大的元素。如果不存在,对应位…

最简单的并查集模板

代码如下&#xff1a; #include <iostream> using namespace std; const int N 1010; int a[N];void init_set() { //初始化for (int i 1; i < N; i)a[i] i; }int find_set(int x) { //查找return x a[x] ? x : find_set(a[x]); }void union_set(int x, int y) …

linux关机方法有哪些?有何区别_Linux下判断是否正常关机的一个简单方法

思想&#xff1a;系统启动的时候生成一个文件&#xff0c;正常关机的时候则删除这个文件&#xff0c;则可以根据系统开机时有没有那个文件来判断是不是非正常关机。步骤&#xff1a;在/etc/rc.d/init.d/下编程脚本。判断是否正常关机&#xff0c;和生成文件的脚本&#xff1a;t…

二叉树的遍历—广度优先(BFS)和深度优先(DFS)python实现

二叉树 二叉树&#xff08;Binary tree&#xff09;是树形结构的一个重要类型。对于二叉树的基础知识这里不做过多介绍&#xff0c;下面我们直接介绍二叉树的遍历方式和如何用python代码去实现二叉树的遍历。 二叉树的遍历&#xff08;重点&#xff09; “前”、“中”、“后…

五分钟了解数据库事务隔离

前言什么是事务隔离呢&#xff1f;们知道&#xff0c;关系型数据基本都支持事务&#xff0c;事务具备四个特性&#xff0c;分别是&#xff1a;原子性&#xff08;Atomicity&#xff09;、一致性&#xff08;Consistency&#xff09;、隔离性&#xff08;Isolation&#xff09;、…

fusionsphere读音_hydroxyapatite

全部Conclusion The absorbable coral hydroxyapatite is a good bone tissue engineering scaffold.结论可吸收性珊瑚羟基磷灰石具有促进骨髓基质细胞表达成骨细胞表型、合成细胞外基质的功能,是良好的细胞载体.互联网Phase changes and structural stability of hydroxyapati…

基于 Redis 实现 CAS 操作

基于 Redis 实现 CAS 操作Intro在 .NET 里并发情况下我们可以使用 Interlocked.CompareExchange 来实现 CAS &#xff08;Compare And Swap&#xff09; 操作&#xff0c;在分布式的情景下很多时候我们都会使用 Redis &#xff0c;最近在改之前做的一个微信小游戏项目&#xff…

数据结构-堆(heap)最大堆、最小堆的相关操作和实战

堆&#xff08;heap&#xff09; 堆的概念&#xff1a; 是完全二叉树&#xff1b;每个节点 > 或 < 孩子节点。 条件二中分别对应&#xff1a;最大堆和最小堆。 最大堆&#xff1a;最大值为堆顶元素&#xff0c;每个节点 > 孩子节点。 最小堆&#xff1a;最小值为堆…

无法载入增效工具_山东省 智能工具箱 智能工具管理 工具管理企业数字化管理...

我们日常工具管理中难免会遇到东西找不到&#xff0c;工具丢失无法落实到人&#xff0c;工具买回来没有及时维护导致生锈等&#xff0c;工具生命周期不细致无法及时送检&#xff0c;导致设备参数不达标等一些细微问题&#xff0c;在工具管理上可能是小问题&#xff0c;但是设备…

Asp.Net Core 中间件应用实战中你不知道的那些事

一、概述这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例&#xff0c;不讲述其工作原理&#xff0c;如果需要了解工作原理的同学&#xff0c; 可以点击查看以下两篇解读文章&#xff1a;•Asp.Net Core EndPoint 终结点路由工作原理解读•ASP.NET CORE 管道模…

递归算法(一)递归概念与思路

递归的概念 程序调用自身的编程技巧称为递归&#xff08; recursion&#xff09;。递归做为一种算法在程序设计语言中广泛应用。 一个过程或函数在其定义或说明中有直接或间接调用自身的一种方法&#xff0c;它通常把一个大型复杂的问题层层转化为一个与原问题相似的规模较小的…

stm32f103振镜_二维振镜激光扫描教学演示装置及其实现方法

二维振镜激光扫描教学演示装置及其实现方法【专利摘要】本发明公开二维振镜激光扫描教学演示装置及其实现方法&#xff0c;该装置包括二维振镜扫描模块、图像轨迹记录仪和上位机人机界面&#xff1b;上位机人机界面主要用于教学演示图形或文字的绘制以及串口通信的设置&#xf…

洛谷 P1706 P1036 -小试牛刀

题目1&#xff1a; 题目描述 输出自然数 1 到 n 所有不重复的排列,即 n 的全排列&#xff0c;要求所产生的任一数字序列中不允许出现重复的数字。 输入格式 一个整数 n。 输出格式 由 1∼n1∼n1∼n 组成的所有不重复的数字序列&#xff0c;每行一个序列。 每个数字保留 5 个…

理解ASP.NET Core中的中间件

中间件是ASP.NET Core的一个重要特点&#xff0c;ASP.NET Core应用程序之所以能够灵活地处理各种各样的请求&#xff0c;完成都是由于中间件&#xff0c;那么它究竟是怎么一回事呢&#xff1f;一、理解中间件ASP.NET Core的一个主要特点是中间件&#xff08;Middleware&#xf…

XGBoost-原理推导(上)

XGBoost简介 XGBoost&#xff08;eXtreme Gradient Boosting&#xff09;是华盛顿大学博士陈天奇创造的一个梯度提升&#xff08;Gradient Boosting&#xff09;的开源框架。至今可以算是各种数据比赛中的大杀器&#xff0c;被大家广泛地运用。 之前的文章我已经介绍了GBDT&a…

redis深度历险_Redis的数据结构(内存具体怎么优化的)

上一篇我们讲解了Redis中SDS的组成以及优势&#xff0c;这一篇我们讨论下Redis中的Hash数据类型是怎么构成的呢&#xff1f;Java中存在HashMap和HashTable的数据类型。而Hash的数据结构可以近似于HashTable&#xff0c;依据数组链表的形式构成。在Redis中&#xff0c;Hash在元素…