GNU、GNU/Linux、Linux 之间到底是什么关系?什么是自由软件?什么是GPL协议?什么是自由软件基金会?什么是GNU耻辱榜?有多年开发经验的Linux工程师,估计也没怎么关注过这些问题。今天就以自由软件发展的角度,给大家科普一下它们之间的关系。

1 什么是Windows?

想了解他们之间的关系,从Windows说起估计比较容易理解。Windows操作系统,大家都很熟悉:当微软发布OS新版本,你迫不及待地把它安装到你的电脑上,开机重启,你会发现,除了Windows操作系统,还有很多其它软件:office软件满足你的日常办公;Windows player可以听歌看电影;使用Visual studio软件,你可以开发桌面程序,发布自己的软件。也就是说,Windows发布的操作系统,不仅仅是一个操作系统,而是一个操作系统生态:开发者可以在这个平台上,使用微软提供的编译器工具、第三方开发工具,开发各种各样的软件:QQ、绝地求生、荒野行动、浏览器、网页、论坛.....,人们在这个平台上扮演着各种角色:使用者、开发者,一起维护和壮大这个生态。

2 什么是GNU?

GNU是一个操作系统,GNU是 “GNU's Not Unix” 的递归缩写 ,它的正确发音是:葛奴,而不是直接读G-N-U 或 new。GNU操作系统是一个类似Windows的自由软件操作系统,包括整个生态:操作系统内核、编译器、调试器等开发工具、办公软件、桌面游戏等自由软件。

3 GNU工程与自由软件

GNU工程发起于1984年,带头大哥是Richard Stallman, 就是写了Emacs、GNU C编译器、GNU C调试器的这位大名鼎鼎的黑客。GNU工程的目标是:构建一个类似Unix的操作系统,包括内核、编译器、编辑器、电子表格、邮件软件、图形界面、应用库、游戏软件等。或者说,就是构建一个类似Windows生态的操作系统(当时Windows还没问世),方便计算机用户和开发者方便快乐地使用计算机。

GNU工程一个巨大的工程:开发一整套操作系统,包括内核、编译器、调试器、开发工具、应用软件等,绝非一个人或一个团队所能完成的,因此在1985年10月,成了了自由软件基金会(Free Software Foundation,FSF),它初期用来给GNU募集资金。

为什么要发起这个工程呢?很简单,因为当时计算机上的几乎所有软件都是专有软件(Proprietary software)。什么是专有软件呢?就是使用、修改、分发受到限制的软件,作者拥有这个软件的版权,不开源,只发布编译过的二进制版本的程序。一般商业公司比较支持专有软件。但是,对于行业发展来说,这不是个好事情,技术分享,互相迭代开发,才能更好地促进软件行业的成长。

与专有软件对应的是自由软件(free software),自由软件可以不受限制地自由使用、复制、研究、修改和分发。对,没有看错,就是这么自由!它要求是公开源码的,任何人都可以获得这份代码,可以修改,然后以其它版本再次发布、分发。这里需要注意的是,自由软件不等于免费软件(freeware),它也可以买卖,比如Linux操作系统光盘。这里的自由是权利问题,不是价格问题,自由软件有四项基本自由:

  • 使用自由:可以免费获取源码、使用
  • 学习自由:有权利研究如何运作、实现
  • 修改自由:可以改进该软件,发布改进
  • 发布自由:重新发布你修改的版本

GNU工程要求:GNU操作系统,包括内核在内的整套软件,都必须是由自由软件构成。

4 GNU 与 GNU Linux

GNU工程的目标,是构建一个包括内核在内的操作系统生态。在早期,在自由软件基金会的支持下,大多数自由软件项目都是以完成某项具体工作为目标。比如,Donald Knuth编写一个文本排版软件(TeX);Bob Scheifler开发一个窗口系统(X Window);Richard Stallman 开发了C编译器和调试器。 GNU工程也在开发一个操作系统内核,叫hurd,但是开发不是很顺利,后来Linus Torvalds编写一个类似Unix的内核(Linux) ,这样,整个操作系统的组件就齐全了,GNU/Linux操作系统就发布了。

Linux仅仅是一个内核,你可以从官网上下载这份源码;而GNU/Linux是一个操作系统,类似于Windows操作系统,包括Linux内核、编译器、编辑器、桌面系统、应用程序等整个生态。

我们讲过,GNU工程发布的GNU/Linux操作系统都是有自由软件构成的,所以任何人都有修改、分发的权利。所以,你也会看到GNU操作系统的分发版本:GNU/hurd,这有点类似于Windows操作系统的win7、XP、win10版本。

通过GNU工程发布的软件,一般会以GNU冠名。比如GCC,全名就是GNU Compiler Collection ,即GNU编译器套件;如果你开发一个chess的象棋游戏,通过GNU发布,这个软件就是:GNU Chess[官网];你编写一个连连看小游戏,如果通过GNU发布,这个软件名字就是:GNU 连连看。

5 自由软件基金会

