当前位置:Linux教程 - Linux文化 - Linux成功的奥秘并不在于源代码本身,而是在于其开发方式

Linux成功的奥秘并不在于源代码本身,而是在于其开发方式


  自由/开源软件的先驱Richard Stallman说:“一般讲,我不认为GPL规则是Linux取得成就的主要原因,相反,我认为那是由于在1991年那个时期,Linus Torvalds第一个找到了分布式开发软件的正确的社会组织形式”。Linux操作系统创始人Linus Torvalds也曾说:“Linux成功的奥秘并不在于源代码本身,而是在于其开发方式,即允许所有程序员参与开发的开放源代码哲学,与他人共享自己的开发成果,于是开源社区不断扩大,创新浪潮高涨”。

  开源社区的开发机制是一种全新、优秀的开发机制,是推动开源运动发展的重要因素。

  很多中外人士,包括一些资深的软件专业人士,对开源社区开发机制,不但在认识上存在一些分歧,甚至还有一些认识不清的地方。

  下面我们归纳人们在认识上的一些问题进行讨论:

  ·开放的开源社区开发机制较之封闭的传统企业开发机制,其主要优势在哪里?

  ·社区开发是否只是开源软件开发全过程中的一个开发阶段?

  ·有人说,开源软件在社区开发阶段开发的是创新技术,在企业开发阶段开发的是成熟技术,你是否同意这种说法?

  ·开源软件的全部源程序代码将公开,是否表示其全部技术将公开?开源软件是否还可能拥有技术秘密?

  ·社区开发机制体现了“集体开发、合作创新”,是否还存在“自主开发创新”的空间?

  ·开源文化或其哲学理念是否与开源软件的商业模式相抵触,对它们之间如何作出平衡?

  ·开源软件的“社区发布版”是否体现了真正的自由软件?而开源软件的“产品发布版”是否可发展为具有商业模式的开源软件?

  开源社区的主要特征

  开源社区是一种分布式开发软件的社会组织形式,由分布在全球的志愿者(Volunteer,他们之中很多来自一些IT企业的研发中心/小组,也有来自学校的学生或教师,还有来自社会各界的业余爱好者,甚至“黑客”)集结在社区,本着自由、开放、共享、协同的理念,利用互联网作为工具,不计报酬,进行“集体开发、合作创新和对等评估”。通常由开发、修改开源软件源代码(其成果将在网上公布)的人士组成社区的核心层;为了克服志愿者“自由散漫”的工作倾向,近年来在核心层中还由一批领取工资或补贴的“固定人员”组成了骨干核心层(他们一般由基金会来支付工资或补贴)。开源社区是一个非盈利组织,没有商业模式,其社区发布版通常可供人们从网上下载,并无偿地、自由地使用、修改、复制和分发。

  开源社区开发机制的主要特征是:

  ·开源社区一般由志愿者参与开发,不需成本(如上所述,目前在社区核心层中出现了一批由领取工资的固定人员所组成的骨干核心层,这时当然要增加一些成本,但总的来说社区还是低成本开发)。

  ·由志愿者组成的开发人员来自全球各地,其中不乏高水平者。

  ·社区开发人员具有自由、开放、共享、协同的理念,不以追求商业利益为其目的。

  ·开源社区开发的开源软件,实现了其全部性能的创新工作,在此基础上推出社区版(或β测试版,或参考平台)。发布社区版时,其全部源代码将在网上公布。

  ·社区开发是采用“集体开发、合作创新”的方式,在这里不存在所谓“自主开发创新”的空间。

  ·在社区开发阶段,在开发成果(推出的社区版)中,一般也不存在技术秘密和商业秘密。

  ·社区开发人员没有明确的研发路线图(Roadmap,因为社区开发人员并不了解用户的需求,很难制定出完整的研发计划)。

  ·社区开发人员不必对版本的挑错纠错(Bug Fix)、打补丁(Patch)、解决问题和质量认证等工作负责,社区只负责对投递给社区的有关缺陷(Bug)、补丁(Patch),进行有选择的验证工作。

  ·社区开发人员不需对市场策划、产品销售、技术支持以及产品服务负责;不需对后续开发、产品发布、商业模式负责。

  ·社区开发只完成了开源软件产品开发全过程中极端重要且必不可少的先导开发阶段(开发“创新技术”,开发全部产品性能),还需要非社区开发阶段(开发“成熟技术”,优化产品性能)与之卸接,即要求后续的企业开发阶段相应跟进。

  后续的企业(非社区)开发的主要特征

  ·社区先导开发提供了完全创新的社区版,把产品的样品阶段的全部性能都开发出来了。后续开发的产品化技术(即成熟技术)通常不是由社区来开发,而是由开源软件发行商(Distro,Distributor)或开源企业接着来开发,随后推出产品版(或商业版)。

  ·对于这个后续技术,它主要关注于:改善操作稳定性,优化计算效率,增强灵活扩展性,提高产品质量,催化产品成熟度,我们也称之为工程化实现技术。

  ·如何开发工程化实现技术(以Linux为例):

  (1)进行X-window工程化

  众所周知,Linux操作系统工作时,其基本应用程序,需要通过在中间层(Utility)中的图形系统和库函数,对内核中的各功能软件模块进行通信和调用来实现。在这里,作为底层窗口环境或图形显示系统的X-window(在Linux中称之为X Free 86)的工程化问题,对实现功能软件模块的优化组合或合理配置,提高调用效率,最终实现产品化的技术目标,起到关键作用。

  对采用相同的Linux内核版本,进行不同程度的X-Window工程化的不同的产品发布版来说,它们之间在产品化的性能、效率等方面表现出相当大的差异,从而说明工程化实现技术的重要性。

  (2)对Linux内核工程化

  开源软件发行商采用“官方(Official)”的内核源代码(在网上公布),进行工程化处理,使自己使用的源代码与“官方”源代码具有不大于3-5%的偏差(发行商自己具有偏差的源代码不再另行公布),对该源代码作二进制处理成机器码(公布)。对内核工程化处理,也有利于更好实现产品化的技术目标。

  (3)进行挑错纠错,质量认证,改版升级

  不断对产品发布版进行挑错、纠错、打补丁、升级,进行质量认证和与配套厂商(硬件、软件厂商)的兼容性测试,这也是实现产品化的技术目标的重要措施。

  ·工程化技术是一种实现技术、优化技术、隐性技术,主要表现为技术诀窍(Know-How)或熟练技巧(Skill)、工程经验、系统底层技术和顶层设计的的把握能力等隐性知识方面。

  ·从事工程化实现技术的开发工作将由开源软件发行商以“企业开发”的模式来进行。工程化实现技术是属于自主开发创新的范畴,因此后续的“企业开发”将可能拥有技术秘密和商业秘密,将可以建立商业模式。开源软件发行商建立的开源软件商业模式也有别于传统的私有软件厂商的商业模式。

  有关社区开发机制的几个认识问题

  1、有人认为,开源软件的开发全部依靠社区开发机制,即可以将社区开发机制放大到覆盖开源软件开发的全过程,“社区版即是产品版”,其实这是认识上的一个误区。

  我对Ubuntu的创始人Mark Shuttleworth说,不要把Ubuntu社区的开发工作延伸到挑错纠错、打补丁,质量认证,开发工程化实现技术(即成熟技术)的范畴,这些后续技术的开发应交给后续企业(开源软件发行商)来做,对Ubuntu社区来说似应交给Canonical公司来做;开源社区是一个创新平台,目标是推出并发布社区版,不追求商业利益,不存在商业模式;商业模式应由后续开发的开源企业来实现,没有商业模式的支持,开源软件将不可能持久发展下去并形成开源产业。

  以开源数据库软件MySQL为例,MySQL是采用双授权模式的软件,其社区版是可以在互联网上免费下载的(下载量几十亿套),但其产品版或商业版(MySQL Enterprise)对社区版不稳定的性能进行调优,给客户带来监控、建议等增值服务的功能(这些在设计中的改进技术是不公开的)要收费的(全球付费客户约1万家),这说明开源软件的社区版与商业版是有区别的。

  2、关于在中国如何建立社区开发机制的问题

  几年前,在中国开源运动的早期,Linux/OSS的开发没有采用社区这样全新的、先进的开发机制,当时我们处于学习模仿阶段,主要是从网上下载Linux/OSS社区版来组装开源产品,这时在国际开源社区从事开发工作的中国人属凤毛麟角,所以有些外国人议论:“中国人是开源社区资源的消费者,而不是贡献者”。近年来,随着中国开源运动进入到发展的转折期,中国人在国际开源社区从事开发的人员和主持开发的项目均多起来了。为了发展我们的开源事业,我们必须广泛采用先导的社区开发的机制。在建立本地社区之前,必须参与国际开源社区的开发工作,以便体验开源文化和其哲学理念,通晓顶层设计,了解开源社区的开发环境,积累工程经验。为了更好、更快、更加有效地进入国际开源社区参与开发工作,我们与若干国际开源社区达成合作协议,组建一批混合编组的开源软件研发小组,边培训边工作;同时我们正在积极创造必要条件,逐步建立一批本地的开源社区。

  3、在继社区开发之后的后续企业开发,主要开发工程化实现技术(“成熟技术”)。对于因工程化实现技术而影响到开源软件的产品发布版在性能上的差异,很多人在这方面的认识是一致的,至于差异的大小,不少人的认识还不一致:有人认为不应把挑错纠错纳入工程化实现技术的范畴;有人并未认识到把握Linux内核源代码偏差这类工程化实现技术对产品性能差异可能产生的影响;关于因X-Window工程化对产品性能差异的影响,多数人对此的认识是一致的。

  4、众所周知,先导的开源社区开发是无偿公布其开发成果的,而后续的开源企业开发是在其商业模式下,有偿出售其产品或服务的(一般通过技术支持、客户服务来收费,且收费很低)。这时,社区开发志愿者无疑是作了大量的无偿工作,后续开发的企业却无偿承接了社区开发的资源和成果,其后续开发的产品或服务,则可在市场上获利,而且该企业还可以实行股票上市。显然在利益与权益方面两者就很不平衡,对从事社区开发无偿工作的志愿者也很不公平,应该说这个问题迄今尚未很好解决。我在这里仅举一例,在1999年Red Hat股票上市并获利后,有人就认为,他们是利用别人的成果使自己企业上市,使一部分人发财致富,可恶之极。后来Red Hat给Linux开发作出贡献的人士作了一些补偿(如分给他们一些股票),Linus Torvalds当时也分到一笔钱,他利用这笔钱在美国购置了房产,他说,钱不多,不够买到自己最称心的房子,不过也买到了令我满意的房子。

  5、很多知名的开源领袖和大师,本着开源的哲学理念,利用社区开发机制,进行无偿开发工作,推动开源运动发展并作出很大贡献。在开源运动发展之初,他们与私有商业软件公司,特别是一些IT大企业以及其商业行为,保持一定距离,“一身正气,两袖清风,一尘不染,明哲保身”。但近年来,逐渐发生了一些事件:他们中的一些人开始受雇于这些私有商业软件公司;或参加由这些公司出资组成的基金会所支持的开源社区工作;今天更有一些私有商业软件公司与开源企业“结盟”,或合作推销“混源架构(Mixed Source Stack)”的集成产品、系统与服务。开放、自由、共享、协同、无酬的理念与封闭、私有、控制、垄断、利益的商业行为之间开始出现了冲突,如何做好平衡、兼容,很可能会影响到开源软件开发机制的发展走向。