《Linux嵌入式实时应用开发实战(原书第3版)》——1.5 开源协议

简介:

本节书摘来自华章计算机《Linux嵌入式实时应用开发实战(原书第3版)》一书中的第1章,第1.5节,作者:(美)Doug Abbott 更多章节内容可以访问云栖社区“华章计算机”公众号查看。

1.5 开源协议

多数软件终端用户协议都明确限制了你只可以使用协议范围内的功能。典型的限制条件是不允许复制或重新发布。你通常会被警告不要试图对软件进行“逆向工程”。
相反,开源协议是只要你愿意,就允许使用、修改和复制授权的软件。和权利相伴的是义务。如果你修改并发布了一个开源协议内的软件,你就必须将修改后的源代码也纳入该框架。你的修改就成为“派生的工作”,也在该协议的范围内。这就允许其他使用者更好地理解软件,并按他们的意愿做出更多的修改。
开源协议也叫“公共版权”协议,使用版权的目的是表达这样一个观点:使用版权法来作为一种便利而不是限制获取软件知识产权的途径。尽管版权通常用于一个作者限制其他人复制、修改和发布一个产品,公共版权则明确允许在同样的协议框架下修改和再发布该产品。因此“公共版权”允许你从他人的工作中获益,但是你的任何改动均需要在同样的框架下发布。
毫无疑问,最知名的、应用最广泛的开源协议是GNU通用公共协议(GPL),它最初由FSF在1989年发布。Linux内核是在GPL框架内的,但是有一个问题使GPL不能在一些商业场合使用。使用或参考其他在GPL架构下发布的软件而生成的软件,即使只是链接到一个库,也被认为是派生产品,也必须受限于GPL架构而以源代码的形式提供。
为了解决这一问题,推动开源库的发展,FSF推出了GPL库(LGPL)。区别是链接到LGPL框架库的程序不被认为是派生工作,尽管你仍然必须使代码能被库所用,但不要求你发布代码。
后来,LGPL就因其提供给用户的自由度更小而被称为“更小的GPL”。所以当LGPL让使用开源软件开发有所有权的产品成为可能时,FSF就鼓励开发者将他们的库置于GPL的框架内,以达到最大限度的开源。
与之完全相反的是伯克利软件发布授权(BSD),它比GPL早了约12年。它建议但不要求对源代码的改动必须反馈给开发者社区,并且允许使用其他协议生成产品,包括个人协议。
也有不少其他协议介于这两者之间。比如在1998年开发的Mozilla公共协议(MPL),当时Netscape公司将他们的浏览器开源了,它包含比BSD协议更多的关于派生产品的要求,但是比GPL或LGPL少。开源促进会(Open Source Initiative)是一个非盈利性的组织,负责认证满足开源定义的协议,2011年12月,在它的网站上列出了78个通过认证的协议。
多数在GPL的框架下发布的软件,包括Linux内核,都适用于协议的第2版,它在1991年发布,正好和Linux的发布在同一年。FSF在2007年6月发布了GPL的第3版。发布第3版的目的之一是解决“TiVo化(tivoization)”的问题,这是由FSF的创始人Richard Stallman发明的一个术语。结果表明TiVo只能运行有授权数字签名的代码。所以,即使TiVo使其源代码纳入GPL框架,修改的代码将仍然不能运行。
Stallman认为这违背了GPL的精神。其他的开发者包括Linus Torvalds则将数字签名视为一个有用的安全工具而不想将其完全禁止。争论还在继续。但是在任何情况下,内核本身不可能很快过渡到第3版。
法律问题
开源的法律意义产生了相当多的FUD,尤其是SCO的关于Linux内核受UNIX代码破坏的言论。SCO组织,正式名称是Santa Cruz公司,在1996年从Novell获得UNIX系统V源代码的版权,不过现在还有一些关于SCO到底从Novell购买到什么的争论。无论如何,SCO声称IBM公司引入了部分SCO版权的UNIX代码到Linux内核中,因此要求Linux使用者支付协议费用。
SCO的案子最终败诉了,该公司曾于2007年根据《破产法》第11章申请破产,但是突然间通过开源协议问题之争又赢得了很多钱。结果是嵌入式开发者都需要意识到开源和专有软件的协议问题。嵌入式软件,包括衍生的或从其他来源获得的元素,通常与操作系统密切相关。没人期望嵌入式工程师成为知识产权代理人,但无论如何有必要明白你所使用的和生成的软件的授权框架以保证一切运行顺利。
问题要从两方面看待。现在仍然有人努力去识别对GPL的侵权,目的不是挣钱,而是通过给侵权者施压让他们停止行动来维护GPL的完整性。特别地,GPL反侵权项目曝光了十几个嵌入式Linux供应商,他们一直快速开发但又不遵守GPL规则。据Harald Welte,GPL反侵权项目的发起者说,常见的非法设备都是网络设备,像路由器、机顶盒和车载导航系统等。
开源协议专家Bruce Perens说,嵌入式开发者似乎都有这样一个想法:“这是嵌入式的,没有人能改变源代码,所以无需应用GPL”。他们的确是这样做的。
现在我们有一些关于嵌入式实时空间及Linux怎样应用其中的想法,第2章将会描述怎样在一个工作站上安装Linux。

相关文章
|
18天前
|
Linux Android开发
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
测试程序之提供ioctl函数应用操作GPIO适用于Linux/Android
13 0
|
1天前
|
Linux 编译器 调度
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
本文介绍了如何将POSIX应用程序编译为在Xenomai实时内核上运行的程序。
15 1
xenomai内核解析--双核系统调用(二)--应用如何区分xenomai/linux系统调用或服务
|
1天前
|
消息中间件 存储 Linux
linux实时应用如何printf输出不影响实时性?
本文探讨了Linux实时任务中为何不能直接使用`printf(3)`,并介绍了实现不影响实时性的解决方案。实时任务的执行时间必须确定且短,但`printf(3)`的延迟取决于多个因素,包括用户态glibc缓冲、内核态TTY驱动和硬件。为确保实时性,通常将非实时IO操作交给低优先级任务处理,通过实时进程间通信传递信息。然而,即使这样,`printf(3)`在glibc中的实现仍可能导致高优先级任务阻塞。Xenomai 3提供了一个实时的`printf()`实现,通过libcobalt库在应用编译链接时自动处理,预分配内存,使用共享内存和线程特有数据来提高效率和实时性。
10 0
linux实时应用如何printf输出不影响实时性?
|
3天前
|
安全 Linux Shell
Linux常用命令详解与实战应用
【5月更文挑战第7天】本文详述了Linux常用命令,包括文件与目录操作(ls, cd, pwd, cp, mv, rm)、文本处理(cat, grep, sed)及系统管理(top, df, du)命令。通过实例演示了如何使用这些命令,帮助读者理解和掌握Linux操作,提升系统管理效率。学习和熟练运用这些基础命令,是高效使用Linux的关键。
|
9天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
|
10天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
11 0
|
10天前
|
存储 缓存 Linux
linux几种典型应用对系统资源使用的特点
【4月更文挑战第22天】几种典型应用对系统资源使用的特点
19 0
|
11天前
|
Linux Shell 应用服务中间件
LINUX的应用与实践
LINUX的应用与实践
17 0
|
17天前
|
Linux
Linux中grep命令详解与实战应用
Linux中grep命令详解与实战应用
14 0
|
25天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植