软件学报ISSN1000-9825,CODENRUXUEWJournalofSoftware,[doi:10.
13328/j.
cnki.
jos.
006279]中国科学院软件研究所版权所有.
开源许可证的选择:挑战和影响因素吴欣1,武健宇1,周明辉1,王志强2,杨丽蕴31(北京大学计算机科学技术系,高可信软件技术教育部重点实验室2(西南大学计算机与信息科学学院/软件学院,重庆北碚400715)3(中国电子技术标准化研究院,北京100010)通讯作者:周明辉,E-mail:zhmh@pku.
edu.
cn摘要:开发者通常会为其开源代码选择不同的开源许可证来约束其使用条件软件的长远发展.
然而,现有的开源许可证种类繁杂,开发者难以了解不同开源许可证间的差异的开源许可证选择工具做出合适的选择--其使用要求开发者了解开源许可证相关条款并明确自己的业务需求术界虽然对开源许可证已有研究,但是对开发者选择开源许可证的实际困难并无系统的分析进而缺乏清晰的认知有鉴于此,本文旨在从开源开发者角度出发,理解其选择开源许可证的困难响开源许可证选择的因素,为开源许可证的选择提供借鉴名开发者.
通过对53个反馈结果采用主题分析,发现开发者选择开源许可证通常面临条款内容太复杂和考虑因素不确定这两方面的困难.
通过分析GitHub上3,346,168个代码仓库中使用最广泛的十个维度的开源许可证框架.
通过借鉴计划行为理论,本文影响许可证选择的九大要素,通过开发者调研验证了它们的相关性征与许可证选择的关系.
本文的研究结果能加深开发者对开源许可证内容的理解的许可证提供决策支持,并为实现基于用户需求的开源许可证选择工具提供借鉴关键词:开源许可证;开源许可证框架;开源许可证选择;中文引用格式:吴欣,武健宇,周明辉,王志强,杨丽蕴.
开源许可证1000-9825/6279.
htm英文引用格式:WuX,WuJY,ZhouMH,WangZHQ,YangLY.
RuanJianXueBao/JournalofSoftware,2021(inChinese).
.
http://www.
jos.
org.
cn/1000Selectionofopensourcelicense:challengesandinfluencingfactorsWUXin1,WUJian-Yu1,ZHOUMing-Hui1,WANGZhi-1(DepartmentofComputerScienceandTechnology,PekingUniversity,Beijing100871,China)2(CollegeofComputerScienceandTechnology,SouthwestUniversity,Chongqing400715,China)3(ChinaElectronicsStandardizationInstitute,Beijing100010,China)Abstract:Developersusuallyselectdifferentopensourcelicensestorestraintheconditionsofusingopensourcesoftware,inordertintellectualpropertyrightseffectivelyandmaintainthelong-termdevelopmentofthesoftware.
However,theopensourcecommunityhasawide1基金项目:国家重点研发计划项目(2018YFB1004201);国家自然科学基金项目Foundationitem:NationalKeyResearchandDevelopmentPlanofChina(2018YFB1004201)China(61825201);AcknowledgementtoPengChengLaboratoryforprovidingcomputinginfrastructure收稿时间:2020-05-09;修改时间:2020-07-13,2020-11-09;采用时间E-mail:jos@iscas.
ac.
cnhttp://www.
jos.
org.
cnTel:+86-10-62562563挑战和影响因素1高可信软件技术教育部重点实验室,北京100871)400715)选择不同的开源许可证来约束其使用条件,以期能有效地保护知识产权和维持开发者难以了解不同开源许可证间的差异,并且难以通过现有其使用要求开发者了解开源许可证相关条款并明确自己的业务需求.
学但是对开发者选择开源许可证的实际困难并无系统的分析进而缺乏清晰的认知.
选择开源许可证的困难,并通过分析开源许可证的组成要素和影提供借鉴.
本文设计问卷并随机调研了参与GitHub开源项目的200发现开发者选择开源许可证通常面临条款内容太复杂和考虑因素不个代码仓库中使用最广泛的10种开源许可证,本文建立了包含本文从行为态度、主观规范和知觉行为控制三个方面提出了通过开发者调研验证了它们的相关性,并进一步通过拟合次序回归模型验证了项目特加深开发者对开源许可证内容的理解,为开发者结合自身需求选择合适并为实现基于用户需求的开源许可证选择工具提供借鉴.
;开源许可证选择的影响因素开源许可证的选择:挑战和影响因素.
软件学报.
http://www.
jos.
org.
cn/:WuX,WuJY,ZhouMH,WangZHQ,YangLY.
Selectionofopensourcelicense:challengesandinfluencingfactors.
.
http://www.
jos.
org.
cn/1000-9825/6279.
htm:challengesandinfluencingfactors-Qiang2,YANGLi-Yun3(DepartmentofComputerScienceandTechnology,PekingUniversity,Beijing100871,China)(CollegeofComputerScienceandTechnology,SouthwestUniversity,Chongqing400715,China)StandardizationInstitute,Beijing100010,China)Developersusuallyselectdifferentopensourcelicensestorestraintheconditionsofusingopensourcesoftware,inordertoprotecttermdevelopmentofthesoftware.
However,theopensourcecommunityhasawide国家自然科学基金项目(61825201),鸣谢鹏城实验室提供计算基础设施Foundationitem:NationalKeyResearchandDevelopmentPlanofChina(2018YFB1004201);NationalNaturalScienceFoundationofforprovidingcomputinginfrastructure.
采用时间:2020-12-09;jos在线出版时间:2021-01-15JournalofSoftware软件学报2varietyoflicensesavailable,developersgenerallyfinditdifficulttounderstandthedifferencesbetweendifferentopensourcelicenses.
Andexistingopensourcelicenseselectiontoolsrequiredeveloperstounderstandthetermsoftheopensourcelicenseandidentifytheirbusinessneeds,whichmakesithardfordeveloperstomaketherightchoice.
Althoughtherehasbeenextensiveresearchonopensourcelicense,thereisnosystematicanalysisontheactualdifficultiesofthedeveloperstochoosetheopensourcelicense,thuslackingaclearunderstanding,forthisreason,thispaperattemptstounderstandthedifficultiesfacedbyopensourcedevelopersinchoosingopensourcelicenses,analyzethecomponentsofopensourcelicenseandthefactorsinfluecingopensourcelicenseselection,andtoprovidereferencesfordeveloperstochooseopensourcelicenses.
Inthispaper,weconductarandomsurveyof200developersthatparticipatedintheopensourceprojectsonGitHubthroughquestionnaires.
WithaThematicSynthesisonthe53feedbacks,wefoundthatdevelopersoftenfaceddifficultiesintheselectionofopensourcelicensesintermsofcomplexityoftermsandunknownconsiderations.
Byanalyzingthetenopensourcelicensesmostwidelyusedin3,346,168repositoriesonGitHub,wecreatedaframeworkofopensourcelicensesthatcontains10dimensions.
DrawingontheTheoryofPlannedBehavior,weputforward9factorsthataffectlicenseselectionfromthreeaspects:behaviorattitude,subjectivenorm,andperceivedbehaviorcontrol.
Therelevanceofthosefactorswasverifiedbydevelopersurvey.
Furthermore,therelationshipbetweenprojectcharacteristicsandlicenseselectionisverifiedbyfittingtheorderregressionmodel.
Theresultsofourresearchcandeependevelopers'understandingofthecontentsofopensourcelicenses,providedecisionsupportfordeveloperstoselectappropriatelicensesbasedontheirownneedsandprovideareferenceforimplementingopensourcelicenseselectiontoolsbasedondevelopers'needs.
Keywords:opensourcelicense;opensourcelicenseframework;opensourcelicenseselection;influencefactorsofopensourcelicenseselection在过去30年里,开源已经成为软件技术创新和软件产业发展的主要模式.
与传统开发模式相比,开源开发展现出充分共享、自由协同、无偿贡献、用户创新、持续演化的新特征,颠覆了诸多经典软件工程的基本假设和理论[1],吸引着越来越多的开发者和企业.
目前开源软件已经占据很大的市场份额,例如,Netcraft关于2020年1月份WebServer的市场调研数据2显示开源软件Nginx和Apache分别以37.
70%、23.
98%的市场份额位列前二,而Microsoft次之,占比为14.
03%.
然而,开源软件的开发和使用也伴随着许多的风险,其中最大的风险之一就是潜在的知识产权侵权责任[2].
为了保护开源软件的版权和进一步发展自由开源软件(Free/LibreandOpenSourceSoftware),开源许可证应运而生.
开源许可证规范了软件的使用、修改、重新发布、担保和归属,开发者通常会为其项目选择合适的开源许可证以保证自己的知识产权被合理利用.
开源许可证的选择对项目的开发和演化以及软件的使用和商业化而言都至关重要.
LinusTorvalds曾提到开源许可证是Linux成功的决定性因素之一,并明确表示对GPLv2的偏爱,因为它强制其他开发者进行反馈,有效地防止了碎片化[3].
同时,开源软件所使用的许可证类型得到了其开发者以及用户的大量关注,例如,Redis变更模块开源许可证,从AGPL迁移到Apache2.
0与CommonsClause相结合的许可证,对销售许可软件作了限制,在当时引起了极大的争议[4];Google为了吸引更多的厂商参与,使用宽松型许可证Apache2.
0对AndroidSDK进行开源,尽管Android是一个基于Linux内核(遵循GPLv2)的操作系统,然而Google独立开发的用于硬件驱动和App接口的中间层AndroidSDK却未遵循GPL协议,其知识产权仍被控制在Google手中[5];为了方便中文用户,北京大学牵头开发了中英文双语木兰宽松许可证MulanPSL并迅速获得广大中文开源社区的采纳.
为项目选择一个合适的开源许可证并不简单.
一方面,目前开源社区存在大量不同的许可证,仅OSI认证通过的开源许可证已有80多个,尽管每个开源许可证背后的基本原理是相似的,但它们之间存在相当大的异质性[6].
开源许可证之间细微差异所体现的不同法律含义常常让开发者感到困惑,例如,Apache2.
0和MulanPSLv23都授予专利2https://news.
netcraft.
com/archives/2020/01/21/january-2020-web-server-survey.
html3北京大学联合国内开源社区、开源生态圈产学研各界优势团队以及拥有丰富知识产权相关经验的众多律师,在对现有主流开源协议全面分析的基础上,共同起草、修订并发布了木兰宽松许可证,第2版(MulanPSLv2),并获得了OSI认证.
http://license.
coscl.
org.
cn/MulanPSL2吴欣等:开源许可证的选择:挑战和影响因素3权,但对于授权主体的范围表述不同,且MulanPSLv2不需要开发者对修改进行声明,从而降低产生法律纠纷的风险也更完善地保护开发者的切身利益.
另一方面,不同的开源许可证可能对志愿者参与软件开发的吸引程度不同,例如,Jorge等人通过对SourceForge托管项目数据的分析发现copyleft型开源许可证比非copyleft开源许可证吸引了更多的志愿开发者[7],从而一定程度上证明开源许可证的类型影响着开源软件发展.
此外,开源许可证的选择是项目负责人将项目开源时首要考虑的配置因素之一,他们通常认为同一种许可证无法满足不同项目的需求[8],例如,国内领先的互联网的安全服务提供商360公司在开源中国4发布的31个开源项目分别采用了Apache2.
0、MIT、BSD系列、GPL系列的开源许可证.
为了帮助开发者选择开源许可证,业界已经实现了许多优秀的开源许可证选择工具.
ChooseALicense5基于几种简单的项目应用场景为开发者提供推荐,例如,对于依赖社区开发的开发者推荐简单且限制少的许可证(如MIT开源许可证),而对于偏向于共享源码的开发者建议选择GPLv3许可证等.
ChooseALicense的特点是简单易理解,然而其推荐选择的范围单一且局限,也没有对开发者的复杂需求进行考虑.
OSSWATCH的LicenceDifferentiator6和码云7代码托管平台集成的许可证选择工具,主要原理是基于开源许可证部分条款之间的差异,根据开发者的偏好进行选择,帮助开发者缩小许可证选择的范围,但使用这类工具的前提是开发者必须了解所选择的开源许可证条款的含义.
然而,大多数开源许可证中包含大量生涩难懂的法律术语,开发者难以直接从条款内容分析对比,例如,对于很多商业开发者来说准确理解GPL的含义是一个常见挑战[9].
同时,开发者参与开源的实际需求往往各不相同,例如,根据其商业模式获取商业利益、提升其产品的知名度以获取广大用户基础、提高其在开源社区的声誉、获得社区技术支持等[10],且这些诉求往往不是单一出现的.
在与华为等企业的开源专家的访谈中,他们提到希望开源软件在具有良好的兼容性和广大用户的基础上能够避免陷入法律诉讼.
而上文提到的Linux内核和Android也正是基于不同的诉求而选择了不同的开源许可证.
因此,仅仅通过对许可证条款的选择偏好或者基于简单的应用场景的推荐,难以帮助开发者做出最佳决策.
鉴于开源许可证对开源开发的重要影响,软件工程领域对其相关内容已有深入研究,主要体现在对开发者选择或变更开源许可证的动机、以及开源许可证选择对项目成功的影响上.
例如,开发者的经济动机决定开源许可证的选择[11],许可证类型影响用户兴趣和贡献者的数量,并与软件开发速度、开发者提交贡献的频率和参与的持久性相关[7,12]等.
这些研究一定程度上提高了开发者对开源许可证的认识.
然而,随着开源的不断深入,开发者选择开源许可证的困难愈发突出,学术界对开发者选择开源许可证的实际困难并无系统的分析,进而缺乏清晰的认知.
因此,本文从理解开发者选择开源许可证所面临的具体困难出发,通过分析许可证组成要素和影响开源许可证选择的因素,来帮助开发者更好选择开源许可证.
具体来说,本文主要回答下述三个研究问题:RQ1:开发者为项目选择开源许可证时通常会面临哪些困难RQ2:开源许可证的组成要素有哪些RQ3:哪些因素影响开发者选择开源许可证本文采用定性和定量相结合的方法回答上述问题,首先通过阅读现有文献及结合有关项目开发经验,我们设计了调查问卷,从GitHub项目仓库的作者中选取200名开发者进行问卷调研,并基于主题分析的方法总结出开发者选择开源许可证通常遇到的两类困难,分别是①开发者通常难以理解许可证的条款内容,许可证之间的相似性及其4https://www.
oschina.
net/5https://choosealicense.
com/6http://oss-watch.
ac.
uk/apps/licdiff/7https://gitee.
com/JournalofSoftware软件学报4复杂的法律含义让开发者感到困惑;②开发者选择开源许可证时通常受到多种因素影响,例如项目的特征、开源许可证是否被广泛使用以及开源许可证对项目是否产生影响等,他们对如何全面考虑各方面因素进行最佳决策感到困惑.
其次,本文通过对GitHub上使用最广泛的10种开源许可证进行对比分析,采用主题分析的方法提取了一个十维度的开源许可证框架,可以帮助开发者认识开源许可证的组成要素和分析开源许可证间的差异.
再次,我们借鉴了计划行为理论中的三个维度,通过问卷调研以及相关文献调研,将开发者选择开源许可证的考虑因素概括为9个方面,包括:个人的开源理念、对利益因素的评估、所在组织的观念、开源社区对许可证的偏好、许可证流行度和复杂度、许可证兼容性、其他项目影响、对项目特征的评估、以及许可证选择结果的影响等,并进一步通过拟合次序回归模型验证了项目特征因素与许可证选择的关系.
最后本文讨论了研究结果的指导意义和应用场景.
本文的主要贡献总结如下:①调研并识别了开源许可证选择的两类常见困难:开发者难以理解开源许可证的条款内容且许可证之间的相似性以及复杂的法律含义让开发者感到困惑;开发者选择开源许可证时通常还会综合考虑多方面因素,他们对如何全面考虑各方面因素进行最佳决策感到困惑.
②围绕开源许可证核心要素建立了一个开源许可证框架,可以帮助开发者方便理解开源许可证内容的构成以及开源许可证之间存在的差异.
③揭示了影响开发者选择开源许可证的9大因素,可以指导开发者结合自身业务需求选择合适的许可证.
本文第1节对相关工作进行阐述.
第2节对开源许可证的背景进行介绍.
第3节探索开发者在选择开源许可证时通常遇到哪些困难.
第4节建立开源许可证框架,以帮助开发者认识和了解开源许可证的构成和存在的差异.
第5节探索影响开发者选择开源许可证的影响因素.
第6节讨论了研究结果的指导意义和应用场景.
第7节阐述了本文的局限性.
最后进行总结.
1相关工作随着开源软件越来越广泛地被使用,开源许可证也逐渐受到学术界和工业界更多的关注.
目前,关于开源许可证的研究领域主要集中在法律[13],经济管理[14],社会学[15]以及软件工程等相关领域[2];在研究的内容上主要包括开源许可证的选择、开源许可证合规性使用[16,17]以及相关自动化工具,如开源许可证选择工具[18]、开源许可证检测工具[19]、开源许可证管理工具[4]等方面.
而其中关于开源许可证的选择的研究主要集中在如下几个方向:一是开源许可证的选择或变更的影响因素.
开源开发者的动机一直是与开源软件相关的研究人员和专业人士讨论的主题[20],Halina和Mark认为许可证的选择主要取决于软件开发人员的意图和期望[2];Lerner和Tirole指出开源许可证的选择是由许可方和开发者社区的经济动机所决定的[11];Singh等人展示了开发者所处的社会环境如何影响他们对开源许可证的选择,以及开发者的个人经历如何调节这种影响[15];Ravi等人使用动机和态度理论来研究开发者对三种开源许可证类型的偏好[8];Darren讨论了不同类型的开源许可证的利益相关者的需求与义务[21];Rober和Gregorio研究了开源项目中许可证变更的动机和影响[22];Vendome等人通过定量和定性的方法研究了GitHub上的java项目中许可证何时以及为什么会改变[23].
二是开源许可证的选择或变更对项目的影响.
Gottfried等人分析了十年间开源项目的许可证选择和相关项目增长的趋势[24];Stewart等人调研了开源项目的开发活动以及用户兴趣与许可证类型的关系[12];JorgeColazo和YulinFang基于社会运动理论研究了开源许可证的选择与项目活动之间的关系[7];Kashima等人进行了开源许可证对软件重用影响的定量研究[25];Maria等人探索了开源许可证之间的依赖关系,用来解释和指导开源项目的许可证选择[16];Chris和Walt通过对Apache基金会创建和迁移到Apache2.
0以及NetBeans项目迁移到JointLicensingAgreement过程的案例研究,分析许可证变更所带来的影响[26];Yuhao等人调研了由于许可证变更而导致包含不同许可证的相同原始文件的不一致性问题[27].
吴欣等:开源许可证的选择:挑战和影响因素5三是许可证选择自动化工具.
例如Kapitsaki和Charalambous等人采用相似用户和相似项目实现了开源许可证推荐[18].
此外,还有大量的研究出现在经济法律和管理领域,关注于常见开源许可证的对比分析[6,2,28,29,30,31],Mikko以及Stefano、Fabio等人分析了开源公司如何使用双重许可,确定了双重许可的法律和经济要求[12,32].
尽管这些研究提供了一些如何选择开源许可证的见解,但它们通常仅在某一方面或个别细节上进行了深入的分析和建议,缺乏对开发者实际需求的综合考虑和研究,而选择开源许可证的影响因素可能是多方面的,开发者难以直接将这些研究结论应用于不同的应用场景或变化的业务需求中.
同时,业界对开发者选择开源许可证面临的实际困难还缺乏清晰的认识和系统的分析,现有的开源许可证选择工具要求开发者清楚了解开源许可证相关条款的含义和明确自己的业务需求,否则难以做出合适的推荐.
本文工作旨在从开发者角度出发,发掘他们在选择开源许可证过程中遇到的实际困难,提炼出具有一般性和通用性的开源许可证框架以及影响开发者选择的多个角度和因素,为开发者选择开源许可证提供决策支持和经验参考,同时为实现基于用户需求的开源许可证选择工具提供借鉴.
2研究背景2.
1开源许可证的产生软件的版权保护意味着软件只能在得到版权所有者的许可后才能使用[2].
因为软件很容易被复制,但是创造它却是非常困难和代价高昂的[28],所以通过版权法保护软件至关重要.
目前,版权保护策略主要存在两种形式:私有版权策略和非私有版权策略.
私有版权策略是一种将部分或全部潜在的技术用户排除在外的策略[33].
在私有软件开发模型中,代码首先受到版权保护,然后根据授权协议进行分发,从而赋予用户特殊的权利[28].
通过授权软件,软件制造商可以限制用户的责任和权利,例如:只允许在一台计算机上使用等[30],而用户需要为使用、分发、复制或编辑软件支付相应的版税.
非私有版权策略主要包括将软件置于公共领域或进行开源许可[33].
将软件置于公共领域意味着完全放弃对其软件的版权保护,任何人都可以无偿地使用和修改,甚至可以删除作者的名字视为自己的作品.
软件的私有化被早期一些程序员认为是"不道德"的行为,在20世纪80年代中期,麻省理工学院的程序员RichardStallman开发了一种新的软件分发方法,即GNU公共许可证[11].
Stallman关于自由软件的革命性思想随后演变为当前的开源软件运动,自由/开源软件的主要目的是最大限度地开放以及减少软件使用传播创新的障碍[30].
开源许可通过分配知识产权的权利来共享软件代码,用户和开发人员社区可以自由访问,以促进不同动机的参与者之间的合作和有益的交流[34].
综上所述,开源软件仍受版权保护,开源软件和私有软件的主要区别在于它们的许可模式.
使用开源软件需要得到开源许可证的授权.
2.
2开源许可证开源促进会(OpenSourceInitiative,OSI)8创建于1998年,是一个审查和批准开源许可证的非盈利组织.
他们为开源许可证建立了一套一致的标准,称之为"开源定义"(OpenSourceDefinition,OSD)[11].
同时,OSI还注册了一个认证标志:OSI认证标志(TheOSILogo),这个标记可以放在发布的软件上,这样人们就可以很容易地识别出这是开源软件并且所使用的许可证符合开源定义[6].
通常我们认为符合开源定义的许可证就是开源许可证.
开源定义对于开源许可证的标准包含以下几个条件:8https://opensource.
org/JournalofSoftware软件学报6必须允许任何人以源代码或其他形式重新发布程序,且不收取任何费用;源代码免费可获取,或收取不超过传输成本的费用;必须允许分发衍生或修改后的软件;不歧视任何用户群体或应用领域;保证源代码的完整性;允许对许可证中的权利重新分发;许可证不得特定于产品;许可证不得限制其他软件;许可证必须是技术中立的9.
2.
3开源许可证的类型开源许可证间最大的差异是关于许可证对分发衍生软件的限制性不同,即当他人对代码修改和扩展(与其他软件合并)后并分发的限制要求.
目前,开源许可证按照限制的强弱通常分为三种类型:宽松型(permissive):这类许可证通常只要求被许可方承认原始作者,衍生软件可以成为私有软件,如BSD许可证、MIT许可证、Apache许可证和MulanPSL许可证.
限制型(copyleft):旨在促进开发人员的合作,保护源代码的自由共享[35].
copyleft条款要求对软件的修改和扩展,必须按照获得该软件的许可证进行开源,如GPL许可证、OSL许可证.
弱限制型(weak-copyleft):弱限制型许可证要求对软件的修改,重新分发必须按照获得该软件的许可证进行开源,然而合并这些软件的大型作品可以成为私有作品.
这是一个折中的方法,允许将代码集成到自己的软件中,而不必使整个代码库开源,避免了不得不分享的场景[36].
3开发者选择开源许可证面临的困难(RQ1)我们在阅读大量的相关文献及与有关企业开发人员访谈后,进一步通过问卷调查10的方式,来了解和分析开发者为项目选择开源许可证时通常面临哪些困难.
3.
1方法设计(1)问卷设计我们通过阅读大量文献以及在线网页,并咨询华为等企业开发人员,初步分析了开发者选择开源许可证过程中可能遇到的困难.
以此为基础,遵循相关性、完整性、互斥性和可能性的原则[19]设计了调研问卷.
针对调研对象,我们设计了问题1(Q1)开发者的所在地区(填空)、问题2(Q2)开发者参与开源年限考虑在内(单选),以期望问卷结果具有广泛性;针对开发者选择开源许可证面临的困难设计了问题3(Q3);同时,我们还调研了开发者选择开源许可证的考虑因素设计问题4(Q4)-问题11(Q11).
问题3(Q3)共7个问卷选项(多选,详见表1),且包含开放式回答(other)的选项,给予问卷回复的开发者表达自己的遇到的其他问题或者并没有在开源许可证选择方面遇到困难.
选项设计具体理由如下:首先,很多网站都维护了一个开源许可证列表,如FSF11,OSI,SPDX12等,开发者获得开源许可证的信息并不难,难点在于开发者如何过滤这些大量信息以获得相关性,以及利用不完全的决策问题来评估这些信息[16].
因此我们设计了选项1(option1)和选项2(option2).
另一方面,由于开源许可证的内容缺乏一致性和标准化,例如,MIT与GPL在内容结构上存在相当大的差异,开发者并不总是清楚许可证中授权与限制的含义,而许可证的法律性质加剧了这个问题[37],因此设计了选项3(option3).
其次,问卷中选项4(option4)的设计是因为在项目的开发过程中,多个项目之间可能存在大量的交互,如链接、9TheOpenSourceDefinition,Lastmodified,2007-03-22,fromhttps://opensource.
org/osd.
10https://gitee.
com/blesswoo/questionnaire/blob/master/关于开源许可证选择的调查问卷.
md11https://directory.
fsf.
org/wiki/Category:License12https://spdx.
org/licenses/吴欣等:开源许可证的选择:挑战和影响因素7合并、代码块复用等.
当所依赖的项目使用不同开源许可证时,开发者不得不考虑许可证的兼容性问题及合规使用问题[16,17].
最后,选项5(option5)和选项6(option6)的设计源于已有研究揭示了开源许可证类型与项目的开发活动、用户兴趣的关系[12],以及开源许可证的选择对贡献者的动机和项目成功的影响[23].
此外,我们还发现除了OSI认证的80多个开源许可证外,仍然有大量的不尽相同的开源许可证,出现这种现象的可能原因是现有的许可证无法满足开发者的需求,所以,设计了选项7(option7)的选项.
我们从GitHub网站托管的代码仓库中利用GitHubSearchAPI13收集了流行度排名前十的编程语言的共9672个项目仓库(创建于2018年1月至2019年9月之间),其中编程语言流行度参考了TIOBE14编程语言2019年9月排行榜,它反映了编程语言流行趋势以及某个编程语言的热门程度.
由于这9672个项目仓库存在重复的情况,因此我们对数据进一步清洗,通过ID、创建时间的一致性去重,共得到7938个项目仓库.
我们又从中剔除了许可证为空和标记为Other(通过人工随机抽查5个被标记为Other的开源项目,主要包括多重许可证、自定义开源许可证或正在实施许可证变更等情况)的项目仓库,最终得到了本次实验的4704个项目.
我们从4704名项目所有者(Owner)中随机抽取200名(参考了统计学关于简单随机抽样样本量计算方法[38],按照调查结果在置信度为95%,误差范围在4%-8%之间的抽样样本数为146-533,同时为了避免产生过多打扰,最终确定发放样本200份),向他们发送邮件,并附上利用问卷星15制作的问卷链接.
(2)数据分析我们使用主题分析方法对问卷结果进行分析.
主题分析(ThematicSynthesis)是一种识别、分析和报告数据中的模式(主题)的方法,通常用于对定性研究数据进行分类,在软件工程等众多领域广泛使用[39].
主题分析一般分为五个步骤①数据提取(Extractdata),是指从问卷答复中提取数据;②数据编码(Codedata),从数据集中标识和编码感兴趣的概念、类别、发现和结果;③概念化(Translatecodesintothemes),将标识和编码的内容总结为子主题;④范畴化(Createamodelofhigher-orderthemes),探索子主题间的关系并总结为更高阶的主题;⑤验证(Assessthetrustworthinessofthesynthesis),评估主题分析的解释的可信性.
步骤①中通过对收到的回复,提取出选项及补充的其他答案等信息;步骤②中从前面提取的信息中定位内容的关键点,以系统的方式识别和编码有关开发者选择开源许可证过程中可能遇到的困难(图1);步骤③中通过对识别的开源许可证选择的多个困难对比,总结共性和归纳主题形成概念性的主题;步骤④中对前面所归纳的主题再次抽象,将相似问题归为一类,在此基础上总结结论,即开发者选择开源许可证面临的困难;最后是步骤⑤,本文的多个作者对分析的结果进行交叉验证,获得了一致意见.
13https://developer.
github.
com/v3/guides/14TIOBEIndexforSeptember2019,fromhttps://www.
tiobe.
com/tiobe-index/15https://www.
wjx.
cn/8Fig.
1Qualitativeanalysisofmaterial(Questionnaireoptionsandopenreply)thematicsynthesisprocess图1定性分析材料(问卷选项及开放式回复3.
2结果分析我们向3.
1中选取的开发人员共发放200份问卷件调研回复率为6%-36%[40],因此我们的回复率在相对较高的范围德国,日本,瑞典等25个国家,样本的分布广泛.
这些开发者中验.
84%的开发者认为许可证的选择是困难的,其中包含年以上开源经历的开发者.
仅8人(15.
38%)表示没有困难我清楚了如何去使用它们(WhenIhadstartedtheywereconfusingbutnowIamclearonhowtouseopensourcelicense)".
这些都进一步说明了开源许可证选择的困难是普遍实际存在的我们对得到的53份回复结果采用主题分析,最终归纳出两类困难①开发者认为目前存在大量的开源许可证,它们相互之间的相似性使其难以区分和复杂的法律含义使其感到困惑.
39.
62%的开发者认为目前存在大量的开源许可证许可证的条款以及所包含的法律含义让人难以理解,例如Apache2.
0包含了专利授权终止条款,使得Apache2.
0无法兼容了,很难区分(Theyaretoosimilarandhardtodifferentiate)".
找到这种模式可能帮助开发者更好理解和对比开源许可证②开发者选择开源许可证时可能综合考虑多种因素适用的开源许可证,开发者还关心许可证选择的结果是否影响项目的发展等行最佳决策感到困惑.
33.
96%的开发者认为许可证选择的结果可能进一步影响项目的发展Apache2.
0等开源许可证在分发义务中允许衍生软件成为商业软件确定性增加了他们选择开源许可证的难度;28.
3%的开发者在选择开源许可证时容易受到许可证兼容性问题的困扰,例如,在Linuxkernel基础上扩展软件需要遵从GPLv2要一定的法律知识以及了解许可证的内容;16.
98%的开发者认为如一些具有自由开源理念的贡献者通常会选择具有限制型许可JournalofSoftware软件学报Fig.
1Qualitativeanalysisofmaterial(Questionnaireoptionsandopenreply)thematicsynthesisprocess问卷选项及开放式回复)主题分析过程份问卷,最终收到53份回复,回复率为25%.
通常,软件工程领域中邮因此我们的回复率在相对较高的范围.
其中,回复问卷的开源开发者主要来自包括美国,这些开发者中23%参与开源1-3年,77%开发者有超过4年的开源经其中包含83.
33%的开源经历为1-3年的开发者,以及79.
31%的超过4表示没有困难,其中1人提到"开始时,开源许可证让我感到困惑,但现在startedtheywereconfusingbutnowIamclearonhowtouseopensource这些都进一步说明了开源许可证选择的困难是普遍实际存在的.
最终归纳出两类困难,分别是:它们相互之间的相似性使其难以区分,且一些开源许可证的条款的开发者认为目前存在大量的开源许可证,难以对比或分析;而一些开源例如Apache2.
0和GPLv2中对专利授权的范围不同,由于无法兼容GPLv2.
一名开发者在补充回答中提到"它们太相似(Theyaretoosimilarandhardtodifferentiate)".
开源许可证是相似的,它们之间可能存在一些共同的模式,找到这种模式可能帮助开发者更好理解和对比开源许可证;开发者选择开源许可证时可能综合考虑多种因素,例如,他们可能针对不同的项目或者项目特征为其选择开发者还关心许可证选择的结果是否影响项目的发展等,开发者对如何全面考虑各方面因素进的开发者认为许可证选择的结果可能进一步影响项目的发展,例如MIT、BSD-2-clause、等开源许可证在分发义务中允许衍生软件成为商业软件,可能使得软件具有更多的用户,这种影响的不的开发者在选择开源许可证时容易受到许可证兼容性问题的困GPLv2的许可证约束,而判断所选的开源许可证是否与其兼容需的开发者认为,针对不同的项目受众应当选择不同的许可证,例如一些具有自由开源理念的贡献者通常会选择具有限制型许可(如GPL类许可证)的项目进行贡献,一名来自美国,吴欣等:开源许可证的选择:挑战和影响因素9超过10年的开源开发经验的人认为"每个项目可能需要多个许可证,比如代码部分使用一个许可证,文档部分使用另一个许可证(Thechallengeofpotentiallyneedingmultiplelicensesperproject,i.
e.
oneforcodeandonefordocs)",也进一步说明了开发者选择开源许可证式会考虑针对项目的不同类型选择不同的许可证;还有15.
09%的开发者认为影响开源许可证选择的因素是多方面的,如何全面考虑这些因素进行选择是困难的.
此外,有开发者表达了开源许可证具有一定的局限性,尽管其规范了开源软件的使用、复制修改和分发,但无法保证项目的可持续发展("Licensingdoesnotreflectsustainablerevenuegoalsforanyprojects.
Whileprojectsareaboutgivingback,sustainabilityisnearimpossible").
值得注意的是,option7结果为0,出现这个结果可能是因为,我们选取的调研对象是从去掉许可证为空或其他许可证的项目作者中挑选,而所调研的开发者认为目前的开源许可证已经能够满足他们的需求.
Table1Thedifficultiesdevelopersfaceinchoosinganopensourcelicense表1开发者选择开源许可证面临的困难(问题3)在选择开源许可时遇到了什么困难(多项选择题)(Q3)Whatdifficultieshaveyoumetinchoosinganopensourcelicense(multiple-choice)选项数量比例1.
开源许可证种类太多,难以进行分析和比较(Toomanyopensourcelicenses,andit'shardtoanalyzeorcompare).
2139.
62%2.
难以综合所有的因素来做出最佳的许可证选择策略(Itisdifficulttocombineallthefactorstomakethebeststrategyforlicensechoice).
815.
09%3.
许可证中的术语或法律含义很难理解(Termsorlegalimplicationsofthoselicensesaredifficulttounderstand).
2139.
62%4.
当不同项目之间存在依赖关系时,很难判断许可证之间的兼容性(Itisdifficulttojudgethecompatibilityofthelicensewhentherearedependenciesamongdifferentprojects).
1528.
30%5.
不同的许可证可能会对项目的发展带来不同的影响(Differentlicensemayhaveadifferentimpactonthedevelopmentoftheproject).
1833.
96%6.
不同的受众对许可证可能有不同的偏好,比如贡献者或最终用户(Differentaudiencesmayhavedifferentpreferences,suchascontributorsorend-users).
916.
98%7.
现有的许可证无法满足自己的需求(Existinglicensescannotmeetourneeds).
00.
00%8.
其他(Other).
1120.
75%3.
3结论我们发现①大部分的开发者在为项目选择许可证是困难的,尤其是新参与的开发者在面对众多开源许可证,它们内容的相似性和复杂的法律含义让人感到困惑.
②开发者选择开源许可证时通常还会综合考虑多方面因素,他们对如何全面考虑各方面因素进行最佳决策感到困惑.
4开源许可证的组成要素(RQ2)为了帮助开发者更好地理解开源许可证,以及减少开发者选择许可证的困难,我们通过主题分析的方法探究开源许可证的组成要素.
104.
1方法设计首先,我们使用谷歌Bigquery16工具获取了目前开源许可证的使用情况大数据的Web服务,其提供的GitHub的公共数据是迄今为止最大的一个开源许可证约束.
截止至2019年11月25日,我们分析了共证信息,并统计每种开源许可证的使用情况.
其次,我们选取广泛使用的前十种许可证,采用主题分析的十种许可证,提取出许可证的基本信息,条款内容以及使用说明等定位内容的关键点,以系统的方式识别和编码许可证的内容对比,总结共性和归纳主题形成概念性的主题,将许可证内容划分为多个维度的多个维度再次抽象,总结出开源许可证框架.
最后,为了检验本文提出的维度是否能反映大部分开源许可证的内容的72个许可证内容对提出的维度进行交叉验证.
Fig.
2Qualitativeanalysisofmaterial(partofApache2.
0)encodingprocess图2定性分析材料(截取部分16https://console.
cloud.
google.
com/JournalofSoftware软件学报工具获取了目前开源许可证的使用情况.
谷歌Bigquery是一种用于处理和分析的公共数据是迄今为止最大的GitHub可用数据源,所收录的项目仓库均受到我们分析了共3,347,168万个项目仓库,提取每个项目授权的许可采用主题分析[39]的方法进行分析:其中,数据提取步骤中我们对选取条款内容以及使用说明等;数据编码的步骤中,我们从前面提取的信息中以系统的方式识别和编码许可证的内容(图2);概念化的步骤里,通过对许可证内容的关键信息将许可证内容划分为多个维度;范畴化的步骤里,我们对前面所归纳为了检验本文提出的维度是否能反映大部分开源许可证的内容,本文作者通过人工分析OSI或FSF认证material(partofApache2.
0)encodingprocess截取部分Apache2.
0)数据编码步骤示例吴欣等:开源许可证的选择:挑战和影响因素4.
2结果分析我们对3,346,168个许可证信息进行统计,得到图BSD-3-Clause,BSD-2-Clause,AGPL-3.
0,LGPL-3.
0,CC0其中MIT许可证使用最多,占比51%;其次Apache-2.
0占比用的开源许可证主要是OSI对许可证分类中的"流行且广泛使用的许可证MIT,Apache-2.
0,BSD-3-Clause,BSD-2-Clause,CC0-1.
0,ISC,ArtisticLGPL-2.
1属于弱限制型许可证,而GPL-2.
0,GPL-3.
0,AGPL位(总计76%),限制型许可证次之(21%),而弱限制型许可证并不常见Fig.
3OpensourcelicenseusageonGitHub图3GitHub上开源许可证使用现状随后我们对选取的十种许可证的内容进行主题分析序言,③定义条款,④授权条款,⑤义务条款,⑥违约与授权终止条款版本与兼容性,以及⑩许可证使用说明等.
其中①许可证的基本信息担保与责任限制条款等为开源许可证中的常见条款,其他条款通常根据许可证制定方的需求进行相应说明下:1)基本信息.
主要包括许可证名称及版本号、2)序言.
主要对许可证的适用场景或条件以及目的宗旨等进行说明3)定义.
为了便于开发者或用户理解许可证内容4)授权.
开源许可证主要涉及的知识产权主要包括版权版权许可.
项目开发者通常免费授予用户行使相关权限或修改后的项目.
专利许可.
如果开源项目中包含专利,提供专利许可的场景,许可证将不会提及专利许可商标权.
开源许可证原则上不涉及商标权许可传.
5)义务.
用户在使用、复制、修改或分发软件或其衍生软件应当遵守的行为规范11得到图3的结果.
由图中可知MIT,Apache-2.
0,GPL-3.
0,GPL-2.
0,3.
0,CC0-1.
0,EPL-1.
0这十种开源许可证是使用最广泛的,占比97%.
占比15%;GPL-3.
0和GPL2.
0各占比10%.
开源社区中普遍使流行且广泛使用的许可证".
按照开源许可证的类型进行划分,其中1.
0,ISC,Artistic-2.
0属于宽松型许可证,LGPL-3.
0,EPL-1.
0,3.
0,AGPL-3.
0属于限制型许可证,可以看出宽松型许可证占主导地而弱限制型许可证并不常见(3%).
Fig.
3OpensourcelicenseusageonGitHub上开源许可证使用现状随后我们对选取的十种许可证的内容进行主题分析,将许可证条款划分为10个维度:①许可证的基本信息,②违约与授权终止条款,⑦担保与责任限制条款,⑧准据法条款,⑨许可证许可证的基本信息、④授权条款中的版权许可、⑤义务条款、⑦其他条款通常根据许可证制定方的需求进行相应说明.
具体如、发布日期、许可证版权声明及链接地址等信息.
主要对许可证的适用场景或条件以及目的宗旨等进行说明,如GPL序言部分.
为了便于开发者或用户理解许可证内容,对许可证条款中的特定术语进行说明.
开源许可证主要涉及的知识产权主要包括版权、专利权、以及商标权.
项目开发者通常免费授予用户行使相关权限,包括使用、复制、修改、分发其开源项目,开发者可以提供专利许可,也可以不提供专利许可.
对于不许可证将不会提及专利许可,或者明确排除专利许可.
开源许可证原则上不涉及商标权许可,并且通常禁止借项目开发者的名义进行广告或宣修改或分发软件或其衍生软件应当遵守的行为规范.
JournalofSoftware软件学报12使用/复制/修改.
开源许可证通常不对使用目的、范围进行限制,开发者可以基于任何目的(学习、研究或商业)对软件进行运行、备份、修改等操作,但在一些特定场景中可能要求履行相关义务.
如AGPL中对通过网络使用软件向第三方提供服务时,需要提供完整源代码.
分发.
当开发者分发软件或衍生软件时通常要求,①履行一定的声明义务,例如修改声明(如Apache2.
0)、保留版权及免责等声明、提供许可证副本等;②要满足开源许可证对分发衍生软件的限制性,根据限制性的强弱,可以将开源许可证分为三类,即宽松型(permissive)、弱限制型(weak-copyleft)、限制型(copyleft).
6)违约与授权终止.
对于用户违反许可证的行为,可以对其终止授权,也可以给予一定的补救机会.
7)担保与责任限制.
项目开发者通常不对用户提供任何担保以及承担任何赔偿责任;如果开发者个人对用户提供保证和担保须自行承担相应责任.
8)准据法.
是指在许可证中指定援用的,用来调整涉外民事法律关系双方当事人权利与义务的特定国家的法律.
9)版本与兼容性.
对许可证版本进行说明,以及对与该许可证兼容或者不兼容的其他许可证进行特别说明,许可证兼容性是指项目中的许可证包含相互矛盾的必要条件,而使得无法将其源代码合并成新的项目.
10)使用说明.
告知用户将项目许可在该许可证下应该完成的步骤,并可以包含一个声明模板,对软件相关的作品描述、作品版权声明、许可证及其链接、作者联系方式等进行说明.
开源许可证之间的差异通常体现在③定义、④授权、⑤义务、⑥违约与授权终止以及⑧准据法中,例如:MPL2.
0和CPAL1.
0对"覆盖代码"定义的范围不同,因此在下文条款中要求对"覆盖代码"使用原许可证分发其源码,MPL2.
0可以通过不同文件来隔离传染性,CPAL1.
0则需要不同模块单独分发来隔离传染性;在授权中Apache2.
0明确提供授予专利权,而MIT则未提及专利授权;在义务条款中常见的差异主要来源于对分发衍生软件的限制性强弱以及不同的声明义务;在授权终止中一些开源许可证中可能包含专利报复条款以及不同的违约补救条件,如Apache中提到用户不得发起专利诉讼,否则其授权将被终止;此外,还有一些开源许可证明确了准据法,如EUPL1.
2,这也是开发者在使用开源许可证过程中需要注意的问题.
最后,我们根据这十个纬度,提出了开源许可证框架(图4),本文的作者通过对开源许可证进行交叉验证,认为提取的开源许可证框架可以较好地解释目前开源许可证的结构组成,能够帮助开发者理解许可证的条款.
Fig.
4Opensourcelicenseframework图4开源许可证框架吴欣等:开源许可证的选择:挑战和影响因素134.
3结论我们发现,目前在GitHub上广泛被使用的是OSI分类为"流行且广泛使用"的开源许可证,其中宽松型开源许可证占主导地位,限制型次之,而弱限制型的开源许可证并不常见.
通过对开源许可证内容进行主题分析,提出了十个维度的开源许可证框架,其中①许可证的基本信息、④授权条款中的版权许可、⑤义务条款、⑦担保与责任限制条款等为开源许可证中的常见条款,其他条款通常根据许可证制定方的需求进行相应说明.
开发者可以通过比较各个维度上开源许可证之间的差异,来理解开源许可证的结构与含义.
此外,开发者还可以利用开源许可证框架快速构建满足个人特定需求的新开源许可证,例如,木兰宽松许可证,第2版(MulanPSLv2)正是在此开源许可证框架基础上为更好地保护开发者权益而构建的中国本土开源许可证.
5开源许可证选择的影响因素(RQ3)为了剖析影响开发者选择开源许可证的因素,进一步为开发者结合自身需求选择合适的许可证提供决策支持和经验参考,我们通过阅读有关文献并借鉴计划行为理论(TheoryofPlannedBehavior)的三个维度设计调查问卷,分析开源许可证选择的影响因素,通过对项目特征因素拟合次序回归模型,验证分析了项目特征与开源许可证选择的关系.
5.
1方法设计(1)问卷调研在2.
1中面向200开发者的调研问卷中的问题4(Q4)-问题11(Q11)调研了开发者选择开源许可证的考虑因素.
其中,问题4(Q4)调研开发者选择开源许可证的影响因素,共有9个选项(多选,详见表2),并增加一个other(开放式回答)选项,收集开发者关于许可证选择因素的补充回答;问题5(Q5,单选)调研开发者具体支持何种开源理念;问题6(Q6,单选)调研开发者的首选开源许可证;问题7(Q7,单选)调研开发者如何看待开源商业;问题8(Q8,多选)调研开发者采用的商业模式;问题9(Q9,多选)调研开发者通常获得哪些开源利益;问题10(Q10,开放式)调研开发者是否为项目变更过许可证及变更原因;问题11(Q11,开放式)主要用于征询开发者补充关于开源许可证的更多建议和观点,为进一步研究寻求突破口和补充我们问卷没有涉及到的问题.
在设计问卷问题过程中,我们借鉴计划行为理论的三个维度,结合有关文献,初步分析了可能影响开发者选择开源许可证的因素.
计划行为理论是从信息加工的角度、以期望价值理论为出发点解释个体行为一般决策过程的理论,大量研究证实它能显著提高研究对行为的解释力和预测力[41].
在许可证选择过程中,我们认为所有可能影响许可证选择的因素都是经由开发者的行为意向来间接影响最终许可证的选择.
这点经常被现有文献验证,例如程序员的参与意愿强烈影响他在社区中的持续性[42].
行为意向是指个人想要采取某一特定行为的行动倾向,受到三项相关因素的影响:一是个人本身的"行为态度";二是外在的"主观规范";三是"知觉行为控制"[43].
为了保证问卷设计的合理性及计划行为理论维度的适用性,在发送调查问卷前,我们与10名有丰富开发经验的科研及企业人员进行了调研讨论,详细地解释了研究目的和调研问卷设计的方法思路,并明确要求他们填写问卷以检查问卷中可能包含的问题.
我们根据收集的建议对问卷中问题及选项的描述进行了澄清和改进.
实际问卷调研的53份回复不包含前述的实验性预调研结果.
问卷及(Q4)选项设计的理由如下:①行为态度方面,Ajzen等人提出的期望-价值理论[44]认为态度包括个人实行某种行为的重要信念以及对价值的评价.
自由软件哲学思想的传播在自由软件和GPL的普及过程中发挥了重要作用[29],开发者通常选择最符合自身意愿的开源许可证,例如,支持限制型许可证的人们认为共享代码是一个理想的最佳实践,可以允许程序员创建更高质量的软件[45],因此我们设计了选项1(option1).
近年来,人们对开源软件作为一种替代经济模式的兴趣日益浓厚,一JournalofSoftware软件学报14些公司通常会寻找新的方式来产生收入和降低成本,越来越多的公司将开源作为一种商业策略来实现这个目标[46],受此影响,我们设计了选项2(option2).
②主观规范方面,是指个体在决策时感知的社会压力或者外界因素的影响.
当开发者不是以个人名义参与开源时,通常可能受到来自组织或企业的影响,例如,开发者在Linux社区中使用BSD许可证是可以接受的,但是他们在BSD社区中贡献GPL代码是一个大大的禁忌[36],由此我们设计了选项3(option3).
贡献者和用户对许可证类型的不同偏好可能影响开发者选择开源许可证,例如,具有限制性许可证的项目吸引的主要是寻求高度内在动机的贡献者,而具有宽松许可证的项目吸引的不仅是寻求内在动机的贡献者,还有希望获得商业化潜在机会的贡献者[23],根据这一点我们设计了选项4(option4).
许可证的流行度和复杂度也可能影响开发者是否采用该许可证,一个众所周知的和受信任的许可证对于开发者和用户来说都更容易被接受,而过于复杂和鲜为人知的许可证可能容易造成混淆和歧义[16],所以,我们设计了选项5(option5)和选项6(option6).
此外,项目之间的依赖使得许可证的选择可能会受到其他许可证的限制,当开发者试图将他人编写的代码集成到自己的项目中时,他们需要了解集成代码所携带的许可证,尤其是组合不同许可证下的代码时,兼容性问题会变得格外复杂[30],有鉴于此我们设计了选项7(option7).
先前的研究发现,项目采用的许可证类型往往受到与其关系密切的其他项目采用的许可证类型的影响[33],由此我们设计了选项8(option8).
③知觉行为控制方面,是指个人预期采取某一特定的行为时所感觉可以控制的程度,常反映个人过去的经验、拥有的资源、能力以及预期的阻碍等.
从3.
2节中我们得知,开发者在为项目选择许可证时会考虑不同的受众目标,且有文献表明开发复杂软件的项目更可能选择有某种程度限制的许可证[8],开发者可能依据不同的项目特征选择不同的开源许可证,例如,Oracle公司在GitHub上托管的不同开源项目中采用了多种开源许可证,如微服务框架Helidon使用Apache2.
0开源,而另一款移动交友软件DinoDate则使用MIT许可证开源,有鉴于此我们设计了选项9(option9).
此外,已有研究表明开源许可证的选择与项目的开发活动有关[12],一定程度影响项目的发展.
开发者可以通过判断项目的发展趋势是否符合自己的意愿,或者为了使许可证的选择满足自己变化的需求,采用更换开源许可证以达到其目的,因此我们设计了一道开放式问题5(Q5,开放式)调研开发者是否为项目更换过许可证和更换原因.
同时,为进一步了解开发者的具体偏好,我们针对上述选项1(option1)设计了问题6(Q6,单选,表3):关于开发者具体支持何种开源理念的问题,及问题7(Q7):开发者首选的开源许可证;针对上述选项2(option2)设计了问题8(Q8,单选,表4):关于开发者如何看待开源商业,问题9(Q9,多选,表5):开发者采取了哪些商业模式,以及问题10(Q10,多选,表6):开发者从开源中通常获得哪些开源利益等问题.
(2)定量分析大量的工作探究了开源许可证类型与项目之间的关系[7,12,23],也有研究利用相似用户或相似项目为开发者推荐开源许可证[18],项目特征可能是影响开发者选择开源许可证的重要因素之一.
为了验证项目特征与许可证选择有关,我们通过拟合次序回归模型分析了项目特征与许可证类型之间的关系,通过数据分析及有关文献调研解释了可能原因,为开发者提供参考借鉴.
具体步骤如下:已有研究提出了几个重要的项目特征,包括项目年龄、目标受众、编程语言、项目大小等[7],我们对2.
1中选取的4704个项目仓库,提取出项目的创建日期、编程语言、应用程序描述、项目大小、许可类型、以及项目的开发数据等有关信息.
我们共设置了四类自变量,分别为编程语言、应用领域、项目规模和项目年龄.
其中:①编程语言(PL):包括C,C#,C++,Java,JS,Objective-C,PHP,Python,SQL,VB;②应用领域(Domain):通过人工分析项目的应用程序描述,我们根据不同的受众,将项目应用领域分为6类:软件开发类(Develop,包括开发工具、库/框架等)、终端应用类(App,包括桌面应用、web应用、移动应用等)、流行技术类(Popular,包括人工智能、云计算、数据科学、区块链等)、底层相关类(Underlying,包括操作系统、数据库、中间件、硬件相关等)、教程(Tutorial)及游戏(Game).
③吴欣等:开源许可证的选择:挑战和影响因素15项目规模(Size):我们利用GitHub上项目的存储大小信息按照分布的百分位数分为3个层次:其中前1/3为小项目(20M);④项目年龄(Age):以月为计量单位,按照创建时间的先后进行统计.
因变量为许可证类型(LicenseType=1,2,3),分为宽松型,弱限制型以及限制型.
自变量中的编程语言和应用领域为无序分类变量,使用两组虚拟变量表示,其中编程语言中的VB和应用领域中的游戏(Game)为参照类,我们将上述变量带入次序回归模型进行拟合.
次序回归模型定义如下式:~+++5.
2结果分析根据计划行为理论的三个维度结合有关文献调研,我们提出影响开源许可证选择有9个因素,其中①开发者的开源理念、②开发者对利益的评估等涉及行为态度方面;③开发者所在组织观念的影响、④社区偏好的影响、⑤许可证流行度和复杂度、⑥许可证兼容性、⑦其他项目的影响等涉及主观规范方面;⑧对项目特征的评估、⑨许可证选择结果的影响等涉及知觉行为控制方面.
问卷调研结果验证了各个影响因素的相关性.
我们进一步通过拟合次序回归模型验证了项目特征与开源许可证选择的关系,具体分析如下:Table2Factorsaffectingdevelopers'choiceofopensourcelicenses表2开发者选择开源许可证的影响因素(问题4)在选择开源许可证时,您主要考虑的是什么(多项选择题)(Q4)Whatareyourmainconsiderationswhenchoosinganopensourcelicense(multiple-choice)选项数量比例1.
取决于个人的意愿(Accordingtoyourownwill).
2547.
17%2.
考虑所采用的商业模式(Considerthebusinessmodelused).
1630.
19%3.
所在组织的指导原则会影响许可证的选择(Theguidingprinciplesofyourorganizationinfluencedecision).
713.
21%4.
考虑社区中开发者或用户的偏好(PreferencesofdevelopersorusersfromCommunity).
1732.
08%5.
考虑许可证的流行度,是否被广泛使用(Licensepopularity,whethersuchlicenseiswidelyused).
1324.
53%6.
考虑许可证的法律复杂度(Legalcomplexityofthelicense).
1222.
64%7.
许可证之间的依赖,依赖包的许可类型影响许可证的选择(Licensedependency,licensechoicemaybelimitedtothelicensetypeofdependencypackages).
916.
98%8.
相似项目的许可证选择方案(Existinglicensechoicesforsimilarprojects).
713.
21%9.
考虑项目的特征,如采用的编程语言、应用领域、项目规模等(Characteristicsofyourproject(suchasprogramminglanguage,applicationdomain,projectsize)).
916.
98%10.
其他(Other).
59.
43%①开发者的开源理念.
开源理念反映了开发者如何看待开源软件的使用问题,当开发者认为某一个开源许可证所蕴含的开源哲理与16其开源理念相符时,更有可能表现出强烈的选择意愿.
问题研中发现47.
17%的开发者认为个人意愿是影响他们选择开源许可证的一个因素"自由/开源哲学理念(FLOSSphilosophy)"、"为了防止其他人将我们的项目用于商业产品preventotherstakingourprojectandusingitinacommercialproduct,maximizeconsumption)".
理念在许可证选择过程中的重要影响.
关于如何开放源码,不同的开发者有不同的理念,在问题源理念的调研结果中,35.
85%的开发者支持知识共享观念有化,而是期望获得最大的贡献和反馈[2],可能更愿意使用限制型许可证的开发人员更喜欢限制较少的开源许可证[8];而39.
62%素的影响.
Table3Developers'philosophy表3开发者的开源理念(问题5)你最认同哪一种观点(Q5)Whichviewpointdoyouagreewithmost选项1.
软件应该对所有用户自由的,它可以被每个人共享和修改toallusers,itcouldbesharedandmodifiedbyeveryone).
2.
用户有更多的权利以及更少的限制(Usersmightrestrictions).
3.
介于两者之间(In-between).
在问题6(Q6)的关于开发者首选开源许可证的调研结果证,25.
53%的开发者选择了限制型开源许可证,而没有开发者选择弱限制型开源许可证察到的许可证使用情况的分布相吻合.
我们通过交叉图分析开发者支持的开源理念与其首选开源许可证知识共享的开发者相比于支持更多用户权利的开发者更容易选择限制型的开源许可证不完全决定其选择的开源许可证类型,一部分支持知识共享观念的开发者选择了宽松型开源许可证持更多用户权利的开发者也选择了限制型的开源许可证其他方面因素的影响.
Fig.
5Preferredopensourcelicensefordevelopers图5开发者首选的开源许可证JournalofSoftware软件学报问题4(Q4)选项1(option1)反映了开发者的开源理念(表2),调的开发者认为个人意愿是影响他们选择开源许可证的一个因素.
此外开发者还在补充回答中提到为了防止其他人将我们的项目用于商业产品,最大化耗费开源资源(Topreventotherstakingourprojectandusingitinacommercialproduct,maximizeconsumption)".
也进一步说明了开源在问题5(Q5)的调研(表3)中,我们得到在开发者支持何种开的开发者支持知识共享观念,一定程度上说明他们中许多人不希望源代码被第三方私可能更愿意使用限制型许可证;24.
53%的开发者则支持更多最终用户权利39.
62%的开发者没有明显的倾向性,他们更有可能受到其他一些因Developers'philosophyaboutopensource开发者的开源理念你最认同哪一种观点(Q5)Whichviewpointdoyouagreewithmost数量比例它可以被每个人共享和修改(Softwareshouldbefreetoallusers,itcouldbesharedandmodifiedbyeveryone).
1935.
85%(Usersmighthavemorerightsandfewer1324.
53%2139.
62%的关于开发者首选开源许可证的调研结果(图4)中,显示75.
47%的开发者选择了宽松型开源许可而没有开发者选择弱限制型开源许可证,总体上与GitHub数据集观我们通过交叉图分析开发者支持的开源理念与其首选开源许可证,发现支持知识共享的开发者相比于支持更多用户权利的开发者更容易选择限制型的开源许可证.
然而,开发者的开源理念并一部分支持知识共享观念的开发者选择了宽松型开源许可证,而另一部分支持更多用户权利的开发者也选择了限制型的开源许可证,说明开发者选择开源许可证时通常受到除开源理念以外Fig.
5Preferredopensourcelicensefordevelopers开发者首选的开源许可证吴欣等:开源许可证的选择:挑战和影响因素17②开发者对利益的评估.
开源并不一定出于利他主义或意识形态,它也可以出于健康的自身利益[33].
开发者参与开源获得的利益可以分为经济利益以及非经济利益.
一是经济利益方面,虽然开源软件第一眼看上去似乎是反利润的,但越来越多的企业或组织已经将开源思想纳入到他们的商业战略[47].
(表2)问题4选项2(option2)的结果显示30.
19%的开发者认为其采用的商业模式是选择开源许可证的考虑因素.
在问题7(Q7)关于开发者如何看待开源商业的调研结果中(表4)发现,69.
81%开发者支持开源商业,认为可以促进开源的发展,也有13.
21%开发者反对通过开源获得经济利益,认为这是不道德的,而16.
98%的开发者保持中立态度.
Table4Developers'viewonopensourcecommercialization表4开发者如何看待开源商业化(问题7)您如何看待开源软件的商业化换句话说,就是通过使用开源软件来获得经济利益.
(Q7)WhatdoyouthinkaboutthecommercializationofopensourcesoftwareInotherwords,togaineconomicbenefitbyusingopensourcesoftware.
选项数量比例1.
支持.
它可以促进开源的发展(Support.
Itcouldpromoteopensourcedevelopment).
3769.
81%2.
反对.
这是不道德的(Oppose.
Itwouldbeimmoral).
713.
21%3.
介于两者之间(In-between).
916.
98%针对支持开源商业和保持中立态度的46名开发者,我们继续调研他们是否采用以及采用了何种商业模式(表5),调研发现,其中69.
57%的开发者在实际开发中采用了商业模式,包括:双重授权、支持服务、互补产品、闭源销售和赢在声誉等.
应用最广泛的是生产互补产品(43.
48%),是指基于开源的计算或服务项目提供商业的插件或配套硬件等,如,销售CD版的Linux,销售Eclipse的商业插件[48].
其次是支持服务(32.
61%),是指针对开源软件项目为客户提供支持、维护、开发、咨询或培训服务,或提供与开源相关的审计和法律服务等,例如mLab为用户提供数据库项目的托管服务,RedHat为付费用户提供"知识产权保障计划"[48].
再次是双重授权(30.
43%),通常包含两种方式:一是在开源许可下提供有限的或精简版的软件产品,而在专有许可证下提供增强的或升级版的软件产品[48],开源免费版主要用于扩大产品可见性和知名度,例如开发工具Pycharm同时提供社区免费版以及增强功能的企业版;二是针对同一个项目同时提供开源许可和商业许可,这里采用的开源许可证通常具有copyleft特性,主要是为了扩大用户群及降低竞争对手生产盗版私有产品的机会,而为那些希望不受copyleft影响的用户提供商业许可,例如MySQL和Sleepcat的商业策略.
而后是赢在声誉(26.
09%),为了推广技术或在行业中建立新的标准,将其项目开源,不仅有利于后续产品的推广,还可以从商标、广告中获取经济利益.
最后是闭源销售(6.
52%),是指将开源软件与私有软件相结合,并作为私有软件销售,如AWS提供了ApacheHadoop软件的商业版本,然而仅靠销售软件获利并不容易,开源社区已经提供了该产品的免费版本,只有能够为产品增加相当大的价值时,才能产生可观的利润[46].
JournalofSoftware软件学报18Table5Businessmodelusedbydeveloper表5开发者采用的商业模式(问题8)你采用的开源业务模式是(Q8)Youropensourcebusinessmodel(multiple-choice)选项数量比例1.
无(None).
1430.
43%2.
双重授权,提供定制服务(Dualauthorization,providingcustomizationservice).
1430.
43%3.
提供技术培训或售后服务(Providetechnicaltrainingorafter-salesservice).
1532.
61%4.
生产基于开源软件的互补产品(Complementaryproductsbasedonopensourcesoftware).
2043.
48%5.
闭源销售(Closed-sourcecommercialization,closesourcecode,andsellsoftware).
36.
52%6.
获得声誉(Winthereputation).
1226.
09%7.
其他(Other).
12.
17%二是非经济利益方面,开发者参与开源还可能有经济利益以外的目的,开发者可以通过选择不同的许可证类型以期获得不同的非经济利益,例如限制型许可证可以提供更高的贡献可见性,开发者更容易获得期望的认可、声誉或职业机会[28],而宽松型许可证对用户没有限制,容易获得更大的用户群[36].
问题9(Q9)调研发现(表6),开发者通过开源获得的非经济利益主要包括提升个人名誉(81.
13%)、获得挑战乐趣(71.
7%)、社区开发者的技术支持(58.
49%)、职业发展(52.
83%)、提升产品可见度(58.
49%)、建立行业标准(32.
08%)、广泛的用户基础(41.
51%)、还有开发者提到"我还用开源库发表了论文(Ialsopublishedthelibrariesaspapers)"、"企业间合作的投资安全(Safetyofinvestmentforcollaborationbetweencompanies)".
Table6Thenon-economicbenefitsofopensource表6开源的非经济利益(问题9)开源给你带来什么好处(多项选择题)(Q9)Whatbenefitsdoesopensourcebringtoyou(multiple-choice)选项数量比例1.
个人声望(Personalreputation).
4381.
13%2.
产品可见性(Productvisibility).
3158.
49%3.
建立行业标准(Establishmentofindustrystandards).
1732.
08%4.
挑战的乐趣(Challengefun).
3871.
7%5.
职业发展(Careerdevelopment).
2852.
83%6.
扩大用户基础(Broaduserbase).
2241.
51%7.
社区中开发者支持(Supportofdevelopersfromthecommunity).
3158.
49%8.
其他(Other).
23.
77%③开发者所在组织观念的影响.
当开发者代表组织或在特定社区进行开源时,通常也需要考虑所选择的许可证是否符合其所在组织的观念,而避免不必要的纠纷,例如上文中提到的在BSD社区中应避免选用GPL类开源许可证.
表2选项3(option3)的结果吴欣等:开源许可证的选择:挑战和影响因素19显示13.
21%的开发者认为其所在组织的观念可以影响其选择开源许可证.
④社区偏好的影响.
不同的开源许可证类型不同程度地吸引开源社区中的贡献者和用户,例如:宽松型许可证允许与私有软件合并,因此对商业用户更有吸引力,而一些社会性质项目的开发者可以通过选择限制型许可证来吸引更多的开发人员[8],因为限制型许可证往往产生更强的社会认同感[15];Sen等人还发现,受到工作挑战激励的人更喜欢有适度限制的许可证,而那些重视诸如地位或机会之类外在动机的人更喜欢宽松的许可证.
(表2)问题4选项4(option4)结果表明32.
08%的开发者认为贡献者和用户对不同类型许可证的偏好影响其选择开源许可证,⑤许可证流行度和复杂度.
(表2)问题4选项5(option5)结果表明24.
53%的开发者慎重考虑了开源许可证是否被广泛使用,开发者通常被建议使用现有的经过实践检验的许可证,而不是起草一个新许可证.
而选项6(option6)结果表明22.
64%开发者认为许可证法律复杂度是影响其选择开源许可证的重要因素,例如开源许可证中准据法的条款使得开发者不得不考虑其知识产权被合理使用的范围.
⑥许可证兼容性.
(表2)问题4选项7(option7)结果表明16.
98%的开发者认为项目之间的依赖导致的许可证兼容性问题是其选择开源许可证时考虑的因素,这种情况常常发生在使用了限制型开源许可证的项目.
开发者在补充回答中也明确指出"许可证的权限,如项目的副本应以原始项目为核心,采用相同的许可证(Restrictionsandpermissionofthelicense(copyoftheprojectshouldcoretheoriginalproject,staysunderthesamelicense))".
⑦其他项目的影响.
(表2)问题4选项8(option8)结果表明13.
21%的开发者为项目选择开源许可证时可能考虑与其类似项目或者是其他大型知名开源项目所使用的开源许可证.
例如,开发者补充到"我只是模仿大型库的许可方式,比如scikitlearn(Ijustmimicwhatbiglibrariesaredoing,e.
g.
scikitlearn)"等.
⑧对项目特征的评估.
(表2)问题4选项9(option9)的调研结果发现仅16.
98%的开发者会根据项目的特征考虑不同的开源许可证,一定程度说明项目特征因素在开发者实际选择开源许可证并不重要.
鉴于项目特征对开发者的重要性和可评估性,我们分析了项目特征与开源许可证类型的具体关系,结合文献调研解释其原因,为开发者参考项目特征选择开源许可证提供参考.
我们通过对3.
1中选取的4704个项目进行定量分析.
我们从项目中提取编程语言、应用程序描述、大小(单位为kb)、创建时间和许可证信息,并根据5.
1(2)中对变量设定原则得到编程语言(PL)、应用领域(Domain)、项目大小(Size)、项目年龄(Age)和许可证类型(LicenseType)等信息(项目在各变量维度上的分布如图6、图7、图8所示),并进行相关关系分析(表7)及次序回归拟合(表8).
回归模型通过了平行线检验,说明模型是有效的,项目特征与许可证类型有关,伪R方表示项目的四个特征对许可证类型的解释程度,R2(CoxandSnell)值为0.
169,说明开源许可证的选择还受到项目的其他特征或者项目特征以外的其他因素的影响,与上述调研结果是相符的,也一定程度地说明了仅仅通过相似项目为开发者推荐许可证是不全面的.
从表7的相关系数和表8的回归模型数据中可以发现,项目年龄与许可证类型的关系并不显著,可以认为在近一年里许可证类型的使用分布情况变化不大.
项目规模与许可证类型的关系是正向显著的,表明项目规模越大,越容易选择限制较强的许可证,正如FSF的常见问答中也建议对于代码量较小的项目可以使用限制较少的许可证,而且项目规模越大,开发者可能投入了更多的努力,限制型许可证可以更好地保护开发者的努力不被第三方获取.
从编程语言和应用领域这两个分类变量的置信区间估计值及回归系数(表8)可以观察到,软件开发类、流行技术类、教程等领域更容易选择宽松型许可证,而在终端应用类、底层相关类、游戏等领域限制型许可证比在前述其20他领域中的限制型许可证更常见.
从编程语言来看,编程语言Objective-C、PHP、Python更容易选择限制型许可证.
正如我们所了解的硬件和系统开发等,而SQL用于数据库领域,VB主要用于游戏开发以及对软件进行二次开发C#等倾向于应用开发的语言,前者更偏向于面向底层开发或者其面向特定的受众对比不同类型的开源许可证分别在编程语言和应用领域上的差异代码,而对于大众市场的软件开发人员通常把核心产品的源代码作为公司盈利的宝石以避免竞争对手从访问源码中获得搭便车的好处[45],另一方面对于底层相关领域的技术实现相对复杂不希望源码被第三方私有化,且采用限制型许可证可以避免因克隆产生过多分支版本而影响原版本的发展和权威Fig.
6Distributionofprojectsinprogramminglanguagesanddomains图6项目在编程语言和应用领域的分布Fig.
7Distributionofprojectsinsizeand图7项目在目大小、项目年龄和开源许可证类型上的分布425549410567621657473485734440100200300400500600700项目数量编程语言JournalofSoftware软件学报编程语言C、C++、SQL、VB相比于其他语言C#、Java、JS、正如我们所了解的,C、C++通常用于服务端的服务程序开发、主要用于游戏开发以及对软件进行二次开发,相比于Java、Python、前者更偏向于面向底层开发或者其面向特定的受众.
交叉分析统计图(图9)可以直观对比不同类型的开源许可证分别在编程语言和应用领域上的差异,可能的原因是,一方面由于终端用户很少需要源而对于大众市场的软件开发人员通常把核心产品的源代码作为公司盈利的宝石,使用限制性较强的许可证可另一方面对于底层相关领域的技术实现相对复杂,开发者通常且采用限制型许可证可以避免因克隆产生过多分支版本而影响原版本的发展和权威.
Fig.
6Distributionofprojectsinprogramminglanguagesanddomains项目在编程语言和应用领域的分布Fig.
7Distributionofprojectsinsizeandage项目年龄和开源许可证类型上的分布4442680947394351184148050010001500200025003000软件开发终端应用流行技术底层相关教程游戏项目数量应用领域吴欣等:开源许可证的选择:挑战和影响因素21Fig.
8Distributionofprojectsinlicensetype图8项目在开源许可证类型上的分布Fig.
9Distributionofopensourcelicensetypeusageinprogramminglanguagesanddomains图9开源许可证不同类型在编程语言和应用领域的使用分布3886,83%114,2%704,15%宽松型弱限制型限制型0%20%40%60%80%100%CC#C++JavaJSObjectiv…PHPPythonSQLVB宽松型弱限制型限制型0%20%40%60%80%100%宽松型弱限制型限制型JournalofSoftware软件学报22Table7Correlationcoefficient表7相关系数MSD123451.
Age58.
3627.
8301-0.
067**-0.
209**0.
032*-0.
0072.
PL5.
182.
648-10.
032*-0.
246*-0.
0043.
Domain1.
911.
341--10.
092**0.
229**4.
Size2.
020.
730---10.
060**5.
LicenseType1.
320.
720----1注意:列标题中1,2,3,4,5分别表示项目年龄、编程语言、应用领域、项目规模和许可证类型.
*p<0.
05.
**p<0.
01.
***p<0.
001Table8Estimateofparameter表8参数估计值LicenseType95%CIcoefficientwaldupperlowerAge0.
00613.
4250.
0030.
009Size0.
320***27.
4980.
2010.
440PLC0.
0400.
068-0.
2600.
339C#-1.
365***62.
205-1.
704-1.
026C++-0.
3083.
661-0.
6240.
008Java-1.
921***88.
197-2.
322-1.
520JS-2.
635***115.
166-3.
117-2.
154Objective-C-2.
180***108.
830-2.
590-1.
771PHP-0.
966***28.
856-1.
318-0.
613Python-0.
867***26.
086-1.
200-0.
534SQL-0.
3441.
408-0.
9130.
224VB0a---DomainDevelop-1.
159***34.
861-1.
543-0.
774App-0.
472*6.
0510.
0960.
849Popular-0.
998***17.
500-1.
466-0.
531Underlying-0.
2951.
800-0.
7260.
136Tutorial-0.
954**10.
150-1.
541-0.
367Game0a---df16***N4704R2CoxandSnell0.
169Nagelkerke0.
258McFadden0.
174*p<0.
05.
**p<0.
01.
***p<0.
001吴欣等:开源许可证的选择:挑战和影响因素23⑨许可证选择结果的影响.
由于社区的贡献者和用户对开源许可证类型存在不同偏好,一定程度影响着他们是否参与或接受该项目,且不同开源许可证的类型可以带来不同的开源利益,从而对项目的发展带来一定的影响.
一方面,开发者可以通过分析其他项目许可证选择结果的影响,为自己选择开源许可证提供决策支持;另一方面,开发者可以根据个人开源项目发展趋势或经验进行判断,调整对开源许可证的选择.
我们在问题10(Q10)调研了他们是否为项目变更开源许可证及变更原因,53名回复者中有7名开发者(13.
20%)回复了该问题,表明他们为项目更换过许可证,主要原因包括支持项目的商业化、使项目更容易被接受以扩大用户群、通过更强的限制以达到保护项目不被商业化的目的,以及尽量避免项目因许可证涉及法律纠纷等("IhavechangedfromBSDlicensetoApachelicenseastheformeroneismoresuitableforEUlaws","Ihavemodifiedsomeprojects,mainly"Libraries",fromGPL-v3toLGPL-3.
0toeaseprojectacceptance.
","SwitchedfromGPL2.
0afterlearningaboutitscomplexitiesandissues","WehadthingsinGPLthatwemovedtoMITasthatisuseableincommercialprojects","IchangedfromGPLtoAGPLtoprotectmyapplication'sAPI'saswell.
","Tobroadentheconsumeraudience","Switchedfromclosedsourcetoopen5yearsago.
").
而前文中提到的关于Redis变更自研模块的许可证,RedisLabs的联合创始人兼首席技术官YiftachShoolman表示变更的目的是为了保护开发者的利益和开源软件的持续发展.
"多年来,云提供商通过销售基于开源项目的云服务,可从中获利数亿美元,可这些项目实际上并不是他们自己开发的,如Docker,Elasticsearch,Hadoop,Redis和Spark.
这阻碍了社区投资开发开源代码,因为任何潜在的好处都归云提供商而不是代码开发人员或他们的赞助商[4]".
此外,问题11(Q11)收到9个回复.
其中,部分回复的内容与开源许可证的选择无关,例如,"希望你们可以提供一篇选择开源许可证的参考,方便我们这些开源的朋友学习!
","Youcanreadallaboutithere:https://www.
computerweekly.
com/blog/Open-Source-Insider/How-to-create-a-successful-open-source-business-model","*Publicmoneymustalwaysturnintopubliccode*It'simportantforOSadopterstounderstandthealternativecostoftheirchoice(howmuchwouldhavecostthemtodevelopthatpieceofOScode)*MarketcompetencyisthemainreasonofOSlicenseviolation".
同时,部分回答与问卷中前述问题的回复观点重复,例如,"MIThydra","IpreferMITforitssimplicityandusagefreedom","GPLv2isstillthemostpopular,andhasthemostbenefittothedeveloper.
LiberallicenseslikeMITandApachemostlybenefithardwareandsystemsvendors","Ibelieveinopensourcesoftware.
Bychoosing(A)GPLoverMITorApache,Iforceotheruserstosharetheirwork.
Anybodycouldmakemoneyfrommysoftware,eveniftheyhavetosharetheirimprovements(makeitreadyformanyconsumers).
Buttheyneverdothis.
Theydon'tcareaboutopensource.
Justwanttoprofitoffmywork","WechoseGPLv3specificallybecauseweinvestedalotofworkinoursoftware,andwedidnotwantotherstosimplytakeourwork,rebadgeit,andcommercializeit.
Wealsomakethesoftwareavailableunderacustomproprietarylicense,forthosewhowantit".
因此,我们过滤了与开源许可证的选择无关的回答,而对于与问卷前述问题观点的重复的内容,我们将其归到了Q6和Q4的结果之中,这几名受访者分别在Q6和Q4补充回答中的回复与其在Q11中的回复观点相同.
5.
3结论我们发现,开发者的开源理念、对利益因素的评估、开发者所在组织的观念、开源社区对许可证的偏好、许可证流行度和复杂度、许可证兼容性、其他项目的影响、开发者对项目特征的评估,以及许可证选择结果的影响,都可能在某种情况下影响开发者为项目选择许可证(图10),且开发者选择开源许可证并非受这些因素中单个因素的影响,而是受到多方面因素的影响.
首先,行为态度方面是影响开发者选择开源许可证过程中最常见的影响因素,其中支持copyleft观念的开发者相比支持更多用户权利的开发者更可能选择限制型开源许可证,同时开源不仅可以24为开发者带来声誉、认可等非经济利益,还可以带来经济利益中,包括生产互补产品、支持服务、双重授权、赢在声誉及所采用的不同商业模式考虑不同的开源许可证;其次环境的影响也是其选择开源许可证重点考虑的方面,例如所在组织的观念后,大量研究关注于开源许可证与项目之间的关系,然而我们通过调研和定量分析发现的过程中,项目特征一定程度影响选择结果,但其并不是必然考虑的因素求出发,通过综合判断分析,才能为开发者推荐适用的开源许可证Fig.
10Factorsinfluencingthechoiceofopensourcelicense图10开源许可证选择的影响因素6讨论本文针对开发者难以根据自身需求选择合适的许可证的现状可证时通常会面临哪些困难②开源许可证的组成要素有哪些问卷调研200名GitHub开源开发者,获得了开发者选择开源许可证通常面临的两类困难和析GitHub开源项目中使用最广泛的10种开源许可证项目特征这一影响因素,通过对项目特征因素拟合次序回归模型我们建立的开源许可证框架可以帮助开发者理解开源许可证的构成和差异缺乏法律知识背景,开源小企业可能没有专业的法务团队支持常常使他们感到困惑,开源许可证框架可以帮助开发者基于之间的差异是十分有效的,例如在专利授权条款中有无对违反专利授权的限制可以体现出该开源许可证对开发者利益保护程度、根据在分发义务条款中对衍生作品分发的限制可以将开源许可证划分为宽松型型等.
开源开发者或开源企业还可以利用开源许可证框架快速构建满足自身需求的开源许可证大量不同类型的开源许可证,这些开源许可证仍然可能无法满足开源开发商的所有需求许可证,例如,MongoDB改用一种新的服务器端公共许可证JournalofSoftware软件学报还可以带来经济利益,越来越多的企业和个人已经将商业模式应用到开源赢在声誉、闭源销售等,开发者可以根据其对不同利益类型的偏好其次,尽管开源许可证的选择是属于个人行为,但开发者所处社会例如所在组织的观念、社区偏好及开源许可证因素的影响;最然而我们通过调研和定量分析发现,开发者实际选择开源许可证但其并不是必然考虑的因素,开源许可证选择工具需要从开发者实际需才能为开发者推荐适用的开源许可证.
uencingthechoiceofopensourcelicense开源许可证选择的影响因素本文针对开发者难以根据自身需求选择合适的许可证的现状,研究了以下问题:①开发者为项目选择开源许开源许可证的组成要素有哪些③哪些因素影响开发者选择开源许可证我们通过获得了开发者选择开源许可证通常面临的两类困难和9大影响因素,并通过分种开源许可证,建立了一个开源许可证框架,我们还针对开发者普遍关心的通过对项目特征因素拟合次序回归模型,验证了项目特征与开源许可证选择的关系.
我们建立的开源许可证框架可以帮助开发者理解开源许可证的构成和差异.
刚刚接触开源的开源开发者通常开源小企业可能没有专业的法务团队支持,开源许可证之间的差异以及条款中包含的法律词汇开源许可证框架可以帮助开发者基于10个条款维度分析开源许可证,对理解不同开源许可证例如在专利授权条款中有无对违反专利授权的限制可以体现出该开源许可证对开发者根据在分发义务条款中对衍生作品分发的限制可以将开源许可证划分为宽松型、弱限制型和限制开源开发者或开源企业还可以利用开源许可证框架快速构建满足自身需求的开源许可证.
尽管开源社区已有这些开源许可证仍然可能无法满足开源开发商的所有需求,他们试图构建自己的开源改用一种新的服务器端公共许可证(SSPL)力求堵住一些云提供商利用其开源代码生产数吴欣等:开源许可证的选择:挑战和影响因素25据库的托管商业版本而无需开源的缺口17.
因此,我们提出的开源许可证框架还可以帮助开发者、社区或开源企业快速构建满足自身需求的开源许可证,在此框架基础上构建的木兰宽松许可证,第2版(MulanPSLv2)通过OSI认证也进一步证明了该框架的有效性和通用性.
我们揭示的影响开源许可证选择的9大因素可以帮助开发者或开源企业从不同角度全面分析自身的需求来指导开源许可证的选择.
不同类型的开源许可证可以带来不同的开源利益,且一定程度影响贡献者和用户是否参与或接受该项目,从而对项目的发展带来一定的影响.
开源企业参与开源的目的与其需求直接相关,他们通常依据自身不同需求针对不同的开源项目在不同的应用场景下选择不同的开源许可证,例如,RaúlKripalani在分析了35家企业75个开源项目的许可证后得出,唯一使用相同许可模式的公司只有Palantir(硅谷一家数据挖掘公司)[49].
因此,企业对自身业务需求的准确把握需要综合考虑各方面因素,这对于开源许可证的选择至关重要.
本文结合问卷和文献调研得到的影响开发者选择开源许可证的9个因素反映了开发者选择开源许可证不同方面的考虑,我们建议开发者可以从9个影响因素的维度全面准确分析自身需求,在充分理解开源许可证条款的基础上做出综合判断,从而选择符合自身需求的开源许可证.
此外,我们的研究结果还可以帮助业界清晰了解开发者选择开源许可证面临的实际困难和影响因素,采用更好的策略来解决开发者遇到的困难,例如改进现有的开源许可证选择工具来帮助开发者结合自身需求选择合适的许可证提供决策支持.
目前业界和学术界实现的基于开源许可证条款差异(OSSWATCHLicenceDifferentiator)、基于简单应用场景(ChooseALicense)、或基于相似项目推荐[18]的开源许可证选择工具,没有全面考虑到开发者的实际困难和需求,难以帮助开发者选择适用的开源许可证.
我们结合定量分析和调研也发现尽管项目特征和开源许可证类型存在一定的相关性,但其并不是开发者选择开源许可证时必然考虑的因素,开源许可证选择工具需要从开发者实际需求出发,通过综合判断分析,才能为开发者推荐适用的开源许可证.
本文得到的9个影响因素维度为实现基于用户需求的开源许可证选择工具提供了思路,通过识别开发者的需求,借鉴相同或相似需求的成功或著名开源项目所选择的开源许可证,为开发者推荐适用的开源许可证.
我们的未来研究方向是如何获取和利用开发者的不同需求,结合不同开源项目的特征和应用场景,为开发者推荐合适的开源许可证.
7局限性论文的局限性主要体现在数据的有效性、方法的构造性和结论的普适性上面.
第一个局限性是数据的可访问性和一致性.
首先,本文通过GitHubsearchAPI爬取的项目数据只包含有限项目仓库,我们获取了编程语言流行度排名前十的总共9672个项目仓库,这些项目仓库包含了近一年的数据,一些仓库没有公开或者无法通过GitHubsearchAPI获得,在数据清洗过程中,我们去掉了许可证为空或Other的项目,因其无法提取项目的许可证信息;其次,数据本身可能无法反映实际的情况.
在5.
2中我们定量分析了项目特征与许可证类型之间的关系,其中项目的特征仅考虑了编程语言、应用领域、项目规模和项目年龄,可能存在其他的特征影响着许可证的选择,例如项目的技术复杂性等.
尽管这可能导致结果分析存在一定的局限性,但编程语言的流行度与软件开发领域发展和市场热度息息相关,通常是开发者关注的热点领域,而对最近一年数据的开源许可证使用情况分析也正好反映开发者选择开源许可证的现状.
因此,我们认为所获取的数据能够适用于本文研究工作的目的.
第二个局限性是方法的构造性.
首先,本文主要采用主题分析方法和计划行为理论等定性分析方法对调研结果进行分析,然而采用定性研究结果指导实践具有一定的局限性;其次,在分析开源许可证选择影响因素时,我们认17https://www.
sohu.
com/a/260120443_465914JournalofSoftware软件学报26为行为意向能较好地解释开发者选择开源许可证的行为,因此借鉴了计划行为理论的三个维度设计调研问卷,然而从计划行为理论的研究进展可以发现,计划行为理论的主要变量的概念定义一直是研究者们争论的焦点[40].
这可能对分析结果的准确性造成一定的影响.
我们通过预调研的方式确保问卷设计的合理性及计划行为理论维度的适用性,并对定性分析的结果进行交叉验证从而减少这类影响.
第三个局限性是结论的普适性.
在调研中随机选取的200名开发者作为调研对象不能代表所有开发者的意见,由于邮件调研的特殊原因,一部分开发者的邮箱地址为公司客服邮箱或者已注销或不再使用,难以得到有效的回复,且开发者容易受到当时环境、心理等因素的影响,可能存在其他未调研到的实际困难和影响因素,使研究结果的应用范围和应用程度受到一定的局限.
由于国际邮件调查的回复率普遍较低,在软件工程领域,邮件回复率通常在6%-36%[40],而我们的回复率在25%,是一个相对较高的回复率.
同时,我们通过阅读大量文献、与相关企业开发人员访谈设计问卷、预调研等多种方式确保问卷的合理性和选项设计涵盖的普遍性,通过实际问卷调研来获取更广泛的反馈并细致分析结果,最终得到开发者选择开源许可证时面临的困难和影响因素.
我们认为所得研究结果可以反映当前开发者普遍面临的困难及其选择开源许可证过程中主要的考虑因素,具有普适性.
8总结本文首先通过问卷的方式调研了开发者在为项目选择许可证时通常会遇到的两类困难,即因许可证的相似性和法律复杂性造成开发者难以理解开源许可证之间的差异,以及开发者对如何全面考虑各方面因素进行最佳决策感到困惑,从而有助于清晰理解开发者选择开源许可证面临的实际困难.
其次,我们通过对比分析最广泛使用的十种开源许可证的条款,将许可证内容划分为10个维度,并建立起开源许可证框架,可以帮助开发者清晰认识和理解开源许可证的内容构成,便于开发者从各个维度出发对比和分析开源许可证之间的差异,减轻开发者解决上文提到的第一类困难的压力;同时,开发者还可以利用开源许可证框架快速构建符合自己特定需求的新开源许可证.
最后,我们通过对开发者选择开源许可证考虑因素的调研和分析,得出影响开源许可证选择存在多方面因素,包括开发者的开源理念、对利益的评估、组织观念和社区偏好的影响、许可证流行度或兼容性问题、其他项目的影响、个人对项目的评估以及许可证选择结果对项目的影响,为开发者结合自身需求选择合适的许可证提供决策支持和经验参考,可以帮助开发者解决上文提到的第二类困难,为实现基于用户需求的许可证选择工具提供借鉴.
吴欣等:开源许可证的选择:挑战和影响因素27References:[1]YuxiaZhang,MinghuiZhou,MockusAudris,ZhiJin.
Companies'ParticipationinOSSDevelopment-AnEmpiricalStudyofOpenStack.
IEEETransactionsonSoftwareEngineering.
PP.
1-1.
10.
1109/TSE.
2019.
2946156.
[2]Kaminski,HalinaandPerry,Mark,"OpenSourceSoftwareLicensingPatterns"(2007).
ComputerSciencePublications.
10.
https://ir.
lib.
uwo.
ca/csdpub/10.
0.
[3]"LinusTorvaldscreditsGPLwithpreventingLinuxfragmentation"byJimLynch,InfoWorld,sep5,2016,fromhttps://www.
infoworld.
com/article/3112778/linus-torvalds-credits-gpl-with-preventing-linux-fragmentation.
html.
TabbyCloud迎来一周岁的生日啦!在这一年里,感谢您包容我们的不足和缺点,在您的理解与建议下我们也在不断改变与成长。为庆祝TabbyCloud运营一周年和七夕节,TabbyCloud推出以下活动。TabbyCloud周年庆&七夕节活动官方网站:https://tabbycloud.com/香港CN2: https://tabbycloud.com/cart.php?gid=16购买链...
目前在标准互联这边有两台香港云服务器产品,这不看到有通知到期提醒才关注到。平时我还是很少去登录这个服务商的,这个服务商最近一年的促销信息比较少,这个和他们的运营策略有关系。已经从开始的倾向低价和个人用户云服务器市场,开始转型到中高端个人和企业用户的独立服务器。在这篇文章中,有看到标准互联有推出襄阳电信高防服务器100GB防御。有三款促销方案我们有需要可以看看。我们看看几款方案配置。型号内存硬盘IP...
HostHatch在当地时间7月30日发布了一系列的促销套餐,涉及亚洲和欧美的多个地区机房,最低年付15美元起,一次买2年还能免费升级双倍资源。商家成立于2011年,提供基于KVM架构的VPS主机,数据中心包括中国香港、美国、英国、荷兰、印度、挪威、澳大利亚等国家的十几个地区机房。官方网站:https://hosthatch.com/NVMe VPS(香港/悉尼)1 CPU core (12.5%...