生态系统(Ecosystem)原本是一个生物学术语,意思是由一些生命体相互依存、相互制约而形成的大系统,就像我们学生时代在生物学课堂上学到的那样。隐喻无处不在,人们把这个术语移植到了 IT 领域中来,比如我们常说的“软件生态系统”,实际上,这个问题涉及到所谓“巨型系统”、“复杂系统”、“异构系统”等等,那么——
什么是软件生态系统呢?
如何评估和构建软件生态系统呢?
如何评估软件生态系统的健康性呢?
软件生态系统的价值是什么?又是如何实现的呢?
......
1. 什么是软件生态系统
英国生态学家 Tansley于1935年首先提出有关“生态系统”的概念,任何自然环境中的生物有机体和非生物成分在一段时间内交互形成一个相对稳定的动态平衡状态,形成一个生态系统。生态系统( 自然生态系统) 就是在一定空间范围内,生物群落与非生物环境,通过能量流动、物质循环、信息传递而形成相互作用、相互依存的动态复合体。换言之,生态系统就是在一个空间内生物群落与非生物环境形成具有一定功能的整体。生态系统不仅在空间上是个地理单元,还是一个功能单元,既有能量、信息的传递又有物质和物种的动态过程。任何一个自然生态系统都是开放系统,都有输入和输出的过程以维持动态平衡。
实际上,研究者早就将生态系统的概念引入到了经济学领域,形成了商业生态系统的概念。所谓商业生态系统是指一群相互连结,共同创造价值与分享价值的企业。软件生态系统本质上是商业生态系统在软件产业中的特殊呈现。
2003年Messerchmitt 等人认为软件生态系统的研究包括7 个方面:过程与技术、定性分析、实证研究、分析模型、工具与表达方法、行业应用、技术报告(包括术语探讨、领域综述、在研项目报告、短文、领域介绍,等等)。接下来,不同的研究为软件生态系统提供了不同的定义。例如Bosch等人给出软件生态系统的定义,讨论其发展趋势,并概述采用软件生态系统方法的关键概念和意义。Lungu等人将软件生态系统视为在同一环境中共同开发和发展的软件项目的集合,目前,还有许多研究聚焦于特定的生态系统,例如Arm软件生态系统、Python软件生态系统等开源生态系统。
2016年,Manikas等人对2003至2014年之间涌现的软件生态系统定义进行了重新审视,将软件生态系统定义为“在公共的技术基础设施上软件产品与服务以及相关涉众者相互作用而形成的复杂系统”,强调软件生态系统中利益相关者采用数据共享、知识分享、软件产品及服务提供等方式为软件生态系统做贡献。
软件生态系统是指在一个共同的技术平台上,众多的参与者协同合作,最终形成大量的软件解决方案或服 务。软件生态系统目前是在软件平台上结合内部和外部参与者开发的组件来构建大型软件系统的有效方法。
软件生态系统改变了软件产业传统的集中式、层级结构的商业模式,强调了互利共生、资源共享的创 新发展理念,构建了一种崭新的互相协作、彼此促进的软件生产模式,构建了软件产品及服务的社会化生产方式.其蕴含的商业、技术和管理特征,吸引了软件工程、经济学、管理学、社会学等领域研究者的共同关注,也得到了IT界的普遍认同。
软件生态系统必定跨越多个组织的边界, 强调多个组织的相互协作, 这是与传统的软件产品和软件产品线开发方法的一个显著区别;其次 ,软件生态系统中各组织间的依赖关系是围绕生产或消费承载着相关知识的软件制品和服务展开的 ;第三,各个组织所遵循的商业模型决定了它们生产或消费知识的方式 ;第四 ,这些组织共享市场, 能够针对市场中用户需求的演化进行适应性调整 ,否则若软件生态系统中的软件制品和服务逐渐不再满足用户的需求,则其将逐渐老化乃至死亡。
2.软件生态系统的构成与分类
2.1软件生态系统的构成
为了界定软件生态系统内涵及其构成,可以使用元模型建模方式描述软件生态系统构成。
按照对软件生态系统的重要程度,将利益相关者扮演的角色细化为核心开发者、活跃开发者、外围开发者和用户。核心开发者类似于自然生态系统中的植物,他们利用环境提供的各类资源开发出对软件生态系统生存与发展起到关键作用的软件制品;活跃开发者类似于自然生态系统中的植食性动物,贡献新的软件制品、参加软件测试及运维工作;外围开发者,类似于自然生态系统中的猎食者,运用已有的软件制品编织形成面向终端用户的软件产品;用户是软件生态系统中的顶级猎食者,使用软件产品为其工作、生活服务,把软件体验、对软件生态系统的期望反馈给软件生态系统,推动软件生态系统不断发展。
软件生态系统具有技术特征、商业特征及社会网络特征,可以从技术视角、商业视角、社会网络视角对软件生态系统架构进行投影,形成软件生态系统的技术架构、商业架构和社会网络架构。软件生态系统架构不论从技术视角、商业视角和社会网络视角来看,都具有显著的等级结构。
2.2 软件生态系统的分类
软件生态系统种类繁多,从不同视角对软件生态系统进行解读,派生出不同的软件生态系统分类方法——
(1)按照商业诉求情况,把软件生态系统划分为商业软件生态系统、免费及开源软件生态系统。
(2)按照 软 件 部 署 环 境 差 异,将软件生态系统细化为服务器软件生态系统、桌面软件生态系统、嵌入式软件生态系统、云计算软件生态系统。
(3)根据软件在计算机系统中扮演角色不同,把软件生态系统划分为系统软件生态系统、支撑软件生态系统和应用软件生态系统。
(4)将软件生态系统和应用领域相结合,则产生行业应用软件生态系统,包括智能汽车软件生态系统、智慧农业软件生态系统、互联网教育软件生态系统、社交软件生态系统、智慧医疗软件生态系统、区块链应用软件生态系统等等.
3.软件生态系统的设计方法与分析框架
软件生态系统策略设计,以利益相关者的价值实现为导向,通过企业合作伙伴管理、资源流管理、能量流动导引、跨界管理等手段来实现管理策略设计及实施。具体地,有基于资源流分析的软件生态系统管理策略设计方法,有基于层次分析法的软件生态系统管理策略设计方法,还有人将供应链跨界管理理论引入到软件产业的商业生态构建过程之中,运用企业的跨界管理能力经营软件生态系统、打造软件产业商业生态。
3.1 SNA 模型
许多复杂的系统可以表示为复杂的网络,系统的组件及其相互作用分别表示为节点和链接。软件项目及其关系也可以表示为一个复杂的网络, 软件生态系统的结构由其技术依赖来定义。
社会网络分析方法(Social Network Analysis,SNA)源于社会学,是一种建立在图论基础上,通过点和线集 合实现的形式化方法,用点表示参与者、线表示相互关系。近年来随着大数据、数据可视化技术的发展,研究 人员在一般社会网络(General Social Networks,GSNs)的基础上,进一步丰富点、线的形式,赋予不同的 信息,构成形式多样的图模型。通常用点的半径表达规模(市值、流量、产品数量),用点的颜色表示组团、组群、占股关系等,点的形状来区分角色和特征,用点位置来表达结构特征;用线的方向、虚实、粗细等,来表示依赖或竞争关系等。
在软件生态系统的研究中,通常用 SNA 模型来表示生态系统中参与者之间的关系,参与者包括:开发者、公司、API、技术平台或协议等。
3.2 SSN 模型
SSN(Software Supply Networks)模型是 Boucharas等人在 2009 年提出的,是目前软件生态系统研究中 使用最为广泛的模型之一。模型中的研究对象通常为ISV(独立软件厂商/公司)、SUP(软件产品或服务的供 应商)、C(客户)3 种角色,以及部分非必要元素,如:客户的客户(Customer’s Customer)、贸易关系(Trade Rela⁃tionship)、网关(Gateway)等。
3.3 知识链模型
在软件生态系统中开发者、项目、用户可以通过知识建立联系。开发者基于基础知识,在技术合作网络的支撑下参与项目,将知识构建为实体化的软件产品,用户在使用软件的过程中形成新的需求、认识和观点,随着新知识的聚集和日益成熟再影响开发者,组成一个循环的闭环过程。与 SSN 模型类似,知识链模型通常也区分为三个层次。
3.4 负熵流模型
熵理论对于整个自然科学来说是第一法则。—— 爱因斯坦
熵是系统工程的核心概念,当系统内部各要素之间的协调发生障碍时,或者由于环境对系统的不可控输入达到一定程度时,系统就很难继续围绕目标进行控制,从而在功能上表现出某种程度的紊乱,表现出有序性减弱,无序性增加,系统的这种状态,称为系统的熵值增加效应。
薛定谔在《生命是什么》一书中提出“负熵”概念,认为“生命需要通过不断抵消其生活中产生的正熵,使自己维持在一个稳定而低的熵水平上”“生命以负熵为生”,并将生命活力称为负熵。“负熵”同样也适用于社会系统,认为每一个社会系统都需要从环境中获取负熵,维持运行、抵消熵增、保持低熵状态,熵的变化对社会系统的生存、发展有着重要影响。
软件生态子系统是在不同社会人群中建立相互联系的特定社会系统,是一种是在公共技术的基础上,将能量(人力、物力、财力)以及特定的知识,转化为某个组织或行业“负熵”(秩序、效率、降低不确定性、 降低风险等)的复杂系统。
在自然生态系统的研究中,通常依托食物链或食物网模型,研究能量、营养的流动,分析生物之间的关系和生态系统的发展趋势。对软件生态系统而言,可以围绕“软件的负熵”来研究软件系统与环境之间、在软件系统之间的关系。为了简化软件生态系统模型,简化软件与软件、软件与环境之间的能流交换过程,将系统之间通过软件实施产生的熵差称为:软件负熵流(Software Negative Entropy Flow)。常见的软件负熵流关系如下:
采用合适的软件生态系统模型,对于复杂系统软件的研究至关重要,选择、构建和改良的软件所处的生 态环境,将成为未来软件实施成败的关键环节,需要从软件负熵的角度,对软件生态系统的耗散结构、平衡状态、竞合关系、生命周期等问题进行研究,才能形成完整的研究框架。
5 软件生态系统的质量与健康性评估
5.1 质量评估
软件过程质量对软件生态系统健康具有重要作用,关注软件构件研发活动对生态系统健康影响,有基于有向图分析的软件生态系统健康评价方法等等。
软件生态系统最重要的质量就是可持续性(Sustainability),即意味着其能够持续提供用户所需的价值, 能够维持一定规模的用户和第三方开发者, 保证一定的市场占有率。借鉴软件质量模型的设计经验 ,可以将软件生态系统的质量模型组织为一个层次结构,如下图所示:
软件生态系统的商业质量模型主要考察软件生态系统中的产品与主流商业模型的一致性、软件生态系统的规模和多样性、市场占有率等,如产品升级计划是否适应市场变化,最大限度地提高用户的粘度。
软件生态系统的产品质量模型则考察软件生态系统中各类软件解决方案的质量,除单个软件产品所必须具备的性能、安全、易用性、可靠性等质量属性之外,软件解决方案还须具有高度的可组装性和开放性,不但允许用户灵活地选择不同的软件解决方案组合扩展核心软件平台实现其个性化的需求,也为第三方开发者进一步扩展各个解决方案发展子生态系统奠定基础。
软件生态系统的协同质量模型主要考察软件生态系统在支持多个开发团体协作方面的能力,如开发团体之间协同的灵活性、协同过程的成熟度、协同中是否支持民主决策、协同中出现问题的反馈周期、以及鉴定第三方开发者所发布软件解决方案的认证服务和发布管理服务等等。
5.2 健康性评估
生态系统的健康始终是一个相对性的概念,生态系统是否活跃、生态系统的各个部分是否完善、外界对生态系统的影响、生态系统在遇到压力后能否及时复原、生态系统能否对外界提供对应的职能都是衡量生态系统是否健康的标准。
在软件生态系统健康性方面,Slinger等人在2014年提出了软件生态系统健康性可操作性的架构(Open Source Ecosystem Health Operationalization,即OSEHO),这为软件生态系统健康性的衡量奠定了坚实的基础。
6. 软件生态系统中的资源定位框架
针对软件生态系统中软件资源多、软件资源差异大、管理复杂等问题,可以采用可扩展的本体描述方法,对软件资源进行描述,从而通过本体信息精确定位软件资源,采用统一资源访问框架屏蔽不同软件之间的差异,从而保证能够精确、快速地获取软件资源。
针对不同团队管理软件方式不同、存储位置不同的现状,以基于统一访问引擎的软件检索框架为基础,借鉴数据统一访问中间件思想,对不同资源库进行统一封装,向上层应用提供统一访问接口,在内部则调用各软件资源自己的访问程序访问不同数据源,框架图如下:
其中,软件资源本体模型建模过程是: 首先通过建立统一元数据模型,实现对软件描述元数据信息统一可扩 展的表达; 然后对语义映射中的相关概念建模,并给出形式化定义。通过建立软件资源元数据与知识本体之间的映射获得语义内容元数据,从而实现对资源语义信息的描述和表达,用于屏蔽各软件资源的异构性。
语义映射模型作为软件资源元数据与知识本体的纽带,在语义映射管理中处于核心地位,映射模型设计的好坏直接影响系统的处理及语义表示能力。
7. 软件生态系统的价值
7.1 从一棵树的生态价值谈起
印度加尔各答农业大学对一棵树的生态价值进行了计算。一棵50年树龄的树,以累计计算:
产生氧气的价值约31200美元;
吸收有毒气体、防止大气污染价值约62500美元;
增加土壤肥力价值约31200美元;
涵养水源价值37500美元;
为鸟类及其他动物提供繁衍场所价值31250美元;
产生蛋白质价值2500美元。
除去花、果实和木材价值,创造的价值约总计196000美元,超出了一般人的想象。
7.2 Linux 生态系统的价值
在2007年2月“《LinuxWorld》开放(系统)解决方案峰会”在美国纽约市召开,在会上IDC 认为,2006 年的‘Linux 市场生态系统’(包括服务器及软件)的价值应该限定(Pegged)在180亿美元,而到 2010 年,将要达到400亿美元以上。IDC 高级分析师 Matt Healey 指出,Linux系统的实际增长并不在于Linux 本身;“Linux 生态系统”的潜在增长机会在于混合的、异构的现实环境。他指出:“对于那些只想做Linux 业务(Just do Linux)的供应商而言,我看不到有许多(Linux)服务机会。”他说:“Linux 的服务收入多半来自把Linux集成到整个基础架构中去,而不是单靠纯粹玩 Linux(As a Linux pure play)”。
7.3 软件生态系统中的价值创造
软件生态系统内所有利益相关者都是价值共创进程的潜在主体,通过彼此间的开放协作充分整合并盘活有限的生产要素和创新资源,满足各自价值获取目标和生态系统的整体目标。
系统动力学是系统论的一个重要构成部分,它和复杂系统中随时间推移而产生的行为有关,并会同时考虑反馈回路和时滞。影响软件生态系统价值的参数分为服务种类、QoS、成本和用户基数等,可以将利益相关者分为应用程序用户、服务开发人员以及平台提供商,利益相关者价值分配的系统动力学模型如下:
价值交换是价值实现的基础,软件生态系统的价值实现可以基于技术接受理论和网络外部效应理论等,采用协方差分析来评估服务价值的达成状况。考虑服务QoS、服务开发者、软件服务平台、用户、服务价格等因素对系统价值实现的影响,可以构造不同利益相关者的价值创造模型,包括平台所有者的价值、服务开发者的价值以及用户的价值。基于融合目标模型和e3Value的价值分析框架,使用供应链依赖分析方法以及现金流分析方法来评判生态系统价值的实行状况。基于用户感知价值的动态定价模型,通过捕捉服务市场中的供求关系,并基于动态定价模型来设计利润最大化的方案,优化服务提供商的价值。
8. 感知软件生态系统
8.1 人工智能开源生态
人工智能开源软件生态主要由“三层四面”构成,其中三层指内层七要素、中层四要素、外层上下游等三个层次,四面指关键要素、外部约束、软件价值、产业链四个方面。依托良好的公共服务,所有相关方都能在这种生态发展下创造自身价值,并且将自身价值正面反馈到生态,从而保障生态的良性发展,共同构建人工智能开源软件生态的良性循环。人工智能开源软件发展生态图如下图所示。
从生态结构的层面来看,人工智能开源软件发展生态图由内向外分为三个层次。首先,技术、人才、标准、社区、资金、知识产权、安全是围绕人工智能开源软件发展的七大关键要素,为开源软件提供了发展的契机和空间 ;其次,开源软件的发展必须是在相关约束机制下进行的,不能违背法律法规、政策导向、开源文化及公共服务 ;最后,在上述要素和约束机制的共同作用下,人工智能开源软件不仅创造公共价值,也带来了商业的机遇和经济效益,同时还对人工智能涉及到的上下游产业链带来深远影响。
在人工智能开源软件生态的发展中,软件价值分析是立足于上述关键要素和约束条件中关键环节对软件的价值进行合理评测的一种分析方式。人工智能开源软件价值分为两部分 :公共价值和商业价值。公共价值能加速人工智能技术的创新和发展,保障可信目标和信息安全的改进,降低技术门槛和推动应用产业升级,促进全社会智能化水平的全面提升 ;商业价值能降低开发成本和促进创新创业企业发展,促进大企业全球市场策略布局和竞争力提升,催生基于人工智能开源软件的新业态和模式,带动传统企业和软件企业的转型和升级。
8.2 Github 上的软件生态系统演化
Github软件生态系统中具有交叉引用关系的项目所形成的网络.每个节点代表一个项目,2个节点之间的一条边意味着它们有交叉引用关系。节点的颜色根据其度数从蓝色到紫色再到红色依次加深。同样的,根据其权重不断加深。此外,在Github生态系统内交织的网络非常复杂,而其外部被许多小型的网络包围,这表明许多项目仅与某些特定项目具有交叉引用的关系,大规模的生态系统与小型生态系统共存。
图中是2015-01-01 到 2018-06-30 的数据集,按照每半年进行划分,最终获得7个阶段的数据来进行交叉引用关系的挖掘.然而,这一操作会带来数据稀疏问题,可能导致生态系统的急剧变化。这是因为在每6个月的时间内发现的交叉引用关系在数据分割之后是有限的.在每个时段运行生态系统发现算法,例如 Louvain方法,旨在将网络划分为密集连接的节点社区,并不断优化网络的模块化。它首先通过寻找小型社区来优化本地模块化,然后聚合每个小社区中的节点并使用它们来构建新的网络。然后,不断迭代这两个步骤,直到模块化的最大化。Louvain方法在模块化实现和计算时间方面优于其他许多社区发现方法。
在软件生态系统的动态演化过程中可能会发生不同的演化行为,可以分为5种演化事件类型,即形成、生存、消亡、合并和分裂,其中合并事件可视为生存事件的特例,而分裂事件可视为消亡事件的特例。
Github 中软件生态系统的大小可以由其节点数和连边数衡量,可以用5个特征来表征生态系统的结构,即平均度、簇系数、节点度中心系数、节点距离中心系数和节点介数中心系数。软件生态系统的活跃度可以通过Pull request 和 Release 的数量来确定。
从2015-01-01 到 2018-06-30 的Github数据集可以可以看出,Go,Python和Javascript是Github中软件生态系统中最受欢迎的3种语言,容器技术一直受欢迎,以至于它在所有时期都能存活下来;微软的Vscode生态系统是一种流行的开发工具;也可以看出与人工智能相关的生态系统正在快速增长。2015到2018年期间每个阶段的顶级生态系统规模急剧增加,这也表明许多生态系统在生态系统网络中的各个项目之间有良好的交互关系。在Github中,最常见的进化事件是形成和消亡,在每个演化阶段内,平均的形成和消亡事件百分比可达到80%。项目间具有高技术依赖的生态系统更有可能存活下来,而只围绕某些核心项目形成的生态系统更趋向于消亡。
8.3 区块链软件生态系统的演化
区块链产业是依靠创新技术和数字化赋能衍生的新产业,而创新技术的应用和场景化布局仅靠单一企业的发展难以有效落实,必须要通过系统内各经济参与者彼此间的资源共享和业务合作加以推动。各价值主体间的价值共创是推动区块链产业生态系统演化发展的核心动力。
如上图所示,价值共创视角下区块链产业生态系统的共生环境包括政策环境、经济环境以及社会文化环境等,良好的共生环境能够通过合理的内外部治理和监管机制正确引导区块链产业的发展方向,避免参与主体间的机会主义和不正当竞争行为,加快促进区块链应用落地,统筹协调区块链产业生态系统的整体发展,最终实现价值共创。
区块链产业生态系统价值主体间共生关系呈现出从独立共存、竞争、寄生、偏利共生向互利共生的转化,随着系统内成员间竞合关系和资源利用情况的改变,在不同的共生系数作用下,各类价值主体的最大规模和增长率不断发生变化。在互利共生模式下,区块链产业生态系统发展状态达到最佳,此时 3 类价值主体之间的共生作用系数均为正数。3 类价值主体彼此从合作中受益,价值主体的最终稳定状态均大于各自独立发展时的最大规模。因此,系统成员应致力向互利共生模式发展演进。
9. 一句话小结
软件生态系统中的关键特性、需求工程、架构建模、模型驱动开发、能量机制、信息量抽取与建模、生态网络建模与分析、缺陷累积效应等研究仍方兴未艾,软件生态系统的演化、质量保证、工具支持以及软件生态系统新范型等方面的研究有待深入,仍需各方面关注和努力。
【参考资料】
Manikas K, Hansen K M,Software ecosystem- A systemmatic literature review[J], Journal of Systems and software. 2013, 86(5)
Boshch J, From software product line to software ecosystems[C] // Proc of the 13th Int Software Product Line Conf, Pittsburgh: CMU, 2009:111-119
张慧, 刘婷, 周泯非. 价值共创视角下区块链产业生态系统的共生演化研究:基于Logistic的实证分析[J]. 科技管理研究, 2022, 42(12):8.
刘积仁. 当软件迈入生态时代之际[J]. 经理人, 2021(2):4.
黄鹏, 李宏宽. 中国开源软件生态构建的风险及对策[J]. 科技导报, 2021.
董瑞志, 李必信, 王璐璐, et al. 软件生态系统研究综述[J]. 计算机学报, 2020, 43(2):22.
齐晴, 曹健, 刘妍岑. GitHub中软件生态系统的演化[J]. 计算机研究与发展, 2020, 57(3):12.
韩雨泓, 祝鹏程. 软件生态系统的负熵流模型[J]. 现代计算机, 2020(13):7.
李华莹, 刘丽, 刘怡静. 面向软件生态的资源定位技术[J]. 计算机与现代化, 2020(3):5.
么红帅. 价值驱动的软件服务生态系统演化研究[D]. 天津大学,2019.
张明英, 宋俊典, 单曙兵,等. 中国人工智能开源软件生态探析[J]. 信息技术与标准化, 2018(10):6.
尹刚, 王涛, 刘冰珣,等. 面向开源生态的软件数据挖掘技术研究综述[J]. 软件学报, 2018, 29(8):14.
金芝, 周明辉, 张宇霞. 开源软件与开源软件生态:现状与趋势[J]. 科技导报, 2016, 34(14):7.
韩欢, 冯志勇, 陈世展. 生态化复杂软件系统集成研究综述[J]. 科技通报, 2016, 32(8):5.
李淼. 面向用户体验的产品生态系统设计理论与方法研究[D]. 上海交通大学, 2016.
张得光, 李兵, 何鹏,等. 基于软件生态系统的开源社区特性研究[J]. 计算机工程, 2015, 41(011):106-113.
孙连山, 李健. 软件生态系统初探:概念解析及生命周期模型[J]. 陕西科技大学学报:自然科学版, 2011, 29(3):3.
孙连山, 李健. 软件生态系统的角色模型和质量模型[J]. 陕西科技大学学报:自然科学版, 2011, 29(2):4.
佚名. Linux生态系统值多少钱[J]. 信息系统工程, 2007(3):1.
陆楠. 设计新生态:软件主导,硬件跟从[J]. 电子设计技术 EDN CHINA, 2007, 14(4):1.