冯昌扬
(华中师范大学信息管理学院 武汉 430079)
开放代码在学术交流中越来越受到重视。开放代码可以释放软件的巨大潜力,让不同机构之间能够共享代码,避免重复劳动。在过去几年中,许多国家政府、政策制定者、科学基金等科技资助机构、专业协会、出版商和科学期刊,都强调了开放代码的重要性和益处。一些国家和国际组织一直在积极推动开放代码,因此,了解它们的开放代码计划对我国开展开放代码活动有借鉴意义。
目前,许多国家和国际组织如英国、澳大利亚、美国、新西兰、欧盟委员会(European Commission)、研究数据联盟(Research Data Alliance,RDA)、软件遗产项目(Software Heritage)等都开启了开放代码计划。
英国政府的开放代码计划起步较早,发展比较成熟。特别是技术社区,一直致力于开放和重复使用源代码[1]。早在2010年,英国政府就发布了《政府的开源战略》(An Open Source Strategy for Government)[2],希望通过鼓励开源思维来鼓励政府内部创新,并通过帮助开发充满活力的市场来鼓励外部创新,从而使IT行业和更广泛的经济体从政府生成的信息和开发的软件中受益。2012年,他们又发布了《采购政策说明8/11:采购开源IT》(Procurement Policy Note8/11:Procurement of Open Source IT)[3],该政策提到“政府部门在购买信息通信技术解决方案时,应确保公平地考虑开源软件”。2016年,英国政府发布《数字服务标准》(Digital Service Standard),该标准第8条“开放所有的新的源代码”(Make all new source code open)对开放源代码进行了详细阐述,即“开放所有新源代码,使其可以被再利用,并在合适的许可下发布(如若不能对源代码的特定子集执行此操作,则需提供令人信服的解释)”。该标准认为开放源代码意味着:其他服务可以重复使用用户创建的软件,可以降低整个政府的成本,用户可以避免启动不能轻易结束的技术合同。该标准亦对开放源代码的评估标准进行了解释,要求用户:解释如何使新的源代码开放和再利用,在开放的互联网源代码存储库中存储代码,描述如何接受对代码的贡献和评论,解释如何处理代码的更新和错误修复,解释用于发布代码的许可证,确认拥有知识产权,解释没有公开的代码以及原因,解释另一个部门的团队如何再利用代码[4]。2017年,英国政府部门又发布了《开放并使用开源代码》指南(Be Open and Use Open Source),该指南认为需要公开代码,并使用开源技术来提高透明度,灵活性和问责制[5]。
此外,英国政府还牵头成立了“数字化五国”(Digital 5),旨在促进开放标准、开放源码、开放市场、开放政府。
澳大利亚的开放代码计划主要由联邦政府、数字化转型机构和各州政府实施。
2011年,联邦政府发布《澳大利亚政府机构开源软件指南》(A Guide to Open Source Software for Australian Government Agencies)[6]指导机构“考虑采购的所有软件均为开源软件。”这无疑是联邦政府释放的致力于开源的信号,而govCMS正是将政策付诸行动的例子。联邦政府的开源政策分为三个驱动原则:“原则1:澳大利亚政府ICT采购流程必须积极公平地考虑所有类型的可用软件”,在采购过程中,澳大利亚政府机构必须同时考虑专有和开源软件解决方案,这里的关键驱动因素是物有所值;“原则2:供应商在与澳大利亚政府机构沟通时必须考虑所有类型的可用软件”,供应商必须同时考虑专有和开源软件,联邦政府机构必须在其招标文件中对此进行规定;“原则3:澳大利亚政府机构将积极参与开源软件社区,并在适当的时候做出贡献”,澳大利亚机构将跟上开源软件的全球最佳实践,并将积极参与开源软件社区。
此外,在2013年联邦选举之前,现任联邦政府概述了其对电子政务和数字经济的政策(Coalitions Policy for E-Government and the Digital Economy)[7]。该政策的一个关键方面是在线迁移所有澳大利亚政府的主要服务和与个人的互动,并将2017年定为实现这一目标的现实可行日期。该任政府建立临时数字化转型办公室(Digital Transformation Office,DTO),后改组成数字化转型机构(Digital Transformation Agency,DTA);发布《数字服务标准》(Digital Service Standard)[8]的Alpha版本,该版本改编自英国政府的《数字默认服务标准》(Digital by Default Service Standard)。该标准的第8条标题为:“公开源代码——默认情况下,公开所有新源代码。”[9]DTA认为共享源代码非常重要,其他具有类似需求的用户可以对它进行再利用。同时,开源有助于降低项目和其他人的成本,避免锁定,停止重复,增加透明度,通过其他开发人员的改进增加收益。该标准的Alpha版本实施期间,用户需要表明已考虑过适合其服务的开源许可证;考虑在开源社区广泛采用的平台上发布源代码,例如GitHub。在Beta版本实施期间,用户需展示:如何公开和再利用源代码,例如,存储在存储库中,在许可下发布代码,使用API;为贡献者提供的计划或指导;如何处理代码的更新和错误修复。
部分州政府也鼓励开源。如:《数字西澳大利亚州:西澳大利亚州政府信息通信技术战略(2016—2020)》(Digital WA: State ICT Strategy2016—2020)[10]在其路线图中表示:“政府采购将得到简化......采购选项范围扩大,以促进众包,开源解决方案以及从初创企业和中小企业采购。”
2016年8月,美国行政管理和预算局(Office of Management and Budget,OMB)发布了《联邦源代码政策》(备忘录M-16-21)(Federal Source Code policy,Memorandum M-16-21)[11],其中包括授权联邦机构开源他们开发的代码,以便在联邦政府中广泛使用。这是美国政府第一次制定政策,要求被联邦政府资助的网站、应用程序和其他软件项目发布源代码。该政策还要求各机构根据三年试点计划向公众发布至少20%的用户开发代码。OMB还为联邦机构建立了与开源社区合作的原则和指南,以便在代码开发和改进方面进行协作并迎接共同的挑战。这些要求旨在对机构内部和跨机构的联邦政府软件开发进行改进,消除重复成本,通过加强竞争促进技术创新,实现公众开放性、透明度和可访问性的需求。OMB指示每个联邦机构的首席信息官(CIO)与首席采购官(CAO)协商,制定全机构政策,以实施联邦源代码政策的要求。近年来,美国政府已经发布了一些项目,包括白宫请愿平台[12]和vets.gov的新测试版,code.gov还提供了各种政府开源项目的链接[13]。在奥巴马的两个任期内,他还监督了三个以技术为重点的联邦组织的建立,消费者金融保护局(Consumer Finance Protection Bureau)[14],美国数字服务(United States Digital Service)[15]和18F[16],这三个组织都经常在Github上发布他们的工作。
美国地方政府也逐步加入这项运动。2018年5月,加州技术部宣布了“开源和代码再利用政策”(Open Source and Code Reuse Policy)[17],以提升州政府对开源软件的使用。该政策要求各机构将开发、购买或再利用开源软件作为新的IT项目和财务的第一选择(诸如威胁国家或国家安全的情况则被视为例外情况[18])。该政策还追溯到州政府机构正在使用的软件,要求代理商“广泛地提供这些代码,以便以一致的方式在州政府中重复使用”。该政策指出,在州政府机构中重复使用定制开发的代码“可以为纳税人带来巨大利益,包括降低重复成本”,旨在“促进州政府的创新和协作”。除了上述要求,该政策还要求创建在线存储库code.ca.gov用以发布代码。
新西兰的《新西兰政府开放获取和许可——软件扩展》(New Zealand Government Open Access and Licensing—Software Extension,NZGOAL-SE)[19]为各机构提供了实现开源的方法。该政策通过推荐一系列开放许可选项,概述使用它们的好处并明确如何操作,从而促使各部门根据条款发布软件源代码,以便其他部门可以调整或修改代码以构建自己的软件。它还解释了与代理商的软件开源许可相关的法律和政策背景;制定了一系列政策原则指导各机构公开分享软件代码;主张为此目的使用特定的开源软件许可证;为帮助代理商做出具有法律效力且实际有用的决策,该政策制定了审核和发布流程,以指导代理商审核他们建议发布以供再利用的软件。
2000年12月,欧盟委员会制定了一项使用开源软件(OSS)的战略,该战略为在UNIX系统上推荐的Apache Web服务器的识别和使用创建了背景。2003年7月,该战略的修订版被提交给技术信息学委员会(Comité Technique Informatique,CTI),该战略推荐使用开源软件为欧盟的博客和公共论坛。在该战略执行的2007—2010年期间,欧盟开发了欧盟公共许可证[20](European Union Public Licence,EUPL),现已被私营部门广泛使用。
2010年初,委员会对组织内的开源软件进行了评估。在前十年欧盟委员会使用开源软件的基础上对该战略进行修订,修订版战略涵盖了2011—2013年。该战略的关键组成部分是:委员会将继续通过产品管理程序采用开源技术和产品;委员会将在IT采购中考虑开源解决方案和专有解决方案; 对于新信息系统的开发,开源将是首选;委员会将澄清开源的立场等[21]。
研究数据联盟为开放代码专门设立了软件源代码识别工作小组(Software Source Code Identification Working Group)和软件源代码兴趣小组(Software Source Code Interest Group)。
其中,软件源代码识别工作小组认为软件源代码与研究数据和科学文章不同,绝大多数软件源代码是在学术界之外开发和使用的,如在工业界和开发者社区。在实践中,软件源代码被引用的方式通常与在学术出版中完全不同。该工作组的目标是汇集直接参与软件识别的广泛利益相关者小组,计划的输出是给学术界提供具体建议,以确保学术参与者采用的解决方案彼此兼容,特别是与全球数千万开发人员的软件开发实践相容[22]。
软件源代码兴趣小组认为软件源代码在科学研究的所有领域中发挥着关键作用,软件源代码是研究可重复性和可重用性的必要组件。因此,软件源代码应该以与其他研究输入和输出相同的方式进行适当的策划。该兴趣小组提供了一个论坛,讨论有关软件源代码的管理、共享、发现、存档和出处问题。它特别关注产生研究数据和在科学出版物中发挥重要作用的源代码[23]。
软件遗产项目[24]是一项由法国国家信息与自动化研究所主持的计划,其目标是收集、组织、保存和访问所有可用软件的所有源代码。通过构建通用且可持续的软件档案,软件遗产项目旨在为社会、科学和工业建立必要的基础设施。提供单一且通用的存档使得软件源代码随时可用,有助于访问其中包含的知识,支持编程教育,并创建具有该软件所有知识的参考目录,也即一种软件维基百科。软件遗产项目凭借其分布式基础架构及其国际合作伙伴,可确保存档的长期可用性和可靠性。
迄今为止,软件遗产项目已经收集了超过8 300万个软件项目,存档了超过40亿个源文件,以及所有相关的开发历史。例如,存档了阿波罗11号制导系统的源代码[25],推广了Web的NCSA Mosaic Web浏览器的源代码[26],等等。软件遗产项目还与HAL建立了合作伙伴关系,HAL是一个多学科开放档案馆,旨在存放和传播研究级科学文章(包括已出版的和未出版的),以及来自法国或外国教学和研究机构以及公共或私人实验室的论文[27]。此外,该项目还得到了一些国际合作伙伴的支持,如微软、博洛尼亚大学、华为、诺基亚贝尔实验室、英特尔、GitHub等。2017年,软件遗产项目与联合国教科文组织签署了一项协议,支持保存和共享软件源代码。
上述国家和国际组织都十分重视开放代码的贡献,各自在其计划文本中郑重进行了详细说明。这些贡献主要包括:节省时间和金钱,从而更有效地利用资源;鼓励公共和私营部门进行开放式创新;促进经济增长,主要是通过私营部门能够利用和支持政府对其公开发布的软件进行再投资;有助于具有共同或类似目标或利益的公共和私营部门成员用户形成信任社区;通过这些用户社区以单一机构无法实现的方式持续不断地维护已发布的软件代码;在某些情况下,提供用于创建或提供公共数据和服务的方法或算法,可以实现批判性分析,有助于发布机构改进方法或算法。
代码授权许可通常包括作者对代码保留的权利和放开的限制,以及用户获取代码后被准许和禁止执行的操作。上述所有国家和国际组织都明确强调代码授权许可的使用,例如:英国政府明确提出“应该在Open Source Initiative兼容的许可下发布代码”,例如,其政府数字化服务(Government Digital Service)使用MIT许可证。所有公务员产生的代码均自动由英皇享有著作权(Crown Copyright)。澳大利亚政府单独发布文件《澳大利亚政府开源软件许可风险框架》(Australian Government Open Source Software Licensing Risk Framework),概述了了解开源许可风险的重要性,以及提供识别和管理与开源软件许可相关的风险的方法[28]。如前所述,欧盟开发了EUPL,EUPL是欧盟倡议的第一个欧洲自由/开源软件(FOSS)许可证,它是以22种欧洲语言开发的独特法律文书,任何人都可以将其用于软件分发。EUPL的目的是从欧洲机构本身开始,鼓励新一轮的公共行政部门采用FOSS模式来对其软件和知识进行估值。
上述机构或组织大都在其网站列举了适用的例外情况。例如:美国政府在其网站列举了如下几点:①源代码的共享受法律或法规的限制,包括但不限于——专利或知识产权法,出口资产法规(Export Asset Regulations),国际武器贸易管制法规(International Traffic in Arms Regulation)以及管理机密信息的联邦法律和法规;②共享源代码会产生可识别的风险,从而损害国家安全,政府信息的机密性或个人隐私;③共享源代码会对机构系统或人员的稳定性、安全性或完整性造成可识别的风险;④共享源代码会给机构任务、程序或操作带来可识别的风险;⑤CIO认为不开放源代码符合国家利益。同样地,英国政府提出,不开放代码的主要原因是它与尚未公布的政策有关。在这种情况下,在政策发布后应尽快开放代码。它们还出台了《代码不应开放的情况指南》(When Code Should Be Open Or Closed)[29]以及《开放代码的安全注意事项指南》(SecurityConsiderations When Coding in the Open)[30]。
代码审核是开放的前提,也是保证代码质量的基础。例如,新西兰政府建议政府机构遵循审核和发布流程,然后在FOSS许可下发布软件源代码以供重复使用,并在技术和法律团队的要求下提供帮助。该过程包括五个主要阶段:版权相关权评估、例外评估、选择FOSS许可证、申请所选许可证和发布该软件[31]。澳大利亚政府则针对Discovery stage、Alpha stage、Beta stage分别提出了不同的审核评估流程[32]。Software Heritage则是利用Forge跟踪问题和错误,进行代码审查等。此外,Software Heritage也有一组员工专门处理代码审核工作[33]。
开源是推动新兴产业发展并推动产业长期发展的价值所在。从人工智能的爆炸式增长,如TensorFlow,MXNet和PyTorch等框架项目,到Hyperledger,Bitcoin和Ethereum等区块链项目,以及像Kubernetes,Prometheus和Istio这样的基础设施颠覆者,开源无不发挥其作用。就作者所知,我国尚没有政府部门实施开放代码计划,我国亟待加快开放代码行动。上述主要国家和国际组织的开放代码计划可以给我国提供如下启示。
闭源可能会导致对基本相似的代码的重复收购以及纳税人资金的低效使用。开放代码可以促进机构内部和跨机构的员工合作,降低成本,简化开发过程,应用统一标准,并确保创建和提供信息的一致性。我国应该高度重视开放源代码的价值,积极开展与全球范围内开放代码行动的合作。在开放科学与开放社会环境下,开放政府、开放创新都离不开开放代码。所以,如前所述,许多国家政府部门和国际组织都很重视开放代码的价值。从整体上我国政府部门在开放代码行动上对世界所作的贡献不大,这与我国目前所处的世界地位和具备的综合国力有很大反差。我国应该站在开放代码运动的国际前列,积极参与或主导相关行动的实施和政策的制定。
开源软件/代码的保护在我国法律界是一个尚未有明确规范的领域。我国目前保护开源软件的法律主要是《著作权法》和《计算机软件保护条例》。但这两部法律均没有明确定义“开源”。《计算机软件保护条例》还认为“同一计算机程序的源程序和目标程序为同一作品。”但从实际情况来看,开放源程序和发布目标程序是两种不同的行为。软件著作权人依法享有修改权,但是在发行或网络传播时,不提供源代码是无法转让或授予他人修改权的。此外, 《计算机软件保护条例》还提到“软件著作权人可以全部或者部分转让其软件著作权,并有权获得报酬”,其中的部分转让,是否包含修改权的部分转让尚未明晰。另外,还有比如如何确定侵权行为的判断依据等,这些问题的解决方案都是现行法律体系需要补充或完善的内容。
制定开源代码公开标准有助于鼓励和规范开源代码行为。标准制定的过程应该保持理念开放,程序开放,让利益相关方享有知情、评议、参与等权利。制定的标准应和国际标准、其他层级标准、同级其他标准相协调,做到不矛盾、不重复、不交叉,但又立足于中国国情。例如,哪些代码是可以公开的,每年新公开的代码在开发代码总数中占多大比重;哪些代码是暂时不能公开的,多久以后或者什么情况下可以公开;哪些代码是不能公开的,不能公开的情况包括哪些;公开代码需要走哪些程序;闭源代码重新开源需要走哪些程序,等等,这些都是需要在标准里阐述的内容。
文章对一些主要国家和国际组织的开放代码计划进行了特征分析。这些开放代码计划对于在世界范围内促进代码的开放共享,克服代码开放共享的政治、经济、伦理、法律、社会、机构、技术障碍,实现开放研究与开放创新,具有至关重要的作用[34]。虽然不同国家政府部门和国际组织的开放代码行动各具特色,但是它们都有关注和强调开放代码的价值和贡献,注重知识产权,强调代码授权许可,强调例外情况,注重代码、软件审核流程。我国应该高度重视开放代码的价值,借鉴国际上开放代码行动的经验,完善开源软件法律保护体系,制定开源代码公开标准,以便为全面促进代码开放共享、深化科技创新和提升国家创新能力提供政策保障。
(来稿时间:2018年11月)