使用GPL的动态库,未修改源码,是否必须GPL开源?(***)

30 篇文章 0 订阅

使用GPL的动态库,未修改源码,是否必须GPL开源?

避坑指南—GPL开源协议

Android是如何规避GPL传染性的

===============================

使用GPL的动态库,未修改源码,是否必须GPL开源?

 https://www.zhihu.com/question/360724083

必须开源。

但是有个漏洞可以利用:

把这个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感染的内容。

注:这段话,似乎表达有问题?

似乎不是规避?而是 Linux内核协议本身,允许在某种条件之下,可进行商用?

参考:

 Android是如何规避GPL传染性的_如何规避gpl带来的风险_maimang09的博客-CSDN博客

————————————————
版权声明:本文为CSDN博主「王嘟嘟_」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_36869808/article/details/129401090

Android是如何规避GPL传染性的

  Android是如何规避GPL传染性的_如何规避gpl带来的风险_maimang09的博客-CSDN博客

Android是如何规避GPL传染性的_weixin_33845477的博客-CSDN博客

一、首先得了解android体系结构

从下到上介绍上图

Linux Kernel: 完全开源,GPLv2协议

Libraryies: 含少量开源库

Android Runtime: android 优化的JAVA虚拟机,更适合嵌入式系统。

Application Framework和Application都是JAVA程序。

二、android如何规避GPLv2的传染性

  • 首先,最关键点是Linus Torvalds在Linux内核版权最前的一段话,保证了Linux内核GPLv2不传染

Linux内核的版权是GPLv2,但是Linus Torvalds在Linux内核的版权文件COPYING中最前面增加了下面一段话,保证了Linux内核的商业用途不被GPLv2传染。

   NOTE! This copyright does *not* cover user programs that use kernel
 services by normal system calls - this is merely considered normal use
 of the kernel, and does *not* fall under the heading of "derived work".
 Also note that the GPL below is copyrighted by the Free Software
 Foundation, but the instance of code that it refers to (the Linux
 kernel) is copyrighted by me and others who actually wrote it.

 Also note that the only valid version of the GPL as far as the kernel
 is concerned is _this_ particular version of the license (ie v2, not
 v2.2 or v3.x or whatever), unless explicitly otherwise stated.


Linus Torvalds

----------------------------------------

   GNU GENERAL PUBLIC LICENSE
      Version 2, June 1991

注意:这个版权不覆盖通过正常系统调用来使用Linux内核服务的用户程序

有了这一点Linux内核的GPLv2不会传染内核之上。

以上版权文件可以到Linux Kernel的网站上下载: The Linux Kernel Archives

  • 其次,android把GNU/Linux中的系统库glibc换为libc了。

一般的GNU/Linux上图中的libc位置是glibc。

glibc是GNU的,属于GPL授权,有传染性。

libc是google 改写优化的Free BSD Bionic库,属于BSD协议。可以选择性开源,也不具传染性。

通过以上两点,android很好的规避了GNU/Linux GPL协议的传染性。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值