何为自由开源?

跳转至: 导航, 搜索

Icon-light.png 这是该作者的一家之言,既不是客观内容,也不代表本站官方观点。
请诸位看官独立思考,赞同不赞同均可。

注释:此页面为 MargueriteSu 讨论 - 贡献 所撰,其中糅杂了她的诠释。实际上这一话题涉及到哲学内容,完全不可能有一个统一的标准答案,身为用户、身为开发者、身为社区组织者和参与者,身份不同(或者说「代表不同的利益集团」),想到的肯定不会完全相同,甚至完全不同。而大部分时间实际上我们在做的是「如何做」而不是「为什么要做」事情。目前只能由历任社区管理员来逐次增删修订,将你的诠释收纳到本页面,因为这个页面可以作为一个锚点,确定你心目中的贡献者们是什么样的,从而聚拢到这样的人。
请参考这篇文章的讨论页,以获得进一步资讯。


Icon-argue.png 该页面存在争议
原因:Ubuntu 的诸位粉丝请注意!这里是 openSUSE 中文维基!这是 openSUSE 中文社区对 Free and Open Source 概念的共同认识和扫盲。或者说我们 openSUSE 社区就需要这样理解的人,无关对错,合则聚不合则散。我们社区对贵发行版也无普遍意义上的敌视、嫉妒等负面阴暗心理(这没有必要,作为一个比你们老的社区也没有闲情雅致去这么做),写这篇文章的意义更不在此。文中所出现的 Ubuntu 和 C 公司均为举例需要,只是很不幸需要反面案例的时候贵方总是出现在 google 搜索的第一页上。我方经过再三确认,相信我方的表述是客观没有问题的,如有漏网请至讨论页面提出。这种报复真的很无聊。
请参考这篇文章的讨论页,以获得进一步资讯。

中国人普遍认为的自由开源概念

注意: 三人成虎。说的人多的事情并不一定真的存在。

无它,「免费」尔。

日光之下并无新事,这在自由开源运动发展的早期已经出现过了。因为英文的「Free and Open Source」中的 Free 即有「免费」的意思(这深深的困扰了他们好多年,最终决定把 Free 改成 Libre,是法语的自由),所以很多人天然的理解成了「免费和开放源代码」,于是实质上就变成了两种承诺:一种是开发者对用户的承诺:永久免费; 一种是开发者对开发者的承诺:可获取源代码、随意修改、并随意分发。

于是就变成了开发者的事情,跟普通用户完全没有了关系,于是普通用户只需要牢记其对你的「永久免费」承诺并不时拿出来鞭打开发者即可。

而随着时间的发展,贪得无厌的用户在深深的脑海中不但铭记了「永久免费」这一完全没人这样说过的「承诺」(因为自由开源软件并不是无法盈利,有些依然会诱使你掏腰包,实际上有很多种自由开源软件的盈利模式存在。就算笨理也能想明白:这世上根本没有毫无代价的事,只要有哪怕一件,「责任感」这种道德就完全不会存在。),并且会把他们对「一般软件」的需求和所获得的服务扩散到自由开源软件,事实上「强迫」开发者去修复用户系统上的故障、「强迫」开发者去实现用户想要的功能(何谓「事实上」?哦,你不修我的故障,好的,我骂到博客上、论坛上、社交网络里。从而阻碍别人使用你的软件。实际上,如果仔细阅读这样的尖刻评论,看官就会发现,作者经常是基于一个错误认识做出判断的,这个错误认识就是:他把「一般软件」的要求推及给了「自由开源软件」),于是给予了开发者「奴隶」待遇。现实中由于很少有用户能够辨别或者「不屑于」辨别「开发者」和「贡献者」的区别,这种待遇和判定也被推及到了贡献者的身上。简而言之,「你说的永久免费,我既然用了,那就是你整个社区亏欠我的。因为我放着“更好的”收费软件没有用,而跑来用“故障重重”的自由开源软件,我损失的机会成本(就是因为干这个所以没干成那个的成本)要在你身上收回来」。

狭义的自由开源概念

狭义的自由开源概念是:自由地开放源代码。即:软件作者把源代码公开发布,给予你修改并二次发布的权利。就这样,没别的了。

测试、调试、故障受理与修复、接受新功能请求、接受代码合并请求、接受别人的帮助、用户社区建立、互动、整个自由开源生态的维护,统统都是完全没有,谁愿意干谁干,跟我没有关系。或者这么说:「写完拉倒」,哪怕洪水滔天。这从 GPL 许可证的「无保声明」中可以看出端倪。

这是自由开源运动在原点时的认识,实际中产生了许多问题(不是违规行为,而是「问题」),有些甚至到现在还无法解决(可能永远都无法解决,因为无法用条文约束道德,道德只能用普遍认知来约束,真出现了特例,我哪里都对就是精神不对,谁都没有办法。条文是死的是给人绕过的,最熟悉刑法的人不是律师而是惯犯),只能从道德层面去谴责之,却没有惩罚行为人的有效手段。具体例子请见 #狭义自由开源概念衍生出的普遍问题

狭义自由开源概念衍生出的普遍问题

首先,必须确定的是:只要你满足了狭义的概念,你就已经参与到自由开源中了。

没有人有权利去要求你更多,因为许可证并没有要求你这么做。满足且仅满足狭义的概念并不是错的,只是值得商榷的。

正如任何大方向的前进都伴生着小方向的倒退一样,狭义的自由开源概念也衍生出了一些道德上观感非常不好的现象,因为道德无法被许可证约束,只能受普遍认知(良知)影响。虽然你完全有权利自主选择怎样参与自由开源,但出于友情提醒,并不鼓励你一开始就一只脚踏入某些逆流。这些逆流本身不是错的,它们的产生也都是有其内在原因的,比如自由开源的道德进步太快,跑步进入共产主义我暂时接受不了。但它们很可能无意中就扭曲掉新手的思维,形成错误认识。举例:

1. 软件源代码是自由开源的,但开发并不是。

