使用Apache协议的是自由软件吗?


使用Apache协议的是自由软件吗?

文章插图
 
作者:卫剑钒
大家都知道的是,使用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,里面有十个标准,这里不一一列举
简单地说,开源软件,就是必须提供源代码,允许修改和再发布,允许别人销售或者免费送出,不区别对待任何人和任何领域,不以各种不一致的方法限制他人使用、复制、修改和再发布 。


推荐阅读