澄清“自由软件、开源软件”相关概念及许可证的误解

2019-03-10IT 编程 编程.开源项目

★引子


  长期以来,一直有很多读者不太明白“自由软件”与“开源软件”的差异。除此之外,还经常会有其它的一些误解。
  昨天正好在俺的网盘上分享了《若为自由故——自由软件之父理查德·斯托曼传》一书的中文版,所以顺便来聊聊相关的话题。


★误解1——“提供源代码的软件”就是“开源软件”


  这可能是最常见的误解,所以俺把这条放在本文第一条。
  “提供源代码”只是“开源软件”的【必要条件】,但【不是】充分条件。换句话说:不提供源码的一定不是开源软件,提供源码的不一定是开源软件(有点像绕口令)
  所谓的“开源软件”,是有严格定义滴!目前业界的共识是采用“开放源代码促进会”(洋文叫“Open Source Initiative”,缩写是 OSI)给出的定义。
  其定义很长,包含很多项,俺就不全文列出啦。想看的同学,请猛击 OSI【官网】的“这个链接”。不懂洋文的同学,请看中文维基百科的“这个页面”。

  为了让大伙儿加深印象,举 UNIX 的例子。
  说到 UNIX,在计算机史上那可是大名鼎鼎滴。其背景,俺就不多说啦。当年(上世纪70年代)UNIX 隶属于商业公司 AT&T。那年头,AT&T 销售 UNIX 的时候都会附送【全部源代码】。但即使这样,(以如今的标准来看)UNIX 也【不能】算是开源软件。因为用户拿到源代码之后,受限于保密条款,【无法】随意分发源代码。


★误解2——把“开源软件”等同于“自由软件”(混淆这两者)


  “开源软件”与“自由软件”这两个概念有很大的重叠,导致很多人混淆这两者(误以为这俩概念可以互换)。
  但其实这两者在理念上有【很大】差异。考虑到本文是面向普通读者,俺尽可能用通俗的大白话来说一下两者的共性和差异。

◇“开源软件”与“自由软件”的【共性】


  共性大致有如下几条:
1. 两者都要求——源代码要【公开】
2. 两者都要求——公开的源代码必须具备【完整性】(换句话说,用公开的源码必须能重新生成该软件)
3. 两者都要求——公开的源代码要允许【随意分发】
4. 两者都要求——公开的源代码要允许【随意修改】
5. 两者都要求——【不能】限制商业使用
......
(还有其它一些共同点,考虑到篇幅,就不再列举啦)

◇“开源软件”与“自由软件”在【理念】方面的【差异】


  “开源软件”的立足点更加侧重于——源代码的【开放性】。
  “自由软件”的立足点更加侧重于——软件用户的【自由度】。

  考虑到很多人不太清楚“用户的自由”,俺来介绍一下——
  FSF 的创始人 理查德·斯托曼(Richard Matthew Stallman,人称 RMS)给出了【用户的四大自由】:
自由度0:
无论用户出于何种目的,必须可以按照用户意愿,自由地运行该软件。

自由度1:
用户可以自由地学习并修改该软件,以此来帮助用户完成用户自己的计算。
(作为前提,用户必须可以访问到该软件的源代码)

自由度2:
用户可以自由地分发该软件的拷贝,这样就可以助人。

自由度3:
用户可以自由地分发该软件修改后的拷贝。借此,用户可以把改进后的软件分享给整个社区令他人也从中受益。
(作为前提,用户必须可以访问到该软件的源代码)

  更详细的介绍可以参见 FSF(自由软件基金会)【官网】的文章(如下):
What is free software?》(原文)
什么是自由软件?》(上述的中文翻译)

  引申阅读:
  俺的网盘上分享了【自由软件运动创始人】理查德·斯托曼(RMS)的“选集”和“传记”,分别如下:
自由软件,自由社会——理查德·斯托曼选集
若为自由故——自由软件之父理查德·斯托曼传