这是第一大类。涉及到的情况非常之多,比如:

A. Google 的 mozc 日文输入法是以 BSD-3-Clause 协议发布的,是自由开源软件。但它自由的并不彻底,开发仍然只能由 Google 员工进行。也就是说,你可以拿它干你想要的事,但你无法把你的修改合并到上游,从而它们开发一点,你就要相应调整一点,这在摩尔定律统治的软件世界里几乎就是不可能的。所以实际上 Google 所想的是:你可以用,但从你用的那天起,这个软件的后续进展你就很难用上了; 我开源,但我要保证我最终推出的产品比你的产品好。终极目的是限制你的开发速度。

这是最为严苛也是最好识别的。

B. 软件本身是以自由开源协议发布的,但是你想参与开发仍然要与控制主代码树的公司签订协议,表明你的代码均无偿捐献给该公司。代表为 Canonical 的 Ubuntu Phone。也就是说你可以参与开发也可以写代码,但是你的自由开源代码不再是你的,你书面放弃了第一作者权利。甚至到最后你取得你的源代码可能还是要收费的,比如设备费用。终极目的是取得所有代码的直接所有权。说真的这几乎和闭源无异。一般开发者都会选择直接让它滚蛋,除非脑子烧掉真的相信只要我本人足够无私就能建立共产主义的。

这是最无厘头的。虽然严苛程度不如 Google 所下的限制,但是观感比 Google 差太多了。几乎所有开发者都会产生一种被羞辱被玩弄的感觉。

C. 软件本身以 GPL 协议发布,外表完全没有任何问题。但是,我们的开发者只针对特定发行版做开发,并不接受其它人的帮助。你可以改,可以提交,但我们完全不搭理你(LXDE)或者在搭理你的时候才告诉你,说你想错了(Linux Mint Cinnamon)。简单说就是挂羊头卖狗肉,比如上面括号里的均声称自己为桌面环境,但实质上已经沦为某个社区的附庸,或者完全就没有准备好成为它声明的东西。

如果一开始就明确告知是这样的:你可以据此建立自己的项目,但别在我的项目里胡来。那基本没有问题。

但是如果像上面那样,观感不会比 Ubuntu Phone 好多少,因为你事实上浪费了别人的时间和激情。例子其实很多,比如当初 KOffice 和 Caligra 的分裂,Oracle OpenOffice 和 LibreOffice 的分裂等等都是因为这个:原来很宽,但有一天收紧,或者给人的感觉很宽,等感兴趣的人把前期工作都做完发现根本不是那帮家伙声明的东西里说的那回事。

2. 软件源代码是自由开源的,开发也是,但文档不是。

够清楚了吧,你可以下载,可以修改,可以提交,但你真的想用于生产环境,这坨东西怎么编译、怎么安装、怎么配置,统统没有,解压软件包只能看到最基本的介绍说这是干嘛的,最终能实现什么东西,有些可能有开发文档,作为用户,想要中间过程吗?花钱买服务吧,文档随服务送哦。多见于一些企业推出的开源产品(比如,Arch 管理员就公开抱怨过 OpenStack,一个美国宇航局出品的开源软件),是稍微限制一下你真的去自己搞。。。虽然这玩意真的认真起来没人挡得住。。。我们的赞助商 SuSE 也干。所以没啥批评的,业内惯例(注意这个业内是指围绕开源展开的商业圈子,而不是我们开源社区,不要混淆这两个概念,尤其不能拿 Canonical 在 Ubuntu 社区玩的那些跟 SUSE/RedHat 在商业服务器市场玩的那些去比较,因为前者是文化侵略很无耻,后者是商业中的勾心斗角,不那么做才是傻瓜。)

3. 软件源代码是自由开源的,开发也是,文档也是,但是大公司派了很多员工常驻。

比如 GNOME。你可以参与开发,但是在可以想象的时间里,你无法决定这个项目的走向。你无法群策群力说我们干点什么吧,只能自己干,提交,他们大部分时间会欣然接受并感谢,态度非常好。这种现象的产生是因为这个桌面环境是 RedHat 企业版的基本桌面环境,他们需要控制并施加影响以保证其契合其企业战略。虽然用户和一部分开发者(包括笔者在内)都很不齿,但这种情况其实是最无法指责的,因为大家完全都是按照规则在游戏,只是使用了人海战术这一人类社会里最合理也是最无解的策略来取得优势。

注意,「大公司派了很多员工常驻」或者「谁知道派没派反正他们公司的人很多」并不是这一逆流的本质,其本质是「由公司事实控制发展方向」。比如 SuSE 基本上占据了 KDE 很大的空间、RedHat 和 SuSE 也占据了 Kernel/Xorg,SuSE 曾经还占据了 LibreOffice 和 Mono 几乎全部的空间,但是这些社区的开发工作和发展方向基本依然是由社区协商并以社区名义发布的。现象本身并不能说明背后的原因,比如德国是 KDE 老家,德国政府官方拨款支持 KDE,万一开发 KDE 可以给 SUSE 公司带来节税效应呢。不像 GNOME 中有些函数的作废就是 RedHat 员工脑子一热邮件列表发封邮件就干了。

4. 软件源代码是自由开源的,但基本上没有开发,没有文档。

简单说,你把你实现的成品 github 一扔就不管了。未来甚至你自己都不会再去用。

这是道德最没有问题的,因为这是彻彻底底的无私。。。放在这里只是为了说一下自由开源其实是为了形成一个社区从而让你作为作者也能学到东西,而不是一个公共的大坑。。。

广义的自由开源概念

随着时间的流逝和社会的演进,现在仅仅符合狭义的自由开源概念的项目正在越来越少。

目前主流自由开源社区(Linux 社区)所秉持的其实是「自由开源精神」而不仅仅是「自由开源许可证」。实际上如果你看过冲锋的代码你就会明白:开放源代码其实并不是这一运动想要实现的全部,它的最终目的是普及自由精神,建立自由社区。

