Linux内核

Confusion grey.svg
提示:本条目的主题不是GNU/LinuxLinux-libre
Linux
Tux
Linux 3.0.0 boot.png
Linux内核3.0.0启动画面
开发者www.kernel.org
Linux内核的普及

Linux 内核英语:Linux kernel),是一种开源的类Unix操作系统宏内核。整个 Linux 操作系统家族基于该内核部署在传统计算机平台(如个人计算机和服务器,以 Linux 发行版的形式[7])和各种嵌入式平台,如路由器无线接入点专用小交换机机顶盒、FTA 接收器、智能电视数字视频录像机网络附加存储(NAS)等。工作于平板电脑智能手机智能手表Android 操作系统同样通过 Linux 内核提供的服务完成自身功能。尽管于桌面电脑的占用率较低,基于 Linux 的操作系统统治了几乎从移动设备到主机的其他全部领域。截至2017年11月,世界前500台最强的超级计算机全部使用 Linux。[8]

Linux内核最早是于1991年由芬兰黑客林納斯·托瓦茲为自己的个人电脑开发的,他当时在 Usenet 新闻组comp.os.minix登载帖子[9],这份著名的帖子标志着Linux内核计划的正式开始。如今,该计划已经拓展到支持大量的计算机体系架构,远超其他操作系统和内核。它迅速吸引了一批开发者和用户,利用它作为其他自由软件项目的核心,如著名的 GNU 操作系统。[10]

在计划的早期,一些 Minix黑客提供了协助。而今天,Linux 内核已接受了超过1200家公司的近12000名程序员的贡献,其中包括一些知名的软硬件发行商。[11][12]

从技术上说,Linux 只是一个符合 POSIX 标准的内核。它提供了一套应用程序接口(API),通过接口用户程序能与内核及硬件交互。仅仅一个内核并不是一套完整的操作系统。有一套基于 Linux 内核的完整操作系统叫作Linux 操作系统,或是GNU/Linux(在该系统中包含了很多 GNU 计划的系统组件)。

Linux 内核是在GNU通用公共许可证第2版之下发布的[4](加上一些非自由固件blob 与各种非自由许可证[13]),是一个开源项目协作的突出例子。它的版本支持根据版本最长可达6年,貢獻者遍佈世界各地,日常开发相关的讨论在Linux 内核邮件列表英语Linux kernel mailing list上。

历史

1991年,林納斯·托瓦茲,一名21岁的就读于芬兰赫尔辛基大学的计算机科学专业学生,基于一些简单的想法,打算编写一个操作系统内核。他通过英特尔80386汇编语言的任务切换器和一个终端驱动程序开始工作。8月25号,他在 comp.os.minix 新闻组里发了一封帖子:[14]

我在做个(自由的)操作系统(就是个兴趣爱好,我不会搞得像GNU那么大那么专业),打算让它工作在386 AT平台上。它从四月就开始酝酿了,马上就快好了。我想要那些喜欢或不喜欢minix的人的意见,因为我的系统和它有点类似(同样的文件系统的物理布局——由于实际原因——还有些其他的东西)。

我现在已经移植了 bash(1.08) 和 gcc(1.40), 而且看起来奏效了。这意味着我会在几个月内得到一些实用的东西。「……」是的——它没有任何minix代码,并且它有一个多线程的fs。它可移植(使用386任务切换等),而且它可能永远不会支持除AT硬盘之外的其他东西,因为我只有这些:-(。

「……」它基本上是用C语言写的,但是大多数人可能不会把我写的东西叫做C语言。它使用我能找到的386的每个可以想象的特性,因为它也是一个教我关于386的功能的项目。我前面提到过,它使用内存管理单元来进行分页(还没实现到对硬盘的功能)和分段。这个分段功能使得它真正的依赖于386(每个任务都有64Mb的代码和数据段——4Gb中最多64个任务。如果有人需要超过每个任务64Mb的限制,那将是个麻烦事)。「……」我的一些C语言文件(特别是mm.c)几乎用了和C一样多的汇编。「……」不像minix,我也碰巧喜欢中断,所以中断将在不试图隐藏背后的原因的情形下被处理。

之后,许多人为这个项目贡献了代码。在早期,MINIX 社区向 Linux 内核贡献了代码和想法。当时,GNU 项目已经创建了许多自由操作系统所需的组件,但是它自己的内核 GNU Hurd 尚不完整且无法使用;而BSD操作系统还没有摆脱合法的阻碍。因此,尽管早期版本的 Linux 功能有限,但它迅速获得了开发人员和用户。

到1991年9月,Linux 内核版本 0.01 在芬兰大学和研究网络(FUNET)的FTP服务器(ftp.funet.fi)上发布。它有10,239行代码。在1991年10月,0.02版本的内核发布了。[15]

1991年12月,0.11版本的内核发布。由于它可以由运行相同内核版本的计算机编译,因此该版本是第一个 自托管的英语Self-hosting Linux 内核。当托瓦茲于1992年2月发布0.12版本时,他采用了 GNU 通用公共许可证(GPL),而不是以前的自行起草的许可证,原先的许可证不允许商业再分发。[16]

1992年1月19日,第一篇文章提交给新的新闻组 alt.os.linux 出现。[17] 1992年3月31日,该新闻组更名为 comp.os.linux[18]

X Window 系统随后被移植到 Linux 上,所以在1992年3月,Linux 0.95 是第一个能够运行X的版本。从0.1x到0.9x的版本号大幅跨越是因为期望没有大的缺失部分的版本1.0的即将出现。然而,这被证明是错误的。从1993年到1994年初,出现了0.99版本的15个开发版本。

1994年3月14日,Linux 内核1.0.0发布,共176,250行代码。随后的1995年3月,有310,950行代码的 Linux 内核1.2.0发布。

在1996年6月9日发布的 Linux 内核2.0版本之后,以2.0为大版本的主要更新有如下这些:

  • 1999年1月25日 - 发布 Linux 内核2.2.0(1,800,847行代码)
  • 1999年12月18日 - 针对2.2.13的 IBM 大型机补丁发布,允许 Linux 内核用于企业级机器
  • 2001年1月4日 - 发布 Linux 内核2.4.0(3,377,902行代码)
  • 2003年12月17日 - 发布 Linux 内核2.6.0(5,929,913行代码)

从2004年开始,发布过程发生了变化,新的内核每隔2-3个月定期发布,编号为2.6.0、2.6.1,直到2.6.39。

2011年7月21日,Torvalds宣布发布Linux内核3.0:“2.6.<大版本> 的日子过去了”。[19]与Linux 2.6.39相比,大的技术变化同版本跃升没有关系;[20]它标志着内核的20周年纪念。[21]基于时间的发布过程保持不变。

2013年6月发布的Linux内核版本3.10包含15,803,499行代码[22],而2015年6月发布的4.1版本已发展到超过1950万行代码,由近14000名程序员贡献。[23]