作者:卫剑钒
大家都知道的是,使用Apache协议的是开源软件,但若问是不是自由软件呢?
大多数人是很犹豫的。
因为“自由”两个字,还挺吓人的。
很多人以为,只有采用GPL协议的软件才是自由软件。
其实,采用Apache 2.0协议的也是自由软件。
只不过,自由软件并不等同于copyleft,这才是人们容易搞混的东西。
本文就是简单搞明白一下什么是开源软件,什么是自由软件,什么是copyleft。
谁掌管着定义?
“开源软件”和“自由软件”的定义掌握在这两个组织手中。
1、开放源代码促进会OSI(Open Source Initiative),维护着“开源”(Open Source)软件的定义以及其认可的许可证列表。OSI的目标是促进和保护开源软件及开源社区,致力于提高人们对开源软件的认识和采用。
OSI于1998年2月成立,创始人为Bruce Perens和Eric S. Raymond。
2、自由软件基金会(FSF),维护着“自由软件”(Free Software)的定义以及其认可的许可证列表,旨在促进人们对计算机软件研究、分发、创建和修改的自由。FSF推崇copyleft的分享方式(如GPL规定的那样),不过,自由软件大多不是copyleft的。
FSF于1985年10月由Richard stallman建立。其主要工作是执行GNU计划,开发更多的自由软件。
这两个组织都是民间组织,都是非营利组织。
Perens曾希望OSI可以向普通人(非黑客)介绍自由软件的原则,但是Richard Stallman不这样认为,他觉得OSI在理念上和自己有很大不同,认为OSI太过实用化,而不是像FSF这样强调自由。
不过,在我看来,两者可能强调的方面不一样,但效果是类同的。开源软件和自由软件的差别不大,并没有本质上的不同。后面我们会看到这一点。
“源码可得”就是开源吗?
对于完全不懂开源的人,他们只能从字面上去理解,他们认为,源码放出来了就是开源软件。
当然不是这样了。
一个软件,它的源码可以在互联网上免费得到,不代表他就是开源软件或者自由软件,这种只能叫source available,可翻译为“源码可得”、“源码可用”、“有源软件”1等等。
一个源码可得的软件,究竟是什么性质,要看它的许可证是怎样的。
许可证就是一个书面协议,软件作者(或所有者)通过许可证,规定用户可以或不可以做哪些事,比如用户能否复制、能否修改、能够再次发布该软件等等。
Black Duck统计过,对于源码可得软件,目前有大约2600多种许可证。这些许可证的绝大多数都不符合“开源”的定义2,然而,20个最常用的许可证覆盖了98%的源码可得软件,所以,我们只需要了解那些常用的许可证即可。
被使用最多的许可证是下面这9个(OSI统计3),其中又以前6个为最甚。
1、Apache License 2.0 (Apache-2.0)
2、3-clause BSD license (BSD-3-Clause)
3、2-clause BSD license (BSD-2-Clause)
4、GNU General Public License (GPL)
5、GNU Lesser General Public License (LGPL)
6、MIT license (MIT)
7、Mozilla Public License 2.0 (MPL-2.0)
8、Common Development and Distribution License 1.0 (CDDL-1.0)
9、Eclipse Public License 2.0 (EPL-2.0)
你只需要搞懂前面那几个就可以了,比如Apache、GPL、MIT、BSD。
仔细看看这些许可证你就知道,它们都赋予用户充分的权利,并且要求不多,大多只是要求保留其版权、商标这些。最能引起争议的GPL,也只不过要求公开衍生作品的源码而已。
有人会问,我在github上,看到有很多软件不带许可证,这种算什么?
对于一个不带任何许可证的软件,我们就不知道它允许用户有什么权利,也就是说,复制、修改、分发它的权利都是不确定的,只有联系作者本人才能确定有什么权利。(当然,既然他已经把源码放在互联网上了,你看一看的权利还是有的。)
如果该软件放在Github的公有(public)库中,则表明软件发布者已经接受了Github的服务条款,该条款赋予了其他Github用户一些基本权利,比如允许他们查看该项目库或fork等。
定义!定义!
OSI对开源软件的定义放在这里:https://opensource.org/docs/definition.php ,里面有十个标准,这里不一一列举
简单地说,开源软件,就是必须提供源代码,允许修改和再发布,允许别人销售或者免费送出,不区别对待任何人和任何领域,不以各种不一致的方法限制他人使用、复制、修改和再发布。
FSF对自由软件的定义放在这里:https://www.gnu.org/philosophy/free-sw.html ,FSF提出4项自由,如果一个软件提供了下面这4项自由,它就是自由软件。
自由度0:用户可以按照自己的意愿,自由地运行该软件,而不论出自何种目的。
自由度1:用户可以自由地学习该软件,可以按照自己的意愿修改该软件。
自由度2:用户可以自由地分发该软件的拷贝,这样就可以帮助他人。
自由度3:用户可以自由地分发该软件修改后的拷贝,这样,他人可以从中受益。
当然,因为涉及修改,自由度1和自由度3都暗含了对开放源代码的要求。
定义中所谓“自由”,意味着这些行为(运行、学习、修改、分发)不必事先征得任何人的许可,也不必为此额外支付任何费用。
FSF还强调,自由软件允许商业用户、商业开发和商业发布。商业和自由并不矛盾,钱可以收,但用户的自由不可剥夺。由于源码是开放的,许可证又给予了他人种种自由,所以并不存在那种因商业秘密或专利保护所带来的暴利
自由软件的商业收费主要是复制软件的成本费、对软件提供维护的维保费、培训费等服务性费用,挣不了什么大钱。
但某些开源软件的企业版就不一样了,企业版通常并不开源,它们不是开源软件也不是自由软件,它们用的是商业许可证,即便给你源码,也会有很多限制。
从上面的定义可以看出,开源软件和自由软件其实差不多的。连FSF都在官网上承认了这点4:
“开源软件和自由软件或多或少是同一类软件,虽然并不是完全相同:开源所接受的一些许可证我们看来限制过多,还有一些我们认可的自由软件他们不认可。但不管怎样,差异是很小的:几乎所有的自由软件都是开源软件,几乎所有的开源软件都是自由软件。”
在OSI的官网上5,维护着OSI认为符合开源软件定义的许可证列表,上面那9个都是符合开源软件定义的许可证。
在FSF的官网上6,维护着FSF认为符合自由软件定义的许可证列表,上面那9个都是符合自由软件定义的许可证。
你还可以在SPDX这个网站获取分类信息7,它维护了一个有接近400个许可证的列表,里面列出了哪些是FSF认可的,哪些是OSI认可的。
此外,还可以维基百科的“Comparison of free and open-source software licences”词条中查看。8
什么是copyleft
现在我们知道,使用Apache许可证的软件是自由软件,那它是copyleft软件吗?
答案:不是。
copyleft不好翻译,目前有“版权开放”、“版权属左”、“左版”、“著佐权”、“版权左派”,“版责”等多种翻译,但并没有被普遍接受和采纳的。
先说一下什么是copyrigh。
copyright即版权,亦称著作权,是指作者对其作品的权利。从字面上看,copyright尤其关注copy的权利(right),一个软件卖给某用户后,除非作者同意,用户是不能随意复制(比如说让你在这个机器上用,你就不能在另外一台机器上再装一套)的,除此之外,除非作者许可,也不能修改、不能对外发布等等。
所以,传统上,一般我们都能看到这样的表述:Copyright © 2004 XXXX. All rights reserved. 此即“版权所有”,就是说版权拥有者对其作品的权利都是保留的,仅仅开放他所许可的内容。
下面是一个版权声明的样例。
copyleft要大方的多,基本上所有权利都让渡给用户了,Richard Stallman曾说明过Copyleft一词的由来:
“1984或1985年,DonHopkins(一个很有想像力的家伙) 给我写了一封信。在信封上他写了一些逗趣的话, 其中包括:copyleft —all rights reversed(copyleft-反转所有权利)。于是,我就用copyleft一词以命名当时我正考虑的软件发行概念。” 9
和自由软件一样,copyleft也没有很严格的定义,都属于很宽泛的概念。 FSF对copyleft的定义: “copyleft是一种通用的方法,通过它,使某个程序成为自由软件,并要求其衍生程序(对该程序进行修改和扩展后产生的程序)也是自由软件。”10
Copyleft is a general method for making a program free software and requiring all modified and extended versions of the program to be free software as well.
从该定义看,copyleft软件天然是一个自由软件,但比自由软件多了一项对用户的要求,就是copyleft许可证要求修改后的copyleft软件,也必须以copyleft软件发布。这就是人们常说的“传染”,你用了一个开源软件,你也必须把自己的修改和补充都开源出来。
注:本文中,copyleft许可证是指满足copyleft定义的许可证,如GPL许可证。copyleft软件是指采用copyleft许可证的软件,如linux(采用GPL许可证)。
值得注意的是,copyleft并不是说没有版权,copyleft仍然是有版权的,只不过除版权外,所有其他权利都已开放,也即left给世人,有人把这个形象的说为all rights released。
在我看来,作者只给自己留了一个版权,所以copyleft就是“版权仅留”。
copyleft给了程序员自由,也限制了他们的自由(不得对修改闭源),在FSF看来,限制程序员的自由,是为了给世人更多的自由,所以这是正义的。
copyleft要保障自由软件能始终给人们自由,一个copyleft软件,从生到死,从源头到支流,应该永远都是自由的。从上游到下游,自由顺畅地流动,毫无阻塞,如遇阻塞,则可立即以违背copyleft许可为名发起控诉。
FSF说:“商业软件通过版权剥夺了用户的自由,我们使用版权来给予他们自由。这就是为什么我们把copyright改称copyleft”。
FSF还专门说明为什么不直接把软件放到公共领域中(版权人完全放弃了版权及一切权利,作品就进入公共领域即public domain),FSF认为,把软件放在公共领域内,会有人通过修改部分或极少量的方式,将衍生品私有化,从而减少了人们应有的自由。
在Stallman的哲学理念中,信息资产(包括程序、软件)就像数学公式、定理一样,应该是公有的,而不应是私有财产。像操作系统、编译器、数据库、浏览器、TCP/IP协议等等所有这些,都应该开源,让任何人都可以使用和改进,而且改进后的东西仍应公有。
从本质上讲,其观念是全地球人共同拥有软件生产资料(主要指软件,如gcc)、共同生产并共同拥有劳动产品(如Linux),这在本质上是左派(left)的要求,和右派(right)倡导的私有制截然对立。
现在你可以思考一下,是谁更害怕自由?
一些copyleft许可证
最著名的copyleft当然非GPL莫属。
LGPL也是copyleft的,但相对要弱一点,如果你的软件仅仅是链接glibc(采用LGPL),就不用开源自己的代码。
AGPL是很强的copyleft许可证,只要你用自由软件提供云服务,即便你不发布,也要公开源代码。
Watcom-1.0许可证(Sybase Open Watcom Public License 1.0)是更强的Copyleft许可证,只要你“部署”(该许可证对部署有定义),你就要公开源代码,即便你并不提供云服务,只是自己公司内部用用。
copyleft的概念本身比较宽泛,不仅可以用于软件,也可以用于文档。GFDL是GNU提出的自由文档许可证,使用了GFDL的文字作品,允许他人自由使用、修改、转载等,包括可以商业使用,但条件是衍生作品也必须使用GFDL。
CC-BY-SA也是符合copyleft定义的,和GFDL有点类似,但并不互相兼容,因为两者都要求衍生作品使用自己的许可证。具体可以看一下这篇文章:“Copyleft和GFDL许可证”11。
为什么不支持自由呢!
最后,为了对比,我们看一个专有软件(和开源软件、自由软件、copyleft软件相对立的)的许可证。了解一下专有软件对用户自由的限制。
在微软的软件许可条款中,有一部分专门描述对用户的权利限制12:
SCOPE OF LICENSE.
The software is licensed, not sold. Microsoft reserves all other rights. Unless Applicable law gives you more rights despite this limitation, you will not (and have no right to):
1.work around any technical limitations in the software that only allow you to use it in certain ways;
2.reverse engineer, decompile or disassemble the software;
3.remove, minimize, block, or modify any notices of Microsoft or its suppliers in the software;
4.use the software in any way that is against the law or to create or propagate malware; or
5.share, publish, distribute, or lend the software, provide the software as a stand-alone hosted solution for others to use, or transfer the software or this agreement to any third party.
翻译过来就是:
许可范围。
本软件授予使用许可,而非出售给使用者。Microsoft保留本协议未明确授予的所有权利,除非适用法律赋予您权利,否则您不得(也无权)做以下这些事:
1.不得绕过本软件的技术限制,你只能按照本软件所允许的方式使用本软件;
2.不得实施反向工程,不得反编译、反汇编本软件;
3.不得删除、最小化、阻拦、修改Microsoft或其供应商在软件中的任何声明;
4.不得以任何违法的方式使用该软件;不得创建或传播恶意软件;
5.不得共享、发布、分发或出租本软件;不得将本软件单独作为托管方案提供给他人使用;不得将本软件或本协议转让给任何第三方。
看到没有,即便只是一个二进制文件,专有软件都要设置设种种限制,目的是保护其盈利的能力。
而自由软件不仅给你源代码,还赋予你种种自由,目的是促进整个人类的自由。
有什么理由不去珍视和支持这种自由呢!
文末奉上这张图,一图看懂不同类型软件之间的关系,来自FSF。13
现在,你的心里是不是亮堂多了。
开源软件、自由软件其实差不多的,copyleft则有着更强烈的理想信念。
不管怎样,选一个你喜欢的许可证,开干吧!
注:题图来自《硅谷》第5季剧照
参考: