Linux内核发展史(二):GNU

2020 年 3 月 10 日

Linux内核发展史(二):GNU

这一小节我们主要介绍 Linux 系统应用程序的主要来源——GNU。


一、GNU


Linux 包含系统内核和提供系统服务和工具的应用程序两个部分。Linux 所使用的应用程序是由许多程序元编写并自由发布的。Linux 支持自由软件的概念,即软件本身不应受限,它们应遵守 GNU (GNU 是 GNU’s Not UNIX 的递归缩写)通用公共许可证(GPL)[1]。软件通常是以源代码的形式发布的,但也可能需要支付一定的费用。这里提到的 GNU 项目最初是由自由软件基金会(Free Software Foundation)发起的,这个基金会的创始人是 Richard Stallman。GNU 项目的宗旨是:试图创建一个与 UNIX 系统兼容,但并不受 UNIX 名字和源代码私有权限制的操作系统和开发环境。[1]因此 GNU 为软件社区贡献了许多 UNIX 系统上应用程序的仿制品,这些应用程序都遵循 GPL 许可证。


下面是在 GPL 条款下发布的一些主要的 GNU 项目软件[1]:


  • GCC: GNU编译器集,它包括GNU C编译器。

  • G++: C++编译器,是GCC的一部分。

  • GDB:源代码级的调试器。

  • GNU make: UNIX make命令的免费版本。

  • Bison:与UNIX yacc兼容的语法分析程序生成器。

  • bash:命令解释器(shell)。

  • GNU Emacs:文本编辑器及环境。


许多其他的软件包也是在遵守自由软件的原则和 GPL 条款的情况下开发和发行的,包括电子表格、源代码控制工具、编译器和解释器、因特网工具、图形图像处理工具(如 Gimp),以及两个完整的基于对象的环境(GNOME 和 KDE)。


二、常见开源协议简介


木兰协议:木兰协议是我国首个开源协议,这一开源协议共有五个主要方面,涉及授予版权许可、授予专利许可、无商标许可、分发限制和免责申明与责任限制。在版权许可方面,木兰协议允许“每个‘贡献者’根据’本许可证‘授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其‘贡献’,不论修改与否。”木兰协议比 Apache License 更友好一些,Apache License 要求列出每个修改文件,其实很多项目做不到这一点,所以 MulanPSL 直接取消了这项要求[2]。


GPL 协议:GPL 协议采取两种措施来保护程序员的权利:(1)给软件以版权保护;(2)给程序员提供许可证。它给程序员复制,发布和修改这些软件的法律许可。在复制和发布方面,GPL 协议规定“只要你在每一副本上明显和恰当地出版版权声明和不承担担保声明,保持此许可证的声明和没有担保的声明完整无损,并和程序一起给每个其他的程序接受者一份许可证的副本,你就可以用任何媒体复制和发布你收到的原始的程序的源代码。你可以为转让副本的实际行动收取一定费用。你也有权选择提供担保以换取一定的费用。”[3]GPL 的出发点是代码的开源/免费使用和引用/修改/衍生代码的开源/免费使用,但 不允许 修改后和衍生的代码做为 闭源的商业软件发布和销售。GPL 协议的主要内容是只要在一个软件中使用(“使用”指 类库 引用,修改后的 代码 或者 衍生代码)GPL 协议的产品,则该软件产品必须也采用 GPL 协议,既必须也是 开源和免费[4]。


LGPL 协议:LGPL 是一个为主要为 类库使用 设计的开源协议。和 GPL 要求任何使用/修改/衍生之 GPL 类库的的软件必须采用 GPL 协议 不同。LGPL 允许 商业软件 通过类库 引用(link)方式 使用 LGPL 类库而 不需要 开源商业软件的代码。这使得采用 LGPL 协议 的开源代码可以被 商业软件 作为类库引用并发布和销售。但是如果 修改 LGPL 协议的代码 或者 衍生,则所有修改的代码,涉及修改部分的额外代码和衍生的代码都 必须采用 LGPL 协议[4]。


