自由与开源(一) 什么是自由和开源软件? 来自 HeroCreeper

📃长文警告 - 本文约4800字
📷多图警告 - 本文共12张图片

0x00 | 引言
在2021年的今天,“开源软件”这一概念已经十分普遍。哪怕是非开发人员的普通用户,也很可能会对“开源软件”抱有相较“闭源软件”更多的好感。这是因为如今很多软件使用者都知道“开源”能给用户带来更多的自由。

如果你对这方面了解较多一些,你大概还听说过另一个叫“自由软件”的类似概念。你可能会好奇:它们到底有什么相似和区别?它们是如何带给用户更多自由的?于是我以这篇图文为起点,开坑了这个“自由与开源”系列,来带大家深入地了解一下自由和开源软件吧!

那么,就让我们从自由/开源软件的历史说起…

0x10 | 历史:自由与开源的起点
可能出乎你意料的是,计算机发展早期的软件基本都以类似现在“自由/开源软件”的方式发行。在1950年代时,操作系统和附加组件等软件都是与硬件深度绑定的,它们与计算机本身捆绑在一起交付。而为了便于用户能够依照自己的需求修改和优化软件,源代码(人类可读的代码)总是和机器码(或称“二进制”,指人类不可读但机器可执行的代码)一并提供。那时研究机构和大学的研究人员可以彼此开放地共享自己所编写或修改的计算机程序的源代码,并互相学习一同发展。

早在1953年,第一个符合现代开源/自由意义的软件——UNIVAC研发的编译器A-2 System就诞生了。彼时的UNIVAC为购买A-2 System的客户提供其全部源代码,并邀请客户将自己对源码进行的修改和优化提交给UNIVAC以帮助提高软件质量。没错,就像现在的开源/自由软件社区一样哦。

运行A-* System的UNIVAC I计算机

0x11 | 历史:黑暗岁月
到了1960年代,操作系统和编程语言在十几年的发展中日渐成熟。随着并非与硬件绑定、而是可以单独安装的软件出现,人们看到了新的商机,售卖独立软件的业务、甚至不做硬件而只卖软件的公司开始显现。1974年时,美国为了迎合这一新型产业的发展,通过“CONTU”法案让计算机软件也可以作为“版权物”被法律保护。此后,许多软件开发商便开始给自家的软件加入许可证,而很多开发商会通过不提供源代码、不允许用户自行修改和再分发的方式保护自己的知识产权。

转到用户的视角上,这样的变故却导致了各种前所未有的问题接踵而至。假设你是一个有一定能力的技术人员:你本来可以通过修改源代码修复一个打印机驱动抽风的错误、解决操作系统异常崩溃的故障、或是搞定某文本编辑器没法将文件存储到特定型号软盘上的问题… 可因为这些软件不再提供源代码,你只能看着它们卡bug干瞪眼!这谁顶得住呢?于是,有一个程序员坐不住了。

拍摄于2019年的Richard Stallman照片

0x12 | 历史:希望的曙光
这个提出抗议的程序员老哥叫Richard Matthew Stallman,他在1983年启动了GNU项目,终极目标是开发一个公开源代码、可供公众自由修改和运行的操作系统。为了推动GNU计划的进展,Richard老哥又在1986年奠基了自由软件基金会(Free Software Foundation,简称FSF)。

随着越来越多的志愿者加入,GNU系统各种组件开发都在如火如荼地进行着。当年的开发者们斗志激昂,凭着一腔热血把不少组件都做到了高度完善、可以商用的程度,甚至诸如GCC的一些组件已经成为了行业的引领者。几年之后,GNU系统的多数组件都已经随时可用,摆在眼前的只剩一个问题:他们还缺一个完善的内核。

0x13 | 历史:自由的崛起
这个问题呢,说大不大、说小也不小。虽然这时的GNU计划已经有能力在现有操作系统上把多数组件都替换为自由/开源版本,但缺少一个可用内核使得其终极目标:一个真正的、完整的自由操作系统无法实现。为了解决这个燃眉之急,GNU把希望寄托在了隔壁的Linux项目上。

与GNU类似,由Linus Torvalds(就是那个对NVIDIA竖起中指的老爷爷)带领开发的Linux项目的目标也是开发一个可以自由分发和运行的操作系统。不同的是,Linux项目的内核已经高度可用,但缺失上层的组件。英雄所见略所同,两个大佬相视一笑,把Linux内核和GNU的上层组件结合在了一起——世界上第一个真 · 自由操作系统就此诞生!