自由软件基金会(FSF),由Richard Stallman建立。成立的初衷就是为开发GNU操作系统募集资金,它是一个美国民间的非盈利组织。在早期,FSF的基金主要用来雇佣程序员来开发自由软件。1990年以后,随着写自由软件的公司和个人越来越多,各种版权、法律、结构上的问题也越来越多。所以,现在自由软件基金的雇员和自愿者一般主要从事版权、法律相关的工作:比如GPL的施行,监督版权、GNU许可证等。当然,现在自由软件基金会也会开展跟多的自由软件项目,不仅仅是GNU工程,开发更多的自由软件,完善自由软件的理念。

6 什么是GPL?

GPL即GNU GPL,全称 GNU General Public License,翻译成中文就是:GNU通用公共许可证,GPL协议是干嘛用的呢?这个还得从自由软件说起。

通过上面的学习,我们知道,自由软件是开源的、可以任意修改和发布的。正是这一特性,自由软件再以一种不可思议的速度发展,自由软件不仅为成千上万的使用者、开发者提供了便利,也为很多商业软件公司提供了方便。自由软件是一座巨大的宝库,很多商业软件都是基于自由软件的基础上进行开发,节省了大量的人力、物力。有些自由软件,甚至比商业软件还好用,比如Linux、Git、ffmpeg、Libav、mplayer等。

按照自由软件的规则,你免费获取了自由软件的源码想,可以修改,可以发布。本着人人为我,我为人人的原则,你发布的软件也必须开源,供其他人学习、使用、修改。GPL协议就是用来维护这个规则的:开放软件的版权限制。你开发一个软件,使用了别人使用GPL协议发布的源码,那么,不好意思,你的软件也必须通过GPL协议发布,全部开放源码。

GPL这种自由开放的模式,对于技术分享、学习是个好事情,但是对于很多商业公司却很头疼。比如,一个公司,想基于自由软件FFmpeg解码库,开发一个“迷你影音”播放器,但是又不想把自己开发的源码、商业秘密分享出去,怎么办?没关系,除了GPL协议,还有其它协议,比如LGPL协议可以解决这个问题。

7 什么是LGPL协议?

LGPL是 GNU Lesser General Public License (GNU 宽通用公共许可证)的缩写。GPL协议要求你的源码全部开放,这简直要了商业公司的命。LGPL协议可以解决这个问题,LGPL协议跟GPL协议基本上一样,只是缩小了你要公开源码的范围:缩小到动态链接库。比如,你想基于FFmpeg这个库开发一个影音播放器,如果你使用了基于GPL协议发布的FFmpeg解码库,不好意思,你要开放你的整个软件源码;如果你使用了基于LGPL协议发布的FFmpeg解码库,你在项目中,可以以库的形式来使用FFmpeg,但如果你对这个解码库进行修改,必须再次以LGPL协议发布,这些FFmpeg源码最后以库的形式被应用在你的商业项目中。对于你软件中的其它源码,那是你的商业秘密,不用公开。

从上可以看到,无论是GPL,还是LGPL,都是自由软件开发者和商业软件开发者之间的一个博弈。如果所有的自由软件都以GPL协议发布,那商业公司就用不了了,自由软件的价值也大打折扣;而通过LGPL协议发布,一方面可以促进自由软件的发展,另一方面,也可以和商业软件共存。

8 什么是GNU耻辱柱?

自由软件是个巨大的宝库,很多自由软件甚至比商业软件还优秀、还有用。这也吸引了大量的商业软件公司,喜欢从这个巨大宝库中,挑挑拣拣,找出自己喜欢的自由软件,修修改改,加以包装,就以商业软件的形式出售盈利了。

无论是GPL协议,还是LGPL协议,虽然它制定了自由软件的发布规则,但GNU毕竟是一个民间组织,跟那些商业巨头、商业流氓相比,人微言轻,有时候打官司也打不过,没办法,只能使用阿Q精神精神胜利法:我奈何不了你,我要让你上耻辱榜,公开羞辱你们,看你害燥不害燥!

比如自由软件FFmpeg,很多播放器都是基于此进行二次开发,但是当作商业软件使用,违反了自由软件的协议。在FFmpeg官网上,有一个耻辱软件榜,很多违反自由软件协议的商业软件都被列在了这里,包括韩国赫赫有名的播放器KMPlayer以及知名的一些播放器等,有兴趣可以自己搜,很多软件都被钉在了这个耻辱柱上。特定到官网上去看看,发现很多都被撤下来了,一直在待更新状态....,但是在FFmpeg的GitHub上有备份:FFmpeg耻辱柱

除了GPL协议、LGPL协议,还有其它各种协议,比如Apache、BSD、Mozilla等,除此之外,还有各种开源软件、共享软件、绿色软件、免费软件等,大家如果有兴趣,可以自己了解下。

嵌入式学习QQ群:3284757626,微信公众号:宅学部落

