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. 基于管道模式的容器设计
  2. aop实现原理_从宏观的实现原理和设计本质入手,带你理解 AOP 框架的原理
  3. oracle天数加个随机数,如何给一个表某列加上指定的随机数
  4. 一起学习C语言:函数(三)
  5. 构建企业服务之Windows Server 2008 DNS 高级部署
  6. 快速排序查询第k个数
  7. 论文阅读:Siam-RPN
  8. python中用正则表达式检查密码是否安全
  9. 鸿蒙系统基于安卓10.0,鸿蒙系统呢?华为首批升级安卓10.0机型曝光:这11款!...
  10. cashfiesta网上赚钱
  11. 【学习OpenCV4】聊聊图像格式
  12. python定义函数及调用函数
  13. html消除表格线,html5 消除表格线
  14. 世纪佳缘财务及运营数据分析
  15. CodeForces - 1324D Pair of Topics (分治+排序)
  16. 虚拟同步发电机_一种基于下垂控制和增加虚拟阻抗的逆变器并联仿真实现
  17. sdhc卡文件丢失常见原因和两种恢复方法
  18. 01-Intellij IDEA搭建SSM(SpringMVC+Spring+Mybatis+Maven)框架(下)
  19. blog群发王(价值1980元)源代码提供 1
  20. P17-Windows与网络基础-Windows文件共享

热门文章

  1. iPhoneX 底部Tabbar布局错误
  2. 陶渊明劝学——勤学如春起之苗
  3. msp430g2553+pcf8574+dht11+lcd1602
  4. 【Spring】Spring Framework Reference Documentation中文版18
  5. 概率论之极大似然估计
  6. Educational Codeforces Round 96 (Rated for Div. 2) C. Numbers on Whiteboard(构造)
  7. Java基础求质数——接收用户输入的数字,判断是否为质数
  8. Keil实现软件版本号与实际编译生成的目标代码版本自动一一对应
  9. laravel5.5实现多语言环境
  10. 熟悉Linux开发环境