# Torvalds 的 Linux 开发

linux 是芬兰人 Torvalds 开发的,那么他为什么可以开发 linx ?这有什么故事呢?

# Minix

Torvalds 在大学期间,学习汇编语言, Unix 不支持个人计算机,而且只提供 16 个终端机, 满足不了它使用计算机的需求,于是就在 intel 386 个人计算机上安装了类似 unix 的 minix 系统, 而且附带源码,并且学习了这个源码,学到了很多内核程序设计的概念

# 对 386 硬件的多任务测试

什么是多任务?

CPU 在一个时间内仅能处理一个程序,那么同时启动两个程序的话,怎么办? 如果这个 CPU 有多任务能力的话,则可以在不同程序间切换。

CPU 频率假设为 1GHz 的话,哪表示 CPU 一秒钟可以进行 10 的 9 次方工作,假设每个程序对 CPU 只有 1000 次运行周期, 然后就得切换到下个程序的话,那么 CPU 一秒钟就能够切换 10 的 6 次方次。在这么快的处理速度下, 你会发现,两个程序感觉上几乎是同步在执行的

早期的 intel x86 对多任务支持不佳,intel 386 出来以后改善了很多,torvalds 就买了一台, 然后在这个机器上面测试性能,写了如下三个程序

  • 持续输出 A 程序
  • 持续输出 B 程序
  • 一个程序将上面两个程序进行切换

结果屏幕上面就看到了 ABAB.. 的输出结果,多任务处理测试成功了

要有多任务处理能力,需要以下两点:

  1. CPU 支持多任务
  2. 操作系统需要支持多任务

有个例子很适合来解释多任务大体是什么样子的。开记者招待会,主持人问:谁要发问?下面一大群人举手, 那么主持人会挑选一位进行回答,然后再问:谁要发问?下面又一群人举手,刚刚被回答过的记者也可以举手。 这就是多任务特性,同一时间只能处理一个问题

# 初次释出 Linux 0.02

minix 系统可以在 386 上安装,虽然真的很棒,但是谭宁邦教授不愿意对功能进行加强, 让 torvalds 产生了自己写一个操作系统的想法。

在 GUN 的 bash 工作环境和 gcc 编译程序等自由软件外加参考 minix 的设计理念与程序代码, 最终写出了一个内核程序,而且可以在 386 上面运行。随后放在了 ftp 网站上,供更多的人使用, 因为他想更多的人提供建议与一起来开发这个内核。

当时放在 ftp 的 linux 目录下的,第一个内核版本是 0.02,所以大家就称呼这个内核为 linux 了。

为了能够让 linux 能兼容 unix 的软件,对 linux 进行了修改,开始参考 POSIX

TIP

POSIX 是可携式操作系统接口(Portable Operating System Interface)的缩写, 重点在于规范内核与应用程序之间的接口,这是由美国电气与电子工程师学会(IEEE)所发布的一项标准

POSIX 标准主要是针对 UNIX 与一些软件运行时的标准规范,所以按照这个规范来支持, 就能让 unix 上的软件在 linux 上运行,所以导致 linux 使用率大增

# Linux 的开发:虚拟团队的产生

一个人的力量是有限的,所以有了广大自愿者的加入。

托瓦兹不可能有所有的硬件,也没有那么多的精力对所有硬件进行驱动程序的开发,所以志愿者有这个硬件, 并且愿意开发,开发完成之后就放到内核中测试。

随着越来越多的需求,随时都有代码加入的状况,于是 linux 便逐渐开发成具有模块的功能,即是将某个功能独立在内核外, 在需要的时候才加载到内存中,如此一来有新的硬件驱动程序或其他协议的程序代码进来时,就可以模块化, 不再需要每次都编译内核了。就如同 Windows 中的驱动程序一样。

测试代码整合到内核,都是一项耗时的工作,有自愿者的加入,让 linux 发展得更快,他们被称为虚拟团队。

在 1994 年,linux 内核发布了 1.0.0 版本,并加入了 x window system 的支持。1996 年发布了 linux 2.0

# Linux 的内核版本

Linux 的内核版本编号类似如下样子

2.6.18-92.e15
主版本.次版本.释出版本-修改版本
1
2

linux 开发者太多,导致内核经常变动,但是一般家庭或企业应用的话,常变动版本号并不合适, 所以讲内核分为两个内核编号

  • 主、次版本为奇数:开发中版本(development)

    如 2.5.xx 就是一个开发中版本,等待测试没有问题之后才会加入到下一版的稳定内核中

  • 主、次版本为偶数:稳定版本(stable)