同时那些仅仅为了培育这一精神所施加的人为限制正在越来越少,「开源兼容」的许可证也越来越多,而不仅仅是 GPL,还有比如应用于文档的 GFDL,应用于照片的 CC-BY 系列,商业/社区两用的 BSD,它们现在都被视为是「开源兼容」的。虽然在上个世纪诸如 GPL VS. BSD 曾引发过旷日持久的论战。

实质上「自由开源」概念经历了延伸和放宽:延伸了这一精神所覆盖的范围,不仅仅是许可证,而是方方面面; 放宽了这一精神在外物上的限制,比如禁止商业应用等,因为在这一精神融入主流社会的今天,有很多公司会主动支付版权费然后把实现开源,甚至有些公司为了避免荒谬的专利出现会注册这一专利并允许随意使用(Twitter 把「下拉刷新」专利注册了,别以为这不是专利,比如「滑动解锁」就是苹果的荒谬专利之一),就连曾为视为最大敌人的微软都开始开源它的某些代码了,「杀不死你的东西让你更强大」,即使再有偷自由开源的东西盈利的东西存在,它也很快会死亡,掀不起太大波澜,因为自由开源运动已经提供了盈利可能,而你还要去偷,无论是用户还是你的合作商都会有一种无形的气氛阻止你这样做,这样做对你商业信誉的伤害要比你得到的盈利多得多。(在国内还有很长的路要走)

目前这一精神在自由开源软件上的表现有:

  • 源代码开源。
  • 来自软件所有者的开发门槛为零。
  • 不重新发明轮子。如果有已有实现并可以扩展,那么扩展它。
  • 文档开源。使用维基等。
  • 组织并形成用户互助社区。积极帮助用户(在不影响开发的前提下)。同时在开发上尽量面向用户,把用户的反应纳入到重大修改的考量因素当中去,积极采纳合理意见。
  • 积极回应故障汇报并提供修复。
  • 积极回应新功能请求。能做的做,不能做的解释原因寻求理解。
  • 形成良性的贡献者添加内容和用户反馈渠道。
  • 重视并维护由类似软件共同组成的生态的和谐稳定。(简单说就是:我开发 KDE 是因为 GNOME 满足不了我的需求,而不是为了搞死 GNOME。)

现在您可以拿来同狭义的自由开源概念做比较,发现如果说狭义的自由开源概念只是指某种行为,那么广义的自由开源概念已经是指一种氛围了。

虽然目前主流自由开源社区(Linux 社区)的某些开发完全不行所以导致隔阂比较大的社区依然没有做到、有些地方甚至在倒退,甚至还纠结了一群「只允许你爱,不允许你恨」的用户攻击比他们更开放的项目/社区,甚至官方时而也进行这种攻击,绝大部分上游项目(比如 Kernel,Xorg,KDE)已经这样子很长时间了。所以这就是未来自由开源的发展方向。简单说这是从上到下一路通到底的管子,中游不会有阻碍。

openSUSE 秉持的自由开源概念

openSUSE 项目是完全做到「广义的自由开源概念」的社区。你可能对社区中某些人不满,比如 Ubuntu 社区的有些人就是讨厌我,但你把项目整体拿来看是挑不出毛病的。

同时我们一直持有的相关理念还有:

  • 积极的与上游合作。不「内化」补丁或修改除非上游出于种种原因不收。

这是 openSUSE 开发的特点,也可以理解为重视整个生态,而不是为了保持某些「优势」而刻意去内化一些东西,不用我们的发行版就体验不到(openSUSE 甚至连自己的主题都有提供,你完全可以有 openSUSE 样子的 Arch,同样这么做的还有 Crunchbang 但那本身就是个定制的小众发行版)。用户们可能都认为 openSUSE 对上游项目的改动比较大,但这正证明我们的实力,我们有能力改对。有些发行版用原生可不是像某些用户所说的「保持原滋原味」,是因为维护者没能力改。而且 openSUSE 对上游的改动鲜见不在上游代码树中的。配置的修改除外,所以评价一个发行版的技术实力如何,看它专属的配置文件的注释比如 YaST 的注释到位不到位,说的东西用户能不能看懂。当然一些上游设置错误的默认设置我们也会改好反馈给它们。

  • 积极的为整个生态着想。

如果这个生态里还有一家宁可吃亏也要方便整个生态的发行版,那就是 openSUSE。我们的 Build Service 甚至在为 Debian/Ubuntu/ArchLinux/Fedora/CentOS 提供着方便,而这种方便对 openSUSE 发行版本身其实毫无意义。但是对于 openSUSE 社区的意义很大,因为如果你只想占便宜不想吃亏,「尊重」和「德行」将会是你永远也得不到的东西。

  • 不搞歧视或二等公民。

这是 Ubuntu 或其它 Ubuntu 衍生版最大的问题。Arch/Gentoo 也有。虽然两者的表现不太一样。

Ubuntu 的是「你不用 Ubuntu 你活该,我管你去死」,它所开发的全部软件均是如此,它的社区走出的人从来都做不好上游。比如我们并不是没有尝试过去把 Unity 移植到 openSUSE 上,而是我们的开发者尝试去做了,发现它用了太多 Ubuntu 乱改出来的非标准化的东西,简单说,Unity 和 openSUSE 上的 GNOME 同样都依赖 GTK,但是 Unity 所要的 GTK 只有 Ubuntu 才有。这还不算完,因为任何一种移植都要面临这些的。正是那种「你不用 Ubuntu 你活该,我管你去死」的态度让我们望而却步(所以完全不像某些人对 Intel 对内核说的那样,其它发行版都不理 Unity 这个桌面环境,问题其实是:你这个桌面环境就没准备理其它发行版)。它可能在代码树上已经开源了,但距离思想开源还有很长的路要走。他的大部分人还怀有一种 Ubuntu 是第三 OS(Windows,Mac OS X,Ubuntu)其它人必须围着我转跟着我走的沙文主义思想(太自我了,沙文主义不是不能有,Debian/Fedora 完全可以有但它们没有,因为沙文主义是建立在那种地大物博内部能够实现几乎所有事情的土壤上,在开源世界这要有很强大的开发力量才能够实现,Ubuntu 内核都不是自己的这不是空中楼阁么,它其实是一个基于 Debian 的半残废系统)去征服 Windows 去抢占它的市场份额,去实现商业盈利。实际上你后院火都快把你自己烧了(这种思想 Ubuntu 的一些版本比如 Kubuntu/Xubuntu 都不能赞成,它实际上正走在分裂的钢丝上)。

