当前位置:Linux教程 - Linux业界 - 陆首群:建立开源社区开发创新机制

陆首群:建立开源社区开发创新机制

    建立开源社区新颖的开发创新机制,对推进开源软件的发展特别重要。本文重点讨论如下一些问题,即:什么是开源软件新颖的开发机制?为什么要参与国际开源社区的开发?这里所谓的“贵在参与”的重要意义是什么?创建中国的开源社区需要具备什么条件?两种开发创新模式的内涵及其关联如何?中国开源软件在起始阶段的开发创新活动中,过去有哪些“欠债”,现在需要做哪些“补课”,今后又如何“奋起”?如何看待国内开源社区/开源企业从学习模仿阶段向创新发展阶段的转变?

  开源软件的开发机制,不同于私权商业软件那种传统封闭的方式,而是一种新颖的、自由的、开放的、共享的、依托于开源社区的开发方式。

  参与开源软件的所谓“社区型”的开发方式,是体验开源文化(或开源哲理),积累工程经验,增长技术才干的重要组成部分。

  Linux创始人Linus Torvalds认为,开源成功的奥秘并不在于源代码(开放)本身,而是在于其开发方式,即允许所有程序员参与开发的开放源代码哲学(文化),与他人共享自己的开发成果,于是开源社区不断扩大,创新浪潮高涨。

  开源社区是一个具有“集体开发、合作创新、对等评估”,以及“源码公开、使用自由、资源整合、信息共享”特征的创新体系。它是建立在自由开放的互联网平台上的,很多创意通常自下而上来自底层的程序员(Programmer)或志愿者 (Volunteer)。在这个创新体系中,能够广泛吸收全球广大志愿者的智慧,经常产生大量思维碰撞,并往往撞出不少耀眼的思想火花,经常迸发出创新点子,在技术上有所突破。社区开发创新体系可以开发出全部创新的产品性能,一般可向社会/市场发布社区版(或β测试版),而与β测试版相应的新产品的创新性能,可能尚不够系统,不够稳定,不够成熟。志愿者一般由学校的学生、教师,社会的黑客、业余爱好者,企事业开源技术研发中心或开源技术小组的人员组成。志愿者向开源社区提交(Submission)自己开发、修改的“软件包”,而开源社区则对众多志愿者提交的“包”进行“选包、打包、集成、测试、优化”循环的创新活动。

  开源社区一般分三种类型:(1)专业型社区,指针对专业技术进行开发的社区。如Linux
操作系统内核社区(www.kernel.org), Gnome桌面图形系统社区(www.gnome.org ), KDE桌面图形系统社区( www.kde.org), 开放办公套件社区(www.openoffice.org)社区, 开源浏览器社区( www.mozilla.org, www.firefox.com )等;(2)产品型社区,指在产品开发全过程中,其先导的社区开发与后续的企业开发,以及企业的销售、支持、服务等活动相衔接的那种社区。如先导的 Fedora社区(www.fedora.org , 其相应的后续企业为Redhat),先导的Open SuSE社区(www.opensuse.org,其相应的后续企业为Novell),先导的Ubuntu社区(www.ubuntu.org,其相应的后续企业为Canonical)等;(3)平台型社区,指志愿者可申请在其上立项,主持相应项目的开发工作,可利用该平台型社区所提供的开发工具、管理工具等环境资源,并可在其平台/网络上招聘同组的开发人员,也可在其上募集开发基金,这样的平台型社区,如www.sourceforge.org 社区。

  志愿者向开源社区提交“软件包”,不一定就会被社区所选中,竞争相当激烈,往往要受到所谓“抢占(preemption)”机制的挑战。开源社区从分散的志愿者中形成社区核心层,社区也有少量的资源与日常管理人员、测试人员等,在核心层人员中,可能有开源领袖或大师、技术骨干,其中还有监护人(package maintainer),他们负责“选包、打包、集成、测试、优化”以及监控工作。作为资源管理或打包工具均是自动化的,如Fedora/Redhat 采用资源包管理(RPM,Resources Package Managment)的打包机制,Ubuntu/Debian 采用高级打包工具(APT,Advanced Package Tool)。在开源社区选包优化循环中,一是要依靠社区骨干、监护人,或开源领袖的工程经验(判断力),二是要进行相应的一系列测试,如:专项测试、开发测试、编译测试、二进制回归测试、集成整合测试、社区版(或β版)全面测试。志愿者被开源社区吸收参与开源系统项目的开发工作,即在国际社区加入到“开源树(Linux/OSS Tree)”的行列。

  我手头有一张表,表中显示全球志愿者对“Linux操作系统内核(Kernel)社区”关于Kernel 2.6.4项目(发布版)开发创新的贡献率。表中:以Linus Torvalds为代表的团队(OSDL)为30.31%, IBM为5.22%, Red Hat为4.35%, Debian为3.79%, Intel为2.55%, SGI为2.30%, Samba为1.99%, Novell/SuSE为1.99%, HP为0.93%, Sun为0.19%, Source Forage为0.19%, Yahoo!为0.19%, Toshiba为0.12%, Fujitsu为0.12%, Torbolinux为0.06%, Dell为0.06%, ···,其他为45.64%.

  这是一张几年前的表单,在这张表中尚未查到中国的企业或个人。

  中国企业或个人参加国际开源社区的开发工作, 以往犹如凤毛麟角,但近年来多起来了。如“灰狐社区”的“Jfox应用服务器”等已为国际社区注册登记;国人对ext3文件系统改写的部分代码、对USB串行总线改写的部分代码,以及 “Linux虚拟服务器(LVS)”,针对提高I/O访问效率的虚拟内存管理等开发项目已进入“ www.kernel.org ”社区;国人关于“windows驱动软件模块”,即“在windows环境中读、写Linux ext3文件系统的软件模块”, SCIM智能通用
