- 相关推荐
自由软件开发的模块化理论解释与启示
[摘要] 本文以GNU/Linux为例讨论了源代码的内部结构在自由软件开发中所起的重要作用。为此,我们考虑了源代码的模块化属性。源代码的模块化将直接影响开发者是否参与对自由软件的开发。基于模块化的自由软件开发不仅实现了劳动的分工,同时也实现了劳动价值的分割,在自由软件的开发过程中较好地解决了搭便车问题。同时,模块化理论对我国发展软件产业也有一定的借鉴作用一、引言
在计算机工业的初期,软件是硬件的附属品。企业只是卖硬件,随系统赠送软件。在这_时期,软件的设计思想,新的算法和软件的源代码在专家、学者和公司研究人员之间相互交流,促进了软件的迅速发展。但是,企业很快认识到软件的价值,对软件实施了版权控制,并限制了源代码的发布。同时,软件的开发方式也发生了变化,变成以商业企业为主体的封闭的开发模式。Unix系统是其中最典型的例子。在Unix发展的早期,源代码是可以自由拷贝的,每个人都可以借鉴他人的思想,以完善程序。但是,随着软件产业的发展,1979年AT&T公司对具有独立知识产权的操作系统—— UNIX申请了专利,软件被贴上了版权标识,Unix也被强制实施版权控制,阻止了程序员之间的交流与合作,一些优秀的程序员也相继离开Bell实验室,去各个公司任职。商业企业对软件的知识产权保护成为其他厂商进入相关市场的“壁垒”,在没有替代产品(特别是系统软件)的情况下就形成了事实上的垄断。1989年,Ritchard Stallman在麻省理工学院(MIT)的支持下,在计算机界掀起了﹁场数字改革运动——自由软件运动。从此,自由软件得到了蓬勃的发展,成为软件开发者们非常关注的热点。
自由软件(Free Software)是指允许任何人使用、复制、修改、分发(包括再分发修改过的版本),而且提供全部源代码的软件。自由软件的源代码可以免费获得,是一种典型私人提供公共物品的经济现象。成千上万的“志愿者”参与了诸如Linux操作系统、Apache网页服务器、Sendmaill邮件服务器等大型复杂软件的开发,并且这些软件的质量(例如,性能和稳定性)要优于一般的商业软件。显然,传统经济学难以对自由软件的成因做出有说服力的解释。传统的经济学理论认为,在产权不清晰的情况下,私人代理面临着严重的“搭便车”及外部性问题,对于信息产品往往会出现严重的投资不足现象;私人代理参与公共物品的开发是无效率的(Arrow,1962),并且自由软件的开发者仅得到其所开发软件的私人收益,并没有从其他消费者那里得到任何补偿。由于得到的仅仅是私人收益,按照传统经济学的逻辑,自由软件开发者所付出的努力会远小于社会的最优数量。另外,商业企业所开发的标准化软件产品能够累积不同消费者的需求,这样就可以弥补大量的开发成本;相对于自由软件开发者来说,商业企业倾向于做更多的投资,开发更好的产品,满足更多消费者的不同需求。
关于开发者参与自由软件开发的动机问题的研究已引起经济学家们广泛的关注。Lerner等从劳动经济学和产业组织理论的角度展开了分析,认为自由软件开发的动机主要是出于对自身的职业发展以及得到公众的赞誉等方面的考虑(Lerner,Tirole,2000)。Harhoff与Henkel等系统分析了开发者加人自由软件开发的激励问题,主要包括:①诱发商业企业(比如,软件开发商)持续不断地改进。自由软件的开发者会把自己的创新之处免费提供给商业企业,从而商业企业可以对此做出改进并投人市场。②互惠与声誉效应。自由软件开发者向他人展示自己的创新之处,这就形成了一种互惠环境,其他的开发者也会倾向于发布自己的创新之处。对于最初发布创新的人,则会得到公众的赞誉。③较弱的竞争条件。竞争在自由软件开发者之间是相对比较弱的,向他人公开自己的源代码并不会对自己造成很大的损害(Harhoff,Henkel et al.,2000)。关于此问题更多的讨论可参考达尔构建的一个关于管理自由软件开发项目的理性代理人行为模型(Dalle,Jullien,2001)。自由软件开发模式一个很重要的优势就是拥有一个强大的人才库。成千上万的开发者可以参与这个项目的开发。受雇于一家商业企业的开发者数量毕竟是有限的。更重要的是,自由软件顷月对于需要编写什么样的代码具有更好的知识优势。在商业企业中,开发者并不能意识到用户所面临的所有可能的参数(Johnson,2001)。关于自由软件开发的其他问题也引起了各个学科领域学者极大的兴趣。主要包括:分析自由软件和商业软件的竞争关系问题(Johnson,2001;Dalle,Jullien,2001;Khalak,2000),自由软件的虚拟沟通机制(Neus,2001)以及把自由软件作为一种复杂的公共物品。
在经济学与管理学的理论研究文献中,模
块化被看做是企业生产制造(Ulrich,1995;Schilling, 2000)、组织设计(Baldwin,Clark,2000)的一种新的范例。软件产品可以被看做是由一系列具有特定功能的组件组成,作为一个完整的系统也可以被分解成一系列功能模块,这些模块之间的相互作用就形成了系统的所有功能(Ulrich,1995;Sanchez,Mahoney,1996)。所谓模块是指可组成系统的、具有某种确定独立功能的半自律性的子系统,可以通过标准的界面和其他同样的子系统按照一定的规则相互联系而构成的更加复杂的系统(青木昌彦,2002)。每个模块的研发和改进都独立于其他模块的研发和改进,每个模块所特有的信息处理过程都被包含在模块的内部,如同一个“黑箱”,但是有一个或数个通用的标准界面与系统或其他模块相互连接。国内的学者朱瑞博、陈向东、周鹏等人分别就价值模块的整合、模块化在知识管理、组织分析中的应用展开了讨论(朱瑞博,2003,2004;陈向东,2004;周鹏,2004)。朱瑞博(2003)认为价值模块是产业融合的载体,模块化、产业融合不仅使生产结构基础改变了,竞争的基础也发生了改变。青木昌彦(2002)则认为模块化是新产业结构的本质。
为什么自由软件在某些市场上会表现得如此出色呢?在以往探讨自由软件的文献当中,人们并没有就自由软件的内部结构进行讨论。本文仅从自由软件源代码的内部结构这个角度来探讨这一现象。自由软件的开发从其内部结构来看,往往具有模块化的特性。在产品的模块化设计过程中,每个模块由不同的设计者单独设计完成,实现了劳动的分工。同时,每个模块按照一定的标准界面与系统中的其他模块统一起来,其单独的研发与改进并不影响系统中其他模块的运行,从这个意义上来讲,模块化也实现了产品开发过程中劳动价值的分割。本文首先从一个简单的博弈模型开始,结合GNU/Linux开发的历程,分析了自由软件源代码内部结构的模块化属性在软件开发中所起的重要作用。在此基础上探讨了模块化理论在其他相关产业中的应用。
二、自由软件开发的模块化理论解释
对于某一个特定的理性开发者而言,在其做出是否参与某个自由软件开发的决策时,主要考虑两方面的问题:一是参与自由软件开发的成本是什么?二是具体的收益是什么?参与自由软件开发对于开发者来说成本即为他们所花费时间的机会成本。从开发者的收益上来讲,参与自由软件开发,可以从多方面得到非货币的补偿。例如,系统管理员可以通过解决所使用开放源代码软件的 BUG,从而提高整个网络的绩效(Lerner,Tirole,2000);开发者可以通过自由软件的开发,得到一个很好的声誉,从而为个人将来的职业发展奠定基础。
自由软件代码的一个基本特征是具有非竞争性。这就意味着一个开发者在使用代码的时候并不影响其他的开发者或者其他群体来使用这些代码。任何一个局中人所做的努力对其他局中人来讲都具有正的外部性,这种外部性并不由局中人的主观愿望所决定。这是一种典型的公共物品的私人提供。约翰逊曾经把这种博弈形式运用到自由软件的开发过程中,分析了福利、努力程度以及成本对开发者数量的影响(Johnson,2001)。在约翰逊分析的基础上,下文首先从一个简单的博弈形式出发来分析模块化特性在自由软件开发中所起的重要作用。
1.一个简单的理论模型
为了分析模块化在自由软件开发过程中所起的重要作用,我们首先考虑一种简单的情形,即自由软件内部结构及其开发过程中不存在模块化现象。任何一个开发者都需要一个具有特定功能的软件代码,任何一个开发者都可以选择参与该软件的开发或者不参与。在这种情况下,所需要开发的源代码是不可分割的,也就是整个系统的价值并没有被分割。
代码的开发对任何一个开发者的价值均为ν,成本为c.也就是说当ν>c的时候,任何一个开发者都有进行源代码开发的动机。由于自由软件的特性,任何一位开发者只要完成了代码的开发,就会选择把
代码向其他人公开,但是并不会影响自己的价值。基于上述的表述,我们可以得出:任何一方都没有权力阻止另外一方开发或者使用源代码:当一方已经开发好源代码之后会自动地向另外一方公开。如果只有两个开发者,其博弈矩阵表述如图1.
对于参与博弈中的两个开发者而言,他们可以自由选择是否参与该系统的开发。如果选择参与开发,则其收益为ν-c;如果选择搭便车,则其收益为ν。当然,如果双方都选择不开发这样的系统,对于一个开发者来讲其收益都为0.我们可以非常轻松地得到这个博弈矩阵具有两个纯策略下的纳什均衡:如果一个开发者选择开发,另外一个开发者就选择不开发(“搭便车”)。从社会效率上来讲,这两个均衡都是有效的,处于该均衡下,集体收益均大于其他情况下的集体收益。但同时这样的均衡却是不公平的,存在严重的“搭便车”现象,选择“搭便车”可得的。的收益将明显大于参与自由软件开发者的收益(ν-c)。按照传统的经济学理论,像这种公共物品的私人提供现象必然会导致公共物品的供给不足或者过度使用现象。这与像Linux这样的自由软件蓬勃发展的情形不符。接下来我们将从自由软件源代码的内部结构出发来讨论这种现象。
2.理论模型中加入模块化结构
在自由软件的模块化开发过程中,把一个源代码的结构分割成一个元系统和一系列的模块。元系统指的是一个能够保持系统运转的最小的系统。模块是一个较大系统的独特的部件,它能够由设计者独立设计出来,同时又可以作为一个整体在系统中运转。把一个大系统切割成互相独立的不同的小系统,可以使一些并不是经常见面的开发者减少必要的交流次数。另外,一个旧版本的模块可以被新版的模块所替换,同时却又不影响整个系统的运转。这样,在新模块中所增加的功能就可以及时在现存的系统中体现出来,同时也不需要更改系统中的其他模块。
在传统的软件开发过程中,源代码是不可以分割的(即软件开发过程中有时候也会存在劳动的分工,但是却没有实现劳动价值的分割)。代码内部所隐含的结构形式并不具有模块化的特征。在模块化的自由软件开发过程中,已经存在的最小系统(元系统或者内核)具有模块化特性,在这种情况下任何一个模块都可以独立地进行开发。由于初始的内核已经存在,由于一个模块的失败并不会对其他模块的价值造成直接的影响。因此,在这种情况下,不仅劳动得到了分工,每个开发者创造的价值也实现了分割。
为了表述的需要,我们对自由软件的模块化开发过程做如下的假设:①由于像Linux这样的自由软件开发过程中,元系统(也就是内核)已经存在。但是只有元系统的软件却没有任何的价值,就像有了操作系统而没有应用程序一样,为了方便起见,在分析过程中我们假设元系统的价值和成本均为0;②整个系统由两部分组成:1个元系统(即内核)和n个模块,在整个源代码的开发过程中有 n个开发者(其中有j个开发者参与了系统的开发,j≤n);③系统的价值和成本在所有的模块中平均分配,即每个模块的价值为其成本为也就是说每开发一个模块,系统增加的价值为增加的成本为④在此过程中,任何一个开发者开发的模块都会与其他人共享。
对于某一个软件开发者i来说,如果选择参与自由软件的开发,其净收益为
(1)
如果选择不参与自由软件的开发,其净收益为
(2)
因为v>c,显然有Ri1>Ri2.即在基于模块化的自由软件开发过程中,一个理性的开发者会选择参与自由软件的开发。这样就较好地解决了“搭便车”的问题。
出于问题的简化,我们只考虑在自由软件的开发过程中只有2个开发者、2个模块的情形。对于每个开发者而言,可以选择参与开发或者不开发模块。如果某一个开发选择参与开发模块,其同样也可以选择开发模块A或者开发模块B.基于以上的假设,该博弈矩阵的表述如图2.
在该博弈中,由于只有2个开发者、2个模块,所有任何一个模块的价值为0.5ν,参与开发任何一个模块的成本为0.5c.两个开发者参与开发相同的模块,其得到的收益均为0.5(ν-C),如果两个开发者选择开发不同的模块,其得到的收益均为ν-0.5c.如果其中一个选择了搭便车,其得到的收益均为0.5ν(因为,此时整个系统的价值只有0.5ν)。
如图2所示,该博弈也同样存在两个纯策略下的纳什均衡:两个开发者同时都会参与自由软件的开发,但是他们会开发不同的模块。也就是说,如果一个开发者选择开发模块A,另一个开发者则会选择开发模块B.由此可见,基于模块化的自由软件开发中,在追求效率的同时也体现了公平。这是非模块化的软件开发所不能达到的。
通过对模块化与非模块化自由软件开发过程对开发者与搭便车者收益的比较(如图3),可以得到:①对于“搭便车”者而言,在模块化结构的自由软件开发中收益明显减少。从ν减少到0.5v②对开发者而言,在模块化结构的自由软件开发中收益明显增加。从ν-c增加到
ν-0.5c.在模块化结构的自由软件开发过程中,参与开发者的收益要明显高于“搭便车”者的收益(由于v>c,故有v-0.5c>0.5v),而在非模块化结构的自由软件开发过程中参与开发者的收益要明显低于“搭便车”者的收益 (ν-0.5c
三、CNU/Linux案例分析与应用
在Ritchard Stallman发动的自由软件运动中,他宣称没有任何世俗的力量可以强加在人类与 CPU之间,垄断人类通向CPU之路,将其转化为巨大的经济强权。根据原有的规则:开发软件厂商拥有源代码的专有权,他们牢牢控制了源代码,只有他们才有特权访问源代码;用户和其他程序员无法查看、改动和完善,使用户无法真正融人计算机环境之中,并且立下禁令:用户之间不得相互拷贝,拷贝就是盗版。Ritchard Stallman要开发出一套完整的操作系统,不但开放源代码,而且鼓励用户之间相互拷贝。这就导致了自由软件基金会(Free Software Foundation,FSF)的建立和GNU项目的产生。GNU组织向世人传播Ritchard Stallman的思想,认为自由软件作为一种思维艺术,应该是全人类的宝贵财富,不应为任何人所私有。Stallman曾幽默地称“GNU is Not Unix”(GNU不是 Unix),就是说,GNU组织和各种版权专有组织不同,它的版权所保护的是_种共享与合作的精神,允许任何人使用、复制、修改、分发(包括再分发修改过的版本),而且提供全部源代码的软件。
自由软件是典型的网络时代新经济的模式,是由成千上万个程序员在工作之余开发完成的。某个程序员的日常工作并不一定符合自己的兴趣和爱好,在开发自由软件的过程中,他却可以获得巨大的成就感和荣誉感,这种动力并非是用金钱可以买到的。Internet的普及,为自由软件的发展提供了巨大的便利。分布在世界各地的程序员,可以利用Internet彼此交流思想,完成﹁个软件项目的开发。当然,如果你愿意,也可以加人到他们之中,为自由软件的发展做出自己的贡献。自由软件的开发模式也因此和传统的软件行业截然不同。他是完全开放、共同协作的开发模式。由于源代码是公开的,每个人都可以修改程序,如果某个修改为大家所认可,那么它就可以逐渐发展壮大。反之,如果某个修改意见无法获得大多数人的肯定,那么它就会逐渐消失。且每一个使用自由软件的人,都是用户和开发者,他可以修改程序,可以测试程序,也可以对程序的功能提出自己的意见。各种观点之间根据优胜劣汰的法则公平竞争,如果你获得了大多数人的支持,那么你就可以获得更好的发展。
在自由软件发展的道路上,最著名的例子要数Linux操作系统。Linux操作系统不管是在源代码的结构上,还是开发水平上都要比原先的操作系统(比如UNIX)更加成熟。从Linux操作系统源代码的结构上看,它是模块化的,并且是可升级的(Stallman,1999)。高度模块化的源代码结构给软件开发者和使用者均带来了极大的好处。开发者可以对具有某种特定功能的模块进行独立开发而不需要花时间去协调与其他模块之间的关系。并且模块化开发不仅允许模块之间的水平开发,而且可以通过对类似模块之间的创新和竞争(开发新的模块或者对原有的模块进行改进)充分改善系统的功能(Badwin,Clark,2000)。另外,作为最终的用户来说,在安装系统的时候可以就个人的需求与偏好选择适合自己的模块。
模块化的代码结构是由松散的组件构成的,是对一个系统完全意义上的分割,而不像完全集成的代码,各个组件之间存在很强的依赖关系,并不是完全通过界面来交换信息。Linus Torvalds是其中的一名主要的开发者,其主要任务是开发Linux操作系统的内核,其他所有在GNU宣言下开发的自由软件都可以通过这个内核集成起来。自从Linux内核1991年对外公布后,大量“志愿者”开发的自由软件都可以通过这个内核(公共界面)进行信息交流。Linux内核规定了与各个模块之间进行数据传输的协议,任何基于这个内核的自由软件模块都必须遵循这些设计规则。这些开发者把精力放在诸如Apache网页服务器、Sendmaill邮件服务器、MySQL数据库系统等应用软件的开发上。同时,Linux等操作系统也对许多企业的竞争战略造成了重大的影响。在因特网有近60%的网页服务器采用了Apache;使用Linux操作系统的用户也超过了3000万并且最近几年这个数量也在快速的增长。电子邮件服务器Sendmaill、数据库系统MySQL也应用在大量的服务器上。在前几年风靡一时的微软垄断案中,微软公司也把Linux操作系统等替代品的存在作为其不具有市场垄断性的证据之一。
模块化是复杂系统的一个共同特征,这是各个不同学科的学者关注模块化理论的关键所在。模块化很多产生在高科技产业中,比如电脑产业就是一个典型的例子。一台个人电脑由主板、显示器、驱动器、应用软件等组成,每个部分都自成一体而又相互紧密联系。公司1964年推出的最早的模块型电脑——360系统。在那之前,各主机制造商的各机型都有独特的操作系统、处理器、周边设备、应用软件等。每当厂商进行技术革新推出新的电脑系统,都需要开发相应的软件和零部件。终端用户在更换新的电脑系统时,需要重新改写原来的程序。为此,很多顾客对购买或租赁表现出消极的态度。360系统的设计者在设计过程中采用了模块化原则,把处理器和周边设备的设计信息分成“看得见”与“看不见”两大类(Badwin,Clark,2000),构建了不同装置的模块互相交流信息的设计规则。散布于全世界的几十个设计队伍必须完全服从这些规则,各队伍对模块里“隐藏起来”的要素,即不影响其他模块的要素具有完全的处理权。驱动器设计队伍为了保证模块能够正确发挥作用,必须遵守数据传输的技术规格,硬件形状尺寸规格等个人电脑的总体要求。然而除此之外,每个成员可以采用自己认为最合适的方法来设计驱动器系统。他们所做的判断和其他模块的设计者无关,也没有必要和整个电脑系统的设计者和设计规则的决策者商量。其他竞争企业的驱动器设计队伍,只要遵守明确的设计规则,也可以尝试运用其他工艺方法来开发独创性的驱动器。IBM引进这一方法后。使新系统(通过追加“模拟装置”模块)与现存的软件之间有了兼容性,结果在该公司与客户
的交易以及资金方面都获得了巨大的成功。
模块化的趋势不仅体现在生产制造领域,而且体现在各种服务领域,特别是过程较容易分解的金融业。金融业的一个业务如证券组合管理包括了资产选择、交易执行、产权转让、全权委托服务等内容。每个部分都可以很简单的分开,交给不同的金融机构进行连贯操作,从而金融业者就不必对金融服务的全部过程负责。金融市场构建模块类衍生产品是最为典型的模块金融创新产品,通过远期合约、期货合约、期权合约、互换协议等具有良好构造能力的金融产品进行分解重组,可以产生种类繁多的创新组合,满足不同投资者对风险、收益的不同偏好。同样,银行贷款也是一种将大额大风险的贷款项目分为不同金融机构共同承贷、共担风险的金融创新产品。而金融控股公司则是一种模块化的金融组织创新成果。母公司通过对子公司的控制进入不同的金融行业,子公司都具有独立法人资格,构成集团公司内部不同的模块,而每个子公司内部也有不同业务、区域功能模块组成,母公司可以通过调整子公司的组成模块实现全能化经营和集约化管理。
四、结论与启示
第一,在基于模块化的自由软件开发过程中不但实现了劳动分工,而且同时也实现了劳动价值的分割。把一个系统分解成各个不同的子模块,不同的开发者专注于对其中某一模块的开发,一方面实现了劳动的分工,另一方面也提高了自由软件开发的效率。基于模块化的性质,每个模块在开发出来以后都可以通过一个被称作是内核的原系统进行信息交流,发挥整个模块的功能,同时也并不会影响其他模块功能的发挥。而且在各个不同的模块整合在一起后,由于外部性的存在,会使整个系统增加的功能要超过该模块本身的功能。在此过程中实现了价值的分割与整合。
第二,对于开发者而言,基于模块化的自由软件开发具有更大的吸引力,其在参与开发过程中可以得到更高的期望收益。
第三,在非模块化的自由软件开发过程中,存在着严重的“搭便车”现象,当一个开发者选择参与开发,其余的开发者就会选择“搭便车”,最终会导致软件的供给不足;在基于模块化的开发过程中,所有的开发者都更倾向于参与开发不同的模块,从而实现整个系统的开发。这就为我们解决公共物品的私人提供问题提供了思路。
随着我国软件产业的迅速发展,开发基于本国的操作系统具有重要的战略意义。要全新开发一个操作系统,不管从效率,还是可行性上来讲都有点不切实际。开放源代码的自由软件为我们提供了有效而又可行的捷径。就像红旗Linux这样的操作系统,在我国的政府机关部门中已经占据了较大的市场份额。但是,自由软件的开发需要一个沟通方便、规范的平台,这是我国的主管部门需要关心的问题;开放源代码的自由软件开发也存在一定的弊端:缺少利润激励机制。为此,不管是行业协会还是政府部门都有责任建立一系列的规范机制,加大对自由软件的投入。模块化理论在诸如产业经济学、供应链管理、工业工程、软件工程、新产品开发等学科领域都得到了人们普遍的关注。但是,模块化理论毕竟是最近几年才开始蓬勃发展起来的理论,还不够成熟,还需要对这一理论进行不断的完善。
第四,自由软件的开发是一个不确定性、风险极高的R&D项目,本文在进行各项论述时,并没有把不确定性这个变量考虑在内,这是以后需要继续研究的课题。
【自由软件开发的模块化理论解释与启示】相关文章:
解构理论“自由游戏”论辨伪08-06
学习层级理论对英语教学的启示08-17
什么是模块化仪器?08-06
英国语言师资培训理论初探及启示08-17
文本层次理论对探究题命制的启示08-14
刍议强化理论对思政课教学的启示08-05
《焊工国家职业技能标准》模块化、动态化开发的几点启示08-16
行为财务理论的发展及启示08-06
基于三种理论对学校组织管理的启示08-25