菜单开关

周梦康 发表于 2020-11-22 438 次浏览 标签 : 《Linux C 入门笔录》

GNU

为什么要谈 GNU

开源之巅 - 到底是 Linux 还是 GNU/Linux

为什么要谈 GNU 呢?不得不说很多程序员,即使是工作了四五年甚至更久,一直做后端开发也不一定知道它的存在。很多人都是盲人摸象,管中窥豹。只了解语言本身一点特性,不去主动了解背后任何一点东西,这是不可取的。了解我们软件开发的基础生态对我们平常的开发工作、及时补位、bug 追踪都有很大的帮助。

最熟悉的陌生人 GNU

大家一定用过 bash 写过简单的脚本,也应该在服务器上有过以下经历:用 gccmake 编译过软件,使用 gziptar 在服务上解压缩过文件,使用 wget 访问网络资源,使用 less 查看文件。其实他们都是 GNU 的软件包。

GNU软件包文档(按分类排列) https://www.gnu.org/manual/manual.html

GNU 的由来

Unix 诞生

1969 年贝尔实验的 Ken Thompson 和 Dennis Ritchie Kpi 项目 Multics (多路复用信息和计算机系统)停工。闲着无事,为了能在公司闲置的低配的电脑玩他喜欢的星际旅行,趁她老婆回老家度假期间,开始写 Unix 操作系统。

1970 年 Thompson 打造出了 Unix 。自此 Unix 纪元开始,所以 Unix 时间戳从1970年1月1日开始计算。开发 Unix 过程中,Thompson 用 BCPL 语言非常痛苦,发明了 B 语言,Ritchie 在 B 语言基础做了改进,称之为 C 语言。接下来 Thompson 和 Ritchie 用 C 语言重构了 Unix 。

AT&T 收网行动

早期 Unix 源码是随便分享给其他人的,Unix 源码被流传到各个实验室、学校、公司。大家一起研究改进,加速了 Unix 的发展。等到 1983 年,贝尔实验室的母公司 AT&T 发布了 Unix 最新版 System V,宣布从此 Unix 只能商业使用,不再开放源代码。

极客愤青的 GNU 计划

理查德·斯托曼是老牌黑客,Emacs的作者。对 Unix 的收费和闭源非常不爽,于是创建了自由软件基金会(FSF),起草了 GPL 协议。他雄心勃勃地提出了一项伟大的计划,GNU(GNU's not Unix)计划。命名很程序,递归缩写,这个套路,你开发软件命名犯难的时候,也可以用。

Not Unix,不是Unix,是自由的、免费的、开源的、像Unix一样好用的系统。所以 GNU 是一个计划,也是一个操作系统。

起初一起都进展的非常顺利,比如我们现在一直在使用的 Bash Shell, GCC 编译器,GDB 调试工具,Glibc C运行库这些都开发完了。GNU 完成了一大堆的软件之后,但是内核开发一直不能令人满意,没一颗好心脏,再强健的身躯,也没有灵魂。前面说到这些软件为 Linux 内核开发创造了合适环境,促使了 Linux 的诞生。

Linux

Linux 的诞生

1991 年,垃圾话大王 Linus Torvalds 还是芬兰赫尔辛基大学的一名学生,在学校期间开始折腾 MINIX 操作系统,并且开始在 MINIX-386 系统上运行 GNU GCC,在论坛上回复其他人关于 MINIX 的问题,都以Read the fucking Source Code :-)开篇,垃圾话本色初露锋芒。
在 MINIX 的影响之下,GNU C 编译器生态基础上,开发了一个操作系统的内核,因为受 GNU 影响,在发布 Linux 的时候选择了 GPL 协议。然后发布在 MINIX 论坛上,因为互联网的存在,大家得以纷纷加入到其中开发。

另一方面,受益于 Unix ,IEEE 和 ISO/IEC 基于在 Unix 上的实践经验抽象出一套操作系统的调用服务接口 - POSIX ,便于应用程序在不同操作系统之间的可移植性。Linux 在早期版本中就为 POSIX 标准做了准备工作,在源码 linux-0.11/include/unistd.h 中还可以看到

#ifndef _UNISTD_H
#define _UNISTD_H

/* ok, this may be a joke, but I'm working on it */
...
int getpid(void);
...
#endif

linux 的成功与 linus 的聪明才智、极客精神密不可分,同时也要感谢 MINIX 、Unix 源码帮助、依托 GNU 计划、POSIX 标准和互联网。还有一点天时,就是当时非常优秀的 Unix 分支 BSD 操作系统( TCP/IP 协议在 Unix 上的实现就是 BSD 上实现的),我们现在使用的 MacOS 就是在其之上发展而来。当时 BSD 与 Unix 一直打官司,错过了最好的发展机会。

被大众忽视的 GNU

Linux 是在 GNU 生态最核心的补充,但是因为其是内核,导致大家都忽视了 GNU 只记住 Linux。实际上应该称之为GNU/Linux。比如我在服务器上执行

$ uname -a
Linux 10.0.2.15 3.10.0-957.1.3.el7.x86_64 #1 SMP Thu Nov 29 14:49:43 UTC 2018 x86_64 x86_64 x86_64 GNU/Linux

本书后面的内容也都是建立在 GNU/Linux 基础之上的,比如我们的 C 编程依赖的标准库是 glibc

参考
http://oldlinux.org
https://www.linuxprobe.com/origin-of-linux.html

评论列表