另一方面,更为重要的是,有论者认为,开源本身就是一种免费商业模式,此言不虚也。这就如同正在被互联网公司演绎得如火如荼的免费商业模式一样。比如,我们虽然并没有为每次的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)所呈现的技巧,因此,程序的质量和算法的性能确实有上下高低之别。总之,无论是公司和个人,完全没有必要把一切东西都当做宝贝疙瘩,像祖传的武功秘籍或中药秘方那样严密的珍藏保护起来,以为这样,就可以做到我有而别人不能够有,那可就大错特错了。所以,很多情况下,对开源的贡献并不会损害公司的竞争力,相反,还会加强公司的竞争力。
第六,与第五点相反,作为独立的程序员,也要充分了解你所在公司关于知识产权的政策,千万不要把公司专有知识产权的代码提交到开源社区。
(责任编辑:安博涛)