陆首群:坚持开源软件的创新之路

跟版网(www.genban.org)提供创新,软件,坚持,开源,开发,技术,跟版网精品网站模板,跟版网模板,网站模板,等网页设计素材资源,提供相关网页设计资源的教程和免费下载。跟版网,专业织梦网页设计模板资源站。。

  中国开源软件推进联盟主席 陆首群

  我国IT产业的创新工作

  我国是全球IT产业发展的后起者,我们肩负为我国IT产业生存、发展和提升而搏弈的历史重任。走自主创新之路,将是这场搏弈胜出的关键。

  集成电路和软件是IT产业的两个支柱。近年来国内围绕这两个支柱产业的创新历程为:

  在集成电路方面,国内自主开发了中低端通用微处理器(CPU)、芯片集成系统(SOC)和数字讯号处理器(DSP)等芯片,虽然这些芯片的集成度还较低,大约比国际高水平还差一个数量级(如龙芯II号相当于奔腾IV中档,其集成度约为10的7次方个晶体管,而国际水平为10的8次方个晶体管),但毕竟我们从无到有,完成了上述一系列芯片开发创新的全过程,即完成了科研创新、设计创新,以及工具创新、工艺创新和工程创新全过程(必须指出,工程创新的难度比科研创新的难度要大得多,有人预测工艺创新难度约为设计创新难度的10倍),但我们毕竟在创新全过程道路上走了一回,突破了国外对工艺技术的严格控制,积累了自己非常宝贵的工程经验。集成电路的创新有了良好的起步。

  国内软件创新又如何呢?

  系统软件是最基础、最核心、创新难度也最大的软件,我想可将它作为软件创新的代表。系统软件一般为操作系统、数据库、编译器和工具、编程环境、中间件等,其中操作系统又在系统软件中处于龙头地位。

  中国要自主开发操作系统或系统软件,难度很大,必须走开源软件创新之路,从开源软件创新中找机遇突破;而要进行开源软件的创新必须实行体制创新。

  目前国内虽然推出了几款Linux操作系统发行版,但自主创新的技术含量不高,总体上还处于学习模仿阶段,缺乏深层次的研发能力。在先导的社区开发创新(即“集体开发”、“合作创新”)阶段,国内个别人虽然曾向国际开源社区递交了诸如“Linux虚拟服务器(LVS)”、“入侵检测系统(IDS)”等修改的软件包,但作为社会或企业的志愿者向国际开源社区的贡献还属凤毛麟角;而在后续的企业开发创新(即“自主开发”、“自主创新”)阶段,国内企业一般尚未能把握好工程化实现技术,工程经验很少。有人说,“中国系统软件的开发创新面临着一个进退维谷的境界”,这样的估计似乎过于悲观。我认为,中国开源系统软件应该从模仿走向创新,在“合作创新”基础上扩大“自主创新”。

  为了实现开源软件的开发创新,必须了解开源软件独特的创新方式。

  两种共生技术

  人们常常陷于一个思维误区:“开源软件是由全球志愿者集体开发的,遵循开源许可协议,其全部源代码是开放的,任何人均可自由获得”,而“全部源代码的开放也表示其全部技术是公开的。”他们不明白,开源软件不能再停留在其早期“自由的理想王国”里,仅供“黑客”、“玩家”们当“玩艺”;开源软件要取得持续发展,必须探索并形成自己的商业模式,惟有具备商业模式的开源软件才是成熟的,才能处理好如下矛盾,即:既不违反开源许可协议,公开全部源代码;又能不公开自己的专有技术,保守自己的商业秘密。事实上,具有商业模式的开源软件,其技术创新并不完全表现于具有自由开放特点的科研创新和设计创新之中,即并不完全表现于开放的源代码之中,它还表现在具有技术不公开特点的工艺创新和工程创新之中,即表现在与源代码无关的工程化实现技术(即专有技术和商业秘密)之中。这就是说,开源软件的全部技术是由:以开放源代码所表征的公开化技术,与不公开的工程化技术两部分组成;或者说由这两部分技术组成开源软件的共生技术。所谓工程化技术,是在开源软件已完成了其公开技术(即全部源代码或全部技术性能)的开发过程的基础上,服务于产品化或商业应用,尚需解决的后续技术,它主要关注于:改善操作稳定性,优化计算效率,增强灵活扩展性,提高产品质量,催化产品成熟度。工程化技术是一种实现技术、优化技术、隐性技术,主要表现为技术诀窍(Know-How)或熟练技巧(Skill)、工程经验、系统底层技术的把握等隐性知识方面。

  开源软件的工程化技术主要由两部分构成:(1)在开发过程中,有些与设计思想、原理、实现机制(包括算法)有关的隐性设计技术;与各软件模块之间的协同、耦合、调用等相互依赖关系有关的实现技术(包括实现细节);开源企业(服务商)的“内核分支”发行版的源代码与由Linus Torvalds负责开发和监护的官方(Official)“内核主线”版本的源代码之间偏差程度的把握能力。IT评论家Matt Asay指出,人们可以得到Red Hat公司企业级Linux发行版的全部源代码,但它直接交付用户使用的二进制版本(即所谓“ready to go”版本)并不是这些源代码编译的结果,其中存在着一些差异(关键要把握差异的程度),这就是商业秘密。(2)在产品化或应用过程中,为增强开源软件的增值效应,对各软件模块进行包装/配置/集成,以及剖析并改进相应的软件系统(Profile)所涉及的隐性技术。

  举国外开源软件“Ubuntu”的例子来分析:Ubuntu作为Linux的386个发行版之一(有桌面版,也有服务器版)是非常优秀的。发展迅猛,受人欢迎,其开发创新机制确有过人之处。Ubuntu为何发展如此之快,干得如此出色呢?我认为其中一个重要原因是Ubuntu利用了国际上最大的开源社区Debian的人才和资源。所以有人说“Ubuntu是基于Debian开发的版本”,“Ubuntu是Debian的副产品”,确是如此。但Ubuntu认为“Debian的过于宽广庞杂”,它在Debian资源上进行剪裁、移植和再创新,达到“少而精”的目的。现在随着Ubuntu的发展,它并不想与Debian兼容,也不愿参加Debian的联合体。

  最近Ubuntu自己认承:Ubuntu的发布版在产品稳定性等性能方面尚有待于改进,它还未通过用户认证。这使我联想到Ubuntu的开发创新机制可能还存在一些问题,他们“集体开发”开放技术的能力可能有余,而“自主开发”工程化技术的能力可能不足。今年2月我曾向Ubuntu创始人Mark Shuttleworth当面指出这些问题,获得了Mark的首肯。

  很多执行双授权许可协议模式的开源软件,在其层次结构(Stack)中可能嵌入某个层次的闭源软件,或可能附加某些闭源的组件模块,这些闭源软件实际上就是私权软件,而私权软件的全部技术都是不公开的,并将完全依赖于自主开发创新。

  双重创新模式

  与一般企业的私权软件创新模式不同,开源软件首先采用由志愿者进行“集体开发”、“合作创新”的新模式,这种创新模式实行“源代码开放”、“技术公开”;但是仅靠这种模式还不足以开发出开源软件的全部共生技术(即不能开发不公开的工程化技术),也不足以向市场推出优质高效、操作稳定、技术更趋成熟、竞争力更强的开源软件产品。实际上,开源软件针对开发工程化技术,还需要另一种:“自主开发”、“自主创新”、“具有自主知识产权”的创新模式来跟进和补充。开源软件的双重创新模式,即“集体开发”、“合作创新”与“自主开发”、“自主创新”两种模式是互补的、互相衔接的、不可分割的;也可看作开源软件开发创新过程的两个阶段。

  近年来国内企业开发并向市场推出一批开源软件产品,取得了长足进步;但某些企业还沿袭旧的封闭的开发模式和机制,他们在“社区版”上进行剪裁、移植或者进行简单修改,属于自主开发创新的成果还不多,他们基本上还处于学习、模仿阶段,他们基本上还是一个开源软件的集成、发布商,不是开发商,他们基本上还缺乏深层次开发能力。国际开源社区曾多次反映,国人在开源软件“集体开发”、“合作创新”活动中,向社区提交自己修改、创新的源程序代码行(到被吸纳)尚属凤毛麟角,对开源社区抢占算法(Preemption)方面的贡献还微小,以致有人认为:国人尚未能进入这个开发创新模式的核心圈之内,而且从这个衡量开发创新人员资质水准的统计数据来看,国人尚有不小差距。

  两种开发机制

  为了加快中国开源软件的发展,需要建立开源社区,形成社区开发和企业开发两种互相支持、互为补充的开发机制,社区开发主要是科研创新,企业开发主要是工程实现。

  在开源社区,具有“集体开发”、“合作创新”、“技术公开”特征的创新体系,是建立在自由开放的互联网平台上的,很多创意通常自下而上来自底层志愿者。在这个创新体系中,能够广泛吸收全球广大志愿者的智慧,经常产生大量思维碰撞,并往往撞出不少耀眼的思想火花,经常迸发出创新点子,在技术上有所突破,但也常常伴随着不够系统、不够稳定、不够成熟的现象。开源社区的创新活动偏重于科研,偏重于科研创新和设计创新,开源社区的创新活动需要有开源领袖(或大师)以及一批核心骨干的支撑,他们在社区负责对志愿者提交的软件包,进一步作“选包、打包、集成、测试”循环的创新活动并实施资源管理。在开源社区创新体系之外,还需一个后续的企业创新体系与之互为补充,企业创新体系具有“自主开发”、“自主创新”、“自主知识产权”(技术不公开)的特征,它是建立在企业内部开发部门或企业局域网平台上的,其创新的任务是向市场推出满足用户需求的产品,计划通常自上而下,开发者是企业专业技术队伍,企业的创新活动需要有经验丰富的资深人士(包括系统架构师)及一批核心骨干的支撑(最好具有参与社区开发创新的经历并与之保持良好的互动接口)。他们在利用开源社区创新成果的基础上,重点做工程化、产品化、系统化、完善化、稳定性和性能优化的创新工作,在攻克工程化技术方面进行自主创新。企业的创新活动偏重于工程,偏重于工艺创新和工程创新。在开源系统软件领域内,工程的难度比科研的难度大很多。工程化主要依靠积累的经验、专有技术(技术诀窍)、资深技术骨干的智慧(隐性技术),以及在测试版上持续不断地进行配置、集成、调试的测试工作,从中不断发现错误和纠正错误,完全是靠一点一点调出来、改出来的,绝不可能是想出来、写出来的。

  产品平台和生态系统

  对于开源软件,孤立地开发或推出一个产品(发行版)是不够的,必须形成围绕该产品平台的生态系统,即要把大量软件(特别是应用软件)移植到这个产品平台上来;该产品要能预装到一些必要的硬件体系结构中去;要能与众多外围设备匹配衔接。而移植、预装、匹配是需要做大量测试、修改以及“再开发”工作的,涉及成百上千个企业协同工作,需耗费大量人力、物力、财力和时间。为做到这一点,首先必须开发出在全球能进入“主流”的产品,否则要吸引全球广大企业、社区的支持,共同来营造一个生态系统是不可能的。当然在营造生态系统过程中,不能用纯技术观点来看待这个问题,在争取广大企业、社区支持时,特别要争取拥有丰富资源和影响力的跨国公司的支持,为此我们要做好协调工作。

  还必须指出,“分散的低水平重复”很难使开发出来的开源软件在全球能够占居“主流产品”的地位,为此加强国内联合、国际合作是十分重要的。

  开源架构和开源、闭源产品链

  开源软件的LAMP架构(即L-Linux操作系统,A-Apache开源服务器或其他开源中间件,M-MySQL或Postgre开源数据库,P-PHP或Perl、Python脚本语言)具有简易性、低成本和执行灵活性等特点,当“在线交易进程(OLTP)”在LAMP架构的解决方案中取得成功,有力地推动了这个架构的发展。LAMP架构的崛起,与J2EE架构(Java编程语言)和.Net架构(C#编程语言)形成了三角鼎立的竞争态势。

  针对各种信息化应用解决方案,在开源软件LAMP架构上形成的开源产品链,需进行集成、测试、优化的开发创新活动;从实际需求出发,有时我们也要推出开源和闭源产品混生的产品链,而在推出这样的产品链之前也需要进行相应的开发创新活动。

  李国杰点评:

  拜读陆总的大作后,十分赞同陆总的观点,希望在媒体与有关会议上大力宣传陆总的观点。

  我国的舆论往往把开放源码和自主创新对立起来,这是一个误区。十一五期间我国应在开放源码基础上加强自主创新,使我国软件业如同芯片一样有一个大的跨越发展。

本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

数据库查询哪个对像里面包含什么字段语句写法: select * from sysobjects o, syscomments s where o.id = s.id and text like %text% and o.xtype = P text 换成需要查的字段 数据库查询哪个对像里面包含表: select o.name from sys.all_sql_modules s,sys
一、 创建用户: 命令:CREATE USER username@host IDENTIFIED BY password; 说明:username - 你将创建的用户名, host - 指定该用户在哪个主机上可以登陆,如果是本地用户可用localhost, 如果想让该用户可以从任意远程主机登陆,可以使用通配符%. password - 该
在mysql中可以用group by对查询出的数据分组 select id,service,name FROM service GROUP BY name,service 如果要查看每组数据的总数,可以 select count(*) FROM service GROUP BY name,service 当要查询group by后的总数,可以这样 select count(*) from(s
mysql count group by统计条数方法 mysql 分组之后如何统计记录条数? gourp by 之后的 count,把group by查询结果当成一个表再count一次 select count(*) as count from(SELECT count(*) FROM 表名 WHERE 条件 GROUP BY id ) a; 实战例子: select count(*)
1.首先停止MySQL服务:service mysqld stop 2.加参数启动mysql:/usr/bin/mysqld_safe --skip-grant-tables 然后就可以无任何限制的访问mysql了 3.root用户登陆系统:mysql -u root -p mysql 4.切换数据库:use mysql 5.显示所有的表:show tables; 这里就可
摘要: SQL的WHERE子句中包含多个AND和OR 示例: SQL解析器在处理操作时会优先处理and操作: 假如有表product字段如下:id、product_id、product_price、product_name,现在要查找产品号为100或者101,并且价格大于200的商品,程序员可能会这样写: select * fr