[关闭]
@xiaohaizi 2022-07-02T06:19:08.000000Z 字数 3868 阅读 212

GNU那些事

公众号文章


最近在写一个用于教学的操作系统,由于开发过程中需要使用GNU工具,之前虽一直使用GNU工具但从未系统了解过GNU,所以这次专门花了很多时间去研究了一下。

这篇文章不聊技术,单纯的扯扯历史。

小贴士:


很久之前,小孩子一度的把GNU看成了GUN,还在想这个名儿真酷,gun,不就是“滚”嘛~

传奇老哥

先认识一位老哥:

image_1g2ej0drm12l5alc110clqimvtm.png-904.7kB

出于对他的敬意,再放一张照片:

image_1g2eiuvh8s29g3d16tp1lt51sds9.png-423.9kB

图片里胡子拉碴的老哥,或者应该叫大叔(毕竟他出生于1953年),名叫Richard Matthew Stallman,他也喜欢把自己称作rms(名字的首字母缩写)。

哈佛物理学学士,工作于MIT人工智能实验室。

在MIT人工智能实验室工作时,热衷于在社区分享软件。后来专利软件越来越多,这些专利软件不允许分享、更别提获取源代码以及在源代码的基础上进行改进了。

1980年,MIT人工智能实验室新安装了一台打印机。在此之前,Stallman为先前的打印机修改了程序,当用户打印东西时,该程序可以给用户发送消息,如果打印机卡住了,则可以给所有等待打印东西的用户发送消息。可当Stallman向打印机厂商要打印机源代码以添加这个功能时却遭到了拒绝,这一点让Stallman十分恼火。后来他决定开发一些完全自由使用的程序。

GNU项目

1983年9月27日,Stallman在net.unix-wizards和net.usoft新闻组上公开宣布,他要启动一个名为GNU的项目。1984年1月, Stallman辞去了他在MIT人工智能实验室的工作,正式开始GNU项目的开发。

啥是个GNU项目?GNU的目标是开发一个完整的操作系统,这里所说的操作系统不仅仅包含内核,还包括诸如命令行、汇编器、编译器、解释器、调试器、文本编辑器、邮件服务,甚至游戏... Stallman期望这个操作系统可以和UNIX操作系统兼容,这样UNIX用户可以很好的迁移到这个理想中的操作系统。