Arch/Gentoo 的是「不用我的统统都是傻瓜」。哪怕他真的来帮你,恐怕也是带着某种「施舍」。有点强迫症。(不是说朋友互助,而是陌生人互助)但我比较喜欢后者,毕竟 Linux 是从黑客生态演变出来的,它们只是更加原味罢了。

而 openSUSE 是唯一不会有这一思想的社区。如果你在 openSUSE 社区问某个软件配置,他找了一圈发现没有,你说你是「其它发行版」,他的反应不会像是听到了「哦我用的是垃圾」,而是专注于技术问题,不会就告诉你不会,会就会帮助你。这是我注意到的最有趣的地方。

  • 尊重许可证、版权甚至是专利

自由开源并不是打破一切版权、专利的束缚。相反正是因为我们尊重它们所以才会有我们。不然当初直接就盗版了,Stallman 是有盗版 Unix 的实力的。而同样,违反我们在法庭上的裁定过程依然需要有一个行之有效的版权机制。如果任何人都可以使用任何人的任何东西,那么何来违反呢。之所以会产生 GPL 许可证,依然是给裁定时能做出有效判别而设的,不然想自由开源说一声「随便用」就完成了,何苦研究 3000 多字的法律文件。

自由开源并不反对版权、专利,因为即使「版权属左」,在法律上它仍然是一种版权声明。自由开源反对的是同一版权框架下无法自由修改软件带来的束缚,我改变不了你商业软件,所以我选择改变自己。只不过这种改变在一开始看来有些偏激,当然也是实力到了一定境界才干的出来,你我的话忍忍也就用商业免费软件了。以及反对的是专利滥用和专利流氓,比如陈皮烂谷全部注册成专利,「铅笔」不叫铅笔叫圆柱形物体,你用了我就告你发笔大财。

尊重许可证、版权甚至是专利,说起来容易做起来难。我们有法律专家审核我们发行版中每一个软件包的版权问题。而且我们每一个打包者都被鼓励学习常用许可证的判定,比如它源代码里说的是 BSD 的具体内容,但你如果没看过 BSD 协议你怎么知道它是 BSD 发布而不是个人所有多写了一堆东西呢。

而其它发行版说真的在这方面做的真的很不好。尤其是 Ubuntu 发行版。它源自 Debian,也使用了 Debian 的 deb 软件包系统,但是 Debian 是有严格的版权检查的,而 Ubuntu 没有。于是你经常看到某些人打包的明显是私有软件的东西里面带着一个默认的 debian/copyright 声明这整个软件包都是 GPL-3.0 协议发布的(事出阿里旺旺当初的泄露版 deb)。再比如 ffmpeg/Mplayer 和其它编解码器的打包方式,人家官方网站都说了开启某些选项很可能会违反专利,它依然堂而皇之的收录了。当然它都开始在一个自由开源的发行版上卖商业软件了,这些也就不值一提了。也许你可能会问,这真的有那么重要吗?让用户方便不就行了。让用户最方便的其实是直接用盗版。你这么做连自由开源软件存在的意义都抹杀掉了。

在艺术作品上几乎所有其它发行版做的都不够好,甚至 Mageia 还发生过用户提交壁纸时用别人的壁纸未征求同意也未加说明,Mageia 把作者标记为该用户,于是原作者疯了明确私有了他所有的艺术作品

而 openSUSE 最大的不同在于,我们不胡来。能绕行的尽量绕行,实在绕不了的我们也相信天命而不是掩耳盗铃。不但在精神上正确,而且在行为上正确。这很难但我们做到了。

以上。如果你认同这些,那么您适合这个社区。否则对您来说我们的限制有点大,请绕路。

一些误区

自由开源软件不是「免费」的

首先,自由开源软件可以实现盈利。而且聪明的自由开源软件开发者(其实某些方面同用户是一样的,保留了「只想占便宜不想吃亏」的人类本能)已经研究出了多种盈利模式。在简单列举下这些盈利模式及其实现原理之前,我们需要了解一些基本知识:

自由软件所带来的好处

实际上有些是源代码能带来的好处,有些是开放这一行为本身能带来的好处:

  • 因为源代码对所有人是可见的(当然要受制于用户本身所掌握的技能,你能看懂,它就对你有用,看不懂,它对你实际上影响几乎为零),所以用户不必再担心代码中捆绑广告、木马等等,因为「善良」同样是人类的天性,不可能所有人都对邪恶视而不见。
  • 用户可以修改它以适应自己的使用环境(比如有些 ACG 爱好者就写了任天堂和 PSP 上的游戏的模拟器,是基于 Linux 写的,然后又有些 ACG 爱好者就把它移植到 Android 上去了),当然这种「修改」取决于用户的能力。自由开源软件只能提供东西,却不会提供能力。
  • 作为源代码的第一作者,可能会收到其它感兴趣的程序猿提交的代码,从而形成一个作者群,这个群像其它组织一样内部有交流有互动,能够提高第一作者本身的能力。比如 Linus 本人最初也只是芬兰赫尔辛基大学的一个学生,跟你我没有什么差别,他的大部分知识其实是通过阅读开源代码得到的。

自由开源软件盈利模式及其实现原理

  • 软件是自由开源的,但是相应的服务是收费的。

