背景

中国第一个关涉GPL协议的诉讼案件,数字天堂(北京)网络技术有限公司起诉柚子(北京)科技有限公司侵犯计算机软件著作权纠纷一案中,原告数字天堂公司起诉柚子公司发布的APICloud软件抄袭了数字天堂公司HBuilder软件中的三个插件的源代码,侵犯其多项权利[1]。

而柚子公司辩称,HBuilder软件属于应遵循GPL协议开放源代码的软件,应遵循开源,其构建衍生软件作品并不对数字天堂著作权造成侵犯。

也就是说,使用GPL协议的软件为开源软件,基于GPL协议作品产生的衍生作品也要遵循GPL协议,开放源代码。

在一审及二审判决中,法院大篇幅引用GPL v3.0协议[2]的原文,论证GPL协议对涉案插件是否具有约束力。这相当于默认了GPL协议在中国同样具有法律约束力,对于开源软件许可协议在中国司法程序中的效力认定具有重大参考意义。中国法院已经开始认同国际开源许可证的法律效力,中国绝不会成为开源许可协议违反行为的避风港。

2021年《开源安全和风险分析报告》显示,目前大约有65%的代码库中包含许可证冲突,26%的代码库使用了没有许可证或定制许可证的开源代码[3]。可见,开源软件许可证冲突、缺乏已知许可证是如今许多项目面临的问题。

因此,我们在软件审计时更要慎重,对于代码库中的开源软件要谨慎判断是否拥有相关许可证以及是否存在许可证冲突,规避不必要的法律风险。

许可证的引入

研发人员在编写代码时引入无许可的开源软件,主要有以下三种方式:

1.开源软件创建时没有分配许可证

未经许可的开源组件被引入代码库最直接的方式,就是版权所有者在创建开源组件的时候没有为其分配或选择许可证。这里有一个常见的误区:缺乏许可证并不代表该组件可以毫无限制的进行使用。依据版权保护法,没有创作者的明确许可,任何人都没有权利对其作品进行使用、复制、散布和修改。也就是说,这部分开源组件一旦被使用,就要承担着知识产权诉讼的危险。

2.开源组件被修改后丢失许可信息

在开发过程中,开发人员经常会对某些开源组件进行修改,使其能够执行项目所需要的功能。然而,在修改这些组件时,开发者很有可能会改变或者移除组件的头文件及许可信息,造成许可证丢失。一旦缺失许可证,就无法清晰准确地认识我们的权利范围。例如,我们不知道许可证是否提供了明确的专利授予、分发软件时是否需要开源等等。即使在不知情的情况下违反了相关许可证协议,也要承担相应法律责任。

3.使用无许可信息的开源片段代码

开发人员编写代码遇到问题时,第一反应就是去互联网上搜索,看看前人是否遇到过类似的问题。因此,开发人员有时会从CSDN、Stack Overflow这样的网站或论坛中摘取部分代码,用于实现某些特定的功能。但是,从互联网中获取的片段代码通常并不伴随适用的许可条款。这就是说,即使是无许可的片段代码,依旧面临着许可证不合规的风险。

然而,关于片段代码是否值得版权保护的问题一直存在争议。有人认为片段代码只是纯粹功能性代码,不应包含在版权保护的范围内。

例如,在Oracle与Google长达十年的版权之争上,Oracle起诉Google侵权,原因是Google在开发Android时,使用Java语言并调用了Java库中约20%应用程序编程接口(API)的11000个声明。此案最大的争议点就在于API是否可以有版权,因为有部分API在表达方式上仅有一种,Google认为这些方法的实现不应当受到著作权保护。

尽管在2021年4月5日,美国最高法院最终判定Google胜诉,认为其并未构成侵权[4]。但并不意味着使用开源功能性片段代码不存在风险,我们要依据具体情况谨慎考虑,判断是否能承担相应风险。

思考

由此可见,在编写代码期间,无许可的开源软件正在以程序员意想不到的方式引入到代码库中。据统计,现如今应用程序的70%由开源软件组成,几乎是五年前的两倍[5]。日益增长的开源组件比例要求我们在代码审计中一定要注意对其进行许可证合规检测,识别项目中使用了哪些第三方开源组件,是否拥有相应的权限。

对于第三方开源软件的审查是一件耗时耗力、成本高昂的事情。因此,使用自动化代码成分分析工具(SCA- Software Composition Analysis)[6]帮助简化许可证合规问题检测,成为了许多优秀开发团队的选择,华为、阿里、百度等国内大厂也纷纷购进SCA工具。

此外,明确第三方组件不仅能够规避不必要的许可证冲突,也会大大提升代码的安全性。据统计,大约有84%的代码库中至少包含一个未被修复的已知漏洞[7],而黑客们往往热衷于利用这样的漏洞。因此,明确项目中的第三方开源软件,也有利于我们对这样的问题做出预防和修补。

由于开源软件的概念以及绝大部分的开源协议都来源于国外,英文的开源软件许可协议在中国的法律效力问题始终存在疑虑,也并不重视开源软件的合规问题。但时代终将向前,中国与国际接轨已是大势所趋,防患于未然,才是一个软件企业乃至国家行稳致远的正道。

参考文献