不过为了强调这个操作系统和UNIX操作系统的不同,Stallman展现了他作为程序员特有的幽默,把这个操作系统命名为GNU,它的全称其实是GNU's Not Unix。有小伙伴发出疑惑:那这个GNU's Not Unix中的GNU是什么意思,GNU's Not Unix中的GNU仍然是GNU's Not Unix。也就是说GNU其实是一个递归的名称,我们把GNU展开后就是:

  1. (((GNU's Not Unix)'s Not Unix)'s Not Unix)'s Not Unix...

好了,Stallman大爷,我知道GNU不是Unix了😂

自由软件基金会

一个人的力量是有限的,在GNU项目启动后一年的1985年,Stallman创立了一个称作Free Software Foundation(简称为FSF)的非盈利机构用于筹集资金。

Stallman老哥再三强调,Free Software中的Free不是免费的意思,是自由的意思。由于英语中并没有什么仅表示自由而非免费(这一点不适合于中文),所以只好勉强用Free这个单词儿了。如果一个软件可以被称作自由软件,Stallman认为这个软件需要符合下边这几点:

可以看到,Stallman强调的其实是可以获取软件的源代码并加以修改,而不是阻止人们去制作软件的拷贝然后去卖。从这几个对自由软件的定义中可以看出,知道一个软件是怎样运行的对于一个黑客来说是有多么重要(程序员的浪漫)。

成立基金会之后,Stallman可以雇佣更多的员工来完成他的自由软件梦想。除了GNU的员工之外,世界各地的开发者也可以为GNU项目捐献资金,或者贡献自己的时间来为GNU项目的源代码添砖加瓦。

GNU项目包含哪些内容

GNU项目以软件包的形式对外发布,大家可以到下边这个地址来下载GNU项目发布的软件包:

  1. https://ftp.gnu.org/gnu/

下边列举一些我们程序员使用频率极高的几个软件包:

小贴士:


需要注意的是,在我们自己编写操作系统的时候,没有这些工具几乎寸步难行。我们的C语言源码需要用gcc进行编译,编译完的汇编程序需要使用汇编器进行汇编,得到的可重定位目标文件需要使用链接器进行链接,得到二进制目标文件后需要使用gdb进行调试。

GNU和Linux

GNU操作系统是一个非常庞大的工程,如果这个工程中所有的软件都由GNU项目组从零开始开发,那可能要等到猴年马月。为提升效率,Stallman决定尽可能的利用或改造现有的自由软件,将它们纳入GNU系统中。所以这就形成了一个事实:GNU系统并不等价于GNU软件的集合(GNU系统中还包含了其他的一些自由软件)。比方说GNU系统使用TeX作为主要的文本排版工具,采用X Window作为窗口管理系统。

到1990年,GNU系统基本上完成了,不过系统的主要部件中还缺一个内核(kernel),当年开始了GNU操作系统内核GNU Hurd的开发,开发GNU Hurd并不是一帆风顺。

时间很快来到1991年,那一年编程界的另一个传奇,当时还在赫尔辛基大学读书的Linus Torvalds针对80386CPU开发了一个名叫Linux的操作系统内核。随后Linus Torvalds将他开发Linux的事情以及Linux的源代码公布出去,大量的开发人员迅速地被这个项目所吸引并且为它贡献源代码,Linux逐渐完善了起来。

Linux内核和缺少内核的GNU系统被结合了起来,成为一个真正既完整、又自由的操作系统。不过很多人还是把这个操作系统单纯的称作Linux,这一点让Stallman老爷子很不爽,他在很多地方多次强调,这个结合起来的操作系统应当被称作GNU/Linux,毕竟这个操作系统中GNU软件的代码占了多数,仅仅将该系统称作Linux是对GNU极大的不公平。

有了Linux内核之后,GUN操作系统原始的内核GNU Hurd开发速度放缓,现在我们到GNU发布的软件包中可以看到hurd包仍停留在0.9版本。

再说一下Stallman老爷子

Stallman不仅是GNU项目的发起人,更是一个程序员,是那种真改变世界的程序员,不是增删改查那种的。他主导或者参与了诸多GNU软件的编码工作,诸如Emacs,gcc、gdb以及make。

再一次对这位老爷子所做的工作表示敬意。

小贴士:


这历史写着写着,小孩子忽然又想去敲代码了...

写作本文时参考的一些资料

有兴趣的小伙伴可以接着阅读:

https://www.gnu.org/gnu/gnu.html

https://www.gnu.org/gnu/about-gnu.html

https://www.gnu.org/gnu/gnu-history.html

https://www.gnu.org/gnu/thegnuproject.html

https://www.gnu.org/gnu/linux-and-gnu.html

https://www.gnu.org/gnu/thegnuproject.html

https://en.wikipedia.org/wiki/Richard_Stallman

https://en.wikipedia.org/wiki/Linus_Torvalds

https://en.wikipedia.org/wiki/GNU

https://en.wikipedia.org/wiki/Bash_(Unix_shell)

https://en.wikipedia.org/wiki/Glibc

https://en.wikipedia.org/wiki/GNU_Binutils

https://en.wikipedia.org/wiki/GNU_Hurd

https://en.wikipedia.org/wiki/List_of_GNU_Core_Utilities_commands

https://en.wikipedia.org/wiki/Free_software

https://en.wikipedia.org/wiki/Free_Software_Foundation

https://en.wikipedia.org/wiki/GNU_Project

https://en.wikipedia.org/wiki/Linux

https://en.wikipedia.org/wiki/GNU_Compiler_Collection

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注