[TOC]
# 什么是linux
linux操作系统(linux),是一种计算机操作系统。linux操作系统的内核的名字也是“linux”。
linux操作系统也是自由软件和开放源代码发展中最著名的例子。
开始的时候,linux 只是个人狂热爱好的一种产物。但是现在,linux 已经成为了一种受到广泛关注和支持的一种操作系统。包括 ibm 和惠普在内的一些计算机业巨头也开始支持 linux。很多人认为,和其他的商用 unix 系统以及微软 windows 相比,作为自由软件的 linux 具有低成本,安全性高,更加可信赖的优势。
linux 内核最初只是由芬兰人 Linus Torvalds 在赫尔辛基大学上学时出于个人爱好而编写的。当时他觉得教学用的迷你版 UNIX 操作系统 Minix 太难用了,于是决定自己开发一个操作系统。最初的设想中,linux 是一种类似 minix 这样的操作系统。linux 的第一个版本在1991年9月被发布在 internet 上,随后在10月份第二个版本就发布了。
linux 的历史是和 GNU 紧密联系在一起的。从1983年开始的 gnu 计划致力于开发一个自由并且完整的类 unix 操作系统,包括软件开发工具和各种应用程序。**到1991年 linux 内核发布的时候,gnu 已经几乎完成了除了系统内核之外的各种必备软件的开发。在 Linus Torvalds 和其他开发人员的努力下,gnu 组件可以运行于 linux 内核之上。整个内核是基于 gnu 通用公共许可,也就是 gpl(general pubic license) 的,但是 linux 内核并不是 gnu 计划的一部分。**
linux 的标志和吉祥物是一只名字叫做 tux 的企鹅,linux 的注册商标是 Linus Torvalds 所有的。这是由于在1996年,一个名字叫做 william r. della croce 的律师开始向各个 linux 发布商发信,声明他拥有 linux 商标的所有权,并且要求各个发布商支付版税,这些发行商集体进行上诉,要求将该注册商标重新分配给 Linus Torvalds。
``
**linux的某些版本是不需要安装就能使用的版本,他们称为 livecd**
> [Linux和UNIX的关系及区别(详解版)](http://c.biancheng.net/view/707.html)
# 什么是 GNU
![](https://img.kancloud.cn/e3/c9/e3c9a0fa737d24391159d43a346254ce_1080x810.png)
GNU 计划,又称*革奴计划*,是由 Richard Stallman 在1983年9月27日公开发起的。它的目标是创建一套完全自由的操作系统。Richard Stallman 最早是在*net.unix-wizards*新闻组上公布该消息,并附带一份《GNU宣言》等解释为何发起该计划的文章,其中一个理由就是要“重现当年软件界合作互助的团结精神”。
Stallman 倡导 FSF(自由软体基金会(Free Software Foundation)) 的宗旨,是要建立一个 自由软件 的王国。**他所谓的 free 并不是意谓著便宜或免费,因为在 FSF 下的有些软体还是需要付出必要的费用的。他所谓的 free 是指使用上的自由。**
**GNU 的本意代表 "Gnu's Not Unix"**;虽然如此,它却是一个与 UNIX 完全相容的软体系统。二者最大不同在于,GNU 是一个 free 的 软体, UNIX 却是一个要付费的软体系统。stallman宣布gnu应当发音为guh-noo,与canoe发音相同,以避免与gnu(非洲牛羚,发音与new相同)这个单词混淆。unix是一种广泛使用的商业操作系统的名称。
由于gnu将要实现unix系统的接口标准,因此gnu计划可以分别开发不同的操作系统部件。
gnu计划采用了部分当时已经可自由使用的软件,例如tex排版系统和x window视窗系统等。不过gnu计划也开发了大批其他的自由软件。
为保证gnu软件可以自由地“使用、复制、修改和发布”,所有gnu软件都在一份在禁止其他人添加任何限制的情况下授权所有权利给任何人的协议条款,gnu通用公共许可证(gnu general public license,gpl)。这个就是被称为**“反版权”(或称copyleft)**的概念。
1985年Richard Stallman又创立了自由软件基金会(Free Software Foundation, **FSF**)。
到了1990年,gnu计划已经开发出的软件包括了一个功能强大的文字编辑器emacs,c语言编译器gcc,以及大部分unix系统的程序库和工具。唯一依然没有完成的重要组件就是操作系统的内核(称为hurd)。
1991年linus torvalds编写出了与unix兼容的linux操作系统内核并在gpl条款下发布。linux之后在网上广泛流传,许多程序员参与了开发与修改。1992年linux与其他gnu软件结合,完全自由的操作系统正式诞生。(尽管如此gnu计划自己的内核hurd依然在开发中,目前已经发布beta版本。)
许多unix系统上也安装了gnu软件,因为gnu软件的质量比之前unix的软件还要好。gnu工具还被广泛地移植到windows和mac os上。
*注:以上内容来自维基百科gnu词条(http://zh.wikipedia.org/wiki/gnu)*
## GUN/LINUX 是什么玩意儿
![](https://img.kancloud.cn/d3/74/d374325f9027741a98dc25cb5083e557_705x360.png)
通过回答上面两个问题,我们很明显可以注意到**linux只是一个操作系统内核而已,而gnu提供了大量的自由软件来丰富在其之上各种应用程序。**
因此,严格来讲,linux这个词本身只表示linux内核,但在实际上人们已经习惯了用linux来形容整个基于linux内核,并且使用gnu 工程各种工具和数据库的操作系统。基于这些组件的linux软件被称为linux发行版。一般来讲,一个linux发行套件包含大量的软件,比如软件开发工具,数据库,web服务器(例如apache),x window,桌面环境(比如gnome和kde),办公套件(比如openoffice.org),等等。
绝大多数基于linux内核的操作系统使用了大量的gnu软件,包括了一个shell程序、工具、程序库、编译器及工具,还有许多其他程序,例如emacs。正是由于linux使用了许多gnu程序,gnu计划的开创者richard stallman博士提议将linux操作系统改名为gnu/linux。但有些人只把操作系统叫做"linux"。
有部分linux套件,包括了debian,采用了“gnu/linux”的称呼。但大多数商业linux套件依然将操作系统称为linux。有些人也认为“操作系统”一词指的应该只是系统的内核,其他程序都只能算是应用软件,这么一来,该操作系统的内核应叫linux,而linux套件是在linux内核的基础上加入各种gnu工具。
一些人拒绝使用“gnu/linux”作为操作系统名称的人认为:
1. linux 朗朗上口;名字较短又好记;
2. richard stallman 博士直到1990年代中期,linux 开始流行后才要求更名。
## 结语
我相信,坚持看完这些枯涩文字的读者一定明白了我需要探讨的问题,我们常说的 linux,准确地来讲,应该是叫“gnu/linux”。虽然,我们没有为 gnu 和 linux 的开发做出什么贡献,但是我们可以为 gnu 和 linux 的宣传和应用做出微薄的努力,至少我们能够准确地去向其他人解释清楚 gnu、linux 以及 gnu/linux 之间的区别。让我们一起为 gnu/linux 的推广贡献出自己的力量!
---
# Linux 和 GNU 工程
[Richard Stallman](http://www.stallman.org/)
> 理查德·马修·斯托曼(Richard Matthew Stallman, RMS,生于1953年),自由软件运动的精神领袖、GNU计划以及自由软件基金会(Free Software Foundation)的创立者、著名黑客。他的主要成就包括 Emacs 及后来的GNU Emacs,GNU C 编译器及GNU 调试器。 他所写作的GNU通用公共许可证(GNU GPL)是世上最广为采用的自由软件许可证,为copyleft观念开拓出一条崭新的道路。
每天都有许多计算机用户使用一个被改动过的[GNU 系统 (18k 字节)](https://www.gnu.org/philosophy/categories.html#TheGNUsystem),但是他们并没有意识到它。 经过一系列的事件,现在被广泛使用的 GNU 版本则经常被称作“Linux”,可是许多用户并不了解与之相关的 [GNU 工程](https://www.gnu.org/gnu/gnu-history.html)。
Linux 确实存在;它是一个内核,许多人都在使用它。但是你不能仅使用内核本身。内核只有作为整个系统的一个部分才有用处。Linux 是和 GNU 操作系统结合在一起使用:系统本身是 GNU 与 Linux 作为内核一起工作的。
许多用户没有并不完全了解 Linux 内核和被称作“Linux”的整个系统的区别。而不加区别地使用这个名字并不能对理解有帮助。
程序员一般都知道 Linux 是一个内核。但是因为他们也听到整个系统被称作“Linux”,他们会根据名字去想象历史。比如,很多人认为当 Linus Torvalds 完成了内核后,他的朋友四处寻找其他的自由软件,而且所有的可以被组装成一个类似 Unix 系统的程序都是现成的。
他们的发现不是巧合 -- 这就是 GNU 系统。 可用的[自由软件](https://www.gnu.org/philosophy/free-sw.html)加在一起就组成了一个完整的系统,这是由于自 1984 年就开始的 GNU 工程一直在为此努力。[GNU 宣言(31k 字节)](https://www.gnu.org/gnu/manifesto.html) 早已设立了开发一个类似 Unix 的自由系统的目标,称作 GNU。GNU 工程的最初公告 也勾画了 GNU 系统的原始提纲。在 Linux 被编写时,这个系统几乎已经完成。
大多数自由软件的工程都是为了特定的工作开发特定的程序。比方说,Linus Torvalds 编写类似 Unix 的内核(Linux);Donald Knuth 编写一个文本格式化工具(TeX);Bob Scheifler 开发一个窗口系统(X Window System)。对于这项工程编写的程序都作出了贡献,对这些贡献进行评估是很自然的。
如果以这种方法来衡量对 GNU 工程的贡献,我们会得出什么结论?一个 CD-ROM的提供商发现在他们的“Linux 发行版”中,[GNU 软件](https://www.gnu.org/philosophy/categories.html#GNUsoftware) 占最大的比重,大约占全部源代码的 28% ,而且这还包括一些关键的部件,没有这些部件,系统就无法工作。Linux 本身占大约 3%。所以如果你要根据程序的作者来选择一个名字的话,最合适的选择是“GNU”。
但是我们不认为这是一个解决问题的适当方法。GNU 工程以前不是,现在也不是一个开发某个软件包的工程。它不是一个 开发 C 编译器的工程, 尽管我们做了。它也不是一个开发一个文本编辑器的工程,尽管我们也做了。GNU 工程的目标是开发一个完全自由的类似 Unix 的系统: GNU。
许多人已经为系统中的自由软件作出了重大贡献,他们都应该获得荣誉。**但 GNU 是一个系统而不是一些实用程序的组合的原因是,GNU 工程的最初目标就是做一个完整系统。**我们曾经为完成一个完整的系统做了一个所需程序清单,而且我们有系统地寻找,编写这些程序,并且寻找别人编写清单上的每一个程序。我们编写了关键的但是十分枯燥的主要部件,比如汇编语言和连接器,因为这是系统所必需的。除了编程工具,一个完整的系统还需要更多的东西, Bourne Again SHell 程序, PostScript 解释器 Ghostscript, 和 [GNU C 库](https://www.gnu.org/software/libc/libc.html) 同样是很重要的。
到了 90 年代初期,我们曾经把除了内核以外的东西放到一起组成了一个系统(我们同时也在做内核的工作)称为 GNU Hurd, 运行在 Mach 上)。开发这个内核比我们想象的要难得多,我们现在仍然在 [为此工作](https://www.gnu.org/software/hurd/hurd-and-linux.html)。
庆幸的是,你不必再等了,因为 Linux 开发成功。当 Linus Torvalds 写成了 Linux,他填补了一个重要的空白。人们可以将 Linux 和 GNU 系统组成一个完整的自由系统:基于 Linux 的 GNU 系统(或简称为 GNU/Linux 系统)。
把它们组合到一起听起来很容易,但是这并不是一个简单的工作。 GNU C 库 (简称 glibc) 需要作大量的修改。集成到一个完整的发行系统中也是一项很大的工作。它需要对如何安装和启动系统进行定位 -- 这个问题直到现在还在完善,因为我们还没有抓住要点。那些开发了不同的发行系统的人们作出了巨大贡献。
除了 GNU,还有一个独立进行的工程开发了一个自由的类似 Unix 的操作系统。这个系统被称为 [BSD](https://www.gnu.org/links/links.html#OtherFreeSoftware),它是由 UC Berkeley 开发的。 在 GNU 工程的鼓舞下,BSD 的开发者开始进行他们自己的自由软件的开发工作,并时常受到 GNU 人士的鼓励,但是他们的实际工作与 GNU 差别不大。今天 BSD 系统采用一些 GNU 软件,就象不同版本的 GNU 系统也采用 BSD 的软件一样。总的说来,它们是两套独立开发的不同的系统。今天一个免费的操作系统几乎都是采用 GNU 或 BSD 系统的一个派生版本。
GNU 工程支持 GNU/Linux 系统,就象支持 GNU 系统一样 -- 包括资金的支持。我们为重写与 Linux 相关的 GNU C 库提供资金,以至于它们现在可以很好地集成在一起,直到最新版本的 GNU/Linux 仍在使用这个库而无需修改。我们也为早期 Debian GNU/Linux 的开发提供资金。
今天我们的绝大多数的工作都在基于 Linux 的 GNU 系统上完成,我们希望你也如此。但是请不要含糊地使用 Linux 而使公众迷惑。Linux 是内核,系统的关键部件之一。系统或多或少实际上都应该是 GNU 系统,再加上 Linux。当你在讨论到这个组合系统时,请使用 “GNU/Linux”。
如果要为 GNU/Linux 作链接,本页和 http://www.gnu.org/gnu/the-gnu-project.html 都是很好的选择。如果你想为 Linux(内核)作链接,http://www.kernel.org/是一个很好 URL。
-------
# 滚动发行(Rolling Release)
国内常说的发行版概念正确的说是“分发版”(Distribution),包含了滚动升级版(Rolling release)和发行版(release)。
滚动升级版,理论上会设置两个更新源,一个测试testing,一个稳定stable。
testing 用来测试新的软件和升级过的软件能否与原有系统兼容或编译无错;
stable用来给正常人用,当然它的 stable 甚至比有些发行版的 testing 都要新,除非是这个软件久久不更新,其他发行版慢慢赶上来了。没有版本号锚定,理论上发行版的维护者要随时随地保持 stable 源稳定。对于这类发行版是没有传统的维护这一概念的,所有操作都叫更新。
当前采用滚动发布方式 (Rolling Release)的比较知名的 Linux 发行版有 **Archlinux**,**Gentoo** 及 **PCLinuxOS** 等等,这种发行方式的好处在于沒有跨版本升级的概念,通过更新,任何时期的系统都可以平滑更新到最新版。
网友1答:
自从用上Gentoo,就没有再重新装过系统了。时间最长的一台电脑从2010年到现在,连续平稳运行,换过硬盘、从mdraid变到lvm,做过bcache,但从来没有重新安装过系统。这就是可以一切从头编译、可以迭代bootstrap的优势。这是我的主力开发机之一,是折腾比较狠的,但得益于我自己的良好习惯以及sandbox,确实没出过解决不了的问题。而我们实验室的服务器上部分也运行Gentoo,但由于服务器平时很少追新,秉持的是够用就好的原则,所以Gentoo稳定运行并没什么说服力。*呵呵,不过有一台服务器是Ubuntu Server LTS,运行了几年之后也必须要对发行版升级了,否则大多数软件已经无法更新。但升级又会导致大量的用户自行安装的软件出现动态链接库的问题,所以这台服务器的处境目前比较尴尬*。
网友2答:
我也是小白,我的理解是这样的……
升级系统和软件的时候不受具体的版本限制。
比如某一款软件叫做“XXX”,在Ubuntu里面,更新可能是从XXX 1.0 到 XXX 1.6。如果想升级到XXX 2,那就需要安装下一个版本的Ubuntu系统。Ubuntu系统本身也都带版本号,比如14.04什么的……
而在Arch里面,没有这些版本号的限制,可以从10年前的Arch滚动到最新版本的Arch,软件也都是……
滚动更新之前,最好看一下本次滚动更新的具体内容以及可能导致的滚挂问题。
你可以监控滚动更新的过程,如果某次的滚动更新导致一些软件无法正常使用(也就是通常意义的“滚挂”),那么你可以回滚更新,但是如果滚挂某些重要的软件包,比如x window system,grub,gnome等桌面套件,那么你只能重装了。
*怎么设置特定的包不会更新?
`pacman.conf`的`IgnorePackage`项*
# 参考
[陆伟峰:论GNU、Linux和GNU/Linux之间的关系](http://os.51cto.com/art/200608/30399.htm)
[GNU官网-Linux 和 GNU 工程](https://www.gnu.org/gnu/linux-and-gnu.zh-cn.html)
[王垠:完全用GNU/Linux工作](http://www.zhaoniupai.com/archives/247.html)
[百度百科-Linux](http://baike.baidu.com/item/linux)
[世纪大争论:Linux还是GNU/Linux?](http://www.geekfan.net/4221/)