由于这个操作系统的诞生离不开任何一方的贡献,GNU提出将新系统命名为“GNU/Linux”。这种命名方式和GNU自家组件十分相似(比如GNU/Hurd),而Linux并非归属于GNU项目,导致这个提议并没有被Linux社区一致认同。无论如何,这样的叫法和还是成为了主流,并沿用至今。

对GNU/Linux感兴趣的小伙伴可以看看我之前写的图文哦:【 查看链接

GNU官网上GNU/Linux的插图

0x20 | 定义:自由、开源,和…免费?
说到这里,你应该发现了:其实在当今相对不那么广为人知的“自由软件”才是最早被提出的概念。那么我们今天常说的“开源软件”又是从哪来的?它跟自由软件之间究竟有什么关系呢?要搞清楚这个问题,我们要说回当年GNU计划立项带起来的“自由软件运动”,也就是一个有大量参与者、推广自由软件的号召。

1997年时,一个叫Eric Steven Raymond的老哥大致总结了一些自由软件社区提出的准则,并发现FSF所提出的自由软件概念十分激进,不利于商业公司采纳。为此,他将现有的自由软件理念进行了一些修改,并提出了“开源软件”(Open Source Software, OSS)的概念。随后1998年的一次大佬云集的“战略会议”上,这一词被正式认证为这种新的概念的名称,并在之后创建了“开源促进会”(Open Source Initiative,简称OSI,不是ISO,更不是iOS!)。可能是因为自由软件的英文“Free Software”中的Free可能造成这个词被误解为“免费”而非本意“自由”,所以媒体更喜欢在报道里使用简洁明了的“开源软件”一词。

之前提到过奠基FSF的大佬Richard Stallman,他对这个新的组织是怎么看的呢?其实一开始他还对这个“开源软件”的概念挺感兴趣的,但后来随着“开源软件”的名号渐渐盖过了他的“自由软件”,再加上当时的开源软件的定义又跟他的价值观有些出入,于是他和他的后援会(bushi)FSF就开始强烈反对OSI,指责对方曲解了自由软件的哲学意义… 而OSI则表示自己很无辜,明明自己应该是盟友啊喂!

OSI:FSF你个大坏蛋只会欺负我 呜呜

经过了二十多年的发展,现在FSF对自由软件的定义和OSI对开源软件的定义基本没有区别了,而很多人——包括OSI——都认为“开源软件”和“自由软件”属于同义词。尽管如此,傲娇(划掉)的FSF仍然认为自由软件方向错了。当然了,虽说两边各有各的支持者,但他们都会齐心协力对抗私有(闭源)软件世界。为了不得罪任何人,现在我们通常用“自由与开源软件”(英文Free and Open Source Software,缩写FOSS)来指代这一类可以自由修改、分发和运行的软件。

啊?你问我自由/开源软件和免费软件的关系?答案是:没有关系。自由/开源软件所强调的是自由,而非价格。自由/开源软件可能会在分发时收取费用,而免费软件也很可能不提供源代码并不允许用户对其进行逆向、修改或再分发。举个栗子就是,疼讯QQ客户端是免费软件,但你要是逆向并修改它的代码然后再发到网上,就得小心律师函警告咯。emm… 不过现在的自由/开源软件一般都是免费的。

(悄悄说一句,这表格是我自己整的,夸我!)

0x21 | 定义:它到底自由在哪?
读到这里,你可能会问:所以你说了半天,这个什么自由/开源软件,它到底自由在哪、开源在哪?对于这个定义呀,我们参考FSF的“四大基本自由”,如下:

第零自由——以任何目的随心所欲运行软件的自由。【不代表法律不能阻止你用作某些事情!】
第一自由——研究和随心所欲修改软件的自由。为满足这一条,可访问源代码是前提条件。
第二自由——再分发软件以帮助他人的自由。
第三自由——将你修改过的版本分发给他人的自由。这么做可以让社区中的其他人从你的改动中获益。可访问源代码是前提条件。
* 注:方括号中的内容是我补充的,其余部分翻译自原文: 查看链接

FSF认为,若一个软件缺失上述四个基本自由中的任何一个,那它就不是自由软件。至于OSI对开源软件的定义嘛,其实跟这个也没啥大差别,感兴趣的可以去官网( 查看链接 )看看,此处不多作赘述。

(Proprietary即“私有”的意思)

