关于GPL的一些知识
1.什么是GPL
GPL许可协议(GNU General Public License):只要软件中包含有其他GPL协议的产品或代码,那么该软件就必须也采用GPL许可协议且开源及免费。具有以下特点:
复制自由:允许将软件复制到任何人的电脑中,并且不限制复制的数量。
传播自由:允许以各种形式进行传播。
收费传播:允许在各种媒介上出售该软件,但必需提前让买家知道这个软件是可以免费获得的,并解释收费的理由(一般来讲都是能够为用户提供某种服务,以技术服务的形式来收费)。
修改自由:允许开发人员增加或删除软件的功能,但必须依然基于GPL许可协议授权。一句话,修改后必须以GPL授权开源发布。
2.GPL的几个核心问题
GNU 通用公共许可证是一种 “Copyleft” 形式的“版权”,保障任何人都能够对GPL授权的产品以及其衍生产品的使用、修改和重新发布的权力,前题是不能修改发布条款。什么意思呢,任何GPL授权产品的衍生产品(Derived Work)必须遵循 GPL 协议进行发布。然而问题的核心在于什么是 Linux 内核的衍生产品,其中有几个致命问题,业界争论了十年有多。
1、使用 Linux 内核的头文件定义,进行系统调用的程序是否会被定性为衍生产品?
2、链接使用了其他 GPL 的类库的程序是否会被定性为衍生产品?
3、Linux 内核动态载入的模块 LKM(Loadable Kernel Modules)是否会被定性为衍生产品,以 LKM 形式开发的 Linux 驱动程序是不是衍生产品?
第一个问题:曾经被 Linux 内核的作者 Linus Torvalds 以及内核开发人员多次澄清普通系统调用为非 GPL 的作用范围,甚至固化在 Linux 内核的源码 COPYING 文档中,为 Linux 用户空间的程序采用非 GPL 的授权许可证打下了基础。
第二个问题:答案是属于衍生产品。包括源代码包含,静态链接和动态链接三种情况。
第三个问题:答案是属于衍生产品。
3.Android是如何规避GPL的
包括两个方面:驱动和glibc
先说glibc,glibc是linux上的主流的c运行时库,几乎每个linux程序都会简介的依赖c运行时库。由于glibc是gpl授权的,因此如果采用glibc作为crt,按照前述问题的第二条,这些程序必须开源。因此安卓采用bionic作为c运行时库替代glibc来规避gpl.
再说驱动,Android是基于Linux 内核开发的,Linux内核是GPL授权。传统的驱动是要作为内核模块被加入到内核中的。按照前述的第三个问题,内核模块属于Linux内核的衍生产品,需要遵守GPL协议开源发布。Android是由开放手机联盟共同完成的,为了保护联盟中手机生产商的利益,驱动不能被完全开源。因此安卓引入HAL,给linux内核开了个后门,增加了一些系统调用。HAL在内核的部分按照GPL的要求开源。驱动开发者可以在用户态使用这些新增的系统调用完成驱动的开发。从而在驱动方面规避了GPL。
关于GPL的一些知识的更多相关文章
- Linux实战教学笔记03:操作系统发展历程及系统版本选择
标签(空格分隔): Linux实战教学笔记-陈思齐 第1章 Linux简介 1.1 什么是操作系统? 简单讲:操作系统就是一个人与计算机硬件的中介. 操作系统,英文名称Operating System ...
- Linux从入门到放弃、零基础入门Linux(第一篇):计算机操作系统简介、linux介绍
一.计算机操作系统简介 操作系统的定义: 操作系统是一个用来协调.管理和控制计算机硬件和软件资源的系统程序,它位于硬件和应用程序之间. 操作系统的内核的定义: 操作系统的内核是一个管理和控制程序,负责 ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- 驱动实现led,pwm和中断基础知识
2015.4.8星期三 晴天 今天老师讲的内容是内核编写led和pwm驱动,实现花样灯和放歌的功能.理解应用和驱动的对接,最后自己实现了在放歌的时候根据歌曲的节奏亮灭一个小灯,应为两个独立的驱动都已经 ...
- Linux字符设备驱动结构(一)--cdev结构体、设备号相关知识机械【转】
本文转载自:http://blog.csdn.net/zqixiao_09/article/details/50839042 一.字符设备基础知识 1.设备驱动分类 linux系统将设备分为3类:字符 ...
- 【Xamarin开发 Android 系列 4】 Android 基础知识
原文:[Xamarin开发 Android 系列 4] Android 基础知识 什么是Android? Android一词的本义指“机器人”,同时也是Google于2007年11月5日宣布的基于Li ...
- 开源软件授权协议详解(GPL/MPL/LGPL/BSD/Apache Licence/Creative Commons/MIT)
开源在今天的软件业已经很普遍,但开源是否意味着使用者可以对开源后的代码为所欲为呢? 答案是否定的. 开源运动同样有自己的游戏规则和道德准则. 不遵行这些规则不但损害开源运动的健康发展,也会对违规者造成 ...
- GPL协议
GPL-General Public License 它是自由软件许可(Free Software Licence),保证最终使用者能够自由的引用,学习,拷贝,甚至修改软件.在理解这之前需要了解什么是 ...
- 基於tiny4412的Linux內核移植 --- 实例学习中断背后的知识(1)
作者:彭东林 邮箱:pengdonglin137@163.com QQ:405728433 平台 tiny4412 ADK Linux-4.9 概述 前面几篇博文列举了在有设备树的时候,gpio中断的 ...
随机推荐
- JS Date当前时间:获取日期时间方法在各浏览器中的差异
转自:http://www.feiesoft.com/00047/<script type="text/javascript"> // JS Date当前时间获取方法在 ...
- scala环境配置
scala下载 解压 vim ~/.profile export PATH=~/dev/scala/scala-/bin:$PATH idea的scala插件这个由于太大,只能手工下载,注意下载的版本 ...
- 黄聪:GeckoWebBrowser多窗口独立cookie
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- 高阶c++
模板就是宏.模板能不能再往一步? http://perilla.codeplex.com/ enhanced c++ template grammar: rule 1: c++ identifier ...
- myeclipse2015CI Server显示derby服务器去除方法
找到myeclipse的安装目录 myeclipse2015CI\configuration\org.eclipse.equinox.simpleconfigurator 打开文件bundles.in ...
- AJAX怎么用POST 传参数
//注册回调函数.注意注册回调函数是不能加括号,加了会把函数的值返回给onreadystatechange xmlhttp.onreadystatechange = callback; //设置连接信 ...
- Unity关于获取游戏对象
我觉得Unity里面的Transform 和 GameObject就像两个双胞胎兄弟一样,这俩哥们很要好,我能直接找到你,你也能直接找到我.我看很多人喜欢在类里面去保存GameObject对象.解决G ...
- 从感知器到SVM
这篇文章主要是分析感知器和SVM处理分类问题的原理,不涉及求解 感知器: 感知器要解决的是这样的一个二分类问题:给定了一个线性可分的数据集,我们需要找到一个超平面,将该数据集分开.这个超平面的描述如下 ...
- DevExpress TreeList 全选和反选 z
/// <summary> /// 全选树 /// </summary> /// <param name="tree">树控件</para ...
- Visual Studio 设置多核编译
1.选择一个指定项目右击 -> 属性 -> 配置属性 -> C/C++ -> 命令行 在附加选项中输入:/MP4 或者/MP8 等,后面的那个数字是指定CPU 核的数量,可以自 ...