热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

陆首群:坚持开源软件创新之路走双重模式_MySQL

文中国开源软件推进联盟主席陆首群为了发展开源软件,提高其市场竞争力,必须坚持走开源软件独特的创新之路。两种共生技术人们常常陷于一个思维误区:“开源软件是由全球志愿者集体开发的,遵循开源许可协议,其全部源代码是开放的,任何人均可自由获得”,而“全
  文/中国开源软件推进联盟主席 陆首群

  为了发展开源软件,提高其市场竞争力,必须坚持走开源软件独特的创新之路。

  两种共生技术

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

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

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

  最近Ubuntu自己认承:Ubuntu的发布版在产品稳定性等性能方面尚有待于改进,它还未通过用户认证。这使我联想到Ubuntu的开发创新机制可能还存在一些问题,他们中不少人具有“崇尚自由开放,摒弃封闭专权的理想主义”,因此他们“集体开发”开放技术的能力可能有余,而“自主开发”工程化技术的能力可能不足。

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

  双重创新模式

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

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

  两种开发机制

  为了加快中国开源软件的发展,需要建立开源社区,形成社区开发和企业开发两种互相支持、互为补充的开发机制,社区开发主要是创新,企业主要开发工程化技术,促使产品更加稳定、优化。

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

  产品平台和生态系统

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

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

  开源架构和开源产品链

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

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

推荐阅读
  • 如何实现织梦DedeCms全站伪静态
    本文介绍了如何通过修改织梦DedeCms源代码来实现全站伪静态,以提高管理和SEO效果。全站伪静态可以避免重复URL的问题,同时通过使用mod_rewrite伪静态模块和.htaccess正则表达式,可以更好地适应搜索引擎的需求。文章还提到了一些相关的技术和工具,如Ubuntu、qt编程、tomcat端口、爬虫、php request根目录等。 ... [详细]
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的详细步骤
    本文详细介绍了搭建Windows Server 2012 R2 IIS8.5+PHP(FastCGI)+MySQL环境的步骤,包括环境说明、相关软件下载的地址以及所需的插件下载地址。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 一句话解决高并发的核心原则
    本文介绍了解决高并发的核心原则,即将用户访问请求尽量往前推,避免访问CDN、静态服务器、动态服务器、数据库和存储,从而实现高性能、高并发、高可扩展的网站架构。同时提到了Google的成功案例,以及适用于千万级别PV站和亿级PV网站的架构层次。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 本文介绍了在Win10上安装WinPythonHadoop的详细步骤,包括安装Python环境、安装JDK8、安装pyspark、安装Hadoop和Spark、设置环境变量、下载winutils.exe等。同时提醒注意Hadoop版本与pyspark版本的一致性,并建议重启电脑以确保安装成功。 ... [详细]
  • 本文介绍了高校天文共享平台的开发过程中的思考和规划。该平台旨在为高校学生提供天象预报、科普知识、观测活动、图片分享等功能。文章分析了项目的技术栈选择、网站前端布局、业务流程、数据库结构等方面,并总结了项目存在的问题,如前后端未分离、代码混乱等。作者表示希望通过记录和规划,能够理清思路,进一步完善该平台。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文介绍了RPC框架Thrift的安装环境变量配置与第一个实例,讲解了RPC的概念以及如何解决跨语言、c++客户端、web服务端、远程调用等需求。Thrift开发方便上手快,性能和稳定性也不错,适合初学者学习和使用。 ... [详细]
  • 计算机存储系统的层次结构及其优势
    本文介绍了计算机存储系统的层次结构,包括高速缓存、主存储器和辅助存储器三个层次。通过分层存储数据可以提高程序的执行效率。计算机存储系统的层次结构将各种不同存储容量、存取速度和价格的存储器有机组合成整体,形成可寻址存储空间比主存储器空间大得多的存储整体。由于辅助存储器容量大、价格低,使得整体存储系统的平均价格降低。同时,高速缓存的存取速度可以和CPU的工作速度相匹配,进一步提高程序执行效率。 ... [详细]
author-avatar
露絲瑪麗蓮夢露_533
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有