【注】原创作品,未经授权,不得复制、转载或以截图等方式盗用,违者必究
【案例导读】
在从他人付费获得软件授权许可使用并获得软件源代码后,公司员工擅自将他人源代码上传至Github开源平台公共存储库,导致该源代码被Github平台多个分支用户,复制到其公共存储库,给他人造成重大经济损失的,该公司员工是否应该承担责任?该公司是否应该就其员工的行为承担责任?最高法院的以下判决,给出了答案。
【争议阶段】
从他人购买软件及源代码后,公司员工将源代码上传至Github开源平台,被多名网络用户复制、传播
【涉及技术问题】
-
Github开源平台公共存储库及Git分支的正确使用方式
-
基于SpringMVC+Mybatis架构开发的软件,通过打包编译生成war包部署在阿里云平台,未进行IP及设备限制,能否起到保密效果?
-
仅由成员变量定义及成员变量对应的geter、seter等方法组成的代码,是否为Java编程语言推荐的标准写法,进而属于本领域的行业惯例?
【实务操作启示】
由以上案例分析,笔者尝试归纳如下启示要点,供开发者在软件授权许可及二次开发使用他人源代码等实务操作中,作为参考:
**1. 开发者应该做好核心源代码的保密工作,包括对内员工管理及对外第三方公司授权使用。**上述案例中,A公司的做法值得开发者借鉴。对内员工方面,A公司与员工签订了保密协议,约定了员工的保密义务,同时对源代码的管理采用VPN统一安全授权、SVN账号密码加密授权,账号密码每人唯一,正常登录VPN后,方能使用SVN账号密码登录;对外授权第三方许可使用时,A公司与B公司签订的涉案合同中约定了对包含授权软件源码的U盘进行加密及双方对对方标有“保密”字样的信息进行保密的义务,并在交付给B公司涉案源代码时,使用了加密U盘,可以说A公司的保密措施是比较合理恰当的。
当然除上述措施外,开发者还可以通过制度流程,对于员工能否使用以及如何使用GitHub存储源代码进行规定,并对GitHub公开存储库是否存在公司源代码进行定期监控,从而确保即使有泄露发生,也能第一时间发现,要求GitHub删除,避免源代码扩大传播范围,造成更大的经济损失。
**2.软件著作权登记并不会导致源代码为公众知悉。**在我国计算机软件著作权登记,仅进行形式审查,申请人一般不需要提交全部源代码(除非源代码特别少),实践中申请人一般不会提交核心源代码,因为这部分是作为技术秘密保护的,而且登记机构也有多种方式供申请人选择,如例外交存的方式,申请人可以对核心源代码进行遮盖处理,用以防止技术秘密泄露。
**3.对于购买他人软件的使用者,应该合规、合法使用,避免给自身带来不必要的风险。**从他人获得授权许可使用软件的,应该严格依据授权合同约定的使用方式及使用范围等,合规、合法使用,并做好相关员工的培训工作,如在《劳动合同》等约定,因员工侵权导致的责任,在公司承担责任后,可以追究员工的相关责任。在上述案例中,B公司在承担500万元的赔偿后,可以预计的是,应该会启动内部追责,对将代码上传至Github的员工进行溯源,从技术上讲,应该不是很难,如果B公司有相关约定,则向涉事员工追责不会存在太大的法律障碍。
因此,在《劳动合同》中约定员工因工作失误或失职应该承担赔偿责任,并制定合法有效的规章制度对赔偿责任进行明确,对于防范此类风险是必要且可行的。
**4.程序员应该提高自身法律意识,避免无意之举,给自身带来民事纠纷甚至刑事惩罚。**本案B公司涉事员工,估计也没有恶意,只是缺乏相关法律意识,认为把源代码上传至Github属于“很正常的事”,殊不知已经侵犯了他人的技术秘密,即使所任职公司且自己编写的源代码,也不能随便上传至Github,因为在职期间编写的源代码,大多数公司都会在《劳动合同》中约定相关知识产权归公司所有,从法律上讲,履行公司职务开发的软件产品,属于职务作品,开发人员个人无权随意自行使用或者披露给他人使用。
实践中可能会存在,部分程序员出于发泄对公司的不满,离职前将公司源代码上传或公开在互联网,或者故意在编写的软件中设置漏洞,可以说这种行为既不符合职业道德,又存在法律风险。因为软件源代码可以享有著作权,也可以构成技术秘密,实践中遭受侵害方,可能会以侵犯著作权罪或者侵犯商业秘密罪,向公安机关报案,如果经侦查犯罪行为属实的,会移交检察院提起公诉,对于此类犯罪行为,严重的可能会被法院判以有期徒刑及罚金,程序员的大好前程也会断送,所以在涉及源代码使用、公开或者上传前,一定要“三思而后行”。
【案情简介】
**一、【事情起因】**A公司与B公司签订软件许可使用合同,合同约定A公司授权B公司对C软件及源代码具有非专有、不可转让的使用许可,B公司需要对相关信息保密。合同签订B公司支付许可使用费后,A公司将装有涉案源代码包的加密U盘及密码,交付给B公司的负责人员。B公司出具了《C软件源代码使用许可项目签收表》。后A公司在Github开源平台发现有用户上传了C软件源代码,该源代码中的域名、代码注释、LOGO、客服电话、版权信息等多处标识,都指向B公司,截止A公司进行公证取证时,已有多位Github网络用户复制了前述源代码。故A公司起诉B公司侵权其商业秘密(技术秘密),要求B公司赔偿由此给其造成的经济损失5000万元。
**二、【B公司抗辩】A公司主张的源代码不属于“不为公众所知悉”:**因为在公开的代码文件中可以检索到多个与A公司主张的涉案源代码相同的代码;**A公司对涉案源代码未采取相应的保密措施:**A公司未采取授权办公场所访问及授权办公设备访问两级保护机制,故无法避免涉案源代码在非办公场所及非办公设备上泄漏,而且涉案源代码文件存储于阿里云服务器,阿里云属于设置公司外部的公共可访问资源,A公司未进行IP限制及设备限制,造成任何人均可以通过账户密码在公司外任意场所任意设备随时访问;**A公司的源代码不具有商业价值:**已有多个在先公开的开源项目的功能、技术与涉案源代码相同,故A公司源代码不具有商业价值。即使以上均成立,B公司也不应该就员工泄露源代码的行为承担责任。
**三、【一审法院判决】**A公司源代码构成技术秘密,Github上传的A公司源代码众多信息均指向了B公司,而且涉案用户在Github发布的另外3个存储库源代码,亦包含B公司信息,除了B公司或其知情的员工外,他人均难以做到。B公司对此未有合理解释,抗辩亦缺乏理据。A公司与B公司在涉案合同中明确约定,若B公司的员工违反保密义务,B公司应承担连带责任。综上,B公司应对侵权行为承担法律责任,根据涉案产品的研发与销售情况、侵权持续的时间、反漏洞费用以及A公司为制止侵权行为所支付的合理费用等因素,酌情确定B公司向A公司赔偿500万元。
**【一审法院认为】关于适用新法还是旧法。**本案被诉侵权行为发生的时间虽然在《反不正当竞争法》修改前(以下简称为“旧法”),但侵权行为持续至《反不正当竞争法》修改后(以下简称为“新法”),故本案应适用新法,根据该法规定,商业秘密应符合秘密性、价值性和保密性的要求。
**关于涉案源代码是否属于商业秘密(技术秘密)。**鉴定意见指出涉案源代码具有非公知性,属于技术秘密,B公司虽然提出质疑,但未提供证据,应该认定涉案A公司源代码属于不为公众知悉。关于价值性和保密性,A公司提交了C软件使用许可合同及相关许可费的证据,显示涉案软件能给A公司带来经济利益。此外,A公司提交的证据显示,其对C软件源代码的管理采用VPN统一安全授权、SVN账号密码加密授权,A公司与员工签订有保密协议;A公司与B公司签订的涉案合同中,约定了具体的保密条款且以加密载体交付。前述措施表明A公司针对的保密客体是具体明确的,该措施在正常情况下能够防止涉密信息被泄露,符合保密性要求。
**关于是否为B公司或其员工上传了涉案源代码。**用户在Github网站披露的C软件源代码修改了原来的第三方平台的配置参数(该参数为发起微信功能所需密钥,由用户在微信第三方平台私密获取)及目标数据库的访问地址data.db.url参数(该参数为数据库存储路径,修改后的参数显示为在阿里云购买的rds数据库链接地址)。对前述参数的修改及修改后的信息属于企业的机密,不为外人所知。该用户在Github网站的不同存储库、不同源代码中汇集了B公司如此丰富、完整的企业信息,除了B公司或其知情的员工外,他人均难以做到。B公司对此未有合理解释,抗辩亦缺乏理据。
【最高法院二审裁判要点】
A公司在二审确认B公司披露涉案源代码无恶意,也无获利;A公司主张涉案代码由B公司员工上传,但B公司应该对员工行为承担责任。最高法院认为:
**1. 本案源代码披露行为一经实施即造成相应后果,不存在侵权行为持续,应适用旧法。**涉案源代码在Github网站上被公开披露,披露行为一经实施,即造成源代码信息被公开的后果,此后该源代码在Github网站上持续被披露,直至新法实施后才被删除,仅是在Github网站上被披露状态的持续,并不是侵权行为的持续,源代码在网站上被删除也不意味着已经被公开的源代码能回溯到不公开的保密状态。**因此,一审法院以被诉侵权行为持续至新法修改,认为本案应适用新法的法律适用有误,本院予以纠正。**本案应当适用侵权行为发生时的法律,也即旧法。
**2. B公司在二审申请对于涉案源代码非公知性重新鉴定,本院不予准许。**A公司委托的鉴定机构从涉案源代码文件中提取了类名、方法名、变量名、表达式等作为关键词,在百度、谷歌两个知名搜索网站及Github、searchcode两个软件源代码共享网站进行检索,其检索范围为知名、主流的搜索引擎及软件源代码共享网站,是所属软件领域的相关公众最常使用、访问的网站,该鉴定检索方法、检索范围并无明显不当。而且B公司在二审期间已经单方委托鉴定,故B公司重新鉴定的申请,本院不予准许。
3. B公司在二审提出7个文件代码已经公开,本院认定“GoodsBuyDetail.java”等3个文件中的代码“为公众所知悉”,另外4个文件不属于“为公众所知悉”。“GoodsBuyDetail.java”等3个文件中的代码由且仅由成员变量定义及成员变量对应的geter、seter等方法组成,其中成员变量属于常见命名,该种定义成员变量并生成geXXX、setXXX等方法的形式是Java编程语言推荐的标准写法,属于所述领域的行业惯例。涉案源代码应排除上述3个文件中的代码。B公司主张另外4个文件中的部分代码在本案发生之前已被开源软件库公开,但均仅涉及该些文件中的部分代码片段,无法证明该些文件中的源代码整体已被公开,**且代码中涉及程序的组织结构、调用关系、执行逻辑等,应将一个源代码文件作为一个整体对待,**不应将一个完整代码进行部分切分而判断是否“为公众所知悉”。
**4.B公司关于市面上已存在与A公司软件功能相同的软件,则其源代码也相同的推论不能成立。**软件源代码涉及到特定的变量名、类名及方法的定义、程序的组织结构、调用关系、执行逻辑等,还包括在特定位置对方法、语句和变量的注释文字等,软件源代码也体现了软件开发人员的代码风格、特定字词的独特表达,故即使为开发相同功能的软件,不同开发者可以设计不同的源代码进行表达,B公司有关软件功能相同推论出代码相同的主张没有事实依据,本院不予支持。
5.A公司对涉案源代码采取了保密措施。A公司对内与员工签订了保密协议,约定了员工的保密义务,同时对C软件源代码的管理采用VPN统一安全授权、SVN账号密码加密授权,账号密码每人唯一,正常登录VPN后,方能使用SVN账号密码登录;对外,A公司与B公司签订的涉案合同中约定了对包含授权软件源码的U盘进行加密及双方对对方标有“保密”字样的信息进行保密的义务,并在交付给B公司涉案源代码时,使用了加密U盘,故应当认定,A公司已对涉案软件源代码采取了合理保密措施。**B公司主张根据A公司提交的计算机软件著作权登记证,可证明软件发表就已经公开全部技术秘密,但计算机软件著作权登记证登记的客体是软件,计算机软件著作权登记时所登记的源代码并非全部源代码,并不会导致A公司本案中所主张的相关技术信息被公开。**B公司另主张A公司将涉案软件源代码存储于阿里云服务器,但并未进行IP及设备限制,其保密措施不到位;但登录阿里云服务器需要账号密码,将涉案软件源代码存储于阿里云服务器,并不意味着该源代码处于社会公众可任意获得的状态。故B公司关于涉案技术信息未采取合理保密措施的主张不能成立,本院不予支持。
**6.B公司抗辩除了B公司,A公司以及A公司授权的其他公司都存在上传涉案源代码的可能。**对此本院认为,涉案软件源代码系A公司开发,公司实际经营活动中也主要通过软件对外授权获取许可费而获利,A公司及其员工缺乏披露该软件以丧失经营获利机会的动机。尤其是,Github共享平台上披露的C软件源代码不仅包含大量诸如B公司域名、官网链接、办公地址、客服电话等外部人员可获知的信息,还包含了前述仅由B公司自身掌控的参数信息,B公司未能就此作出合理解释。故结合本案现有证据,根据优势证据规则和日常生活经验法则,本院确认系由B公司的员工实际披露了涉案软件源代码。B公司有关涉案软件源代码由A公司员工或其他被许可使用C软件的公司的员工披露的主张,并无任何事实依据,也不符合常理,本院不予支持。
**【裁判结论】**鉴定机构经评估作出的商业价值鉴定仅是确定知识产权商业价值的一种方式。在本案经审查不宜直接依据价值评估鉴定意见认定涉案技术秘密商业价值的情况下,依据本案现有证据情况,可以综合考虑涉案技术秘密的研究开发成本、实施该项技术秘密的收益、可得利益、可保持竞争优势的时间等因素酌情确定涉案技术秘密的商业价值,进而作为确定赔偿数额的依据。综合考虑本案的被诉侵权行为的性质、情节,涉案技术秘密的商业价值、A公司的维权合理开支等因素,本院认为一审判决适用法定赔偿方式酌定B公司赔偿经济损失及合理费用共计500万元,适用法律虽确有错误,但判赔金额较为合理,可予维持。本院进一步分别酌定B公司应承担的赔偿责任为赔偿经济损失450万元、合理开支50万元。
【关联知识】
【Github本质上也属于“平台”,适用“通知-删除”避风港原则】
GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,所以被称为GitHub。作为开源代码库以及版本控制系统,随着越来越多的应用程序转移到了云端,目前Github已经成为了管理软件开发以及发现已有代码的首选方法。
Github既然被称为“开源平台”,其本质上也属于“平台”,类似短视频平台、新闻信息平台等,只不过其平台内容为源代码,既然属于平台,就应该适用版权法意义上的“通知-删除”避风港原则。也就是如果权利人发现GitHub上的源代码涉嫌侵犯其权利的,包括著作权、商业秘密等,其可以向GitHub发送通知,要求其删除侵权代码并披露上传人的个人信息**(当然由于GitHub运营主体是美国公司,在此方面存在很大障碍)**,GitHub在收到权利人通知在合理期限未删除的,可能与侵权用户承担共同侵权责任。
【法院判决中新法与旧法的适用】
上述案例中,一、二审法院关于适用新法还是旧法,认定不一致,根本点在于泄露技术秘密属于即时行为还是可持续的行为。最高法院认为,应该属于前者,不存在持续侵权的问题。
而新法和旧法还存在一个重要的区别就是:新法规定对于侵犯商业秘密的行为,最高可以判决500万元,而旧法的上限则是300万元,而且旧法没有规定惩罚性赔偿。一审法院适用新法,按法定赔偿上限判赔500万元;最高法院适用旧法,法定赔偿上限是300万,但综合各种因素,认为A公司损失已经超过300万,从“填平”原则角度,应该适用裁量性赔偿——最终维持一审法院的500万元赔偿。