那么释出版本与修改版又是什么呢?

  • 释出版本

    在主次版本架构不变的情况下,新站的功能累积到一定的程度后,新释放出的内核版本

  • 修改版本

    由于 linux 使用的是 GPL 授权,因此大家都可以修改,如果你再某个版本的内核修改过部分代码, 就可以加上修改版本号了

distribution 版本又是什么呢(下个小节讲解)?

这里强调的是 linux 内核版本与 distribution 不是一个东西,因为 linux 版本指的是内核版本, 而 centOs 7 是 distribution 版本,并不是指 linux 的内核版本。他们都是在 linux 内核基础上, 增加了自家的开发工具和软件发行的。

# Linux distribution

Linux 其实就是一个操作系统最底层的内核及其提供的内核工具,它是 GPL 授权模式, 所以任何人都可以运行和修改。另外 Linux 参考 POSIX 设计规范,因此兼容 UNIX 操作系统ß

# 可完全安装的 Linux 发布套件

GNU 项目很厉害,但是缺乏内核程序,所以只能在其他的 unix 上运行,linux 的出现,与大量的自愿者和使用者, 造就了大批量的软件应用。

一部分商业公司或非营利性团体将这些资源整合在一起,加上自己的创意工具程序,这个工具程序可以让用户以光盘或网络等形式直接 安装/管理 Linux 系统。这个 「kernel + Softwares + Tools」的可完全安装的系统,我们称之为 Linux distribution

由于 GUN 的 GPL 授权并非不能从事商业行为,所以有写公司就专门销售 linux distribution, 鉴于 GPL 授权,一般也可以在网络上下载到,但是你需要这些公司为你提供服务,那么久需要向这些公司付费

# 各大 Linux Distribution 的主要异同:支持标准

开发 linux distribution 的公司太多了,在中国有名的 Red Hat、SUSE、Ubuntu、Fedora、Debian 等, 但是他们都使用 linux 内核,他们包装的软件重复性很高(常用的软件)

此外为了不让 linux distribution 开发不至于差异太大,他们还遵守 Linux Standard Base(LSB) 等标准规范来规范开发,以及使用目录架构 File system Hierarchy Standard(FHS)标准规范。

他们唯一的差别可能就是各自所开发出来的管理工具以及套件管理模式,所以说,基本上每个 linux distribution 除了架构的严谨度 与选择的套件内容外,其实差异并不太大

TIP

鸟哥认为 distribution 主要分为两大系统:

  • 使用 rpm 方式安装软件的系统:red Hat、fedora、Suse 等
  • 使用 dpkg 方式:debian、Ubuntu、B2D 等

# 商业版本还是团队版的区别?

在选择 distribution 的时候,选择商业版本还是团队版呢?他们的区别可能就是稳定性了

  • 商业版

    一般用在服务器上,包括 red hat、SuSe 等版本,有新功能并不会立即更新,需要一段时间的打磨之后才会更新

  • 团队版

    一般用在个人计算机上,包括 fedora、ubuntu、OpenSuSe 等,更新较快,可能有 BUG

# Linux 在中国

发行套件大多数以英文语系国家为主,所以中国的 linux 爱好者就做了很多汉化方面的工作,比如台湾地区发起的 CLE 项目, 就开发了很多的中文套件及翻译了很多的英文文件。(我自己在写笔记的时候,书上的连接没有打开过,这里就不贴出来连接了)

# 选择合适你的 Linux distribution

上面所述主差异性并不大,鸟哥建议是先学习以 RPM 套件管理为主的 RHEL/Fedora/SuSE/centOs 等中国用户较多的版本

总之版本很多,但是差异并不是很大,选定一个版本从头彻尾的了解后,再去学习其他版本就很容易了, 如果提供一些按计算机用途来分类的建议:

  • 企业环境:选择商业版本,如 RedHat 的 RHEL 或则是 Novel 的 SuSE。因为会提供客服服务,降低企业风险

  • 个人或教学服务器环境:建议使用号称完全兼容商业版本 RHEL 的 CentOS

    因为 CentOS 是抓 RHEL 的源码重新都起来一个 linux distribution,这一版本的软件与 RHEL 完全一样, 改版幅度较小,适合用于服务器系统的场景

  • 个人桌面计算机

    想要尝鲜的话可以使用 Fedora、Ubuntu 等 Desktop(桌面环境)使用版本