Index
概要
想必大家在开发过程中多多少少用过第三方的库吧?世界上有很多非常方便的库,使用它可以让编程变得更加轻松,页面也将更加美观,可以开发出更加好的产品。
先等等。。。在使用这些库的时候,您了解了这些库的许可证了吗?如果在不了解的情况下就直接使用,有可能会引来官司哦。本篇文档就向大家介绍为了避免这些风险该如何正确地遵守许可证。
代码和著作权
首先,先认识一下代码与著作权的关系。世界上“代码”被认为是“著作物”,受“著作权法”保护。因此,如果未经许可随意使用他人的著作物,就是违反著作权法(侵害著作权)。为了避免这个问题,还是要好好遵守许可证(使用许可)。但是,万一不小心违反了许可证,就等于侵害了著作权,代码的原作者可能要求你停止侵权行为,那就要面临需要将公开的内容撤下来的风险。
OSS许可证是什么
另一方面,世界上存在着各种各样第三方库或开源代码。那么为什么将代码公开呢?实际上,将代码公开有很多好处。
可以让公司外部的更多开发人员看到,带来各种各样的改善
可以更早地发现缺陷并得以修改
提高市场上的存在感
提高技术人员的技术和动力
原作者离开了还可以持续开发下去
因此,将代码公开其实还是蛮普遍的,甚至还有公开并提供代码的软件。这样的软件称为 OSS (开源软件),代表性的有Linux、Apache、Android、MySQL。
但是,即使是这样的OSS,就像前面提到的,它并没有放弃代码本身的著作权。OSS只不过是说“你在遵循著作权里规定的条件的前提下,可以使用其著作物(软件)”,使用者必须遵守OSS规定的条件。而对这些条件进行明文规定的就是“OSS许可证”
OSS的主要分类
那么,OSS许可证是什么东西呢?OSS许可证根据世袭了多少“著佐权”的授权方式,大致可分为3种。
著佐权:是指对于著作物的发布,作者赋予使用者无限制的自由使用权力(不管是否有更改)的一种概念。另外,该著作物再发布的时候也沿用同样的授权方式。
OSS 许可证的分类 | 更改的代码是否有必要公开 | 与其他代码组合使用时有没有必要公开其他代码 |
---|---|---|
传染型开源许可证 | 〇 | 〇 |
弱传染型开源许可证 | 〇 | ✖ |
获准型许可证 | ✖ | ✖ |
出处:OSS许可证的比较和使用情况以及争议的调查(独立行政法人 信息处理推进机构)(日语)
中文相关参考资料: 开源治理白皮书(2018年)(信息来源:中国信息通信研究院)
比如、如果是传染型开源许可证,使用者在使用其代码时对代码进行了更改时,更改部分的代码必须公开。另外,和其他的源代码结合一起使用时,其他源代码也需要公开。而获准型许可证时,双方的代码都不需要公开。
首先,让我们好好掌握这3种分类。
常见的许可证
接下来将更加详细地对各个许可证进行讲解。以下表格,争对如下几点进行了总结:
使用的条件
使用目的的允许范围
使用时禁止的事项
许可证 | 分类 | Required (条件) | Permitted (允许) | Forbidden (禁止) |
---|---|---|---|---|
GPL v2 | 传染型 | 标明著作权和更改的地方、公开代码 | 商业用途、修改、发布、专利许可 | 追究责任、分许可 |
GPL v3 | 传染型 | 标明著作权和更改的地方、公开代码 | 商业用途、修改、发布、专利许可 | 追究责任、分许可 |
Affero GPL | 传染型 | 标明著作权和更改的地方、公开代码 | 商业用途、修改、发布 | 追究责任、分许可 |
LGPL v2.1 | 弱传染型 | 标明著作权和所使用的库、公开代码 | 商业用途、修改、发布、分许可、专利许可 | 追究责任 |
LGPL v3 | 弱传染型 | 标明著作权和所使用的库、公开代码 | 商业用途、修改、发布、分许可、专利许可 | 追究责任 |
Artistic 2.0 | 弱传染型 | 标明著作权和更改的地方、公开代码 | 商业用途、修改、发布、分许可、个人用途 | 追究责任、使用商标 |
Apache v2 | 获准型 | 标明著作权和更改的地方 | 商业用途、修改、发布、分许可、专利许可 | 追究责任、使用商标 |
MIT | 获准型 | 标明著作权 | 商业用途、修改、发布、分许可 | 追究责任 |
The BSD 3-Clause | 获准型 | 标明著作权 | 商业用途、修改、发布、分许可 | 追究责任、使用商标 |
Public Domain | - | - | 个人用途、商业用途、修改、发布、分许可 | 追究责任 |
出处:众多许可证其各特征的总结(tukiyo3)
是不是眼花缭乱了。让我们看一下其中一个例子---- MIT 许可证。与JavaScript有关系的、比较常见的是这个 MIT许可证。其使用条件仅仅是标明[著作权]和[MIT许可证全文](可只写URL),是众多许可证中限制极其宽松的一类许可证。例如jQuery 的话,代码中应该会有如下记载。
/*! jQuery v3.3.1 | (c) JS Foundation and other contributors | jquery.org/license */
确实有详细记载了著作权和许可证的页面的URL吧。如果使用了或者更改了jQuery,而删除了这个注释,即违反了许可证。
有人说“是JavaScript中用到的库,应该没有事吧”,其实不然。其代表例子之一就是 React.js 。这个库是Facebook开发并发布的,许可证是BSD-style license。BSD许可证本身在使用的时候是自由度比较高的许可证,但是Facebook在此许可证的基础上加了自己的条款,即“因专利而起诉Facebook以及Facebook相关的公司时,许可证立即被撤销,将失去使用Facebook代码的权力”。也就是说,许可证是以 BSD + 专利条款 (Patents License)的形式发布的。
基于这个专利条款,如果使用React.js来开发产品时,实际上等于无法对Facebook提起专利主张的诉讼。像这样,如果不事先认真阅读许可协议,可能会被卷入诸如前面例子的困境中。
在2018年10月本文章发布时,React.js已经改成了MIT许可证,不存在上面的问题了。
关于cybozu developer network上公开的代码
读到这里,我想各位对许可证的重要性应该已经充分理解了。那么本网站上的代码以及Cybozu CDN的许可证又是怎么样的呢?首先我们来看一下使用协议。可以看到有《cybozu developer network 使用协议》 第 7 条 。
▼ cybozu developer network 使用协议 - 第 7 条
基本上没有特别指定的话,在 MIT许可证的允许范围内可自由使用。但是,如第 2项里提到的,著作权不属于本公司的程序或API,请遵循提供者的许可证或规定。
另外,关于Cybozu CDN里记载的库,《Cybozu CDN 服务规章》的第 2 条有如下规定。
▼ Cybozu CDN 利用規約 - 第 2 条
因此,如果想用其中的某个库,需要先确认提供者提示的各种规定。在CDN 的页面找到您想要用的库,点击该库的名称,即可跳转到官网,请在官网确认相关规定。基本上会有写 MIT许可证或者以此为基础的许可证(便于开发者使用的许可证),以访万一请确认一下许可证内容。
具体用例
接下来,举实际例子进行说明。假设本次的kintone 的 JavaScript 自定义中想要用Cybozu CDN 的 JSZip,那么首先在Cybozu CDN页面里找到JSZip,点击库的名称。
可以看到跳转到其官网了,我们来找一下许可证相关的内容,在网页右上角有如下内容。
▼ JSZip 官网
我们可以知道JSZip可根据情况选择 MIT许可证或GPLv3许可证,因此只要注明“软件的著作权并转载许可证全文(或全文的链接)”,就不需要公开代码等,可以自由使用。如果对各种许可证本身不是很了解,那就老老实实地认真阅读许可证的全文。
要使用的库如果没有许可证全文或者全文的链接,可点击Cybozu CDN里各版本的链接来查看许可证。慎重起见,最好也要看一下实际使用的代码顶部是否有相关记载。
▼ Cybozu CDN - ANgularJS V1.7.4
可以看到代码的最前面就写明了库的许可证等信息了吧。这样,您使用Cybozu CDN 里记载的链接进行自定义时,就可以安心使用 JSZip 了。
最后
大家看完感想如何?希望本文能给大家的日常开发带来帮助。为了防止平时开发时无意间因为使用了某个库而让我们辛辛苦苦写的代码陷入法律纠纷,一定要注意认真确认许可证后再进行开发。祝大家能够有一个好的开发体验。