BSD 协议:BSD 开源协议是一个给于使用者很大自由的协议。可以自由的使用,修改源代码,也可以将修改后的代码作为开源或者专有软件再发布。当你发布使用了 BSD 协议的代码,或者以 BSD 协议代码为基础做二次开发自己的产品时,需要满足三个条件:


  1. 如果再发布的产品中包含源代码,则在源代码中必须带有原来代码中的BSD协议。

  2. 如果再发布的只是二进制类库/软件,则需要在类库/软件的文档和版权声明中包含原来代码中的BSD协议。

  3. 不可以用开源代码的作者/机构名字和原来产品的名字做市场推广。


BSD 代码鼓励代码共享,但需要尊重代码作者的著作权。BSD 由于允许使用者修改和重新发布代码,也允许使用或在 BSD 代码上开发商业软件发布和销售,因此是对商业集成很友好的协议[5]。


三、总结


本小节中我们简要介绍了有关 Linux 应用程序的一个重要来源——GNU。从下一小节开始我们将介绍 Linux 内核源码结构。


参考文献


[1]《Linux 程序设计(第四版)》


[2]https://iot.ofweek.com/2019-08/ART-132216-8120-30401877.html


[3]https://baike.baidu.com/item/GPL/2357903?fromtitle=GPL协议&fromid=8274607&fr=aladdin


[4]https://blog.csdn.net/xiaoxiao133/article/details/83049959


[5]https://www.runoob.com/note/13176


2020 年 3 月 10 日 14:50153

评论

发布
暂无评论
发现更多内容

架构师训练营第四周学习笔记

一马行千里

学习 极客大学架构师训练营

USDT支付系统开发解决方案服务商,承兑商支付

135深圳3055源中瑞8032

使用Spring Boot创建docker image

程序那些事

Docker spring Spring Boot Spring Boot 2

甲方日常 31

句子

工作 随笔杂谈 日常

重大事故!IO问题引发线上20台机器同时崩溃

AI乔治

Java 架构 多线程 io 并发

系统架构--作业

Nick~毓

华为:“智能分布式接入网”打造真千兆高品质生活体验

Geek_459987

华为发布“品质专线2.0&智能分布式接入”解决方案

Geek_459987

区块链交易所开发搭建源码,数字货币交易系统

135深圳3055源中瑞8032

12张图带你彻底理解分布式事务产生的场景和解决方案!!

冰河

分布式事务 2PC 可靠消息最终一致 TCC 最大努力通知

架构师训练营第四周命题作业

一马行千里

极客大学架构师训练营 命题作业

一个草根的日常杂碎(10月13日)

刘新吾

随笔杂谈 生活记录 社会百态

华为卢毅权:品质专线2.0 打造无处不在的品质联接

Geek_459987

LAXCUS大数据集群操作系统:一个分布式分时共享E级系统软件(二)

陈泽云

人工智能 大数据 基础设施 国产操作系统

区块链钱包系统开发,多币钱包app源码搭建

135深圳3055源中瑞8032

如何优雅的搞垮服务器,再优雅的救活

MySQL从删库到跑路

Linux 升级glibc 启动异常 无法进入系统 抢救模式

算法图解:如何找出栈中的最小值?

王磊

Java 数据结构 算法

合约智能一键跟单系统开发,API合约跟单软件

135深圳3055源中瑞8032

为什么学习总是停在开头两页?

Nydia

numexpr:你以为numpy已经够快了,其实它还可以更快

计算机与AI

Python 学习 数据分析 Numpy

一次百万长连接压测 Nginx OOM 的问题排查分析

AI乔治

Java nginx 架构 服务端 高性能

代表Java未来的ZGC深度剖析,牛逼!

AI乔治

Java 架构 ZGC JVM GC调优

架构师训练营第 1 期第四周课后练习题

Leo乐

极客大学架构师训练营

架构师训练营第四周作业

脸不大

一个草根的日常杂碎(10月12日)

刘新吾

随笔杂谈 生活记录 社会百态

一个草根的日常杂碎(10月14日)

刘新吾

随笔杂谈 生活记录 社会百态

Java-技术专题-纤程库Quasar

李浩宇/Alex

Flink周期性水位线分配器-6-3

小知识点

scala 大数据 flink

Netty源码解析 -- 客户端启动过程

binecy

Netty nio 源码阅读

区块链跨境支付系统开发源码,承兑系统搭建

WX13823153201

中年架构师,悲催的一天,全靠忍!

四猿外

Java 程序员 程序人生 架构师

Linux内核发展史(二):GNU-InfoQ