一、开源协议下的软件源代码类侵犯商业秘密罪案件

如果软件代码是开源的,那肯定不能主张为商业秘密,这个没有争议,但是如果这些代码是在开源协议的基础上做出来的衍生作品,这个时候还能不能主张为商业秘密呢?

我们来说一起无罪案件,某科技有限公司、法定代表人A和研发工程师B被指控侵犯商业秘密罪,A原本是被害企业的员工,在工作期间完成了系统软件,这套软件代码设置了GPL的开源协议声明,后来,被害企业又根据老代码迭代了更新为2.0版本,部分程序源代码是原封不动照搬了老代码,被害企业认为A违约使用了自己的2.0版本的软件代码,为此,对A等人提起了刑事控告。这起案件,检察院最终作出了全案不起诉的决定。因为被害企业没有遵循开源协议,反而将代码主张为商业秘密,最终被认定衍生作品无秘密性,对其主张不予支持。

在涉及开源协议的侵犯商业秘密罪案件当中,我们首先要了解的是涉及到哪种开源协议,开源协议的传染性及要求是什么?另外,就是开源协议在我国的法律效力怎么样。

一般每一个开源软件都会附有一个许可证,许可证以格式文本形式的授权许可协议来体现,许可证规定了软件使用者的权利和义务,使用者只有同意遵守这个许可证才能合法使用开源软件,或者使用这个开源软件,就视为同意接受许可证,目前公认的许可证约有70种。不同的许可证依据不同许可协议条款,对使用者要求承担的义务也不同,比如GPL许可证就对使用者的限制相对严格,如果将附有GPL许可证的开源软件中的源代码进行了修改或衍生,对于修改代码和衍生代码,使用者也必须将其以GPL许可证的方式作为开源软件发布,而不得将其作为闭源的商业软件来发布或者销售。

所以,在上面案件中,基于被害企业所主张的代码是在GPL协议上所衍生的2.0版本,可以认为这样的代码属于轻易获取,不具有秘密性。

二、软件源代码类侵犯商业秘密罪案件,如何看待非公知性

非公知性是判断某个技术能否成为商业秘密的一个重要因素,在软件代码类侵犯商业秘密罪案件中,代码可以分为源代码、目标代码及可执行代码,在判断代码的非公知性问题上,目标代码和可执行代码的非公知性认定会相对复杂,由于目标代码在软件公开发售时,用户可以直接获取的,这部分代码通常被认为已经公开,不再具有非公知性。但是,目标代码的公开并不当然导致源代码丧失非公知性,我们应当根据反编译的难易度来判断相应源代码是否容易获得,由于目标代码的非可读性,以及编程语言的复杂性,反编译工作基本不可能仅仅通过观察来完成。

不同编程语言的反编译难度不同,对于一些可还原度较高的编程语言,若事先没有进行加密或混淆技术处理,则很容易通过反编译获取对应源代码,这就会影响其非公知性认定。所以,在软件源代码非公知性认定中,需要考虑编程语言对反编译难度的影响,以及权利人是否采取加密或混淆等保护措施。

在浏览器/服务器架构下,对软件源代码非公知性的认定也会产生显著的影响。在这样的架构下,源代码通常可以分为前端代码和后端代码,两者的展现方式、所用技术和功能分工均有所不同,与用户界面相关的“显示类”源代码,无需编译直接通过浏览器端运行,而涉及业务逻辑的“核心类”源代码,则编译成目标代码后在服务器端实现。在此类框架下,用户可以在浏览器界面获取"显示类"源代码,这部分运行于浏览器端的源代码已经公开,不再具有非公知性,但服务器端的核心源代码仍处于保密状态,并未丧失非公知性。所以,通常来说,运行于浏览器端的各种源代码具有公知性,但服务器端的核心源代码仍处于保密状态,并未丧失非公知性。

三、软件代码类侵犯商业秘密罪案件,如何鉴定?

随着开源软件普及,以及第三方代码被广泛使用,在软件代码类的商业秘密鉴定中,如何正确处理这些非原创代码,成为了一个非常重要的问题。

对于开源代码的识别,司法鉴定通常通过这样的方法:首先,通过源代码的协议声明判断源代码来自于开源软件。一般情况下,开源软件的源代码文件头都会有开源软件遵循的协议声明,如果是简单、机械地引用这些代码,司法鉴定人员是可以通过协议声明辨识他的来源和版权情况的。另外,我们可以利用商业或非商业开源源代码的搜索引擎系统去分析。

但是,如果程序开发人员在使用开源软件时将相关声明信息予以删除,或者仅仅使用了开源代码当中一个片段,这个时候,司法鉴定人员就很难发现了。所以,鉴定人在利用开源代码进行商业秘密鉴定的过程中,一定要对开源代码的相关内容进行详细阅读和分析,特别对其中含有的信息特殊性进行了解和观察。

另一方面,开源许可的传染性条款对闭源代码的非公知性认定也有影响。开源许可证的传染性条款是指,基于该开源软件创作的后续作品的部分或全部都应当同样进行开源。现在,经常出现这样的一种情况,部分用户在修改开源代码,或者与自写的代码相结合后,将它封装成闭源软件产品进行发售,并且要将它主张为商业秘密。但是,按照传染性条款的规定,开发者需要公开后期开发的源代码,这部分商业秘密将随着代码的公开,就会丧失秘密性。

那么怎么样去判断后续开发出来的代码有没有被开源许可证所传染呢?我们需要考察整体代码对开源代码的引用情况,对于有明显实质从属特征的程序,例如母子程序,那母程序也必然会受子程序的传染;对于没有明显实质从属特征的程序之间,应判断两者是否相对独立。如果是属于未被传染的源代码,应认为其可以具备独立的非公知性。另外,根据开源许可证的不同,对静态链接与动态链接是否能认定为衍生作品,也会有所差异。

例如,GPL、AGPL许可证下则具有强传染性,静态链接及动态链接均有可能被认定为衍生作品;LGP、MPL、EPL许可证下则是弱传染性,静态链接通常被认定为衍生作品,动态链接可能不被认定;MIT、BSD则属于宽松型的许可证,具有较低的传染性,通常不强制衍生作品采取相同的许可证。