开源的真正含义:免费还是自由?

发表时间: 2018-09-10 16:00

作者 | 贾彦民

编辑 | 小智

开源的本质,是自由而不是免费。

开源是什么?

国内的很多软件公司或研究机构对开源的热情仅限于免费的代码,而绝少深度参与开源社区的活动。我们对于开源始终是利用多,而贡献少,从国内发起的有一定影响力的开源项目如果不是完全没有,恐怕也是凤毛麟角。我们是如此的吝啬,即使对于正在使用的开源项目,也不肯轻易“浪费”任何的开发的测试的资源。我有幸两次聆听过自由软件的精神领袖级的人物 Richard Stallman 的演讲,他特别强调“Free is not free”,自由不是免费。同样地,开源是自由(Free),而不是免费(Free)。也许,大家在毫无顾忌地尽情地享用开源的免费大餐的时候,完全忘记了开源的真正力量是自由,而不是免费。

开源是什么?简单地讲,开源包括三个方面的内涵:

首先,开源是一个项目 (Project)。

作为项目,为了吸引更多的有兴趣且热心的技术的和非技术的人们的参与,开源往往有其独特的灵活的的项目组织方式和开发流程,这一点和公司截然不同。当然,一般地讲,一个开源项目常常由一个或若干个公司主导,但绝对不会排斥任何它他组织、公司、以及独立开发者的参与。开源项目的管理团队大多通过民主的方式产生。

其次,开源是一个社区(Community)。

作为社区,开源为开发者、测试者、捐赠者、和用户提供了一个由邮件列表、 论坛、IRC 和各种会议构成的交流平台。Open Source 中的 Open 不仅仅是开放的代码,同时也是开放的交流的平台。只要本着相互尊重的原则,技术的、开发的、测试的、使用的、管理的几乎所有的问题都可以是讨论的对象。大家一起出主意、想办法,从各个方面为开源贡献力量。

最后,开源是一个产品(Product)。

很多时候,开源发布的产品难以满足用户的需求。所以,在不违反相关许可证 (License) 的条件下,有些公司对其加以定制,就变身为自己的产品或解决方案。当然,有些公司也会反哺开源的发展。这是一个双赢的良性循环。几乎所有的开源项目都有相关的产品发布。这样的例子可谓举不胜举。Linux 的产品化就是一个最经典的例子,可以说,如果没有 Linux 的产品化,也不会有 Linux 开源的枝繁叶茂。另外的例子还有 Eclipse 的各种衍生产品。而 OpenOffice.org 的分裂和衰落也许是其产品化不够多不够好导致的。在我们这个神奇的国度,据说有一个绝顶聪明的院士,把国外的一个开源项目发挥到了极致的水平,竟以此荣获了国家自然科学一等奖,令人叹为观止,不服不行。

开源从哪里来?

开源是一个自由的世界。人们可以自由地加入或退出社区,自由地讨论各种问题,发表各种建议。开发者可以自由地学习开源的代码和技术,用户可以自由地使用开源产品。有了开放的代码,在不违背开源代码和产品的许可证的条件下,可以自由改写、删除、增加开源产品的功能。公司和组织也可以自由地利用开源的代码和技术,自由地出售开源的产品。正如上文所述,开源鼓励公司参与的产品化。人人为我,我为人人,这也许可以作为开源的自由的真谛,不过,这实在是太美好了,美好得简直让人难以置信。回到现实,自由的愿景无论多么令人向往,一个开源项目 / 社区的成败最终还是系于民心士气,若自由的力量仍然不能唤起人们参与的热情,那么这个开源社区 / 项目存在的理由和价值就大大的值得怀疑了。

另一方面,更为重要的是,有论者认为,开源本身就是一种免费商业模式,此言不虚也。这就如同正在被互联网公司演绎得如火如荼的免费商业模式一样。比如,我们虽然并没有为每次的 Google 搜索买单,但我们的搜索行为会作为大数据的一部分最终转化为 Google 的广告收入。拥有足够多的用户才是这种商业模式得以成功的关键所在。同样地,开源项目的源代码和最终的产品都是免费的,开放的,可以被自由地而不是任意地使用。开源的商业模式包括通过基金会募捐,向用户提供技术支持服务而收取费用,另外,许多公司在做开源项目产品化的同时也向开源直接贡献开发和测试资源,这其实也是一种资助行为。当然,正如上文所言,得到大量的免费用户的支持,这种开源商业模式才有可能取得成功。

仅看到开源免费的好处,而无视开源的自由的力量,即使从纯功利的角度来讲,也绝对是一种短视的行为。对于正在使用开源的公司而言,积极的参与开源社区的建设起码可以从以下两个方面获益:第一,对开源的贡献越多,影响就会越大,从而产生良好的广告效应。通过开源,能够更好地展示自己的技术、产品和解决方案,并赢得用户的信赖。第二,如果实力足够强,有能力主导开源项目的开发方向,就可以更好的汇聚开源社区的资源来完善自己的产品,这给公司带来的好处自然是不言而喻的。

