当前位置:   article > 正文

避坑指南—GPL开源协议_gpl协议

gpl协议

0x00 前言

本文主要目的是为了了解一些基础的GPL注意事项,以及防止被一些一知半解的人蒙骗。本文不做任何内容的依据,仅为个人见解,仅供参考。

一些常见的开源协议

  • GPL
  • BSD
  • MIT
  • Mozilla
  • Apache
  • LGPL

0x01 GPL

在这里插入图片描述

GPL许可协议(GNU General Public License):只要软件中包含有其他GPL协议的产品或代码,那么该软件就必须也采用GPL许可协议且开源及免费,这一点也就是所谓的传染性,创始人是理查德·马修·斯托曼。

中文翻译版地址:https://jxself.org/translations/gpl-2.zh.shtml

1. GPL历史版本

GPL 总共有三个版本,每一个版本之间是有区别的,大部分使用GPL开源软件都是使用GPL v2 的开源协议,比如openjdk

  • GPLv1:1989年2月25日发布。
  • GPLv2:1991年6月发布。
  • GPLv3:2007年6月29日发布。

2.GPL特点

  • 复制自由:允许软件复制到任何人的电脑中,并且不限制复制的数量
  • 收费自由:允许以各种形式进行传播
  • 传播自由:允许在各种媒介上出售改软件,但是买家知道这个软件是免费的获取的,并且解释收费的原因
  • 修改自由:允许开发人员增加或删除软件的功能,但是必须基于GPL许可协议授权。

3. GPL的传染性

依据开源作品修改的开源软件(无论是否包含独立部分)视作不可分割的完整作品,在传输、分发这样的作品时,无论其中开源部分与独立部分是分开发布还是统一发布,这一发布后的作品整体均应遵守开源协议。

3.1 不同版本GPL的感染区别

GPL存在两个维度的感染,一个是横向,一个是纵向。纵向感染指的是直接在GPL源码中修改了内容,形成了一个新的GPL版本。
横向是指用了GPL开源代码的一部分,或者所有。

在这里插入图片描述

GPL v1:只要企业使用了GPL代码,那么所有这个整体都会感染,遵循GPL协议。
GPL v2:使用了GPL代码的部分以及衍生部分,都要被GPL协议感染,遵循GPL协议,但是除了衍生的或者使用的这一个部分,独立部分都不需要遵循GPL协议(需要单独分发,遵循GPL的分发,独立部分单独分发)。
GPL v3:依据开源作品修改的开源软件,无论是否包含独立部分,都视作不可分割的完整作品,在传输、分发这样的作品时,无论其中开源部分与独立部分是分开发布还是统一发布,这一发布后的作品整体均应遵守开源协议。

这里举一个栗子:

GPL V1 如果你用了GPL发动机,并且改装了发动机,优化了性能,最终的这个成品也得是GPL。
GPL V2 如果你用了GPL发动起,并且改装了发动机,优化了性能,并且增加了基于这个改装后的发动机增加了新功能,后面的这个新功能可以避免被感染
GPL V3 如果你用了GPL发动起,并且改装了发动机,优化了性能,并且增加了基于这个改装后的发动机增加了新功能,全部都是GPL。

3.2 规避感染

  • 不分发,GPL限制只要不通过任何突进分发出去,仅自己使用,此时不需要公布自己的源码。这个最典型的就是SaaS,只给你用,但是我不给你。
  • GPL v2,独立部分可不受GPL感染。
  • 聚合类,当GPL仅作为容器或者载体的时候,不会进行感染,最常见的是通过JDK运行Java代码

3.3 静态链接,动态链接

这个争议很大,静态链接只静态使用,动态链接指动态调用,Hook,或者引用。没有具体的法律认为动态链接就一定会违反GPL。

3.4 Android 如归规避GPL

简单的说就是先将Linux的核心进行封装,然后将程序运行到这个封装之后的GPL程序上。也就是说除了封装核心,其他都不再属于GPL感染的内容。

声明:本文内容由网友自发贡献,转载请注明出处:【wpsshop】
推荐阅读
相关标签
  

闽ICP备14008679号