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。

最新文章

  1. Java String.split()用法小结
  2. 隐藏wmware到系统托盘
  3. js Array数组的使用
  4. python实用小代码
  5. 学了Java 你未必知道这些
  6. JSON对象、JSON字符串的相互转换
  7. Problem of Uninstall Cloudera: Can't Add Hdfs and Reported Cannot Find CDH's bigtop-detect-javahome
  8. PHP面向对象-----魔术方法
  9. Redis服务器启动之后3个警告信息的解决方案
  10. 基于agenda的Nodejs定时任务管理框架搭建
  11. Mysql查看登录用户以及修改密码和创建用户以及授权(转载)
  12. 2018-2019-2 网络对抗技术 20165237 Exp3 免杀原理与实践
  13. Android 播放Gif 动画
  14. time&datetime
  15. GDI+ gif文件的显示和格式转换
  16. Linux——用户管理简单学习笔记(四)
  17. [EffectiveC++]item26:尽可能延后变量定义式的出现时间
  18. PHPExcel 导入
  19. hive--数据仓库
  20. apache kafka消息服务

热门文章

  1. MSXML使用教程
  2. InfoPi运行机制介绍
  3. go语言的命令行库
  4. 未能加载文件或程序集 Microsoft.Web.Infrastructure, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad
  5. intelliJ idea debug模式下启动慢的原因
  6. IOS:Safari不兼容Javascript中的Date问题
  7. 阿里weex学习入门必备
  8. c# winform 窗体起始位置 设置
  9. Linux命令(23)grep命令的使用
  10. [ActionScript 3.0] 分页排版