参考资料

Android ,在争议中逃离 Linux 内核的 GPL 约束 | 爱范儿

简介

众所周知,Linux内核基于GPL v2发行。GPL规定,基于GPL的软件产品的衍生产品,也必须使用GPL许可证。那么基于Linux操作系统所开发的应用程序,是否被认为是GPL的衍生产品?我们先来看三个问题。

  1. 使用Linux内核的头文件定义,进行系统调用的程序是否被认为是衍生产品?
  2. 链接了GPL类库的程序是否被认为是衍生产品?
  3. Linux的LKM(Loadable Kernel Modules)是否被认为是衍生产品?以LKM形式开发的Linux驱动程序是否被认为是衍生产品?

如果上面3个问题的答案均为“是”的话,那么基于GPL的传染性特性,从底层的内核空间到上层的用户空间的所有应用程序都将“屈服”于GPL,这将导致Linux变成了一个“封闭”的开源世界。“封闭”的原因在于它拒绝了一部分想要商业化的企业以及个人开发者。

使用Linux内核的头文件定义,进行系统调用的程序是否被认为是衍生产品?

不是!
Linux之父Linus Torvalds在源码的COPYING文件中说明与澄清了系统调用非GPL的作用范围。

链接了GPL类库的程序是否被认为是衍生产品?

是!
主程序与GPL类库如果是静态链接(Static Link)的话,那么一般认为主程序必须使用GPL;主程序与GPL类库如果是动态链接(Dynamic Link)的话,那么一般认为主程序也必须使用GPL,除非在官司上证明主程序和GPL类库之间具有独立性和可分性。
以下是GPL官网上的FAQ:

If a library is released under the GPL (not the LGPL), does that mean that any software which uses it has to be under the GPL or a GPL-compatible license? (#IfLibraryIsGPL)

Yes, because the software as it is actually run includes the library.

Linux的LKM(Loadable Kernel Modules)是否被认为是衍生产品?以LKM形式开发的Linux驱动程序是否被认为是衍生产品?

这块不知道怎么去理解,作者也没有正面回答,详见参考资料。

Android

后来,一款基于Linux的手机操作系统诞生了,那就是Android。我们先来看由Openfoundry绘制的Android许可证结构图。

Android的底层是使用GPL的Linux内核,其上次的类库、Android运行时、应用程序框架和各类应用程序与GPL的Linux内核交互,是通过系统调用的方式,因为它们不属于衍生产品,从而不用遵循GPL。

还有一点是Android使用的是使用BSD的Bionic Libc的类库,而不是使用GPL的GNU的glibc。

Android与GPL、BSD和Apache之间的关系的更多相关文章

  1. android开发 系统时间与定时器之间有关系嘛?

    如题: android开发 系统时间与定时器之间有关系嘛? 答案:有. 看定时器源码: /* * Schedule a task. */ private void scheduleImpl(Timer ...

  2. Android 中Activity,Window和View之间的关系

    转自:http://hi.baidu.com/xiaofanqing/blog/item/8261ac114ab14f64cb80c435.html 我这里根据我个人的理解来讲讲我个人对这3个概念的理 ...

  3. 了解开源的许可证GPL、LGPL、BSD、Apache 2.0的区别 【转】

    原文来自:http://blog.sina.com.cn/s/blog_6870d1e00100lhlv.html 你对开源有多少了解呢?如果你是软件开发者,要开源软件,不单单是开放源代码就可以了,选 ...

  4. 开源的许可证GPL、LGPL、BSD、Apache 2.0的通俗解释

    软件开发者要开源软件,不单单是开放源代码就可以了,选择一种许可证很重要,一个许可证之于软件就相当于价值观之于普通人,代表了这个软件的基本品性.一个错误的许可证选择可能会直接导致整个项目的失败. 各种开 ...

  5. 开源的许可证GPL、LGPL、BSD、Apache 2.0

    软件开发者要开源软件,不单单是开放源代码就可以了,选择一种许可证很重要,一个许可证之于软件就相当于价值观之于普通人,代表了这个软件的基本品性.一个错误的许可证选择可能会直接导致整个项目的失败.各种开源 ...

  6. [转]五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    当Adobe.Microsoft.Sun等一系列巨头开始表现出对"开源"的青睐时,"开源"的时代即将到来!现今存在的开源协议很多,而经过Open Source ...

  7. 五种开源协议的比较(BSD,Apache,GPL,LGPL,MIT)

    当Adobe.Microsoft.Sun等一系列巨头开始表现出对”开源”的青睐时,”开源”的时代即将到来!现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的开源协 ...

  8. 转载----五种开源协议(GPL,LGPL,BSD,MIT,Apache)

    原文地址:https://www.oschina.net/question/54100_9455 五种开源协议(GPL,LGPL,BSD,MIT,Apache) 什么是许可协议? 什么是许可,当你为你 ...

  9. 各种开源协议介绍 BSD、Apache Licence、GPL V2 、GPL V3 、LGPL、MIT_转

    转自:各种开源协议介绍 BSD.Apache Licence.GPL V2 .GPL V3 .LGPL.MIT 现今存在的开源协议很多,而经过Open Source Initiative组织通过批准的 ...

随机推荐

  1. CentOS 7快速入门系列教程(一)

    基本命令 ls 列举当前目录下的所有文件夹 ls -l 查看文件还是文件夹   d表示文件夹   -表示文件 ls --help man ls 询问命令 man 3 malloc 查看函数 cd 跳转 ...

  2. TED_Topic5:How virtual reality can create the ultimate empathy machine

    By Chris Milk # Background about our speaker Working at the frontiers of interactive technology, Chr ...

  3. HDFS的java接口——简化HDFS文件系统操作

    今天闲来无事,于是把HDFS的基本操作用java写出简化程序出来给大家一些小小帮助! package com.quanttech; import org.apache.hadoop.conf.Conf ...

  4. opencv产生随机的颜色

    //将HSV颜色空间值转换成RGB值,参考这里cv::Scalar HSV2RGB(const float h, const float s, const float v) { ); - h_i; - ...

  5. 天梯赛 L2-011. (二叉树) 玩转二叉树

    题目链接 题目描述 给定一棵二叉树的中序遍历和前序遍历,请你先将树做个镜面反转,再输出反转后的层序遍历的序列.所谓镜面反转,是指将所有非叶结点的左右孩子对换.这里假设键值都是互不相等的正整数. 输入格 ...

  6. Openflow Plugin学习笔记3

    MDController.java 中的start方法,创建了SwitchConnectionHandlerImpl实例 SwitchConnectionHandlerImpl switchConne ...

  7. F. Make It Connected(krustra+)

    题目链接:http://codeforces.com/contest/1095/problem/F 题目大意:首先给你n个点,然后给你每个点的权值,再给你m条边,这些边可以选也可以不选,然后问你要使这 ...

  8. iOS学习笔记(2)— UIView用户事件响应

    UIView除了负责展示内容给用户外还负责响应用户事件.本章主要介绍UIView用户交互相关的属性和方法. 1.交互相关的属性 userInteractionEnabled 默认是YES ,如果设置为 ...

  9. [转] A*寻路算法C++简单实现

    参考文章: http://www.policyalmanac.org/games/aStarTutorial.htm   这是英文原文<A*入门>,最经典的讲解,有demo演示 http: ...

  10. Electron build 无法下载 winCodeSign 等资源

    将 7z 文件下载到 以下 cache 目录并解压 macOS: ~/Library/Caches/electron-builder Linux: ~/.cache/electron-builder ...