输入法等系统性开发项目已在全球最大的开源社区(www.sourceforge.org) 完成了立项。但总的来说, 中国企业或个人参加国际开源社区的开发工作,迄今还是少而散,其中中国企业的参与则更少。

  我们要鼓励国人和国内企业积极参加国际开源社区的开发创新活动。不言而喻,这样做不但可为开源软件的开发创新作出贡献(其成果融合在开源社区的“集体开发、合作创新”机制中);而且通过参与,还可以体验开源文化,积累工程经验,了解、把握开源软件体系结构、顶层设计等全局性技术,有利于开源人才的成长,也有利于在后续的企业开发中提高开发、把握开源软件“工程化实现技术”的能力。

  有人指出,我们要不失时机,积极创建中国自己的开源社区。 我认为, 目前的条件似乎还不完全成熟。建设中国自己的开源社区要具备哪些条件呢?

  1. 要以英文/中文作为开源社区的工作语言(最好是双语言),因为我们的社区是面对全球志愿者的,光有中文是不够的。

  2. 要有一批在开源领域具有丰富工程经验的领袖或骨干主持社区工作,这不但可树立一个形象,有助于吸引志愿者上网访问社区并向社区提交“软件包”;同时也有利于及时、有效完成社区的“选包、打包、集成、测试、优化”循环工作。

  3. 要建立一个网络和平台(含数据库)。

  4. 要有一套有效的、自动化的选包处理方法,如RPM、APT等。

  5. 要取得与国际开源同类社区的授权,如Ubuntu社区的很多资源、人才来自Debian社区,他们是在Debian丰富资源的基础上进行移植、剪裁、精简、再开发、再创新的,所以他们要取得Debian社区的授权,并取得Debian的“支持”(提供服务的主要内容),为此他们每年要向Debian付费。

  6. 要向国际“开放源代码协会(OSI,Open Source Initiative)”注册,并申请本社区执行的许可协议。各社区申请并被OSI批准使用的各种许可协议,如:GPL、LGPL、MPL、Free BSD、CDDL等。

  7. 建立相应的测试基地。

  8. 建立基金会,可由政府支持(很少见)、也可由企业、组织或个人捐助,如属“产品型社区”,当然应由相应企业出资解决。

  9. 本社区要与负责对发布版进行后续“支持”、“服务”的企业有密切联系,相互做好及时的信息反馈、信息共享, 并要及时发现“缺陷(Bug)”,及时提出打“补丁(patch)”措施, 做好用户服务。

  当前的问题是:要鼓励国内企业与个人积极参加国际开源社区的开发工作,也可鼓励中外合作,在国内建立开源研发中心或Linux/OSS技术中心(LTC/OTC),参与国际开源社区的开发工作;也要积极创造、完善条件,创建、健全我们自己的开源社区。

  为了全面、完整地开展开源软件的开发创新活动,在开源社区创新体系之外, 还需要建立一个后续的企业创新体系,与之互为补充。企业创新体系是针对解决“工程化实现技术”的,是进行“自主开发、自由创新”,具有“技术不公开(含有技术秘密和商业秘密)”,“自主
