本周我一方面对现有关于“software ecosystem”的研究进行了整理,发现目前对于开源生态系统的定义主要是借鉴对于“software ecosystem”的定义,主要分为以下五个:
1)最早是2003年Messerschmitt和Szyperki提出,“Traditionally. A software ecosystem refers to a collection of software products that have some given degree of symbiotic relationships.”
2)引用最多是2009年Jansen等提出,“We define a software ecosystem as a set of business functioning as a unit and interacting with a shared market for software and services, together with the relationships among them. These relationships are frequently under-pinned by a common technological platform or market and operate through the exchange of information, resources and artifacts.”
3)2009年Bosch提出,“A software ecosystem consists of the set of software solutions that enable, support and automate the activities and transactions by the actors in the associated social or business ecosystem and the organizations that provide these solutions.”
4)2010年Bosch和Bosch-Sijtsema提出,“A software ecosystem consists of a software platform, a set of internal and external developers and a community of domain experts in service to a community of users that compose relevant solution elements to satisfy their needs.”
5)2010年Lungu等提出,“A software ecosystem is a collection of software projects which are developed and evolve together in the same environment.”
共同点都是指相同的软件平台或环境,其中有商业利益或用户需求以及他们的关联关系,但这些定义用在开源生态系统中我觉得存在一定局限性。
在开源生态系统里(以github中为例),我认为构成要素有:
1. 核心软件项目(一个开源生态系统源头,例如开发框架或库)、相关项目(基于核心项目开发的子项目、为核心项目开发插件的子项目、以及单纯fork出来的子项目)
2. 软件版本库(source code、commit)、缺陷托管工具(issue、pull-requests、comment)、文档资料(wiki、document)、跨社区数据(SO post、URL link)
3. 开发者(manager、internal developer、external developer)
4. 间接用户(customer)
5. 其他相关要素
(1) 影响开源生态系统成长的因素分析
a. 一个核心项目自身开放程度(openness)对于形成一个开源生态系统的影响
b. 外围子项目对于核心项目的贡献(code, requirement)对于形成一个开源生态系统的影响
c. 如何促进和加快?
(2) 开源生态系统中涉众的管理
随着生态系统的不断生长,核心项目如何进一步扩展自己,如何管理不断加入的新涉众(提供需求、贡献代码等),如何促进他们更好地为生态系统服务?
3. 服务开源软件生态系统的工具
研究动机:
在过去,一般是一个公司的一个开发小组利用一个中心版本库来开发一个项目。自从分布式系统的诞生以及web2.0技术的兴起,现代软件开发过程中的协作、编码、部署、维护等模式发生了巨大改变,软件系统的规模、复杂程度也在不断增加。一个好的软件项目会逐渐成长成一个以它为中心,衍生出众多的子项目以及知识的软件生态系统,从而使得许多传统软件工程研究的问题变得局限,例如在一个以开发框架为核心的软件生态系统中,核心项目的开发需要时刻考虑其他子项目的需要。
2003年,Messerschmitt首次提出“软件生态系统(software ecosystem)”的概念,他给出的定义是,“一组有着相同共生关系的软件项目集合”。在今天基于网络分布式开发的背景下,现有的研究对于“software ecosystem”定义,说是一组在相同环境(相同社区、相同公司或者相同技术平台)下共同开发共同演化的项目集合,其本身还是强调在相同的环境下的项目的集合,但我们认为在如今开源世界里,软件生态系统的范围变得更加庞大,不仅仅局限在单一的社区或技术平台,很可能是跨社区的知识汇聚,例如Rails托管在Github上,但其在StackOverflow上同时拥有大量的相关的问答帖子。
放在开源世界里,如何合理的定义开源软件生态系统是一个十分挑战的问题。在开源软件生态系统中,如何识别不同类别的知识,这些知识如何传播等等,这些分析都有助于在一个全局的角度为核心项目的开发提供建议,促进整个生态系统的健康发展。(意义部分还需要进一步提炼)
研究目标:
基于开源软件的大规模数据,定义并构建开源软件生态系统,在此开源软件生态系统中,分析项目间知识汇聚的机理,利用这些机理设计机制并实现服务开源软件生态系统的可视化工具。
研究问题:
1. 开源生态系统的内涵和界定是什么?
(1) 开源生态系统是如何构成的?
基于大规模开源数据,如何构造开源生态系统?构成开源生态系统的元素有哪些?
(2) 开源生态系统中各元素的关联关系是怎样的?
大量优质的开源软件使得开发者们在开发自己的项目时候可以复用已有的组件和框架,这样的依赖促进了软件开发效率,但依赖的越多(依赖的代码越多、依赖的项目越多)也增加了项目本身的复杂程度,给开发者开发带来难度,所以我想研究一下几个问题:项目依赖的越多好还是越少好?项目的这种依赖随着开发进行是否发生改变?不同子项目对于核心项目的影响是否相同?
2. 开源生态系统中的知识汇聚是怎样的(代码贡献、需求)?
(1) 如何识别这些知识?
开源项目每天会产生大量的知识,核心项目如何识别和区分那些来自不同子项目的知识?这些知识的汇聚对于核心项目开发的影响是怎样?对于核心项目来说,哪些知识是开发者需要的。
(2) 如何加快这些知识的汇聚效率?(@-mention)
在这样复杂的生态系统里,加快各类知识的汇聚效率是十分重要的。例如,@-mention使得开发者可以更紧密的联系,促进交流。
3. 服务开源软件生态系统的的工具
现有的软件项目工具主要还是针对单一项目本身,缺少服务全局生态系统的工具。
(1) 开源生态系统的可视化工具
(2) 开源生态系统中各类知识汇聚的分析工具