现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

你知道吗?Linux和GNU/Linux

2019-07-26 07:29 工业·编程 ⁄ 共 1391字 ⁄ 字号 暂无评论

    要解释这个问题,要先说一下操作系统。英文维基词条对操作系统的定义是:

An operating system (OS) is system software that manages computer hardware, software resources, and provides common services for computer programs.

    翻译一下就是操作系统是一种管理计算机硬件、软件资源,并为计算机程序提供通用服务的一种系统软件。操作系统可以分为两部分:运行在内核模式的内核部分(Kernel),运行在用户模式的Userland部分(这个实在不知道怎么翻译。有的文章叫用户空间的,会和User Space混淆;有的文章叫用户态的,会和User Mode混淆)。

操作系统中哪些部分运行于内核模式,哪些部分运行于用户模式,不同操作系统的划分是不同的。这也是Monolithic kernel(宏内核)、Micro Kernel(微内核)、Hybrid Kernel(混合内核)操作系统的区别。但总的来说,划分标准是在虚拟内存空间中,使用物理内存地址访问内存的程序是以内核模式运行;而根据虚拟内存地址访问内存,需要内核部分将虚拟内存地址转换为对应的物理地址的程序是以用户模式运行。

    严格来说,Linux是一个由Linus Torvalds发起的类Unix内核开源项目,是操作系统的内核部分。大部分程序是无法直接运行在内核之上的,需要更多的通用库,包括C标准库、各种守护进程如runit/systemd/networkd/logind、窗口系统如X11/SurfaceFinger、其它各种运行库如Qt/GTK+/GNUStep等。

    而GNU则是一整个开源的操作系统,致力于以不含Unix代码的开源软件提供一个符合Unix标准的操作系统,所以GNU的全称是“GNU is Not Unix!”。然鹅GNU自家的内核(GNU Hurd)从1990发布第一个初始版本到现在,最新版本才是0.9,而且从2016年到现在也没再更新了。

    所以,Linux、GNU、发行版的关系,打个比方操作系统就是一辆汽车。Linux是做汽车发动机的,也只生产发动机。有一家叫GNU的汽车零配件厂商,提供生产一整辆汽车的所有主要配件,只是它提供的发动机很差。各种发行版就是不同的汽车组装厂,它们自己不生主要的汽车配件,都是用GNU提供的配件——但发动机除外,发动机用的是Linux提供的。当然也有用其它发动机的,例如FreeBSD内核(kFreeBSD)。

    GNU要求这些汽车组装厂,如果你除了内核以外其它配件基本都是用我生产的配件,你的名字中就应该带上我的标识。因此一些听话的厂商,例如Debian组装出来的用Linux发动机的汽车,就叫Debian GNU/Linux。事实上也有用FreeBSD发动机组装出来的Debian GNU/kFreeBSD——不过仅仅是6.0/7.0这两个版本提供过非官方的技术预览版,8.0开始就没再提供了。

    当然,也有其它汽车厂商不用GNU的配件,自己生产配件自己组装汽车,但也用了Linux牌发动机的,例如安卓。根据GNU的这个命名方式,就应该叫Android/Linux。

只是实际上,大家已经习惯了,把用Linux内核,GNU Userland这样的操作系统简称为Linux,而已。

给我留言

留言无头像?