其原理是不再纠结于软件自身,而是把人类使用软件所必要的过程考量进来,并籍以盈利。对于使用软件这个行为,很天然地会衍生出「怎么安装」、「怎么设置」、「出了问题怎么办(调试 & 修复)」、「我想改但是我不会改(扩展)」这些问题。于是软件作者可以根据自己对该软件优于常人、异于常人的理解,提供这些服务。我可以为你安装、教你设置、教你使用、出了问题为你调试并提供修复、为你改动以适应你的环境、在软件中实现你想要的功能,但这些都是收费的。虽然在大部分自由开源软件社区,「安装」、「设置」、「使用」、「调试修复」甚至「开发新功能」软件作者本人都会包揽,但这些实际上并不是他的义务。

实际上,使用开源产品构建商业帝国的公司,比如我们 openSUSE 最大的赞助者 SuSE 的日常任务里:「安装、设置、调试」这些文档虽然在随服务送,但是依然可以拿来卖的,因为这些文档可能并不是「自由开源」发布的,不然开源软件图书作者不可能卖掉书籍,除非有人同情或者为其精神震撼;「调试和修复」是初级工程师提供的主要商务服务,「为你改动以适应你的环境」和「为您提供修改」,无论是直接在上游修改还是只给你改不告诉别人,这些都是高级工程师提供的主要商务服务。正是这种专业周到的服务让我们有 10 亿美元级别的营收、95% 的世界 500 强客户和 95% 的超级计算机装机率的(当然还有别的因素)。

  • 在许可证上做文章。

其原理是构建一种不同于「自由开源运动」的主流许可证 GPL 的许可证,从而使得后续的闭源商业行为合理。

这种许可证的典型例子就是 BSD。BSD 是说,软件作者把自己的软件自由开源地发布了,你可以改,改了可以自己留着,也可以拿来卖钱,卖的钱也不用给我。有点像 Public Domain(公共领域),但是公共领域更倾向于「地球人都知道的东西」或者「作者死了七八十年甚至几百年的东西比如论语孟子韩非子这些」。

具体的开源兼容的协议列表请看 license.opensuse.org(Linux 基金会版的 SPDX)或 OSI 维护的开源协议列表。

  • 请求捐助。

其原理是利用「人情」和一些使用者因为「使用着本来人家可以拿来卖钱的」软件所产生的「亏欠」,「姜太公钓鱼」或者「周瑜打黄盖」的方法。但对于那些认识上就有问题的用户,这种方法显然是被无视的。

  • 利用长期赞助开源得到的品牌效应推广另外的商业产品。

比如 Novell/SuSE,RedHat 以及近年新生的 Blue System。人们总是倾向于认为「做开源」等价于「做慈善」(虽然真的不是那样),于是天然对它们产生了好感。或者从开源产品中看到了该公司或者这个人的技术底蕴。