对于程序员来讲,参与开源的最大好处就是贡献所得到的成就感。在 IBM 工作的时候,我所在的产品线 Symphony 是基于 OpenOffice.org 的办公套件,当时,我开发了一个回退字体 (rollback font) 快速匹配的算法,当用户为文本指定的字体在系统中不存在时,该算法可快速地从系统中找到一个最合适的替代字体,这可以大大提高文本的渲染速度,改善文本的显示质量。我把这一算法成功地提交给了 OpenOffice.org。我清楚地知道,用户每次使用 OpenOffice.org 打开编辑一个文档时,都可能运行这个算法,这种成就感便油然而生。当然,令人遗憾的是 OpenOffice.org 分裂了。不过 libreoffice.org 依然还继续存在。

其实,阻止国内程序员参与开源的一个重要的原因不是技术能力的限制,而是英语水平的限制。学了那么多年的英语,即便是得到了四六级证书,也会发现学的那点哑巴英语根本派不上用场。语言不通所导致的交流不畅是一个艰涩的困难,但远远小于心中对外部不可知的世界和不可控的变化的畏惧所产生的苟且偷安的惰性思想的障碍。我无意在这里讨论如何提高个人的英语水平,只是想强调,有志者事竟成,一个有出息的程序员,如果心胸足够的开放,对未知的领域充满了好奇和向往,英语就绝非不可攻克的堡垒。况且,国内的程序员最担心的是听力和口语,而大多时候,开源社区都是通过书面的邮件来沟通。

开源到哪里去?

第一,几乎每个开源社区都向新手提供一个入门指南(Getting Started Guide)

仔细阅读可以避免走不必要的弯路。

第二,和社区大胆的互动。

有什么问题不明白,不要自己冥思苦想,尽管大胆的提出来,即使再简单,也总是会有热心的人们来回答,更不会有人嘲笑你。当然,交流的时候,一定要尊重对方。邮件中要包含基本的礼貌,对别人的帮助要表示感谢。与此同时,也不要忘了帮助别人。

第三,开源的开发多少有一点自由的散漫,没有太严格的计划。

所以,有时候,会觉得自己的要求没有得到很快的响应和满足。需要注意的是,并不是自己提交的 BUG 就一定被认可,并不是自己提交的代码就一定被接受。遇到这种情况,要把道理讲清楚,而不要意气用事。

第四,有些开源项目的代码质量实在是不敢恭维。

这可能是参与开发的程序员良莠不齐,加之监管不严所致,但也并非全部如此。我还记得经常开玩笑说,OpenOffice.org 代码有些函数长得常常从这头看不到另一头。哥德尔不完全定理指出,任何一个类似于罗素和怀特海在《数学原理》中给出的数论的形式系统,无论有多强,都是不完全的,总有一个良构的 G 命题,既不能被证明是真,也不能被证明为假,所以任何形式系统都不能完全地描述数论乃至于数学的全部的性质,这当然不是十全十美的结论,但从另一方面讲,这又意味着数学真理的发现仍然有赖于数学家们创造性的聪明才智,可谓失之东隅, 收之桑榆。

大而言之,人生总是有太多的缺憾、苦难、荒谬、离别、烦恼、虚荣、忧愁、彷徨、伤心、失恋、平庸、志大而才疏、怀才却不遇、白富美的空幻、矮矬穷的苦痛等等,相反,正是这坏的一面才反衬出那好的一面更值得珍惜,只有那些不完美才成就了完美,这就是一个哲学思辨的怪圈。集众人之力开发的开源的计算机程序又何尝不是如此。所以,凡事还需忍耐些,且行且珍惜吧。

第五,理论上讲,若要实现一个软件功能,只要在邱奇 - 图灵论题可计算的范围之内,都可以用计算机编程语言来表达,在这一点上,无论多么高明的算法和程序,其实并没有什么艰深得不可逾越的技术鸿沟。

可以说,技术总是简单,自己能够做到的,别人照样可以做到,反之亦然。但是,艺术却是无限,如果想要达到艾舍尔那样的绘画水平或巴赫那样的音乐水平,做不到就是做不到啊。

当然,计算机编程也可以看做艺术,如 Donald Ervin Knuth 的名著《计算机程序设计艺术》(The Art of Computer Programming)所呈现的技巧,因此,程序的质量和算法的性能确实有上下高低之别。总之,无论是公司和个人,完全没有必要把一切东西都当做宝贝疙瘩,像祖传的武功秘籍或中药秘方那样严密的珍藏保护起来,以为这样,就可以做到我有而别人不能够有,那可就大错特错了。所以,很多情况下,对开源的贡献并不会损害公司的竞争力,相反,还会加强公司的竞争力。

第六,与第五点相反,作为独立的程序员,也要充分了解你所在公司关于知识产权的政策。

千万不要把公司专有知识产权的代码提交到开源社区。

第七,提一个思考题:你觉得中国企业、程序员的开源有哪些是值得赞赏的,又有哪些乱象是需要批判的?