关于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中断的 ...
随机推荐
- alibaba-dexposed 原理解析
alibaba-dexposed 原理解析 使用参考地址: http://blog.csdn.net/qxs965266509/article/details/49821413 原理参考地址: htt ...
- sql查询语句
//查询表的字段名和字段类型select column_name,data_type from information_schema.columns where table_name = '表名' / ...
- mybatis 与 缓存
首先从配置文件说起,有个cacheEnabled的配置项,当设置为true时(默认就是true),Session就会用一个CachingExecutor来包装我们的Executor实例: public ...
- SQLSERVER 复制同一张表的递归结构
CREATE PROCEDURE [dbo].[Pro_Copy] @OLDJiFenSeriesId VARCHAR(), @NEWJiFenSeriesId VARCHAR() AS BEGIN ...
- HDU2896 病毒侵袭
题目大意:给出若干病毒的特征码,不超过500个.每个病毒的特征码长度在20~200之间.现在有若干网站的源代码,要检测网站的源代码中是否包含病毒.网站的个数不超过1000个,每个网站的源代码长度在70 ...
- 用户输入函数--raw_input、input
1.raw_input python2.7用户输入字符串的话用raw_input.如果使用input输入字符串的话需要先把字符串放到变量中才可,但是用input输入数字的话是可以直接输入的,所以说在p ...
- 【转载】Keil中的USE MicroLib说明
在keil建立ARM的工程时 其中有一项是选 use MicroLIB 由于对KEIL不是很熟悉,于是就查了查,得到了以下信息: microlib 是缺省 C 库的备选库. 它旨在与需要装入到极少量内 ...
- RT-Thread下的串口驱动程序分析【转载】
编写本文稿的目的,在于通过分析stm32平台上的串口中断源码,学习 RTT中如何编写中断处理程序 如何编写RTT设备驱动接口代码 了解串行设备的常见处理机制 先以RTT官方源码中的STM32 BSP包 ...
- jdk动态代理实现
1.jdk动态代理的简单实现类 package com.proxy; import java.lang.reflect.InvocationHandler; import java.lang.refl ...
- 黄聪:CamtasiaStudio如何导出视频上传优酷实现高清