《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。

相关文章
|
25天前
|
Cloud Native Linux 网络虚拟化
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
在Linux网络虚拟化领域,虚拟以太网设备(veth)扮演着至关重要的角色🌐。veth是一种特殊类型的网络设备,它在Linux内核中以成对的形式存在,允许两个网络命名空间之间的通信🔗。这篇文章将从多个维度深入分析veth的概念、作用、重要性,以及在容器和云原生环境中的应用📚。
深入理解Linux veth虚拟网络设备:原理、应用与在容器化架构中的重要性
|
3天前
|
Linux Shell 调度
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
【Linux系列】fork( )函数原理与应用详解——了解【父子进程及其特性】(代码演示,画图帮助理解,思维导图,精简)(11)
|
3天前
|
Ubuntu 算法 Linux
嵌入式Linux的学习误区
该文指出了学习嵌入式Linux开发的两个常见误区。一是过分专注于学习桌面或服务器版Linux,而非关注嵌入式开发本身,实际上只需熟悉基本操作即可。二是试图在没有基础的情况下直接阅读Linux内核源代码,这是不切实际的,应先建立基础知识再进行源码学习。文章还提到了在嵌入式系统中获取和处理屏幕数据的示例,包括使用gsnap工具将framebuffer数据转为图像,以及涉及的交叉编译过程。
8 0
|
4天前
|
存储 缓存 Linux
linux几种典型应用对系统资源使用的特点
【4月更文挑战第22天】几种典型应用对系统资源使用的特点
10 0
|
5天前
|
Linux Shell 应用服务中间件
LINUX的应用与实践
LINUX的应用与实践
10 0
|
11天前
|
Linux
Linux中grep命令详解与实战应用
Linux中grep命令详解与实战应用
12 0
|
19天前
|
Linux 编译器 测试技术
嵌入式 Linux 下的 LVGL 移植
嵌入式 Linux 下的 LVGL 移植
|
19天前
|
Linux 开发工具
【ZYNQ】配置嵌入式 Linux 静态 IP 地址
【ZYNQ】配置嵌入式 Linux 静态 IP 地址
|
25天前
|
Linux SDN 网络虚拟化
Linux虚拟网络设备全景解析:定义、工作模式与实践应用
在深入探索Linux操作系统的强大功能时,我们不可避免地会遇到虚拟网络设备的概念。这些设备扮演着构建和维护虚拟化环境中网络通信的关键角色。本文旨在详细介绍Linux虚拟网络设备的定义、工作模式以及它们的多样化用途。
Linux虚拟网络设备全景解析:定义、工作模式与实践应用
|
25天前
|
Linux 网络虚拟化 Docker
掌握Linux虚拟网络设备:从基础到应用的全面指南
在现代计算环境中,尤其是云计算☁️、容器化📦和微服务架构🏗️大行其道的时代,了解和掌握Linux虚拟网络设备变得极为重要。本文将深入探讨Linux虚拟网络设备的世界,带你了解它们是什么、包含哪些类型、为什么需要它们,以及如何在应用开发中充分利用它们。
掌握Linux虚拟网络设备:从基础到应用的全面指南