关于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。
最新文章
- Java String.split()用法小结
- 隐藏wmware到系统托盘
- js Array数组的使用
- python实用小代码
- 学了Java 你未必知道这些
- JSON对象、JSON字符串的相互转换
- Problem of Uninstall Cloudera: Can't Add Hdfs and Reported Cannot Find CDH's bigtop-detect-javahome
- PHP面向对象-----魔术方法
- Redis服务器启动之后3个警告信息的解决方案
- 基于agenda的Nodejs定时任务管理框架搭建
- Mysql查看登录用户以及修改密码和创建用户以及授权(转载)
- 2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践
- Android 播放Gif 动画
- time&;datetime
- GDI+ gif文件的显示和格式转换
- Linux——用户管理简单学习笔记(四)
- [EffectiveC++]item26:尽可能延后变量定义式的出现时间
- PHPExcel 导入
- hive--数据仓库
- apache kafka消息服务
热门文章
- MSXML使用教程
- InfoPi运行机制介绍
- go语言的命令行库
- 未能加载文件或程序集 Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
- intelliJ idea debug模式下启动慢的原因
- IOS:Safari不兼容Javascript中的Date问题
- 阿里weex学习入门必备
- c# winform 窗体起始位置 设置
- Linux命令(23)grep命令的使用
- [ActionScript 3.0] 分页排版