虽说现在开源成为了行业趋势,但这并不意味着任何代码都适合走开源这条途径。
尽管一开始开源像是一种潮流一样席卷着整个世界,而且随着反对美国垄断软件行业的呼声日益高涨,目前开放源代码对于美国人或者是资本家来说已经像是很受欢迎的苹果派一样了,大家争相朝着这个方向拥挤。像 Facebook 这样的大公司就讲开源的标准用在自己的开发实践中,到目前为止也没有人去质疑它的价值,因为大家都看得到,开源是真真实实的有利可图的。
相当有意思的是,尚不清楚什么样的软件需要被开源出来。在你将你的代码贡献给社区之前,我觉得下面这几点注意事项在你做决定的时候有必要引起你的注意。
关于开源社区里的一些迷点
不管你是在开源界混了多少年,或者你只是一个新手,我想你都听说过开源社区这个词的吧,也许有人提醒过你不要把社区惹毛了;或者是有人说这个社区很大,他们会拿你的开源代码来羞辱你;有可能你还听说开源社区就是一个松散的团体,一群吃着匹萨写自己喜欢的代码的小黑客而已。
换句话说,你已经听说了很多毫无意义的废话了。但是首先呢,正如 John Mark Walker 许多年前说的那样,根本没有什么开源社区的存在,只有一个以社区形式存在的团体。本质上,开源社区之间是有很多明显的不同之处的,如果大家都是如出一辙的话,那就没什么创新精神可言了。
当然,每个成功的开源社区都有自己的特点,但是如果你想在开源社区开源你的项目代码的话,千万不要抱着“开源了就会有开发者来做贡献”这样的想法,这样只会让你的项目更加惨淡。还有,有的时候会听说开源项目的贡献者都是dedicated的,事实上,没有几个开发者是全职的、心甘情愿的、免费的dedicated的贡献者。Linux 社区的开源项目贡献者和商业的 Alfresco 项目的贡献者完全不在一个等级上。
为什么不选择开源呢?
尽管现在许多或者说是部分开发者对项目许可/授权的流程持厌恶的态度不断的增长,但是要想将自己的项目开源几乎毫不可避免的需要一定的成本。
一则,如果你开放自己的源代码,你就要打算做一些额外的事情来确保你的项目不会让你觉得是一个麻烦,不会影响你的其他事情。几天前,和 MongoDB 的一位工程师交谈聊天,他经常是为大型的有名的商业软件公司工作,他对我说,专有代码和开源代码之间最大的区别就是:质量。
以他的经验之谈,专有软件往往是在事前制定好的业务授权期限之内编写完成的,最关键、最重要的是交付代码这一过程,即使写出来的代码并不是很完美。相比之下的开源软件,他说,不管什么时候,只有完成了才能发布出来,哪怕是在商业业务的施压下也改变不了它的发布日期。
不管你的产品描述、性能特征是否完美无瑕,规章制度总是正确的:当你的代码被开源展示出来之后,你肯定会确保它的质量比躲在许可证的限制下的质量更高。
将代码开源这件事,光是从收入来源这一点来说,有可能会缩减你的业务收支。Dropbox 能开源它的Go 类库,因为他的业务并不依赖于出售这些类库。但是如果你出售一个 CRM 系统的话,等它开源之后就会影响之前通过它挣钱的能力了,所以说是否开源是一个很严肃的话题。
难怪 Marc Andreessen 在被别人嘲弄之后这么喜欢转发 tweet 呢:
即使你觉得 Dropbox 模式很适合你,你也想将自己的代码开源出来,并吸引社区帮助你构建出最后的产品,但是现实是残酷的:虽然项目是你的,可是,时间是他们的,完成期限得由他们决定。
那么,开源有什么好处呢?
既然你已经知道上面所说的那些弊端了,为什么你还要坚持开源你的代码呢?
如果你在编写一些基础设施软件的话,例如操作系统、数据库之类的东西,那你就没得选了,只能走开源这条路。正如 Cloudera 联合创始人 Mike Olson 表述的那样:
要是你想要你的项目被别人注意到,较有可能的方式就是开源了,不管你是否喜欢,对于现在的开发者来说,“open”是最能被接受、被理解的一种方式了。
当你问及各个开源开发社区的成员的时候,你就会豁然开朗:开源某人的代码其实也是在为某人提供一种自由,正如 Tony Yarusso 说的那样:
同时还有个人满足感,Paul Ramsey 说:
写在最后:
除了这些个人因素之外,还有一个事实,开放代码也可以是一种伟大的方式:扰乱现有厂商的秩序,如果你对现有的专有软件的供应商表示不满的话。另外,开源是一个很有趣的事情,我已经在开源公司工作了将近15年,也亲自见证了开放代码所催生的友情和协作。
当然,开源并不是适合每个人的完美选择,但是以我的经验来看,“Open”应该是所有软件和所有公司的发展趋势。在以后这种趋势将更加明显。