• 关于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。

  • 相关阅读:
    Vim+XDebug调试PHP
    JS实现多附件上传(asp.net) 中庸
    ajax+strutsi18n,validate framework(1)
    ExtJS+DWR+Spring+Hibernate开发HRMS(2)
    ajax+strutsi18n,validate framework(3)
    ajax+strutsi18n,validate framework(2)
    ajax+strutsi18n,validate framework(4)
    Java中参数传递的问题
    MyEclipse安装Extjs框架插件SpketIDE
    软件开发企业用人需求是怎样的?
  • 原文地址:https://www.cnblogs.com/zxlben/p/5720753.html
Copyright © 2020-2023  润新知