其实想写写关于开源的文章已经好久了,从在2010年开始接触Hadoop到现在已经有六个年头了,从最早的Hadoop用户和Contributor,再成为Committer,最后成为PMC (Product Management Committee,项目管理委员会) 委员,挫折、 欣喜都在交替在我跟开源打交道的每一天,这里想分享个人的一些想法。
本文仅为个人意见,不代表我的雇主Hortonworks以及Apache Software Foundation的观点。
版权声明:本文由leftnoteasy发布于 , 本文可以部分或者全部的被引用,转载请保留版权声明全文,有问题可以联系wheeleast (at) gmail.com, 也可以加我微博 @leftnoteasy
什么是开源呢?相信很多人对于开源这个概念很模糊,我在之前的一篇博客里面也略微谈了一下,这里想展开说一下。
开源心态首先要清楚的是,开源是一种精神,这种精神是,我希望把我的东西能够分享出去让更多的人去使用它。对于开源者来说,能够从中获得什么东西各有不同,有些人为了金钱利益,有些人为了兴趣。但是清楚的第一点是,一旦你开源出去,别人怎么用它就跟你没有任何关系了。
所以有在我之前的博客上有评论说,我不想开源主要是不希望别人拿我的代码出去卖钱,对于这种心态我只能说可能开源未必适合你。
开源协议对于开源软件来说,需要选择一个合适的协议(License),不同的协议之间差别很大,具体可以参考:如何选择开源许可证。如果上面的这些开源许可证都不适合你,那么你也可以写一个自己的许可证。
这里拿一个比较流行的协议,MIT协议来举个例子来说里面要求了什么东西,由于协议的英文比较冗长,这里摘录部分已经加上了注释
…including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software
你拿我的代码去怎么改,怎么打包卖掉都可以!
…THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED…
代码就这样了,不提供任何的质量保证!
…IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY…
用坏了我不负责!
MIT协议属于比较宽松的协议,也会有些更严格的协议比如说GPL:如果你程序用了我定义的接口,那么你也必须用GPL协议开源,之前小米就卷入了一些关于GPL协议的纠纷。所以根据不同的情况选择不同的协议比较重要,同时当你引用了别人的开源程序的时候,也要注意是否违反了作者的开源协议。
开源社区开源社区是开源软件赖以生存的生态系统,所谓社区是由用户和开发者组成了。
开源社区用户用户一般会来自于五湖四海,他们会使用、抱怨(可能会非常尖酸刻薄)和贡献开源软件,比如说Hadoop社区里面就有很多的用户会把自己碰到的问题发布到用户\开发者邮件列表以及JIRA(bug数据库)中,这样的话,社区的开发者就能够有机会看到并且修复这个问题了。有些对于开源软件理解深刻的用户会尝试从代码里面看到到底是哪里出了Bug并且能够提出解决方案,这种用户是最受欢迎的用户了。
开源社区开发者开发者可能来自于不同的公司也可能来自于同一个公司,取决于不同的目的。比如说Hadoop的核心开发者都是来自于不同的深度使用或者卖Hadoop相关产品的公司,比如说Yahoo、微软、Hortonworks、Cloudera之类的。也有一些开源软件不希望别的公司的人来参与,比如说Google开源的产品一般很少有来自其他公司的贡献。比如说Tensorflow、Android。
一个良好的开源社区里面会非常的良性循环:用户用软件,找到Bug和提出改进的方案;开发者通过用户的反馈来不断的改进产品;不断有新的开发者来加入到社区里面进行开发,这样就算是有老的开发者不做了项目也能够继续往前发展。
而相对的,一个坏的开源社区会很少有人参与,对于用户的反馈置之不理,没有办法发布新的版本,最后彻底成为一个死掉的项目。
开源社区的开发者都是哪些人? 开源社区的开发者都是不拿工资的吗?对于开源开发者来说,有很多人的认识是:开源社区里面的人都是技术大牛,视技术如生命,视金钱如粪土,上班干着公司的活,下班干着开源项目的活。
其实这个是一个很大的误解,其实开源社区里面绝大部分的开发者是在工作的时候贡献代码的,因为这些开源项目就是公司IT的基础架构之一。当然里面有很多大大牛是能够凭着自己的兴趣就可以创立最牛的软件,个人最佩服Linus,完全凭着自己的技术、经验和兴趣创立了Linux和Git。
开源社区是一片技术的净土吗?另外一个普遍的误解是认为开源社区就是一片净土,里面的程序员都活在自己的技术世界里,两耳不闻窗外事,一心只会码程序。其实有人的地方就有江湖,朋友志杰写过一篇关于Hadoop两党制的文章,非常值得读一下。
跟一般的公司一样,开源社区的开发者有着一些不那么好的个体:
但是不得不说,好的开源社区里面还有有着比一般公司更多的技术大牛和更好的氛围,所以希望上面的言论不要把你给吓到:虽然它不是一片净土,但是它比一般的地方干净纯粹得多。
开源项目怎么挣钱呢?开源项目的挣钱方式也很多,不是因为开放了源代码你就变成了一无所有为别人做嫁衣裳了(当然有时候还是有点这种感觉)。对于公司而言(除开纯粹个人兴趣开源的),开源最主要的原因是没办法继续卖闭源的产品了。
举个例子来说,如果没有IOS,Android会开源吗?没有Unix、Windows,也很难说Linux是否会开源。所以作为老二,如果要打败老大,最好的方式就是把老大的最重要的技术开源出去。
一旦开源出去,挣钱的门路就多了,比如说: