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

一、GNU

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

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

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

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

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

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

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

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

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

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

二、常见开源协议简介

木兰协议:木兰协议是我国首个开源协议,这一开源协议共有五个主要方面,涉及授予版权许可、授予专利许可、无商标许可、分发限制和免责申明与责任限制。在版权许可方面,木兰协议允许“每个‘贡献者’根据’本许可证‘授予您永久性的、全球性的、免费的、非独占的、不可撤销的版权许可,您可以复制、使用、修改、分发其‘贡献’,不论修改与否。”木兰协议比ApacheLicense更友好一些,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%E5%8D%8F%E8%AE%AE&fromid=8274607&fr=aladdin

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

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

【华为云技术分享】Linux内核发展史 (3)相关推荐

  1. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 1

    前言 以互联网为代表的信息技术的迅猛发展对整个经济体系产生了巨大的影响.信息技术的发展一方面使知识的积累和传播更加迅速,知识爆炸性的增长:另一方面,使信息的获取变得越来越容易,信息交流的强度逐渐增加, ...

  2. 【华为云技术分享】“技术-经济范式”视角下的开源软件演进剖析-part 3

    4. 微观层面 4.1 个体动机 在开源软件发展之初, 商业组织的投入很少甚至没有, 完全是靠Richard Stallman 或者 linus Torvalds 这样的个人在努力推动开源软件艰难前行 ...

  3. 【华为云技术分享】三大前端技术(React,Vue,Angular)探密(下)

    [华为云技术分享]三大前端技术(React,Vue,Angular)探密(上) [Angular] Angular(通常被称为 "Angular 2+"或 "Angula ...

  4. 【华为云技术分享】Linux内核补丁源码分析(1)

    在上一期中,我们介绍了Linux内核编程环境,在这一期中,我们将通过实例来介绍如何分析Linux内核的补丁. 一.Linux内核补丁 在"Linux内核发展史"中,我们简要介绍了L ...

  5. 【华为云技术分享】弹性负载均衡服务助力企业应对高并发流量冲击

    摘要:弹性负载均衡(Elastic Load Balance 简称ELB)将访问流量均衡分发到多台弹性云服务器,扩展应用系统对外的服务能力,实现更高水平的应用程序容错性能. 如今,随着互联网规模和消费 ...

  6. 【华为云技术分享】直播回顾丨激发数据裂变新动能,HDC.Cloud云数据库前沿技术解读

    3月24日14:00-17:00,HDC.Cloud开发者沙龙系列云数据库专场直播线上开启,此次华为云数据库通过三场直播从NoSQL数据库新技术.数据库迁移.行业解决方案等方面对云端数据库进行深度解读 ...

  7. 【华为云技术分享】Linux内核发展史 (2)

    Linux是由赫尔辛基大学的Linus Torvalds开发的,在系统开发期间得到了因特网上广大UNIX程序员的帮助.它最初只是受Andy Tanenbaum教授的Minix(-个小型的类UNIX系统 ...

  8. 【华为云技术分享】Linux内核的分布式编译(1)

    上一期中我们介绍了Linux内核模块依赖图的绘制方法,这一期中我们将介绍Linux内核的分布式编译方法和分布式编译工具distcc的安装过程. 一.Linux内核的分布式编译 分布式编译是指将源程序通 ...

  9. 【华为云技术分享】Linux内核的分布式编译(2)

    上一期中我们介绍了用源码包安装distcc的方法,这一期我们尝试用distcc对Linux 4.19.90内核进行分布式编译. 一.Linux内核的分布式编译 我们尝试用同一个子网中的三台服务器对Li ...

最新文章

  1. JavaScript DOM 学习笔记(四)
  2. hdu 5792 World is Exploding 树状数组
  3. 清除WINDOW远程登录服务器的信息
  4. postgresql点云las_点云模型_点云模型_模型_时空数据库_PolarDB PostgreSQL 云原生数据库 - 阿里云...
  5. python elasticsearch timeout_Python操作Elasticsearch处理timeout超时
  6. 微软Windows Mobile智能手机GPRS上网设置教程(转)
  7. Perl 第三章 操作符
  8. PHP 递增/递减运算符
  9. 斯坦福 CS183 Peter Thiel 创业课资料整理
  10. 艾伟:彻底解决刷新重复提交问题,你还在用Response.Redirect吗?
  11. 2017全球超算峰会召开 联想以智能超算赋能AI时代
  12. java线程属性_Java 并发 线程属性
  13. lora三层服务器协议,lorawan协议(lora无线传输协议与HTTP协议)
  14. OpenSSL解析X509证书
  15. 2019腾讯广告算法大赛思路(转自简书)有所改动(标蓝)
  16. excel分列 excel按列分为多个工作簿或者excel文件
  17. RollPitchYaw傻傻分不清
  18. 当谈论研发效能时,我们到底在谈什么?|大咖圆桌精华回顾
  19. STM32的C语言重点知识(1.C语言数据类型+2.C语言宏定义+3.C语言typedef+4.C语言结构体+5.C语言枚举)
  20. Android 获取手机所有短信

热门文章

  1. 一.路径规划---二维路径规划仿真实现-gmapping+amcl+map_server+move_base
  2. php静态属性和普通属性吗,php中静态属性和普通属性的区别
  3. java ui设计用什么_什么是UI设计?
  4. [Luogu5105]不强制在线的动态快速排序
  5. jdk678910新特性地址
  6. 2018年1月19日 第七次小组会议
  7. POJ 1721 CARDS(置换群)
  8. Html中Select的增删改查排序,和jQuery中的常用功能
  9. Linux下实现流水灯等功能的LED驱动代码及测试实例
  10. MDF文件在SQL Server数据库中恢复技术