跟涛哥一起学嵌入式07:GNU/Linux和Linux的区别相关推荐

  1. 跟涛哥一起学嵌入式 第02集:工作还是考研?

    大家好,我是涛哥,今天我们聊聊第一个话题:工作还是考研. 工作与考研,是每个大三大四学生都要去纠结一下的问题,也是一个很难做抉择的话题.对自己的现状不满意,蹉跎了岁月,感觉自己学得不够多,没学到什么技 ...

  2. 跟涛哥一起学嵌入式 第07集:GNU/Linux和Linux的区别

    GNU.GNU/Linux.Linux 之间到底是什么关系?什么是自由软件?什么是GPL协议?什么是自由软件基金会?什么是GNU耻辱榜?有多年开发经验的Linux工程师,估计也没怎么关注过这些问题.今 ...

  3. 跟涛哥一起学嵌入式 25:我接触过近50块嵌入式开发板,分享一下教训和总结...

    最近老是有学员问我:涛哥,你的嵌入式教程针对哪款开发板鸭?到底使用哪款开发板学习?我的回答往往是:暂时不用开发板,学习嵌入式,不一定非得用开发板,在qemu仿真平台上学习就可以了.3年前我发布了互联网 ...

  4. 跟涛哥一起学嵌入式 第06集:后ARM时代,嵌入式工程师的自我修养

    大家好,我是涛哥,今天我们继续聊一聊嵌入式的学习,由于最近比较忙,就把以前写的一篇文章重新发给大家,里面谈到的一些学习方法和学习经验,还是很值得参考一下的. 嵌入式学习的一些概念理解误区 很多嵌入式初 ...

  5. 跟涛哥一起学嵌入式 20:后ARM时代,嵌入式工程师的自我修养

    1 嵌入式学习的一些概念理解误区 很多嵌入式初学者认为,学嵌入式,就是学习ARM,就是学习开发板.买一块开发板,然后在上面"移植"u-boot.Linux内核,再使用busybox ...

  6. 跟涛哥一起学嵌入式 31:深入浅出CPU流水线工作原理

    现在的CPU处理器一般都是超流水线工作,动不动就是10级以上流水线,超高主频,这两者之间有什么关系呢?今天就跟大家科普下CPU流水线的工作原理,以及他们之间的关系. 说到流水线,很多人会想到富士康:说 ...

  7. 跟涛哥一起学嵌入式 26:深入浅出计算机编码、乱码问题

    很多新手在编写程序.使用软件打开文档或者浏览网页时,经常遇到乱码显示.全角半角的问题. 网上也有很多解决的方法,大部分都是跟编码有关:比如Unicode.UTF-8.ASCII码.GB2312..., ...

  8. 跟涛哥一起学嵌入式 27:一个小故事,让你明白进程、线程和协程的区别

    进程.线程和协程,是多任务编程中的常用术语.很多初学者分不清它们之间的区别,今天就以一个小故事为引子,让大家搞清楚他们之间的本质区别. 话说在西凉女儿国,大唐文化传播有限公司CEO唐僧招聘了三个员工做 ...

  9. 跟涛哥一起学嵌入式 16:设计一款CPU芯片到底有多难?

    文章结构 导读 一颗芯片是怎么诞生的? 一款CPU是如何设计出来的? 设计一款CPU到底难在哪里? 导读 这几天,刷遍朋友圈的新闻就是:中兴被"一剑封喉",被美国停止一切芯片进口和 ...

最新文章

  1. 配置C++和C#开发ICE环境
  2. Selenium的默认配置文件和创建自己的配置文件
  3. 探究Jvm源码实现-MarkWord
  4. P3329-[ZJOI2011]最小割【最小割树】
  5. 苹果地图副总裁_Amazon A9副总裁Benoit Dupin加入苹果,负责改善苹果地图搜索服务...
  6. django本地安装mysql_Ununtu 15.04 安装MySql(Django连接Mysql)
  7. cortex M0 软件分层架构 RTOS
  8. 随手记_英语_学术写作_常用句型35个
  9. OpenCV_(Using GrabCut extract the foreground object) 使用 GrabCut 算法提取前景物体
  10. VC6修改lib文件的输出路径
  11. Java字符串排序(根据字节及字符长度进行排序)
  12. beoplay耳机序列号查询_怎么鉴别 BO E8耳机真伪?【转】
  13. 谷歌地图api根据经纬度查询地名php,在线查询经纬度 google map查询地名返回经纬度 geocode geocoder的完整实例 代码下载...
  14. 2021京东618活动脚本App和电脑版最新版(建议使用app版)
  15. 量子计算机平行宇宙,量子纠缠效应揭示:每个人的行为也会影响到其它平行宇宙里的自己...
  16. Docker容器运行
  17. MATLAB语音信号处理
  18. Unity与讯飞语音交互:使用aiui技能
  19. 数据仓库应用篇(一)需求文档模板和需求评审
  20. 如何利用SQL注入进行爆库

热门文章

  1. php-工厂模式实现
  2. 远程数据库备份解决方案。
  3. .net中实现AOP(二)
  4. main函数参数规范
  5. IT运维如何完成一场高质量复盘
  6. 不懂技术也能看懂云计算,大数据,人工智能
  7. Smardcard Reader+D8射频卡读写演示测卡。
  8. 神州今年卖150万台
  9. 外贸商城系统源码及搭建教程
  10. python数据可视化实验报告的总结,数据可视化的基本流程总结