当然除了这些比较普遍的,还有不入流的,比如利用自己对开源产品商标的控制权,直接推出不开源的同名产品,并不加以澄清,利用这种美妙的误会,比如 Ubuntu Phone。或者利用某个开源项目并未在该国家注册从而无法诉诸法律,直接在自己的产品中使用本来开源的代码,「你打我啊,可惜你手不够长」(比如 QQ 影音:http://ffmpeg.org/shame.html)。这些在当前的法律框架下的绕路行为都是「合法」的,但是道德上不一定「合理」,是真正开源爱好者所不齿的,虽然你做不了什么。


其次,取决于你对「费用」的定义。如果你认为只是不要钱,大部分情况下开源软件不会仅仅因为「你用着我」而管你要钱的,只会因为「你爱我」而管你要「捐助」。但是如果你把「费用」的概念稍微扩展一下,比如你为了安装软件而去研究它,「逃课装系统」,甚至「回报故障」、「参与社区」、「贡献所有」这些「人生成本」都考虑进来,那它就不是「免费」的了。因为你把它当作一种爱好来经营的「费用」就是你「可能会有、因为开源软件来的早了些,所以我没遇到它,或者遇到了已经不感兴趣了」的另一些爱好。就好比假如没有猫女安妮·海瑟薇,你可能会爱上杰西卡·阿尔芭一样。

另外企业环境和个人环境是完全不同的。因为企业环境下,购买软件本身的费用在「采纳软件」这一决策环节中占的比重非常小,比如你有 5 万员工,他们都会用 Windows,你想用 openSUSE,总不能让他们自己学或者你亲自教吧。那些后续费用是真实地以金钱态存在的。

收费软件就一定“更好”,而开源软件一定是“故障重重”

完全没有关系。

对新手来说,「收费软件就一定“更好”」这个问题可能直接举例说明会好一些:

  • Linux 内核是目前最好的内核,也是故障最少的内核,而且是出了故障最好修的内核。你认为比它更好的内核不见得比它故障更少,即使比它故障更少不见得比它更好修。三因素权衡下没有能够胜出 Linux 内核的,包括 BSD 内核在内,这在全球 95% 的超算使用 SuSE Linux 上已经得到了证明。
  • 网络服务器领域,自由开源软件明显更好,三大巨头:Apache、Nginx、Lighttpd 均是开源软件。完全就没有同等地位的闭源竞争者,全被杀死了。

甚至整个虚拟主机市场就是由 Linux 撑起来的。在服务器领域,没有收费软件「更好」。

  • 桌面领域,你说 Mac 好,Mac 能不花一分钱就右键发送到 Dropbox 吗,功能不同怎么比呢?你拿 10 个比 1 个,超过是应该的,超不过是丢脸的,更别提你还花了钱。你说稳定性,我的跑 Linux 的笔记本半年不关机一次,Mac 能做到吗?我能插 64 GB 内存跑 3G 特效,Mac 能超过 32GB 吗?苹果让你超过吗?
  • 科学计算。我可以跑一个 200mb 不到的 xfce,剩下的内存全跑 Matlab。然后还不丑。
  • 多媒体领域。Windows 能放 ogg 吗?能放 webm 吗?能用 blender 制作动画电影不卡吗?

如果说有些领域一定干不过,那要么是因为时间问题,暂时还没有人去做。比如曾经的游戏引擎领域,自从 Unigine 引擎横空出世以后(看看效果),现在做中等规模的游戏,闭源引擎几乎没什么人用也没什么人提了。要么是成本问题,比如有 DRM 保护的蓝光解码,商业软件可以做因为它们可以收钱交版权费,自由开源软件没有做是因为它最终是免费给你的,那这部分成本由开发者贡献了吗?要么是因为,这家伙本来就是个商业软件,比如 QQ,你要求自由开源的 QQ 实现去超过它的祖宗,那是不可能的,命根都握在别人的温柔大手中好吗?但同等条件下的 XMPP,Google 的 Gtalk 并不比开源的 Pidgin 更好。

「开源软件一定是“故障重重”」吗?

实际上,绝大多数的开发活跃的开源软件的源代码质量都非常高,不会有闭源软件因为追赶开发进度、发布时间等的渣代码,真的出现了渣代码也只是写代码的那个人能力就那样,暂时写不出更好的了,而不是能写出而没有去写。而且任何软件包括商业软件在内都有故障,没有故障全无的软件,甚至故障全无的源代码片段最终生成的程序也无法做到故障全无。因为最终完全自由的给你代表你可以跑在任何环境上,甚至开发者没有声明支持的环境。

而且自由开源软件在程序层面上覆盖的只是源代码这一个环节,但一个好的软件的成型包括:立项(概念)、设计、实现、编译打包、测试、二次测试、深度测试、反复修改、发布。比如 Windows 发布日期假设是在 2014 年,那 2012 年它就已经做好了,2013 年 OEM 厂商就已经拿到了,这两年 365x2 的时间里他们完全在干一件事情,不断测试,反复修改,最终面世。而自由开源软件的编译打包、测试过程是完全没有的。所以你最终拿到的软件的质量一部分取决于上游源代码质量好不好,其它大部分取决于你所选择的发行版的打包者的专业素质,你所选择的发行版有没有大规模测试计划(openSUSE 每个版本都要机器测试 3 个月以上,活人测试 2 个月,而某些我不想提到名字的发行版基本做好就发,甚至还有直接「滚动升级」的),各占 50%。也就是说,你的前人(曾经和你一样的新人)的社区工作没有做好,于是你迁怒于自由开源软件本身。自由开源软件很大程度上依赖你去遇到错误、汇报错误、让大家的生活都变得更好。如果你怀着拿到就必须能用的心态来看它,那就大错特错了。所以实际上是你的心态问题。

但是把所有这些从前到后工作都做得非常好的 openSUSE 拿来跟商业软件比,虽然很难找到能用来测试的软件,我们简单以 GIMP 为例(可跑在 openSUSE 和 Windows 上),事情就变得简单多了:openSUSE 下的那个没死,Windows 下的那个打开个 100MB 大文件就挂了。

自由开源软件的任务是「征服用户」,或者「成为收费商业软件的梦魇」?

这是以 Mark 为首的 Ubuntu 的错误理念。不能用商业性的眼光去看待自由开源软件或自由开源运动。它本质上是一种精神,而不是游戏规则(实际上自由开源软件应用市场的游戏规则依然是由 SuSE/RedHat/IBM/Intel 这种彻彻底底的商业公司制定的,Canonical 把实际上更适合这些公司的大话放出去了,但那些公司实际上并没有接纳它作为这一市场的一份子。那并不是自由开源运动,甚至完全没有一丁点自由开源精神在里面,是彻头彻尾的商业)。在这种精神下是有人赚到了钱,但赚钱并不是自由开源运动的目的。使用这种性质的软件的人多,并不代表这个市场大,只能代表认同这种精神的人多。实际上自由开源运动只是一种草根运动(虽然现在有变成主流的趋势,比如 android),一种爱好者运动,我在 Linux 圈子里面,并不代表你推出商业产品我就一定会掏钱包,这跟 Windows 不同,因为你不掏钱包你就不在 Windows 圈子里面,除非你盗版。

自由开源软件的目的并不是「征服用户」。实际上从它产生的第一天起,它就没有把用户纳入过考虑范围,只是一些开发者深恶痛绝 Sun 的 Unix 闭源,而早期软件质量较差却基本用在科研环境,他们那些非常想做也有能力做的用户,脑子一热就决定:不如我们以后自己开发的东西都开放式发布吧,这样以后和我们有着相同需求的人就不会遇到我们今天遇到的窘境了。而「非常想做也有能力做的用户」,那不就是「沉没的开发者」嘛。而从它诞生后,用户也依然不在它的考虑范围之内,我都几乎完全自由的把源代码给你了,你愿意和我们玩就来变成一名光荣的开发者,不愿意和我们玩就自己拿去玩,还有别的吗?实际上所有的自由开源软件推广甚至自由开源运动本身,都是为了让你知道并认同这种精神,你究竟来不来,用 Linux 还是 Windows,那是你个人的决定,「征服」你干嘛呢,来去随缘。

实际上自由开源软件对绝大部分积极参与进来的人来说:是为了证明我可以,是为了满足我的需求,是为了从中得到我才能够体味的快乐。是一种宗教或毒药性质的东西。自由开源只是表象,因为没有这种规则,人们就无法随时进入或退出。而不是舍己为人以身饲虎割臂喂鹰,舍得一身剐,把自己交给那些啥也不懂要求贼多的用户随意操弄,自由开源更像是「我为人人,人人为我」,如果你做不到前一条,那也没人为你做后一条,本质上依然是「利己」的。

而它也不会「成为收费商业软件的梦魇」,因为事实已经告诉你不是那么一回事了。IBM/Intel 甚至包括 Microsoft 本身都在为自由开源软件和自由开源运动做贡献和进行赞助,有人会资敌吗?实际上自由开源软件随意进出的特征让它成为很多商业成功的子宫和温床。比如 Twitter 之所以能那么快速的发展,因为它用了 Ruby 这种完全开源开发、非常活跃的编程语言。甚至可能你刚做了一个部分,就有人把全部做好交上来了。比如 Google 之所以长盛不衰。比如现在没了 Google Reader,但你随时可以架设并美化一个 ownCloud 并开始你自己的创业(已经有人这么干了),这些在以前是完全无法想象的。自由开源软件的存在使得填补任意一块商业空白都变得轻松迅速。以前开发一款游戏要 10 年之久(红色警戒,毁灭公爵),现在随着开源引擎的出现,3 个月。商业公司之所以愿意参与自由开源软件开发工作,因为它们从中得到了切实的经济利益(比如有些代码实现可能比较随意不符合你的要求,但如果你不知道应该怎么去做,这份随意的「我干成了」的证明对你的价值就至高无上),至少更开放更大的程序员圈子节省了它不少培训费用。因此自由开源软件正有着成为软件开发原点或者向资料数据库演进的趋势。

自由开源软件的任务,或者说最终奥义,是给用户自由。给用户「替代」(权且这么说,毕竟对于大多数人来说,Linux 是 Windows 替代品,但对一些高级开发者,Windows 甚至 Mac OS X 是 Linux 的替代品)。

给用户什么自由?不受来自软件版权以及其它硬性约束的自由。心有多高,就飞多远的自由。你受到的只是你自身条件的限制,比如我想用这些软件实现什么,但是我不会写代码。这是你个人条件的限制。自由开源软件或运动只能解放你的软件,解放你的思想,并不能为你加持万能无敌光环。它的开发者也不是您的专属开发代理,虽然每个用软件的都想有个这样的代理。

给用户什么「替代」?当商业软件特别差劲的时候,我能有个避难场所的「替代」。这种替代本身就是有意义的,虽然你并不是时常用到。比如 Google Reader 关闭,你就面临着没有一个好用的在线 RSS 阅读器的窘境,这时 ownCloud 的意义就体现出来了,它永远不会被「关闭」,只要有人愿意并且那么干了,它就永远都有扩充,虽然在两者同时存在的时候,我用的其实还是 Google Reader。

用自由开源软件或开发自由开源软件就一定高尚吗?

不是,真的不是这样的。

用什么软件只取决于你的需求(物质需求和精神需求)。比如你就想随便跑个什么然后开 Chrome 浏览器刷微博,那什么都可以。你用 Linux 也不比你用 Windows 干同样事情的同学更高尚。即使你精神上能够产生一种优越感,虽然这不一定正确,那也只能证明你为什么选择了使用 Linux 来干同样的事情,并不能证明这一行为本身的高尚性。

高尚是因为你干了高尚的事,东西是没有高尚不高尚之分别的。

开发自由软件也不一定高尚,虽然这一行为本身很高尚,但其开发者的态度可能甚至让你觉得他比闭源软件的开发者还要卑劣。比如有些异见发行版的用户看这篇文章的时候非常可能就是这么想我的。

简单举两个例子:

A,LXDE,被 Lubuntu 的开发者接手后,基本完全不管其它发行版的死活。一个 200kb 的软件包需要 4 个补丁才能够正常运行,你帮他们修复完,他们既不理你,也不偷偷改掉,依然在那里以 Ubuntu 为中心转。

B,Cinnamon,你打包了它,发现了问题,解决了它,汇报给 Linux Mint,却被告知:只要 Linux Mint 没有问题,我们哪怕洪水滔天。但其项目主页上赫然写着:我们是一个桌面环境。(桌面环境是 Linux 发行版的上游,必须一视同仁、没有二等公民、支持满足基本条件比如装了 X11 的 Linux 发行版)

这种开发者甚至不如闭源软件的开发者,因为我知道它是闭源软件了,就不会浪费功夫了,直接选能用的就好,对吧。

基本上自由开源软件社区集中了软件社区最好的部分和最坏的部分。最好的部分在于满足了广义上的自由开源概念的项目,比如 openSUSE,比如 KDE,在于那些真正不是有时间没地方浪费的 loser 却挤出时间来贡献的人(无论是开发者还是贡献者),在于那些真正为神圣的软件自由贡献的人。最坏的部分在于那些披着羊皮的狼,比如商业软件说好的功能没有,你可以要退款,而这里说好的功能没有、你浪费的时间精力因为某些不可预见的「因素」并没有真正方便到所有人,是没有补偿的。

还有由于自由开源软件相对比较难装(因为接受度和习惯的力量,毕竟没有人是学电脑就用 Linux 的; 而且因为 Linux 不是以「市场」或者说得更露骨点,不是以「二货」而导向而设计的,如果你没有必要的知识,那生活会很难(实际上我并不奢望新人能够完全无障碍的装上 openSUSE,我只希望能够尽量保全经过自己研究装上 openSUSE 的新人),以及学习成本比较高(毕竟这曾经是、现在也是一个黑客系统,是你要用 Linux 而不是 Linux 迁就你,在这种文化下不学习就会被无情杀死),你既然在用,那就代表你曾经有非常充裕的时间,也就是说你至少有一段时间是处于人生的低谷,就是 loser 啦,不管你承认不承认。开发者也一样,你有赚钱的事业是不会有空来干不赚钱的事业的吧。事实上整个社区都承认自己在人生中应该有一些比较 low 的点。所以某些控制不好自己情绪的人会制造这个社区里大部分的噪音。事实上噪音已经成为 Linux 的特色了,「互黑就是 Linux 的节奏」,因为噪音总比静音大,有时即使是好分子你也会无法控制的去吵架。

最后在自由开源软件社区里,没有一个真正意义上的老师,「达者为师」,但问题在你自身的不同阶段你所认为的「达者」是不一样的,某个噪音制造者可能在某个时候帮助了你,让你非黑即白的认为他所做的一些都是你值得学习的,于是你无形中就成为了坏分子。甚至 Linux 圈子里某个用户基数最大的社区大部分都是这样的人,于是持续不断的制造坏分子,却以为他们比所有其它人都更加高尚(看开头的那个「中国人认为」),实际上那是另一个 Linux 社区啦,这是 Linux 社区的又一个特色,光明面和黑暗面并存。而且我们的背面现在看起来很大,占了 70% 左右。毕竟用户永远比贡献者多。

术语表

操作系统架构

简单说就是这个设备的中央处理器(CPU)的指令集大不大(任何物理存在的东西最终都要受制于其物理空间的限制,CPU 的硅晶片能容纳多少个电子,一个电子有两种状态正负极可以表示一个「位」即二进制的 0 或 1, 不可能超出其物理空间,不然就是「凭空造物」了)、支持不支持浮点数(就是小数)、数字范围有多大(不可能是负无穷到正无穷的,只能是「大到你用不上」,但对真正能用上的人来说它可能还是不够大)等等。手机和电脑的架构是不一样的,不然电脑就没理由比手机卖得贵了。

移植

把一种操作系统架构上的东西通过修改程序源代码的方式弄到另一种操作系统架构上去。

GPL

GPL,自由开源运动的主流许可证,「版权属左」的创始。条款很多,但最基本的奥义大概是这样:作者本人把软件以这个许可证发布,在这个许可证的限制下,其它对其进行修改的人也必须用同样的许可证发布他的修改版本。这样就保证了自由开源软件的存续,不会有人手中有别人不知道的更多功能的版本,也不会有人收集别人的作品来卖钱给自己。

用户、贡献者、维护者、开发者

开发者,就是软件作者,真正主力写代码那位大神。 维护者,你所用的 Linux 发行版打包并更新这个软件的那位与你用着同一个发行版的人。 贡献者,使用着这个软件,但不只是默默无闻的使用,而是会「积极的」使用,比如发现异常行为,并通过开发者或维护者喜欢的方式告诉他们修掉,或者制作美术作品、撰写文档、宣传推广,同时会存在于论坛、社交网络等用户交流空间上,帮助用户解决基本问题,甄别复杂问题,总之就是使用的同时以Portal:如何参与上所写的那些方式参与进社区的「对社区有价值、对自由软件世界有价值」的用户。 用户,默默无闻的使用着这个软件,或者说「搭便车」、「占便宜」这些人。他们实质上只能组成「用户基数」(而用户基数其实并不为自由开源所看重),而组成不了「社区」,因为一群石头实质上并不能帮到你。所以「用户」不是「自由开源社区」的基石,「贡献者」才是。而同样用户又分为「真正」默默无闻的使用着这个软件,充其量偶尔出现在论坛上提个问题,99.9% 的时间里你完全意识不到他的存在,无论是你做了多么反人类的决定他都会欣然接受的「好用户」,和「自以为我是你世界的中心」的喋喋不休指手画脚但自己其实什么都改变不了、或者有能力去改变但没有去只是说说而已过过嘴瘾的「坏用户」。

注意,「贡献者」有时也会与「维护者」甚至「开发者」产生矛盾,但这是认识上的区别,是「人民内部矛盾」,而不是「阶级矛盾」,「开源软件没有固定的方向」,但能决定方向的永远是开船的人而不是坐船的人,坐船的人只能选择「到站」或者「跳船」。坏用户和异见贡献者,或者「偏见评论」和「异见评论」,的区别就是脚在门里和在门外、懂一点和完全不懂自以为懂的区别。人类就是圈子社会,你在所有圈子的外面,那自然倍感孤独被排斥。如果你看到这样的评论,你首先要确定的是他是不是真的懂,如果不能确认就去问一位你知道的「贡献者」。因为从来就没有这样的逻辑:「我承认你是开发者,但是在如何使用这个软件这一问题上,我想我恐怕比你有更大的发言权」,因为我日用夜用。或者「因为你爱我,所以我可以冲你发脾气让你走开」,比如 KWin 主力开发者技术性批评 MIR(主要是因为 Mark 打嘴炮编瞎话),很多 Ubuntu 用户就去骂这个开发者,骂到他一度想退出开源社区,但他几乎自己就撑起了 Kubuntu,正是因为他爱用户,所以他才会批评指正以用户为盈利工具的 Mark。扯远了。

Linux 发行版

狭义上的 Linux 只是我们所用的 Linux 的内核(Kernel)的名称。Linux 发行版都会使用基于 Linux 内核的内核(为什么是「基于」?因为像 openSUSE 这种开发力量很强的发行版会修改内核,让它更适合于一般用户使用,而 Ubuntu 这种开发完全不行的,就直接拿 Kernel 工程发布的内核来用),并整合一些其它的开源软件,比如开源显示服务器 Xorg,开源桌面环境 GNOME/KDE,开源输入法 Fcitx 等等,构造一个刻盘安装就能直接拿来上网看电影的「操作系统」。而不同的社区或组织对「其它开源软件」的选择不同、甚至秉持的理念、文化(甚至有些秉持的理念本身就是错误的)、面向的人群不同,就可能造成各种不同的结果,每一种结果都叫做一个「Linux 发行版」,而这样的组织就叫做「发行版社区」。它们是用户能够参与到的唯一的社区(你可能说我给某某软件画了个图标并邮件给了它的开发者,这时并不是你作为用户参与到了别的社区,因为从 Linux 这个大的层面上来说,你已经升格为「贡献者」这类了)

另外请注意,不是能跑「其它开源软件」的操作系统都是「Linux」,是不是「Linux」主要看内核。比如 Freebsd 也能跑 Linux 上大部分的开源软件,但是它仍然不是 Linux 而是 BSD 系统。甚至有些开源软件还能跑在 Windows 上面。因此可推知看一个软件是不是开源软件并不是看它所在的平台,而是它发布时所使用的许可证,Linux 下也有闭源软件(比如 Matlab),Windows 下也有开源软件(比如 7zip)。

打包

把上游源代码做成方便安装的二进制软件包。源代码是懂得这门高级编程语言的人能看懂的文字,二进制是只有计算机能看懂的代码片段。这种转换过程叫做编译。大部分发行版是要有这一步骤的,然后分发制作好的二进制软件包。这样可以避免「每个人都要懂编译」,但有些发行版是不编译的,比如 gentoo。

推荐观看

扩展阅读