标签 Copyleft 下的文章

如果你在开源项目中花费了很多时间的话,你可能会看到使用的术语 “copyleft”(GNU 官方网站上的释义:中文,英文)。虽然这个术语使用比较普遍,但是很多人却不理解它。软件许可是一个至少不亚于文件编辑器和打包格式的激烈辩论的主题。专家们对 copyleft 的理解可能会充斥在好多书中,但是这篇文章可以作为你理解 copyleft 启蒙之路的起点。

什么是 copyright?

在我们可以理解 copyleft 之前,我们必须先介绍一下 copyright 的概念。copyleft 并不是一个脱离于 copyright 的法律框架,copyleft 存在于 copyright 规则中。那么,什么是 copyright?

它的准确定义随着司法权的不同而不同,但是其本质就是:作品的作者对于作品的 复制 ( copying ) (因此这个术语称之为 “copyright”:copy 's right)、表现等有一定的垄断性。在美国,其宪法明确地阐述了美国国会的任务就是制定版权法律来“促进科学和实用艺术的进步”。

不同于以往,版权会立刻附加到作品上——而且不需要注册。默认情况下,所有的权力都是保留的。也就是说,没有经过作者的允许,没有人可以重新出版、表现或者修改作品。这种“允许”就是一种许可,可能还会附加有一定的条件。

如果希望得到对于 copyright 更彻底的介绍,Coursera 上的教育工作者和图书管理员的著作权是一个非常优秀的课程。

什么是 copyleft?

先不要着急,在我们讨论 copyleft 是什么之前,还有一步。首先,让我们解释一下 开源 ( open source ) 意味着什么。所有的开源许可协议,按照 开源倡议的定义 ( Open Source Inititative's definition ) (规定),除其他形式外,必须以源码的形式发放。获得开源软件的任何人都有权利查看并修改源码。

copyleft 许可和所谓的 “ 自由 ( permissive ) ” 许可不同的地方在于,其衍生的作品中,也需要相同的 copyleft 许可。我倾向于通过这种方式来区分两者不同: 自由 ( permissive ) 许可向直接下游的开发者提供了最大的自由(包括能够在闭源项目中使用开源代码的权力),而 copyleft 许可则向最终用户提供最大的自由。

GNU 项目为 copyleft 提供了这个简单的定义(中文,英文):“ 规则就是当重新分发该程序时,你不可以添加限制来否认其他人对于[自由软件]的自由。 ( the rule that when redistributing the program, you cannot add restrictions to deny other people the central freedoms [of free software]. ) ”这可以被认为权威的定义,因为 GNU 通用许可证 ( GNU General Public License,GPL ) 的各种版本的依然是最广泛使用的 copyleft 许可。

软件中的 copyleft

GPL 家族是最出名的 copyleft 许可,但是它们并不是唯一的。 Mozilla 公共许可协议 ( Mozilla Public License,MPL ) 和 Eclipse 公共许可协议 ( Eclipse Public License,EPL ) 也很出名。很多其它的 copyleft 许可 也有较少的采用。

就像之前章节介绍的那样,一个 copyleft 许可意味着下游的项目不可以在软件的使用上添加额外的限制。这最好用一个例子来说明。如果我写了一个名为 MyCoolProgram 的程序,并且使用 copyleft 许可来发布,你将有使用和修改它的自由。你可以发布你修改后的版本,但是你必须让你的用户拥有我给你的同样的自由。(但)如果我使用 “ 自由 ( permissive ) ” 许可,你将可以将它自由地合并到一个不提供源码的闭源软件中。

对于我的 MyCoolProgram 程序,和你必须能做什么同样重要的是你必须不能做什么。你不必用和我完全一样的许可协议,只要它们相互兼容就行(但一般的为了简单起见,下游的项目也使用相同的许可)。你不必向我贡献出你的修改,但是你这么做的话,通常被认为一个很好的形式,尤其是这些修改是 bug 修复的话。

非软件中的 copyleft

虽然,copyleft 的概念起始于软件世界,但是它也存在于之外的世界。“做你想做的,只要你保留其他人也有做同样的事的权力”的概念是应用于文字创作、视觉艺术等方面的知识共享署名许可(中文,英文)的一个显著的特点(CC BY-SA 4.0 是贡献于 Opensource.com 默认的许可,也是很多开源网站,包括 Linux.cn 在内所采用的内容许可协议)。GNU 自由文档许可证是另一个非软件协议中 copyleft 的例子。在非软件中使用软件协议通常不被建议。

我是否需要选择一种 copyleft 许可?

关于项目应该使用哪一种许可,可以用(已经有了)成篇累牍的文章在阐述。我的建议是首先将许可列表缩小,以满足你的哲学信条和项目目标。GitHub 的 choosealicense.com 是一种查找满足你的需求的许可协议的好方法。tl;drLegal 使用平实的语言来解释了许多常见和不常见的软件许可。而且也要考虑你的项目所在的生态系统,围绕一种特定语言和技术的项目经常使用相同或者相似的许可。如果你希望你的项目可以运行的更出色,你可能需要确保你选择的许可是兼容的。

关于更多 copyleft 的信息,请查看 copyleft 指南。

(题图来自:behance.net)


via: https://opensource.com/resources/what-is-copyleft

作者:Ben Cotton 译者:yangmingming 校对:wxy

本文由 LCTT 原创编译,Linux中国 荣誉推出

GCC邮件列表中在争论GCC是否应该接受收费插件,但是认为GCC是一个自由软件(free software)开发的媒介的论调占得了上风

Gcc以及它在模块化方面的缺失又一次作为一个问题被提出来,并且和市场上的新的编译器LLVM做了对比。GCC巨大而古老:5百万行代码,30年研发时间,并且还在继续增长。相比较而言,LLVM更加年轻,更加模块化,并且允许所有的语言都作为一个模块添加进去。

LLVM的核心是‘开放源代码(Open Source)’。GCC是反著作权(copyleft)代表,是严格的自由软件(free software),她不允许以任何形式收费的插件的代码进入到GCC的代码中。争论的一种意见,正如Eric Raymond说的,“FSF不可能既阻止持有所有权的供应者添加他们的插件到一个免费编译器中,又让这个编译器得到发展。就像马儿已经偏离了跑道,反对插件策略的战略目标已经彻底的失败了”。

LLVM已经被苹果公司采用作为OS X和苹果硬件上GCC的替代品,并且正在变得流行起来,特别是在BSD系列操作系统的用户中间。LLVM的拥护者推测LLVM将会在更广阔的应用程序和移动设备开发市场上成为GCC的替代者。GCC的反对者们的观点是GCC太过复杂,并且开发者们必须遵守她的‘反著作权(copyleft)’。这限制了那些不想在‘反著作权(copyleft)’许可证下发布他们的语言或者软件产品。作为典型,苹果公司有一个很长的厌恶自由软件的历史。他们也不允许遵守‘反著作权(copyleft)’的软件通过他们的App Store发布。

LLVM和GCC之间的争论其实是GNU/Linux和BSD系列、开放源代码和自由软件之间历史差异的翻新版。开放源码的开发者允许代码被以任何形式的使用,免费或者维持版权。自由软件则严格地规定,代码或者针对代码做的更新,必须保持永久免费。自由软件的支持者认为完整的‘反著作权’授权有助于GCC的发展,并且已经将Linux和自由软件带到一个其他方式无法到达的高度,同时保证了自由软件不会被收购或者堕落成商业利益。开放源码的支持者则认为开放源码更加的自由,因为使用这没有受到限制,他们可以随意使用,包括开发非开源的版本。

GNU编译器集合(GCC)一直是自由软件发展的关键。编译器是稀有且昂贵的商品,版权软件公司也充斥着对不符合标准的特性的需求。让软件兼容不同的机器和操作系统是一个非必需的复杂任务。GCC作为第一个真正免费的跨平台编译器,简化了这个过程。

GCC对于软件开发者和移动设备开发者来说也是一个划时代的产品,而不仅仅对于那些自由软件概念提出者。GCC不但免费和可移植,她跨越不同硬件架构的普遍性和公用性使得更加容易做到软件的兼容性、鲁棒性和一致性。这和John Gilmore,Michael Tiemann和David Henkel-Wallace在开发GCC时发现的一样。这也是Cygnus Solutions公司主要的卖点,Cygnus Solutions是第一家靠卖自由软件赚钱的公司。[译注:Cygnus Solutions是John Gilmore, Michael Tiemann and David Henkel- Wallace创办的公司,同时也是GNU几个主要产品的贡献者]

LLVM和GCC之间主要的技术差异集中在组成‘前端’,‘中端’,‘后端’的模块分割。‘前端’用来翻译特定的语言。‘中端’对翻译后产生的代码进行优化。‘后端’将优化后的代码转化成特定硬件架构的机器码。LLVM将这些模块分割成不同的实体,但是由于语义的和历史的原因,GCC模糊了这些模块之间的界限。

对于一个自由软件项目,添加一种新的语言或者架构到GCC也许是一个非常困难的过程,添加有版权的插件也是不允许的。由于模块间界限非常不明确,最容易的添加方法就是让添加的特性遵循自由软件许可证。最初的开发者也许想保持代码的封闭和版权,但最后不得不将代码以自由软件发布。早期的C++以及Objective C就被认为是其中典型的例子。

与此相反,LLVM允许,甚至也许可以说是鼓励添加和发展版权语言和架构,比如英伟达基于Clang和LLVM的对于GPU开发的NVCC。NVCC的源代码是自由软件或者开源软件开发者获取不到的。

Richard Stallman对这方面的演讲中旗帜鲜明地宣布:“在自由软件运动中,我们为自由而战。自由软件的的价值观从根本上就和开源软件不同,后者以写‘更好的代码’为终极目标。如果GCC从免费的编译器变成非免费的编译器,她将不再能够达成自由的目标。

“Clang和LLVM的开发者不认可我们的价值观和目标,所以得出了跟我们不一样的结论。他们反对我们采取的捍卫自由的措施,因为他们只看到这对他们造成的不便,却没有看到(或者不关心)他们真正的需求。我猜测他们把他们的工作定义为‘开源’,并且漠视自由。”

GCC开发者们不可能在许可证的条件上妥协。LLVM在某些行业的部门非常流行,因为它很年轻很新,在编程语言的浪潮中跳跃式发展着。流行的风向着更加开放奔跑,GCC决心跟商业利益死磕也许是这个长期演进路上的一大助力。Unix公司们从80和90年代的Unix战争中学到了一些东西。语言和操作系统都是工具,它们最好是开放和共享的。GCC是自由软件,不属于任何人。


via: http://www.linuxuser.co.uk/features/staying-free-should-gcc-allow-non-free-plug-ins

译者:love\_daisy\_love 校对:wxy

本文由 LCTT 原创翻译,Linux中国 荣誉推出