您好、欢迎来到现金彩票网!
当前位置:PC蛋蛋 > 约束函数 >

Android在争议中逃离 Linux 内核的 GPL 约束 - OSCHINA

发布时间:2019-06-10 13:15 来源:未知 编辑:admin

  为这个题材起名,我思考了许久,GPL 是著名的开放源代码许可协议,Linux 内核开源项目正是在 GPL 的庇佑之下,十多年来在服务器、PC 端以及各种嵌入式设备上成绩斐然,是当之无愧的当代计算机软件的基石,说 GPL 代表着 Linux 的开源精神,毫不为过。然而,现实世界中,GPL 开源乌托邦和商业社会的丛林法则之间存在剧烈的冲突,其中犬牙交错,艰难成长,从中引发的思考,与大家共享。

  总所周知,Linux 内核以 GNU 通用公共许可证第二版(GPL V2)的授权使用协议下发行。GNU 通用公共许可证是一种 “Copyleft” 形式的“版权”,保障任何人都能够对 Linux 内核以及其衍生产品的使用、修改和重新发布的权力,前题是不能修改发布条款。什么意思呢,任何 Linux 内核的衍生产品(Derived Work)必须遵循 GPL 协议进行发布。然而问题的核心在于什么是 Linux 内核的衍生产品,其中有几个致命问题,业界争论了十年有多。

  1、使用 Linux 内核的头文件定义,进行系统调用的程序是否会被定性为衍生产品?

  如果上述问题答案均为“是”,GPL 将为 Linux 打造一个的“封闭” 的开源世界,什么意思呢?一个 Linux GPL的操作系统核心运行在 “ 内核空间 ” ,上层的类库、框架、服务、应用运行在 “ 用户空间 ” 。用户空间上的任何服务不可避免的需要Linux 内核的头文件,进行系统调用,因此,中间层服务必须遵循 GPL 进行开放源代码。调用中间服务层的框架或者其他服务使用了 GPL 的类库,因此,也必须是 GPL 的。同理,上层应用也被 “ 传染 ” ,必须是 GPL 的。于是,从内核到驱动到中间服务到上层应用,形成了一个 GPL 一体化软件授权的软件发布整体。可以认为,这个整体上任何开发成果都是 GPL 的,除非极少数的例外程序能够证明自身独立于系统的GPL环境。这样的一个“软件闭包”排斥的商业化的软件模块以及“想要钱”普通开发者,将整个软件世界 划分为“ GPL 与 GPL 兼容的”的和非 GPL 的,每个开发从业者面临着选择,要么 Linux+GPL ,要么 Linux 与你无关。

  重新回到这三个问题,第一个问题,曾经被 Linux 内核的作者Linus Torvalds以及内核开发人员多次澄清普通系统调用为非 GPL 的作用范围,甚至固化在 Linux 内核的源码 COPYING 文档中,为 Linux 用户空间的程序采用非 GPL 的授权许可证打下了基础。

  第 二个问题,具有明确的答案,是。这也是为何 GPL 被抨击为具有“病毒感染”的特性,一旦程序使用了 GPL 的模块,本身即被传染,程序必须成为 GPL。如果主程序与 GPL 类库是静态链接(Static Link)的关系,业界一般认为主程序必须限定为 GPL。而对主程序动态链接(Dynamic Link)GPL类库主程序一般认为也必须是GPL的,若要打赢官司,必须证明主程序与GPL模块之间具有“独立性和可区分性”(Separate and Independent),才能逃离 GPL 的约束。GPL官方网站上的有这样的 FAQ:

  如果一个类库以 GPL 的许可证授权进行发布(不是 LGPL),是否意味着任何使用该类库的软件必须以 GPL 或者 GPL 兼容的许可证下进行发布?

  第 三个问题,是硬件厂商和 Linux 内核开发社区之间一场旷日持久的争论的中心。最著名的,莫过与图形显示设备厂商 AMD/ATI、NVidia 出自硬件规格保密以及知识产权的考虑,长期以二进制软件包的方式独立发布图形驱动,涉嫌违反了Linux内核开放源代码的软件授权协议 GPL,至今仍是 Unity 与 Gnome 3 等依赖于硬件图形加速的新型桌面技术发展上的一大阴影。主要的 Linux 内核维护者 Greg Kroah-Hartman 曾经严厉的批判过,内核中的二进制软件包发布的模块是非法的、不道德的。

  说 到此处,可以看到 GPL 下的 Linux,存在着开源精神和商业机密以及知识产权保护相关的商业精神存在尖锐对立,对硬件厂商以及其他商业软件开发者来说,既不能忽视Linux广阔的 商业市场,也不能放弃产品规格以及知识产权保护,两者都会伤害其立命之本。在早年的一份嵌入式操作系统选型的研究报告指出,Linux 相对于其他的 BSD 的 Unix Like 操作系统,由于 GPL 的约束限制,不具有商业优势。(参见引用3)。一言以蔽之,业界有 GPL 的恐惧症。

  下图是Openfoundry绘 制的 Android 的授权许可证结构,可以看到在 Android 多层软件栈中,仅仅最核心的 Linux 内核使用了 GNU 通用公共许可证,在这个层次上,Google 对 Linux 内核的所有修改必须反馈回 Linux 主版本树(Android 的内核将在 Linux 3.3 版本进行回归,两个版本的 Linux 内核进行融合)。

  其上层的类库以及应用框架以及所谓用户空间部分,大部分使用 了“ 温和 ”的 Apache-2.0 软件许可授权,允许 Android 上的开发商基于 Android 的源代码进行开发而不向社区反馈。基于上文讨论 GPL 的第一个问题,用户空间的类库以及程序使用 Linux 内核的系统调用不被视为是Linux内核的衍生产品,因而得以自由采用 Apache-2.0 的软件授权进行发布。GPL 世界和非GPL世界的分界线在于一个叫做 Bionic Libc 的类库。Bionic Libc 的关键之处在于如果 Bionic Libc 受到内核 GPL 的“感染”,将会波及非 GPL 的用户空间的各个模块。

  头文件由Linux内核的同名头文件自动生成,用来获取完成用户空间系统调用的必要的信息。它只包含原头文件中的常数、结构和宏定义,因此,不包含版权信息。

  不管如何,从目前的情况看,让 GPL 止步于内核空间的做法是成功的,并已经得到很大一部分内核开发者的认同。James Bottomley,Linux SCSI 子系统的维护者在 2011年 LinuxCon 大会日本站上谈到 Android 的商业成功与 GPL 恐惧的时候说:

  在遵守 GPL 的问题上,我们必须澄清一些界线。内核的用户空间 ABI(应用二进制接口)就是一种 GPL 的作用边界,能让开发者意识到用户空间的代码,不被定性为内核的衍生产品,如果 GPL 的界线清晰而易懂,可以帮助大家消除对 GPL 的恐惧。

  Android 的发展离不开硬件设备厂商的支持,硬件设备厂商最关注的是 Linux 驱动的 GPL 约束问题,公开驱动程序源代码将会泄漏设备的硬件规格和泄漏核心知识产权,这是硬件厂商 GPL 恐惧的缘由。Google 不遗余力的为硬件设备厂家排忧艰难,保驾护航。上文提到的 “ Android Anatomy And Physiology ”,文中清晰的讲到 Android 在用户空间与内核空间之间存在着硬件抽象层 HAL(Hardware Abstraction Layer),HAL 类库本质上一种用户空间的驱动,其中的主要用途之一:规避 GPL。

  Linux 是单内核操作系统(Macrokernel),这种操作系统的一大特点是驱动存活在内核,优点是驱动与系统内核共生在相同的地址空间,运作的效率比较高, 缺点是当驱动有问题的时候,容易危及内核的工作安全。用户区间驱动的思路是将驱动的主要业务逻辑剥离出来放到用户空间的主驱动模块中,内核中的驱动是个 “影子”驱动,只有透传控制命令和数据的功能。

  Android 的 HAL 相当于上图中的主驱动,其在内核中的驱动相当于上图中的影子驱动。规避 GPL 的硬件厂家把需要保护的商业机密以及知识产权相关的逻辑放在 HAL 层,以二进制包的方式发布,不需要公开源代码。

  这种机制看上去很美,然而,同样面临着巨大的争议。HAL 类库与内核驱动之间通过普通的系统调用能够完成么?如果不是普通的系统调用,用户空间的驱动就违反了上文中的第一条,用户空间的驱动不能获得 GPL 例外的豁免。Edward J. Naughton 2011 年 3 月撰文认为,普通的系统调用应 被理解为 gnu glibc 向外暴露的系统调用接口,而 Android 通过 Bionic libc 类库暴露了更多的接口,包括原来在内核空间才能使用的接口,其目的是为了让用户空间的驱动能够充分的利用内核和硬件资源。如果情况果真如此,Bionic libc类库是 Google 的后门,这也可能 Android 抛弃使用 gnu glibc 重写 Bionic libc 的其中一个主要原因。Edward J. Naughton 说:

  Bionic 暴露了原来在用户空间不能使用的函数调用,这些调用原本在代码中被 __KERNEL__ 的宏定义保护其运行在内核状态。如果Google 只要将在 Bionic 添加暴露的接口就可以自由的暴露 Linux 系统调用(这些系统调用明显应该由 Linux 内核社区维护),那么难免被其他人效仿。

  总 得说来,Android 为 GPL 下的 Linux 如何与商业社会并存与共赢提供了一个成功的范本,尝试为 Linux 生态系统上的各种角色划清彼此的作用范围,梳理了各方在版权上的权利和义务,目前看来获得了惊人的商业成功。然而,这种工作模式也面临着巨大的版权争议, 理论上存在一种可能,一旦版权模式被否决,将面临被全盘否定的灾难。

  本站文章除注明转载外,均为本站原创或编译。欢迎任何形式的转载,但请务必注明出处,尊重他人劳动共创开源社区。

  Linux 和 Android 目前实际上没有半毛钱关系,2-3年前 Linux 就把 Android 踢出了开源社区, 因为 Android 驱动程序不开源,或者是Linux 从Android 驱动得不到半点好处, Android 的开源也是伪开源,它可以开源UI,但是绝对不开源硬件驱动程序。

  所以说google退出中国是错误的。在中国,一切都是自由使用的。不用纠结于这什么版权。老外好可怜。哈哈哈。

  版权声明:本文为博主原创文章,未经博主允许不得转载。 题外话: 谷歌开始对欧盟用的应用收费了,不知道国内会怎么样。 最近项目...

  欧盟委员会指出的安卓设备预装Google搜索、Chrome浏览器作为使用Google Play的条件,以及通过财务利益换取第三方安装手机上的Google搜索应用,两点直击谷歌要害,事实上这也是安卓在谷歌商业...

  新功能/改进 重构改进glog模块: 去掉日志模块所有的锁机制,改为无锁设计,执行性能更加高效 增加日志内容的异步输出特性:增加日志输出内容的Json格式支...

  SOP 1.10.0 发布了,本次更新内容如下: 新增监控日志,方便排查线上问题 doc 修复文档显示 BUG 本次更新重点内容是线上日志查看。查看日志有多重方式,如 ELK 或者直接登录服务器翻看日志文...

  TeaWeb是一个可视化的Web代理服务,目标是将代理服务、日志、统计、监控等集成在同一个服务中,让开发者简单地启动就可以使用。 本版本主要提供了一个免费HTTPS证书的申请工具、一个简单易用...

http://beckymotew.com/yueshuhanshu/49.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有