[1] 数字天堂(北京)网络技术有限公司与柚子(北京)移动技术有限公司等一审民事判决书(2015)京知民初字第631号
[2] 柚子(北京)移动技术有限公司等与数字天堂(北京)网络技术有限公司侵犯计算机软件著作权纠纷二审判决民事判决书(2018)京民终471号
[3] 2021 Open Source Security & Risk Analysis Report
[4] 18-956 Google LLC v. Oracle America, Inc. (04/05/2021)
[5] Now Tech: Software Composition Analysis, Q2 2021 Forrester’s Overview Of 22 Software Composition Analysis Providers
[6] http://www.redrocket.cn/Home/Product_introduction/index.html?id=13
[7] http://www.eet-china.com/news/11464.html

无许可的开源软件可以使用吗?相关推荐

  1. 天下苦广告久矣!分享五款免费且无广告的开源软件

    在日常的使用中,我们需要使用各种软件来提高我们的工作效率或者进行创意的表达.然而,商业软件价格昂贵,某些国产软件又充斥着广告.因此,开源软件成为了一个不错的选择,以下是我推荐的五款优秀的开源软件. 1 ...

  2. 开源软件基金会的崛起与演化

    ▼ 更多精彩推荐,请关注我们 ▼ 开源之道引言 本文翻译于一篇基于CC-By协议的论文,该论文最初发表在<International Free and Open Source Software ...

  3. 我们应该怎样使用开源软件

    开源是近年来大火的词汇.自2017年7月Facebook的React开源软件被Apache基金会宣布禁止使用.百度也宣布全面停止使用以来,开源软件的合规性使用引发了大家的关注. 我们以React为例, ...

  4. 开源软件使用的风险和应对方法

    目录 一.开源软件的漏洞 1.1 发现漏洞并评估影响范围 1.1.1 开源软件清单和SBOM 1.1.2 如何得到软件产品完整的SBOM 1.1.3 通过SBOM识别漏洞影响范围 1.1.4 漏洞感知 ...

  5. GPL协议中国第一案尘埃落定,相关开源软件应如何风控?

    " 导读:2019年11月6日,数字天堂(北京)网络技术有限公司(以下简称 "数字天堂公司")诉柚子(北京)科技有限公司.柚子(北京)移动技术有限公司(以下简称 &quo ...

  6. 开源软件使用_消费开源软件:如何使用和购买

    开源软件使用 供应商和原始设备制造商 (OEM)以及他们的IT客户,政府和学者都在使用,购买和制作开源软件,并且常常同时进行这三项活动. 这是考虑一个人与开源软件项目的关系的好方法. 关于开源软件项目 ...

  7. diy无感无刷电机霍尔安装_51 MCU,BLDC有感无感全开源,轻松实践直流无刷电机控制(程序+电路详解)...

    上封帖子介绍了51单片机,JMT18F003PLUS,提供了芯片例程和资料,链接如下: JMT18F003PLUS单片机芯片手册,例程等资料下载 http://www.51hei.com/bbs/dp ...

  8. 开源软件许可协议简介

    英文原文:A Short Guide To Open-Source And Similar Licenses 很多软件开发者和设计者都有将自己的软件作品以开源的形式公之于众的想法.他们希望其他人也可以 ...

  9. 几种常见的开源软件许可协议(GPL, LGPL, Apache License, BSD)

    Open Source Initiative组织: https://opensource.org/licenses/alphabetical 现今存在的开源协议很多,而经过Open Source In ...

最新文章

  1. (伪)datagridview里面id的自增长
  2. 用C#快速往Excel写数据
  3. 分页查询时如何优化MySQL的性能?
  4. C++ 标准库 书籍学习记录笔记 第5章
  5. DUBBO与ZOOKEEPER、SPRINGMVC整合和使用
  6. 继承类 基类的赋值_Chapter10:继承与派生(四)
  7. 安装navicat之后双击就会闪退_win2012,2016 能安装oracle 10g吗?
  8. Master公式求递归复杂度
  9. RabbitMQ 消息队列
  10. Java零基础进阶教程分享,人手一套的javase实用视频教程
  11. character在mysql什么类型_character是什么字段类型
  12. 自定义Win7虚拟机的睡眠时间
  13. 前端必会的anime动画库
  14. 什 么 是 可 重 入 性 , 为 什 么 说 Synchronized 是 可 重 入 锁 ?
  15. Centos GNOME桌面
  16. 鹿鼎记 / Royal Tramp (1992)
  17. 计算机卡顿是硬盘还是内存条,笔记本电脑升级固态硬盘和内存条方案解析,彻底告别电脑卡顿!...
  18. VUI设计--一些自己认为的原则
  19. cordova build android 出错问题汇总
  20. C/S与B/S架构对比

热门文章

  1. 隋唐洛阳“西宫”:上阳宫的GIS视角
  2. ecologyE8流程回收站数据恢复工具
  3. task-11 xgb算法实战
  4. 小米pro笔记本安装win10+ubuntu双硬盘
  5. vue3.0 引入bootstrap 4
  6. 王者荣耀日活8000万,相当于所有德国人每天都在玩,却被骂得体无完肤,小学生沉迷应该怪谁?...
  7. 阿里巴巴股票禁售期将结束 4.29亿股新股解禁
  8. iText学习(三)
  9. 最简单的视音频播放演示样例3:Direct3D播放YUV,RGB(通过Surface)
  10. docker启动容器执行多条命令