本文最后更新于
2026-01-01,某些文章具有时效性,若有错误或已失效,请在下方
留言或联系
老夜。
将私有软件源代码上传到Github,构成侵犯商业秘密
第9期
-
侵害商业秘密纠纷案件中,软件源代码应如何主张密点?
-
如何判断多个软件源代码文件“不为公众所知悉”?软件著作权登记是否会导致源代码为公众所知悉?
-
-
因将私有软件源代码上传至Github等开源软件平台导致源代码为公众所知悉的,应如何确定损害赔偿金额?
本案对软件源代码的商业秘密保护的启示,参见文末的案件启示。
案例:深圳花儿绽放网络科技股份有限公司与浙江盘兴数智科技股份有限公司、浙江盘石信息技术股份有限公司侵害技术秘密纠纷案
案号:最高人民法院(2021)最高法知民终2298号
案情简介:原告与被告签署《源代码使用许可合同》。原告按照许可合同约定向被告交付了加密的涉案小程序源代码及相关文件。此后,涉案源代码被用户“luxin212121”发布到Github公共存储库,后被Github平台多个用户复制到其公共存储库。经比对,在Github披露的代码与原告交付给被告的代码,发现披露代码中增加了多个指向被告信息,故原告主张被告及其员工非法披露了原告的技术秘密,应承担连带侵权责任。
根据各方的诉辩意见,本案的争议焦点问题是:(一)花儿绽放公司主张的商业秘密是否成立;(二)盘兴公司是否构成侵权;(三)侵权责任应当如何承担;(四)盘石公司是否应承担连带责任。
反不正当竞争法第九条第三款规定,本法所称的商业秘密,是指不为公众所知悉、具有商业价值并经权利人采取相应保密措施的技术信息和经营信息。本案中花儿绽放公司主张的涉案965个源代码文件构成技术秘密,其主张的20个技术点是对源代码功能进行的概括,仅为了便于鉴定机构理解源代码的逻辑,故本案实际应判定花儿绽放公司主张的涉案965个源代码是否构成技术秘密。
1.关于花儿绽放公司主张的涉案965个源代码文件是否“不为公众所知悉”。《最高人民法院关于审理侵犯商业秘密民事案件适用法律若干问题的规定》第三条规定,权利人请求保护的信息在被诉侵权行为发生时不为所属领域的相关人员普遍知悉和容易获得的,人民法院应当认定为反不正当竞争法第九条第四款所称的不为公众所知悉。本案中,花儿绽放公司提交了第30号鉴定意见书以证明涉案965个源代码文件“不为公众所知悉”。盘兴公司、盘石公司认为第30号鉴定意见书检索范围、检索方法有重大瑕疵,第040号鉴定意见书的鉴定结论显示其中3个源代码文件属于行业惯例、在公开的代码文件中可以检索到4个与花儿绽放公司主张的涉案源代码部分相同的代码,且在2018年10月18日前,已经在开源领域存在多种与花儿绽放公司有客多软件功能相同的软件,因此第30号鉴定意见书的鉴定结论不应采信,并申请法院组织对涉案源代码是否“不为公众所知悉”进行重新鉴定。
对此本院认为,首先,《最高人民法院关于民事诉讼证据的若干规定》(2019修正)第四十条第一款规定,当事人申请重新鉴定,存在下列情形之一的,人民法院应当准许:(一)鉴定人不具备相应资格的;(二)鉴定程序严重违法的;(三)鉴定意见明显依据不足的;(四)鉴定意见不能作为证据使用的其他情形。第30号鉴定意见书从涉案源代码文件中提取了类名、方法名、变量名、表达式等作为关键词在百度、谷歌两个知名搜索网站及Github、searchcode两个软件源代码共享网站进行检索,其检索范围为知名、主流的搜索引擎及软件源代码共享网站,是所属软件领域的相关公众最常使用、访问的网站,故第30号鉴定意见书的检索方法、检索范围并无明显不当,且盘兴公司、盘石公司在二审期间,已经单方委托了鉴定机构对涉案技术信息是否具有非公知性进行了鉴定,故对其所提由法院组织重新鉴定的申请,本院不予支持。
其次,根据盘兴公司、盘石公司二审期间委托鉴定的第040号鉴定意见书的鉴定结论,“GoodsBuyDetail.java”“Area.java”“CusmallStatisticsInfo.java”3个文件中的代码由且仅由成员变量定义及成员变量对应的geter、seter等方法组成,其中成员变量属于常见命名,该种定义成员变量并生成geXXX、setXXX等方法的形式是Java编程语言推荐的标准写法,属于所述领域的行业惯例。花儿绽放公司针对第040号鉴定意见的上述结论,未合理说明该些变量命名方式及对应生成方法的独特性,故本院采信第040号鉴定意见的上述意见,认定“GoodsBuyDetail.java”“Area.java”“CusmallStatisticsInfo.java”3个文件中的代码“为公众所知悉”。第040号鉴定意见书还认为,“AppletWxPayController.java”“AppletKoulingRedpackMobileController.java”“EmailServiceImpl.java”“HttpUtils.java”4个文件中的部分代码在2018年10月18日之前已被开源软件库公开,但均仅涉及该些文件中的部分代码片段,无法证明该些文件中的源代码整体已被公开,且代码中涉及程序的组织结构、调用关系、执行逻辑等,应将一个源代码文件作为一个整体对待,不应将一个完整代码进行部分切分而判断是否“为公众所知悉”。故本院对第040号鉴定意见书中关于4个文件中的部分代码已被公开的鉴定结论不予采信。
最后,软件源代码涉及到特定的变量名、类名及方法的定义、程序的组织结构、调用关系、执行逻辑等,还包括在特定位置对方法、语句和变量的注释文字等,软件源代码也体现了软件开发人员的代码风格、特定字词的独特表达,故即使为开发相同功能的软件,不同开发者可以设计不同的源代码进行表达,盘兴公司、盘石公司有关软件功能相同推论出代码相同的主张没有事实依据,本院不予支持。
综合上述情况,鉴于第040号鉴定意见书亦认为涉案其他源代码“不为公众所知悉”,结合双方各自单独委托的第30号鉴定意见书和第040号鉴定意见书的意见,在盘兴公司、盘石公司未能再提出其他相反证据的情况下,本院认定,本案中花儿绽放公司主张的涉案962个源代码文件“不为公众所知悉”。
2.关于花儿绽放公司对主张的涉案962个源代码文件是否采取了相应保密措施。《最高人民法院关于审理侵犯商业秘密民事案件适用法律若干问题的规定》第五条规定,权利人为防止商业秘密泄露,在被诉侵权行为发生以前所采取的合理保密措施,人民法院应当认定为反不正当竞争法第九条第四款所称的相应保密措施。人民法院应当根据商业秘密及其载体的性质、商业秘密的商业价值、保密措施的可识别程度、保密措施与商业秘密的对应程度以及权利人的保密意愿等因素,认定权利人是否采取了相应保密措施。现有证据表明,花儿绽放公司对内与员工签订了保密协议,约定了员工的保密义务,同时对有客多软件源代码的管理采用VPN统一安全授权、SVN账号密码加密授权,账号密码每人唯一,正常登录VPN后,方能使用SVN账号密码登录;对外,花儿绽放公司与盘兴公司签订的涉案合同中约定了对包含授权软件源码的U盘进行加密及双方对对方标有“保密”字样的信息进行保密的义务,并在交付给盘兴公司有客多小程序源代码时,使用了加密U盘,故应当认定,花儿绽放公司已对涉案软件源代码采取了合理保密措施。盘兴公司、盘石公司主张根据花儿绽放公司提交的计算机软件著作权登记证,可证明软件发表就已经公开全部技术秘密,但计算机软件著作权登记证登记的客体是软件,计算机软件著作权登记时所登记的源代码并非全部源代码,并不会导致花儿绽放公司本案中所主张的相关技术信息被公开。盘兴公司、盘石公司另主张花儿绽放公司将涉案软件源代码存储于阿里云服务器,但并未进行IP及设备限制,其保密措施不到位;但登录阿里云服务器需要账号密码,将涉案软件源代码存储于阿里云服务器,并不意味着该源代码处于社会公众可任意获得的状态。故盘兴公司、盘石公司关于涉案技术信息未采取合理保密措施的主张不能成立,本院不予支持。
3.关于花儿绽放公司主张的涉案962个源代码文件是否具有商业价值。《最高人民法院关于审理侵犯商业秘密民事案件适用法律若干问题的规定》第七条第一款规定,权利人请求保护的信息因不为公众所知悉而具有现实的或者潜在的商业价值的,人民法院经审查可以认定为反不正当竞争法第九条第四款所称的具有商业价值。技术秘密具有价值和使用价值,且用于生产、经营中能给权利人带来经济利益,它既包括现实的经济利益,也包括潜在的竞争优势。本案中有客多软件为花儿绽放公司开发完成,并为花儿绽放公司吸引了相当数量的客户、带来了现实的经济利益,盘兴公司也实际向花儿绽放公司支付了软件许可使用费,故涉案软件源代码显然具有商业价值。
综上所述,花儿绽放公司在本案中主张的涉案软件源代码不为公众所知悉、具有商业价值并采取了相应保密措施,构成技术秘密。
反不正当竞争法第九条第一款第三项规定,经营者不得实施下列侵犯商业秘密的行为:(三)违反约定或者违反权利人有关保守商业秘密的要求,披露、使用或者允许他人使用其所掌握的商业秘密。
本案中盘兴公司主张涉案源代码并非盘兴公司员工披露,理由为第30号鉴定意见书中载明的技术点与涉案合同中载明的技术点不同,可见被泄露的源代码文件与交付给盘兴公司的源代码文件不同,同时《代码比对成果报告》中也显示花儿绽放公司交付的文件与被泄露的源代码文件不同;即使是盘兴公司员工行为,盘兴公司也不应承担相应的侵权责任。
对此本院认为,首先,盘兴公司、盘石公司提交的《代码比对成果报告》虽载明Github共享平台上的公开文件包与花儿绽放公司交付给盘兴公司的文件包有差异,但花儿绽放公司在本案中并未主张交付给盘兴公司的所有源代码文件均构成技术秘密,仅主张其中的部分源代码文件构成技术秘密,盘兴公司在原审庭审后向法院出具的书面意见中确认,花儿绽放公司交付给盘兴公司的源代码包中具有花儿绽放公司主张的965个不为公众所知悉的源代码文件,二审中盘兴公司、盘石公司推翻其在原审期间的陈述且并未提交足以证明其主张的证据。
其次,基于前述,花儿绽放公司主张的20个技术点是对源代码功能的概括,仅为了便于鉴定机构对源代码的理解,故仅凭第30号鉴定意见书中载明的技术点与涉案合同中载明的技术点不同,亦不能推翻盘兴公司此前的陈述。
再次,Github共享平台上披露的有客多软件源代码修改了原来的第三方平台的配置参数(该参数为发起微信功能所需密钥,由用户在微信第三方平台私密获取)、目标数据库的访问地址data.db.url参数(该参数为数据库存储路径,修改后的参数显示为在阿里云购买的rds数据库链接地址)及目标redis缓存的访问地址data.db.url参数(该参数为redis缓存储路径,为在阿里云购买的rds的redis缓存连接地址),对该些参数的修改及修改后的信息不为外人所知,同时Github共享平台上披露的源代码中将花儿绽放公司交付代码中的平台注释和系统平台名称由“有客多小程序”修改为“盘石微店”,将交付代码中的“默认签名”修改为“浙江盘兴”,将交付代码中的“微俱聚logo”修改为“盘石微店logo”,且披露的代码中增加了“盘石科技”的版权信息,亦有盘石公司内部研发管理系统链接、域名、官网链接、办公地址、支付宝收款账户信息等,将交付代码中的客服电话400-××××-925修改为盘石官网客服电话400××××-1110。盘兴公司辩称花儿绽放公司一直掌控涉案源代码文件,盘兴公司在部署和更新涉案软件过程中向花儿绽放公司提供了小程序账号、密码、相应参数,微信开放平台账号、密码,小程序支付账号、密码,及盘石公司域名、盘石公司logo、web服务器IP等信息,不能排除涉案软件源代码系由花儿绽放公司披露于Github共享平台。对此本院认为,涉案软件源代码系花儿绽放公司开发,公司实际经营活动中也主要通过软件对外授权获取许可费而获利,花儿绽放公司及其员工缺乏披露该软件以丧失经营获利机会的动机。尤其是,Github共享平台上披露的有客多软件源代码不仅包含大量诸如盘石公司域名、官网链接、办公地址、客服电话等外部人员可获知的信息,还包含了前述仅由盘兴公司自身掌控的参数信息,盘兴公司未能就此作出合理解释。而盘石公司作为盘兴公司的唯一股东,有通过盘兴公司实际接触涉案源代码的可能。故结合本案现有证据,根据优势证据规则和日常生活经验法则,本院确认系由盘兴公司或盘石公司的员工实际披露了涉案软件源代码。盘兴公司、盘石公司有关涉案软件源代码由花儿绽放公司员工或其他被许可使用有客多软件的公司的员工披露的主张,并无任何事实依据,也不符合常理,本院不予支持。
最后,盘兴公司在与花儿绽放公司签订的涉案合同中,明确约定了保密条款,盘兴公司负有保密义务,理应采取相应足够的保密措施。即便涉案软件源代码系盘兴公司员工违背盘兴公司意愿而对外披露,因盘兴公司未采取相应足够的保密措施,亦应对披露涉案技术秘密的行为造成的侵权结果承担责任。
进一步而言,花儿绽放公司既可以依据双方涉案合同的约定,向盘兴公司主张违约责任,也可选择依据侵权责任的相关法律规定,要求盘兴公司承担侵害技术秘密的侵权责任,盘兴公司有关花儿绽放公司混淆合同纠纷与侵权纠纷的主张不能成立,本院亦不予支持。
反不正当竞争法第十七条第一款规定,经营者违反本法规定,给他人造成损害的,应当依法承担民事责任。第三款规定,因不正当竞争行为受到损害的经营者的赔偿数额,按照其因被侵权所受到的实际损失确定;实际损失难以计算的,按照侵权人因侵权所获得的利益确定。赔偿数额还应当包括经营者为制止侵权行为所支付的合理开支。第四款规定,经营者违反本法第六条、第九条规定,权利人因被侵权所受到的实际损失、侵权人因侵权所获得的利益难以确定的,由人民法院根据侵权行为的情节判决给予权利人三百万元以下的赔偿。
本案中,花儿绽放公司诉请盘兴公司、盘石公司承担消除影响和赔偿损失的侵权责任。关于消除影响,因未有证据证明披露涉案技术秘密的侵权行为给花儿绽放公司造成了必须消除的不良影响,故对该项诉请本院不予支持。盘兴公司披露涉案技术秘密的行为,必然给花儿绽放公司造成损害,故应当承担赔偿损失的责任。
关于赔偿金额,花儿绽放公司主张根据价值评估鉴定,涉案源代码的商业价值在2018年12月31日为1012万元,主张以涉案源代码的商业价值为基础认定花儿绽放公司损失数额,并主张本案应适用惩罚性赔偿,以涉案技术秘密的商业价值1012万元为惩罚性赔偿的损失基数,乘以4.94倍数计算最终的赔偿金额。
对此本院认为,因本案被诉侵权行为发生于2017年反不正当竞争法施行期间,2017年反不正当竞争法未规定惩罚性赔偿,故本案不适用惩罚性赔偿。
《最高人民法院关于审理侵犯商业秘密民事案件适用法律若干问题的规定》第十九条规定,因侵权行为导致商业秘密为公众所知悉的,人民法院依法确定赔偿数额时,可以考虑商业秘密的商业价值。人民法院认定前款所称的商业价值,应当考虑研究开发成本、实施该项商业秘密的收益、可得利益、可保持竞争优势的时间等因素。本案中因涉案技术秘密已在Github网站上被公开,故可以涉案技术秘密的商业价值作为花儿绽放公司损失赔偿的依据。但经审查,基于以下理由,本院对花儿绽放公司单方委托评估机构所作的评估结论不予认可:第一,价值评估鉴定记载,2019年-2024年涉案技术秘密分成率均为23.77%,并未有因涉案技术秘密价值衰减导致分成率逐步降低,理由是涉案有客多软件已为成熟产品,软件代码后续更新迭代仅是常规升级维护,并已在费用部分进行了相应调整;同时该价值评估鉴定中记载,有客多软件V1.0的开发期间为2017年10月16日-2018年1月31日,在此基础上,有客多软件V2.0于2018年8月27日完成开发;涉案技术秘密2019年、2020年研发费用均为635.58万元,2021年研发费用为476.68万元。而根据花儿绽放公司原审提交的深圳永信瑞和会计师事务所出具的《审计报告》,涉案有客多软件2018年1月1日至2018年10月31日项目投入金额为3595635.74元(其中V1.0版本的研发投入为737657.68元,V2.0版本的研发投入为2857978.06元);据前所述,花儿绽放公司主张涉案有客多软件在2018年技术业已成熟、2018年以后仅是对技术的常规更新迭代,根据常理推知,基于对技术的常规更新迭代需要的研发费用一般不应高于软件完成开发所需的研发费用,但涉案价值评估鉴定中2019年-2021年研发费用均远高于2018年的研发费用,明显不合常理;同时还需考虑到本案中花儿绽放公司主张构成技术秘密的仅为有客多软件中部分代码,故针对涉案技术秘密的研发费用显然应低于整个有客多软件的研发费用。第二,涉案有客多软件主要是为企业客户快速搭建微信小程序提供便捷工具,其价值随用户对微信小程序的开发需求而波动,但互联网新技术、新应用的需求均有其爆发期、衰减期,且根据盘兴公司、盘石公司提交的证据可见,在2018年前后均有多家公司从事微信小程序的研发业务,且微信平台于2020年提供官方的微信小程序开发渠道,必然会对第三方微信小程序开发业务产生巨大影响,涉案价值评估鉴定中2020年预估销售收入与2019年预估销售收入相同,有违市场规律。综上,价值评估鉴定多项数据难以令人信服,不应采信;花儿绽放公司主张以价值评估鉴定认定的商业价值作为赔偿依据的主张,本院不予支持。
鉴定机构经评估作出的商业价值鉴定仅是确定知识产权商业价值的一种方式。在本案经审查不宜直接依据价值评估鉴定意见认定涉案技术秘密商业价值的情况下,依据本案现有证据情况,可以综合考虑涉案技术秘密的研究开发成本、实施该项技术秘密的收益、可得利益、可保持竞争优势的时间等因素酌情确定涉案技术秘密的商业价值,进而作为确定赔偿数额的依据之一。
如前已述,本案中,花儿绽放公司开发涉案软件的研发费用至少包括2017年至2018年的研发费用,依据审计报告,仅2018年1月至10月末的研发费用为近360万元。花儿绽放公司以对外许可使用方式获取涉案软件的经营利润,涉案软件在2017年的销售收入为51万余元,2018年的销售收入为1140万余元,上述销售收入的增长状况与涉案软件于2017年开始研发、2018年1月完成V1.0版本研发、2018年8月完成V2.0版本研发的过程相契合。涉案软件部分源代码在Github网站上被披露后,2019年涉案软件销售收入下滑为530万余元,其中不排除有商业运营以及技术更迭、同类竞争等因素带来的影响,但软件源代码的公开披露客观上势必会导致该软件商业价值的贬损,给权利人造成较为严重的损失。同时,在市场上存在多个同类软件,尤其是2020年微信平台提供官方微信小程序开发渠道后,涉案软件保持竞争优势的时间以及可期待的许可收益难以避免会受到一定影响。综合上述因素,本院认定涉案技术秘密的商业价值应高于2017年反不正当竞争法规定的法定赔偿额最高限300万元,故对本案不宜适用法定赔偿方式确定赔偿数额,而应综合案件具体情况予以裁量。
关于本案合理开支。经审查,花儿绽放公司在原审庭审中变更诉讼请求,将合理开支由76万余元变更为95万元,其中律师费50万元,其他合理支出40万元,其增加的合理开支为评估鉴定费用15万,原审判决未列明花儿绽放公司修改后的诉讼请求,确有不当。本院综合考虑本案的具体情节、花儿绽放公司的维权难度以及对其诉讼请求的支持比例等因素,酌情予以支持。
对于具体赔偿金额和合理开支数额的确定,综合考虑本案的被诉侵权行为的性质、情节,涉案技术秘密的商业价值、花儿绽放公司的维权合理开支等因素,本院认为原审判决适用法定赔偿方式酌定盘兴公司赔偿经济损失及合理费用共计500万元,适用法律虽确有错误,但判赔金额较为合理,可予维持。本院进一步分别酌定盘兴公司应承担的赔偿责任为赔偿经济损失450万元、合理开支50万元。
《中华人民共和国公司法》(2018年修正)第六十三条规定,一人有限责任公司的股东不能证明公司财产独立于股东自己的财产的,应当对公司债务承担连带责任。
本案中被诉侵权行为发生时,盘石公司仍是盘兴公司的唯一股东,但盘石公司未提交二者财务独立的证据,不能证明盘兴公司的财产独立于自己的财产,依法应对盘兴公司的债务承担连带责任。
1 本案表明,侵害商业秘密纠纷案件中,可以直接主张涉案的软件源代码文件构成商业秘密,例如,本案原告就主张涉案的965个源代码构成技术秘密。本案中,原告对源代码功能进行的概括,仅为了便于鉴定机构理解源代码的逻辑,并非主张的技术秘密或秘密点。
2 对于软件源代码文件“不为公众所知悉”的判断,本案中,法院认可了采用“从涉案源代码文件中提取了类名、方法名、变量名、表达式等作为关键词在百度、谷歌两个知名搜索网站及Github、searchcode两个软件源代码共享网站进行检索”的方式判断是否“不为公众所知悉”。
3 同时,法院认为,代码中涉及程序的组织结构、调用关系、执行逻辑等,应将一个源代码文件作为一个整体对待,不应将一个完整代码进行部分切分而判断是否“为公众所知悉”。即便源代码文件中的部分代码已被开源软件库公开,但如仅涉及该些文件中的部分代码片段,而无证据证明该些文件中的源代码整体已被公开,且源代码并不为公众所知悉。
4 本案表明,对软件源代码采取以下保密措施,可以认为采取了相应的保密措施:与员工签订保密协议;对软件源代码采用VPN统一安全授权、SVN账号密码加密授权,账号密码每人唯一,正常登录VPN后,方能使用SVN账号密码登录;在使用许可合同中约定对包含授权软件源码的U盘进行加密及双方对对方标有“保密”字样的信息进行保密的义务
5 一般而言,计算机软件著作权登记时所登记的源代码并非全部源代码,并不会导致软件源代码的相关技术信息被公开。
6 对于因被告将私有软件源代码上传至Github等开源软件平台导致源代码为公众所知悉的,法院考虑以下因素酌定赔偿金额:研发费用;涉案软件部分源代码在Github网站上被披露后,销售收入下滑情况;涉案软件保持竞争优势的时间以及可期待的许可收益等。
7 值得关注的是,本案根据优势证据规则和日常生活经验法则确定侵权主体。因无法直接查明将源代码上传到Github平台的用户的身份,法院主要根据Github平台上披露的源代码不仅包含大量诸如被告公司域名、官网链接、办公地址、客服电话等外部人员可获知的信息,还包含了仅由被告公司自身掌控的参数信息,被告未能就此作出合理解释。因而法院推定涉案源代码系由被告或被告的员工实际披露了涉案软件源代码。
8 本案表明,如他人违反保密义务,将私有软件上传至Github等开源平台导致源代码为公众所知悉的,构成侵犯商业秘密的行为,可以根据涉案技术秘密的研究开发成本、实施该项技术秘密的收益、可得利益、可保持竞争优势的时间等因素确定赔偿数额。
9 软件公司应加强对内的商业秘密管理,明确约定员工对源代码的保密要求。在对外合作过程中,如交付源代码,既应做好源代码的物理保密措施,也应签署保密协议。
邮箱:haozy@guantao.com
本文仅代表作者观点,不构成法律意见,如有法律问题可与我们联系
欢迎学习郝政宇律师主讲的“商业秘密保护”课程

欢迎添加大岭先生微信

加入知识产权实务交流群9
↓点击关注本公众号
关注“大岭IP”公众号后:
1. 后台回复“司法解释”,获得现行有效的知识产权司法解释汇编,包括官方解读;
2. 后台回复“指导案例”,获得2008年-2021年中国知识产权指导案例合辑;
您的点赞,是对我们团队的最大支持!