注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

勇敢的劳尤条

 
 
 

日志

 
 

安卓如何规避GPLv2内核的传染性  

2014-01-22 10:08:55|  分类: 开源的困惑与诱惑 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Android,在争议中逃离 Linux 内核的 GPL 约束 【转】 - yuanshuilee - 勇敢的劳尤条

从下到上介绍上图
Linux Kernel: 完全开源,GPLv2协议
Libraryies: 含少量开源库
Android Runtime: android 优化的JAVA虚拟机,更适合嵌入式系统。
Application Framework和Application都是JAVA程序。

android如何规避GPLv2的传染性

首先,最关键点是Linus Torvalds在Linux内核版权最前的一段话,保证了Linux内核GPLv2不传染。Linux内核的版权是GPLv2,但是Linus Torvalds在Linux内核的版权文件COPYING中最前面增加了下面一段话,保证了Linux内核的商业用途不被GPLv2传染。

   NOTE! This copyright does *not* cover user programs that use kernel
 services by normal system calls - this is merely considered normal use
 of the kernel, and does *not* fall under the heading of "derived work".
 Also note that the GPL below is copyrighted by the Free Software
 Foundation, but the instance of code that it refers to (the Linux
 kernel) is copyrighted by me and others who actually wrote it.

 Also note that the only valid version of the GPL as far as the kernel
 is concerned is _this_ particular version of the license (ie v2, not
 v2.2 or v3.x or whatever), unless explicitly otherwise stated.

Linus Torvalds
----------------------------------------
   GNU GENERAL PUBLIC LICENSE
      Version 2, June 1991

注意:这个版权不覆盖通过正常系统调用来使用Linux内核服务的用户程序。有了这一点Linux内核的GPLv2不会传染内核之上。以上版权文件可以到Linux Kernel的网站上下载: https://www.kernel.org/

其次,android把GNU/Linux中的系统库glibc换为libc了。
一般的GNU/Linux上图中的libc位置是glibc。
(1)glibc是GNU的,属于GPL授权,有传染性。(不准确)
glibc是GNU的,属于LGPL授权,动态链接并没有传染性。
(2)libc是google 改写优化的Free BSD Bionic库,属于BSD协议。可以选择性开源,也不具传染性。
谷歌改写libc是为了暴露更多的内核接口,更大程度上让上层可以调用更多的资源。

通过以上两点,android很好的规避了GNU/Linux GPL协议的传染性。


系统:linux核心仍然变
Android操作系统的核心属于Linux核心的一个分支,具有典型的Linux调度和功能,除此之外,Google为了能让Linux在移动设备上良好的运行,对其进行了修改和扩充。Android去除了Linux中的本地X Window System,也不支持标准的GNU库,这使得Linux平台上的应用程序移植到Android平台上变得困难。2008年,Patrick Brady于Google I/O演讲“Anatomy & Physiology of an Android”,并提出的Android HAL架构图。HAL以*.so档的形式存在,可以把Android framework与Linux kernel隔开,这种中介层的方式使得Android能在移动设备上获得更高的运行效率。这种独特的系统结构被Linux内核开发者Greg Kroah-Hartman和其他核心维护者称赞。Google还在Android的核心中加入了自己开发制作的一个名为“wakelocks”的移动设备电源管理功能,该功能用于管理移动设备的电池性能,但是该功能并没有被加入到Linux核心的主线开放和维护中,因为Linux核心维护者认为Google没有向他们展示这个功能的意图和代码。
2010年2月3日,由于Google在Android核心开发方面和Linux社区方面开发的不同步,Linux内核开发者Greg Kroah-Hartman将Android的驱动程序从Linux内核“状态树”(“staging tree”)上除去。2010年4月,Google宣布将派遣2名开发人员加入Linux核心社区,以便重返Linux核心。2010年9月,Linux核心开发者Rafael J. Wysocki添加了一个修复程序,使得Android的“wakelocks”可以轻松地与主线Linux核心合并。2011年,Linus Torvalds说:“Android的核心和Linux的核心将最终回归到一起,但可能不会是4-5年。”在Linux 3.3中大部分代码的集成完成。

谷歌移除了GPL授权的很多功能
Android是执行于Linux kernel之上,但并不是GNU/Linux。因为在一般GNU/Linux里支持的功能,Android大都没有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以bionic取代Glibc、以Skia取代Cairo、再以opencore取代FFmpeg等等。Android为了达到商业应用,必须移除被GNU GPL授权证所约束的部份,例如Android将驱动程序移到 userspace,使得Linux driver 与 Linux kernel彻底分开。bionic/libc/kernel/ 并非标准的内核头文件(kernel header files)。Android的内核头文件是利用工具由Linux内核的头文件所产生的,这样做是为了保留常数、资料结构与宏。

硬件抽像层(HAL)
Android的硬件抽像层是能以封闭源码形式提供硬件驱动模块。HAL的目的是为了把Android framework与Linux kernel隔开,让Android不至过度依赖Linux kernel,以达成“内核独立”(kernel independent)的概念,也让Android framework的开发能在不考量驱动程序实作的前提下进行发展。HAL stub是一种代理人的概念,stub是以*.so档的形式存在。Stub向HAL“提供”操作函数,并由Android runtime向HAL取得stub的操作,再回调这些操作函数。HAL里包含了许多的stub(代理人)。Runtime只要说明“类型”,即module ID,就可以取得操作函数。

  评论这张
 
阅读(573)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017