从企业视角看开源软件:华为开源5年的实践经验
一、开源不只是研发中的选型和开发
高德纳公司(Gartner)及Linux基金会的调查报告显示,企业平均有29%的软件代码来自开源,在互联网背景下,开源软件比例高达80%。产品中大规模嵌入开源代码,会产生一系列研发管理问题:
1. 版权许可证 (license)选择不慎会潜伏知识产权法务风险,成为企业拓展海外市场的绊脚石。
2. 不同团队选择多种同类开源软件会带来巨大的管理成本。
3. 产品研发初期,如何在众多类似的开源组件中选择合适的代码?方向选择错误会导致陷入产品生态与业界不兼容的困境,面临放弃重写还是继续往下走的两难抉择。
4. 产品开发时难免会对代码进行修改,修改后的商用代码是闭源还是开源?随着时间的推移,社区版本更新迭代,继续闭源,意味着会重复投入资源,进行不增值的代码合入;而开源则意味丧失产品竞争力。
5. 主动开源并不意味着社区就能接纳,需要长期有大量的回馈代码才能建立信誉及影响力,公司内的社区管理人员才能得到锻炼和培养。但是,社区管理人员个人知名度的提升会增加被猎头公司走”的风险。
6. 软件在开发过程中或完成之后,如果出现同类开源软件,该如何处理?
开源软件不能被简单地认为只涉及产品研发过程中的选型和开发。华为开源管理经历5年时间,从企业视角看,开源软件还涉及产品外销时的知识产权法务风险、企业的研发效率、产品架构、软件生态系统、开放标准构建手段、人才竞备、商业利益角逐等。华为公司每月向各大开源社区回馈约1500个补丁,仅次于红帽(RedHat)、英特尔和IBM,社区活跃程度大致与谷歌、三星、甲骨文、微软等公司相当。
华为公司在这五年期间大概经历了三个阶段:
第一阶段,最初把开源看作是一个外购件。
第二阶段,把开源看作外部协作的一种方式,
研究如何与社区的技术人员、社区本身以及其他公司协作。
第三阶段,把开源软件当作自己的代码。开源作为产品的基础部件,华为把开源提升到战略高度来看待和管理,开源软件成为研发的重要来源。这个阶段主要研究的是开源选型以及软件生态链选择;产品通过开源手段与外部生态系统集成;如何用开源手段与社区连接;如何与社区一起探索新兴技术;如何在新技术领域产生影响力;在新的技术和业务领域,如何通过开源,站在行业发展前沿等问题。
二、开源的行业趋势
从容器技术开始,开源不再是商用软件的简单模仿,而是开始引领行业发展方向。开源看似在推动软件世界的发展,其实不然。从商业角度看,开源只是商用软件的模仿,例如从最早的Linux(模仿各类商用Unix)、Eclipse(模仿Ⅴisual Studio)、Apache Hadoop(模仿谷歌三篇经典论文成果),到这几年耳熟能详的:Xen/KVM(模仿VMWare)、OpenStack(模仿Amazon AWS)等。从容器技术开始,没有任何一家公司有最前沿的技术,也没有公司率先在容器技术上赚到钱,所有公司都在一个起跑线上。在容器技术兴起的2014年,才可以说开源技术牵引着整个行业发展方向。
开源软件代表了一种新的技术产生方式。顶尖的高校研究成果很多都是以开源形式发布的,顶尖公司(如谷歌)的技术架构中,每套系统基本都有其对应的开源项目。
1. 开源社区的运作越来越职业化。自由参与和自组织时代已经过去,近年来,开源逐步过渡到公司化运作模式。Linux基金会下的很多项目,比如核心基础架构联盟(Core Infrastructure Initiative,CII),都是各公司出钱,把钱放在一起经营,更像是一个合资公司;OpenStack等基金会有明确的章程、组织结构、晋升机制、会议制度等。开源社区的运作越来越职业化。
2. 开源成为另一种标准制定方式。电信领域存在设备对接,因而有着非常严格的规范和行业标准。同样,IT领域行业差异性大,各公司通过代码发言,在社区用代码的方式完成与其他厂商的对接和配合。从云计算OpenStack的接口定义等社区实践来看,开源已成为另一种标准制定方式,标准组织开源化已成趋势。
3. 开源重新定义了集成和被集成的关系。过去,IBM、惠普等大厂商都有各自的生态合作伙伴规程,策略都围绕本公司集成的。从云计算开始,这种方式发生了微妙的变化,开源扮演着集成的身份,各厂商(比如存储、网络、防火墙等厂商)都到开源平台上进行集成和对接。
三、华为的实战经验