◇“开源软件”与“自由软件”在【许可证】方面的【差异】


  (注:本文后续部分提到的“许可证、许可协议、license”三者指同一个东东)
  刚才俺聊到了“自由软件”与“开源软件”在理念上的差异。这些差异自然也会反应到 license 的条款上。比如有些 license 立足于“开源”,还有些 license 立足于“自由”。
  为了方便大伙儿,给出一个维基百科链接(在“这里”)。该页面对比了各种不同的软件许可协议。在【第二个】表格中,有一栏是“FSF 认可”——凡是被 FSF 认可的,都可以算是【自由软件】许可证;另外还有一栏是“OSI 认证”——凡是被 OSI 认证的,都可以算是【开源软件】许可证


★误解3——以为“自由软件”排斥商业公司


  长期以来,很多商业公司对“自由软件”进行【污名化/妖魔化】。比如微软前任 CEO 巴尔默曾经污蔑说——Linux 以及相关的(GPL)许可证是“癌症”(以下是他原话):
Linux is a cancer that attaches itself in an intellectual property sense to everything it touches.
That's the way that the license works.
  长期的妖魔化,让很多人【误以为】“自由软件与商业公司水火不容”。但其实不然!
  商业公司也能基于“自由软件许可协议”去开发“自由软件”并提供给用户。该过程可以是“免费的”,也可以是“付费的”。
  所谓的“付费”,也就是说——商业公司也可以通过“销售自由软件”来获得利润(关于这点,下一条会详细介绍)。


★误解4——以为“自由软件 or 开源软件”必定是免费的


  (注:为了打字省力,本文以下部分以 FOSS 作为“自由软件 or 开源软件”的总称)
  关于这个误解,俺把“自由软件”和“开源软件”分开来阐述。

◇对于“自由软件”


  在前一条,俺提到:(从理论上讲)商业公司也可以销售自由软件(拿自由软件卖钱)。
  说到这,可能很多人还不信。下面俺给出 FSF(自由软件基金会)【官网】的文章。
Selling Free Software》(原文)
销售自由软件》(上述的中文翻译)

◇对于“开源软件”


  如果你理解了“为啥商业公司也允许销售自由软件”,也就比较能理解“为啥商业公司允许销售开源软件”了。
  OSI(开放源代码促进会)对“开源软件”的定义(前面已经提到),并【没有】对“销售或付费”做任何限制。
  也就是说,如果你开发了一套“开源软件”,并拿去卖,并且有人愿意买。这个(销售/购买)行为并【不】违背 OSI 的精神和条款。

◇实际案例


  不要以为俺在本章节提到的只是【理论上的可能性】。在现实生活中已经有商业公司(在遵守 FOSS 许可的前提下)利用自由软件盈利,甚至还上市了——这就是大名鼎鼎的【红帽公司】(洋文是:Red Hat)。该公司发布的“Red Hat Enterprise Linux”(简称 RHEL),在 Linux 社区很有影响。
  关于“红帽公司”的规模,以下摘自维基百科的介绍:
Red Hat于1999年8月11日在纳斯达克上市,2005年12月19日纳入纳斯达克100指数,2006年12月12日转到纽约证券交易所挂牌。
2018年10月28日,IBM 将以每股190美元的现金收购 Red Hat 所有已发行股份,总价值约为340亿美元。


★误解5——以为“自由软件 or 开源软件”的开发人员都是“义务的/无报酬的”


  互联网时代之前和初期,情况确实如此。
  但如今 FOSS(Free and Open-Source Software)已经改变了全球软件行业的生态环境。
  举个例子:由于 Linux 内核已经被大量/广泛地适用于各个领域,很多【大型】商业会让自己的程序员参与 Linux 社区的开发;同时,这些程序员拿的是商业公司的工资。


★误解6——以为“自由软件 or 开源软件”就没有版权


  虽然 FOSS(Free and Open-Source Software)允许用户获得源代码,允许用户自由地分发软件(包括源代码),但某些 FOSS 的 license 依然会有版权相关的条款(比如:有的会强调“署名权”,有的会强调“修改权”)。
  引申阅读:
对版权的误解 @ FSF 官网


★误解7——把“自由软件 or 开源软件”视作某种“共产主义”


  坦率地说,犯这种错误的人,既没有理解 FOSS(Free and Open-Source Software),也没有理解共产主义。
  FOSS 与“共产主义”在本质上简直是【截然相反】滴。

◇开放性 VS 封闭性


  前面俺已经说了:“开源软件”不光强调公开源码,而且强调【开放性】;相比之下,共产运动必将导致社会的【封闭性】。
  为啥共产运动必将导致“封闭性”?
  有耐心的同学可以去看卡尔·波普尔的代表作《开放社会及其敌人》(提醒一下:这是大部头的政治理论著作)

◇自由 VS 奴役


  前面俺还说了:“自由软件”尽可能确保用户的【自由】;相比之下,共产运动必将导致对自由的【剥夺】(奴役)。
  为啥共产运动必将导致“对自由的剥夺和奴役”?
  对此感兴趣的同学可以去看一下弗里德里希·哈耶克的代表作《通往奴役之路》。

◇引申阅读


  批判“共产主义”和“马列主义”的博文,俺已经写过很多。具体参见博客上的 政治.共产运动 标签。


★误解8——认为“自由软件 or 开源软件”的质量不如“闭源商业软件”


  在20年前,很多人持有这种观点。如今越来越多的人开始意识到——FOSS 也可以打造出非常优秀的软件。
  比如说大伙儿平时都在用的浏览器。IE 是完全闭源的商业软件,如今远远比不上 Chrome 和 Firefox。Firefox 是正宗的开源软件;Chrome 虽然不是开源软件,但它是在开源软件 Chromium 的基础上二次开发而成。
  再比如 Web 服务器软件,长期占据三甲的,有两个(Apache、Nginx)是 FOSS,一个是闭源的(IIS)。而且 Apache + Nginx 的市场份额会明显高于 IIS。
  (类似的例子还能举出很多)
  另外,还有很多优秀的闭源商业软件在其内部使用了开源的库(library)。这些商业软件的成功,其内部使用的开源库功不可没。
  引申阅读:
俺整理的“C/C++/Python 开源库清单


★误解9——把“自由软件”等同于“GPL 协议”(混淆这两者)


  (注:GPL 的全称是“GNU General Public License”,维基百科链接在“这里”)
  这个错误连某些 FOSS 社区的人都会犯。
  “使用 GPL 协议”的软件,必定是“自由软件”;但反过来就【不】成立。换句话说,除了 GPL 协议,还有很多其它协议,也可以确保其所属的软件是“自由软件”。
  刚才提到了维基百科上有一个 license 对比清单,再次丢出来给列位看官参考(链接在“这里”)。清单中(第2个表格)有很多【非】GPL 的协议,也得到了 FSF 的认可(可以算是“自由的协议”)


★误解10——把“自由软件”等同于“与 GPL 兼容的协议”(混淆这两者)


  这条与前一条有点类似,也属于——连 FOSS 社区的人都会犯的错误。
  “兼容 GPL 的协议”,其所属的软件必定是“自由软件”;但反过来就【不】成立。换句话说,还有很多【自由软件】的许可协议,与 GPL 是【不】兼容滴!
  在 FSF(自由软件基金会)官网上有一个清单(链接在“这里”),对各种许可协议进行分类,其中有一类是【GPL-Incompatible Free Software Licenses】。这一类协议,数量还不少。


★误解11——认为“开源软件许可证”的范畴包含了“自由软件许可证”(以为后者是前者的【真子集】)


  首先要承认一下:有段时间,俺也犯了这个错误。
  如今要澄清的是:绝大部分“自由软件许可证”同时也算是“开源软件许可证”。但有少数【例外】

  举个例子(例外):WTFPL
  有一个比较鲜为人知的 license 叫做“WTFPL”,洋文全称是“Do What The Fuck You Want To Public License”。中文翻译成“你他妈的想干嘛就干嘛公共许可证”。
  猛一看这名称,可能很多人以为这是个“恶搞的协议”(恶作剧)。但这个协议还是有点来头滴,其 2.0 版本的作者 Sam Hocevar 曾经担任过 Debian 社区的负责人。
  这个协议就属于刚才提到的【极少数例外】——它获得了 FSF 的认可,但没有获得 OSI 的认证。


★结尾


  俺写的这篇,难免会有遗漏。欢迎大伙儿补充 FOSS 相关的其它误解。


俺博客上,和本文相关的帖子(需翻墙)
如何选择开源项目?
GitHub 通告:整理了一个 C 和 C++ 开源库的清单(含示例代码)
为啥俺推荐 Python[5]:作为瑞士军刀的 Python——顺便分享俺整理的 Python 开源库