知识产权”特征的。

  自主开发工程化实现技术,完全不会影响自由/开源软件保持其“源码公开,使用自由,信息共享”的基本特征。

  关于工程化实现技术,主要表现在:

  ①开放源代码实施方面:

  国际知名IT评论家Matt Asay指出, Red Hat发行版全部源代码在交付用户使用的二进制版本(即“ready to go”版本)时,并不是这些源代码编译的结果,其中存在着一些差异,这就是技术秘密和商业秘密;最近我在与Linux内核设计大师Andrew Morton讨论时,Morton认为,Red Hat、Novell等企业Linux发布版的源代码与“官方的(official)”的源代码也存在大约3-5%的差异,而这些差异并不是各自在打补丁时所产生的时差所致,而完全决定于对工程技术与工程经验把握的程度。不言而喻,在这些差异中体现着开源产品性能的优化,而这种优化是由“工程化实现技术” 所决定的。

  ②Linux/OSS产品的各软件模块的配置组合效应方面:

  合理的配置技术最终会提高产品的稳定性、计算效率,以及优化性能,这也取决于工程化实现技术。

  ③发布版的测试认证方面:

  本产品与主要协作厂商(IHVs、ISVs、SIs)产品进行协同测试认证,以提高产品的质量,催化其成熟性,这也纳入工程化实现技术的范畴。

  Google全球副总裁李开复认为,Google全部开发并采用的软件都是开源软件,全部源代码是公开的,但不等于一切技术都要公开,Google还有自己的技术秘密和商业秘密。

  目前国际上有一些开源社区也继续延伸做了部分“工程化实现技术”,因此其社区发布版性能的稳定性与成熟度也增加了。

  中国的一些开源企业在早期开发时是欠了“债”的,出现“先天不足”的现象,今天要不要“补课”, 如何“补课”,需作研究。

  为什么早期开发“先天不足”呢?

  ①没有参与国际开源社区的开发过程,而是沿袭传统封闭的开发方式。

  ②通常是从网上自由下载源代码和相应软件,采用学习、仿制的方式完成产品设计,接着通过测试手段进行挑错、纠错,并改进产品性能。没有充分开展研发创新活动;也没有重视积累工程经验和采用工程化实现技术,完善、优化产品性能。

  有人统计,一些国内企业开发的早期开源产品(发布版)其卸载率高达31.9%。

  为此,今天要“补课”。问题是如何“补课”?关于积极参加国际社区的先导开发,这是当然要做的,但见效的周期较长。所以“补课”必须坚持“两条腿走路”的方针。

  目前国内一些开源新兴企业坚持“两条腿走路”的方针进行“补课”,已初具成效,他们的措施是:

  ① 抓应用试点

  通过应用试点,充分暴露并发现产品性能与用户需求的差距和问题,随后辅之以相应的研发和测试,进一步挑错纠错,完善优化。采用这种做法,当开源软件发布版累计颁布到大致第5版以上时,产品性能才趋于稳定、高效、优化。

  ② 抓质量认证

  一些开源企业已与IHVs、ISVs、SIs大力协同,针对本产品与其配套的软硬件产品或产品集成,进行严格的测试认证,从而使产品性能更趋于稳定、优质、完善。

  ③ 积极开展技术研发

  包括国际合作,参与社区和企业的研发工作,以研发成果来改进、提高开源产品的性能。

  中国开源运动已经开始重视体验开源文化或开源理念;开始摆脱传统封闭的开发方式,转向以开源社区为先导的开放的开发机制,也开始重视工程经验和工程创新;中国开源运动正在从学习模仿阶段,走向创新发展阶段;已经涌现出一批新兴的开源企业,在积极参与国际社区开发的同时也已开始创建、健全自己的开源社区;中国开源运动已越过起动准备期,转向健康成长期。

原文链接:http://tech.sina.com.cn/it/2006-09-26/14031160136.shtml