然而,什么才能真正定义一个开源项目,使之与其他开源项目区分开来呢?我认为可以使用以下三点核心要素来定义和区分开源项目:代码、社区和品牌。
1. 高质量的代码
代码为王。产品的功能是由代码实现的,这也是开源项目构建的第一步:构建有用的代码。技术人员关注代码能做什么、它是如何实现的,市场人员更关注产品如何解决客户的问题,而当人们寻找一个开源项目来使用时,首先找到的便是代码。
听起来很简单——既然这样我们为什么不能单纯使用代码来定义一个开源项目呢?软件开发人员众所周知,代码是变化的,并且具有临时性。开源项目中,代码很难跟踪,它不像公司主导项目的代码那样可控:开源代码是无限变换的。一旦你的代码提交到开源许可的公共库中,任何人都可以访问和修改,来实现他们各自的用途。当别人使用了你的代码并做了修改,它便不是你初始项目的一部分了。
2. 具有凝聚作用的社区
如果代码指的是项目“是什么”,那么社区便代表了项目“是谁” ——组建项目的那些人。项目的核心社区主要包含了那些积极推动项目的人。例如,编码的工程师,还有给予反馈和具体修改建议的终端用户;整体社区还包括了那些不做代码但是提供支持的人。比如,管理/进度监督人员,公关/市场人员,培训人员,财务人员或招聘支持人员等。社区规范,礼仪,和风气有助于区分一个开源项目。
虽然参加有些开源项目可能是有偿的(如,企业雇佣的软件工程师,他们使用一定比例时间参加开源项目),但大部分开源社区的成员都是自愿无偿的加入开源项目。因此,成员们的去留都是兴趣使然,或根据承诺任务的增减,或雇主策略的改变。像代码一样,社区是不断变化的。
不像企业的软件开发项目那样,可以计划招特定技能的人员做具体的工作,开源社区的参与是不可预测的,项目也不好控制。相对于有偿项目而言,个人冲突很容易导致成员离开开源社区。但是开源社区也有它的好处:有成员的热情和动力,有成功项目社区的持久力,还有大家对代码的同步和不断改进。
3. 具有宣传效力的品牌
外部世界当然是通过品牌来了解开源项目的,当个人或公司选择使用或投资一个项目时,品牌帮助他们在同类项目中进行区别和参考。当然他们也会考虑其他的细节,但是通过品牌进行了解更容易些。比如,他们会考虑“我需要支持 Hadoop 么?”而不是想“我需要支持 Cloudera 版本,Hortonworks 版本还是其他新发布的 ODP?” 目前,不收费的 Hadoop 版本主要有三个:Apache(最原始的版本,所有发行版均基于这个版本进行改进)、Cloudera 版本(Cloudera’s Distribution Including Apache Hadoop,简称CDH)、Hortonworks 版本(Hortonworks Data Platform,简称“HDP”)
“品牌”包括很多东西:项目的正式名称,项目或产品的Logo,甚至项目网站的外观和产品的用户接口。有些品牌的组件,甚至使用了具有法律效力的商标:包括官方软件产品的名称和Logo标志。
不同于代码和社区,项目的品牌是一成不变的。没有法律授权的话,商标是不能随便使用的,即使社区成员变化,项目的品牌也不会随之改变。很大程度上讲,品牌和商标是最容易控制和维护的。然而,作为可定义项目独特性的重要工具,商标的使用却总是不被重视,经常被项目内部所忽略。考虑到任何人都可以获取代码,社区成员也来来往往的,因此,项目的品牌和商标是维持项目长久和独立、新项目成员继续项目的关键因素。