0x30 | 常见问题:自由/开源软件可以用作商业用途吗?
FSF表示:废话,当然能!( 查看链接 )自由/开源软件所提倡的是道德和自由,它们的宿敌是“私有”,而不是“商业”!相反的,如果一个软件禁止用作商业用途,那它就违背了基本的自由/开源软件精神,从而并不是一个自由/开源软件。当然咯,使用自由/开源软件实现商业化盈利的方法显然会有别于使用私有软件。这里我们来列举几个常见的方法。
首先要说的是Red Hat Linux(也就是红帽Linux)开发的商业化Linux发行版RHEL(Red Hat Enterprise Linux)。RHEL本身属于自由/开源软件,是一个打包了许多适合企业使用的组件。红帽公司则通过为这个系统提供有偿的技术支持服务盈利,获得了不小的成功。这种盈利模式很受FSF支持,甚至GPL许可证中都写有“你可以通过为此自由软件提供保证或服务来获取利益”。

另一种值得一提的自由/开源软件商业化方案就是在自由/开源软件中提供私有(闭源)的、商业化的附加组件。最成功的例子就是Google开发开源的Android系统,并通过与Android关系十分密切的闭源商业组件GMS服务获取利益。除此之外,Ubuntu的Livepatch等私有商业组件也是典型的例子。虽然这种模式略显消极,但在现阶段较容易获利,因此十分受企业欢迎。

被标为“私有”的Canonical Livepatch

再消极一点的话,有些软件提供自由/开源的免费版本,但其付费完整版确实整体私有的(而不仅是在免费版的基础上附加一些商业组件)。著名的思维导图软件XMind就是采用了这个解决方案,它的免费版本采用LGPL v3开源,付费完整版则是私有软件。基于自由/开源的Deepin、仅加入了一些额外商业组件却整体闭源的统信UOS也是如此。这种模式嘛… 好吧,至少比纯粹的私有软件要强。

实际上,如果你真的想,你也可以直接拿自己的、甚至别人的自由/开源软件卖副本,只要遵守软件发布使用的许可证就好。不过在2021年,自由/开源软件基本都可以通过网络免费获得,所以你这样恐怕不太能卖得出去…

顺便提一下FSF对售卖自由软件的观点:卖呀!赚钱呀!别错过这个机会!你卖自由软件,那就是在帮助分发,当然是好事!如果你赚的钱可以一部分回馈给开源社区,那就更棒了啊!别人负责开发,你去卖软件给社区赚钱,这不就是共建美好开源社区嘛。( 查看链接

用开源的Xmind免费版画的图… 绝对不是因为我穷!

0x32 | 常见问题:使用自由/开源软件有什么好处?
如果你是开发者,那么自由/开源软件的好处是显而易见的。你可以通过源代码学习和研究自由/开源软件、修改它们以满足你的需求、将它们作为你的软件的一部分或是直接基于它们开发新的软件。除此之外,自由/开源软件有利于人们互相交流和学习彼此的创新和改进、形成自由/开源社区,用“众人拾柴火焰高”的道理加速软件的进步。

那如果你是看不懂代码的普通用户,自由/开源软件还有什么优势吗?当然有咯。由于私有软件不公开它们的源代码,除了它们的开发者之外没有人知道它们的工作原理;这样的特点使得私有软件开发者可能在用户无法察觉的情况下加入一些不友好的功能,比如窃取隐私、监视用户甚至留下可以控制用户的后门。

对于自由/开源软件来讲,它们的源代码是公开的,所有人都可以通过源代码了解其工作原理,这种情况下软件开发商不太可能厚着脸皮把这些不友好的功能写进去。你可能会说,如果他们不把这些写进公开源代码中,却偷偷在直接分发的二进制版本里夹带私货呢?这确实可能发生,不过对于用户来讲,完全可以自己从源代码编译出二进制来杜绝这个风险。

总之,自由/开源不管是对于开发者还是对于用户来讲,都有许许多多的好处。这样一来,如果私有软件和自由/开源软件同时可以满足我们的需求,那么我们完全有理由用自由/开源软件代替私有软件。

一心只想躺平的Windows用户(bushi

0x40 | 总结
说了这么多,该来个总结了。自由/开源软件的出现是人们反对软件私有化、闭源化所做的措施。自由/开源软件提倡让用户拥有控制软件、而非软件控制用户,它们往往提供给用户比私有软件更多的自由。如果你想支持自由/开源软件,可以开始试试从使用自由/开源软件来代替功能相似的私有软件开始哦~

啊对了,这图文写着好累的,麻烦各位点个赞再走吧qwq… 我会在暑假持续更新这个系列的!

BTW.其实我用Ubuntu

#酷安夜话# 日常把不知道该投哪的图文丢进夜话…

(0)

相关推荐