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

相关文章
|
5月前
|
安全 应用服务中间件 网络安全
在Linux环境部署Flask应用并启用SSL/TLS安全协议
至此,你的Flask应用应该能够通过安全的HTTPS协议提供服务了。记得定期更新SSL证书,Certbot可以帮你自动更新证书。可以设定cronjob以实现这一点。
387 10
|
5月前
|
Java Linux 网络安全
Linux云端服务器上部署Spring Boot应用的教程。
此流程涉及Linux命令行操作、系统服务管理及网络安全知识,需要管理员权限以进行配置和服务管理。务必在一个测试环境中验证所有步骤,确保一切配置正确无误后,再将应用部署到生产环境中。也可以使用如Ansible、Chef等配置管理工具来自动化部署过程,提升效率和可靠性。
611 13
|
4月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
10月前
|
机器学习/深度学习 安全 Linux
Linux 主要应用领域的归纳
服务器领域 Linux在服务器领域的应用是其最为广泛和成熟的领域之一。由于其开源、稳定、高效和安全的特性,Linux成为许多企业服务器的首选操作系统。 Web服务器:Linux是Web服务器的理想选择,因为它支持Apache、Nginx等流行的Web服务器软件,这些软件在Linux上运行稳定且性能卓越。Linux服务器可以高效地处理大量并发请求,提供快速、可靠的Web服务。 数据库服务器:Linux也广泛用于数据库服务器,如MySQL、PostgreSQL和Oracle等数据库管理系统在Linux上运行良好。Linux的稳定性和安全性使得它成为存储和管理敏感数据的理想平台。 邮件服务器:Lin
588 5
|
11月前
|
Ubuntu Linux 开发者
Ubuntu20.04搭建嵌入式linux网络加载内核、设备树和根文件系统
使用上述U-Boot命令配置并启动嵌入式设备。如果配置正确,设备将通过TFTP加载内核和设备树,并通过NFS挂载根文件系统。
622 15
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
556 13
|
缓存 Linux 开发者
Linux内核中的并发控制机制:深入理解与应用####
【10月更文挑战第21天】 本文旨在为读者提供一个全面的指南,探讨Linux操作系统中用于实现多线程和进程间同步的关键技术——并发控制机制。通过剖析互斥锁、自旋锁、读写锁等核心概念及其在实际场景中的应用,本文将帮助开发者更好地理解和运用这些工具来构建高效且稳定的应用程序。 ####
267 5
|
存储 安全 关系型数据库
Linux系统在服务器领域的应用与优势###
本文深入探讨了Linux操作系统在服务器领域的广泛应用及其显著优势。通过分析其开源性、安全性、稳定性和高效性,揭示了为何Linux成为众多企业和开发者的首选服务器操作系统。文章还列举了Linux在服务器管理、性能优化和社区支持等方面的具体优势,为读者提供了全面而深入的理解。 ###
|
Unix Linux Ruby
在windows和linux上高效快捷地发布Dash应用
在windows和linux上高效快捷地发布Dash应用
626 4
|
Linux iOS开发 开发者
跨平台开发不再难:.NET Core如何让你的应用在Windows、Linux、macOS上自如游走?
【8月更文挑战第28天】本文提供了一份详尽的.NET跨平台开发指南,涵盖.NET Core简介、环境配置、项目结构、代码编写、依赖管理、构建与测试、部署及容器化等多个方面,帮助开发者掌握关键技术与最佳实践,充分利用.NET Core实现高效、便捷的跨平台应用开发与部署。
1493 3