潜精研思 笔耕不辍

出版物/Publications更多分类

地址:北京市东城区建国门内大街26号新闻大厦7-8层

电话:86 10 8800 4488, 6609 0088

传真:86 10 6609 0016

邮编:100005

国枫视角

商业秘密保护实务系列一:拨开算法保护的迷雾----算法是什么?

发布时间:2021.12.09 来源: 浏览量:7633

最高人民法院于2020年9月发布并施行《关于审理侵犯商业秘密民事案件适用法律若干问题的规定》,该规定第一条明确“算法”为商业秘密中技术信息的一种类型。


算法作为软件设计的基础和核心,被最高人民法院明确为商业秘密的保护客体之一具有现实意义。但是司法实践中,对于何为算法,权利人如何确定算法商业秘密的具体内容等等问题,存在认识偏差,基于此,我们将通过系列文章专题剖析算法商业秘密保护的实务,以期抛砖引玉,求教于各位。


一、什么是算法?


简而言之,算法是解决问题的准确而完整的步骤。在计算机软件领域,编程的目的是利用计算机解决特定的问题,编程之前首先需要明确计算机解决该问题的具体步骤,这个具体步骤就是编写程序所需要的“算法”,算法是计算机完成一个任务所需的有限步骤。


举例而言,在已知三名学生甲、乙、丙各自分数的情况下,如何通过计算机判断谁的成绩最好。我们可以想到先将甲的分数与乙的分数比较,再取其中的较大值与丙的分数比较,通过两次比较确定最大值(算法1);我们也可以想到先将甲的分数分别与乙、丙的分数比较,如果甲的分数最高,则甲的成绩最好,若不是,则将乙的分数分别与甲、丙的分数比较,如果乙的分数最高,则乙的成绩最好,若不是,则丙的成绩最好,通过四次比较确定了最大值(算法2)。


可见,我们可以利用计算机通过不同的方法和步骤解决“谁的成绩最好”这个问题,因而针对同一问题可以有多种算法。在这多种算法中,运算次数最少、执行时间最短的,被称为最优算法,前述算法1需要进行2次比较,而算法2需要进行4次比较,通常认为算法1相较于算法2更优。


编写程序就是使用某种程序设计语言对某一算法的具体实现,算法独立于任何程序设计语言,同一算法可以用不同的程序设计语言来实现。法律语境下,源代码是算法的载体,不同程序设计语言实现的同一算法将表现为不同的源代码;即便是相同的程序设计语言,当待解决的问题较为庞大,算法因多层嵌套等原因而较为复杂时,不同编程人员实现该算法时也可能表现为不同的源代码。 


二、算法保护的现实困境


为探究司法实践中算法商业秘密的保护现状,我们以“算法”与“侵害商业秘密纠纷”为关键词检索了Alpha数据库内的公开案例,发现与算法保护客体实际相关的判决只有广东省高级人民法院审理的一起侵害技术秘密纠纷案件(案号:(2014)粤高法民三终字第831号),该案中,权利人主张的商业秘密内容为心电算法,庭审时向法院申请鉴定被诉侵权软件使用了其心电算法,法院委托的司法鉴定机构通过比对权利人和被诉侵权软件的源代码及目标代码的方式,推断出被诉侵权软件使用了权利人的心电算法。


上述案例中,法院以被诉源代码与权利人的源代码相同或实质性相同,推断算法也相同,但是,当被诉源代码与权利人的源代码不相同时,该如何向法院证明两份源代码使用的是同一算法呢?


显然,当同一算法表现为不同的源代码时,如果仍以比对源代码的方式确定算法的同一性,比对结果对权利人较为不利,这种比对方式实际就演变为仅允许权利人以源代码而非算法作为商业秘密的保护客体,但源代码系算法的一种载体,并非算法本身,在算法本身价值越来越突出的当今社会,算法若得不到应有的保护,权利人的利益将受到极大损害。


解决这一问题的前提是,权利人应当首先向法院和鉴定机构明确算法的具体内容,而非仅向法院和鉴定机构提交算法的载体——源代码,权利人只有清晰地阐明其主张的算法的具体内容,才能最大程度地利用司法权利保障自身权益。


三、如何描述算法的具体内容?


最高人民法院《关于审理不正当竞争民事案件应用法律若干问题的解释》第十四条规定,当事人指称他人侵犯其商业秘密的,应当对商业秘密的载体、具体内容等负举证责任。


明确商业秘密的载体和具体内容是权利人在提起诉讼时首先应当解决的问题,算法的载体相对较容易明确,即软件源代码,但权利人该如何向法院明确算法的具体内容呢?


考虑到大多数法官并非计算机领域普通技术人员,通常情况下并不具备算法相关专业知识,权利人在明确算法的具体内容时不仅需考虑到秘密点范围的确定,还应考虑到使用合适的描述方式,以使法官对秘密点的内容有较为清晰直观的认知。


在计算机领域中,算法描述是指以详细的方式,对设计的算法进行描述,权利人在阐明算法具体内容时需要借用合适的算法描述方法。算法描述有 4种常用的方法:自然语言、流程图、N-S 图和伪代码。其中,自然语言就是汉语、英语等日常使用的语言,优点在于通俗易懂,有助于法官理解,但当算法中含有多分支或循环操作时使用自然语言可能难以清晰表达,且自然语言的歧义性也容易导致算法实现的不确定性。


流程图系用程序框图描述,优点在于条理清晰,但在描述大型复杂算法时,流程图的流向线较多,可能会影响法官对算法的阅读和理解,并且其所占篇幅也较大。


N-S图是对流程图的改进,是一种完全去掉流程方向线的图形描述方法,但需要读者具有一定的基础,否则理解起来较为困难。


伪代码是介于自然语言和程序代码之间的一种算法描述方法,使用伪代码的目的是为了使被描述的算法可以容易地以任何一种程序设计语言实现,优点在于描述简洁,并且更容易使法官理解伪代码表达的算法与最终源代码之间的对应性,但在理解伪代码本身时,同样需要读者具备一定的编程知识。


在具体案件的处理中,权利人在律师的帮助下,需要选择适当的算法描述方法或是通过多种方法相结合的方式,说明算法的具体内容;在条件允许的情况下,亦可向法官阐明被描述的算法具体如何实现为诉争源代码,即阐明源代码的编写中如何体现了算法设计的每一步骤。


后记:关于算法内容或范围的明确,以及算法的非公知性、同一性等其他法律问题,限于本文篇幅,我们将在系列文章中继续探讨。

image.png