从GNU到Linux:一个关于自由的故事

94 阅读4分钟

如果你用过Linux,或者听说过开源软件,那你一定见过GNU 这三个字母。但GNU到底是什么?它和我们常说的Linux又有什么关系?今天就让我们聊聊这个有趣的话题。

一切从一个程序员的愤怒开始

1980年代初,一个叫Richard Stallman的程序员在MIT工作。有一天,实验室的打印机总是卡纸,他想修改打印机的驱动程序,加个卡纸提醒功能。但厂商拒绝提供源代码。

这件小事彻底激怒了他。在Stallman看来,软件就像数学公式,应该可以自由分享和改进。于是在1983年,他发起了GNU项目。

有意思的是,GNU 是个递归缩写 —— "GNU's Not Unix"。这就像说"我不是你,但我要做得和你一样好"。当时Unix是最流行的操作系统,但它是商业软件。Stallman想要创造一个功能相同,但完全自由的替代品。

什么叫"自由软件"?

这里说的"自由"(Free)是指自由权利,不是免费。Stallman打了个比方:自由软件就像菜谱,你可以:

  • 按照菜谱做菜(运行程序)
  • 研究菜谱,改进口味(查看和修改源代码)
  • 把菜谱分享给朋友(复制分发)
  • 把你的改良版菜谱分享出去(分发修改版本)

常见的自由软件许可证有:

  • GPL:最常见的自由软件许可证,要求修改后的代码也必须用GPL发布
  • LGPL:对链接库的要求较GPL宽松
  • MIT/BSD:非常宽松,基本上只要求保留版权声明
  • Apache:类似MIT/BSD,但有专利条款保护

GNU都做了什么?

GNU项目野心勃勃,要重新实现Unix的所有功能。他们确实做到了大部分:

文本编辑器Emacs(程序员中流传一个笑话:Emacs是个不错的操作系统,就是缺个好用的编辑器)

编译器GCC,最初叫GNU C Compiler,现在是GNU Compiler Collection。如果说操作系统是个工厂,那GCC就是工厂里最重要的机器 —— 它把人类能读懂的代码转换成计算机能执行的程序。

基础工具:ls、cp、rm这些你在命令行里敲的命令,大多来自GNU。

到了1990年,GNU几乎什么都有了,除了一样东西 —— 操作系统内核。这就像盖房子,门窗家具都准备好了,就是没有地基和框架。

Linux的出现

1991年,芬兰赫尔辛基大学的学生Linus Torvalds觉得学校的教学系统不好用,决定自己写一个。他原本只是想在自己的386电脑上运行一个终端程序,结果越写越大,最后写出了一个操作系统内核。

Linus把他的内核发布到网上,说:"这只是个爱好,不会做成什么大型专业的东西。"(这可能是IT史上最打脸的预言之一)

奇妙的化学反应发生了:GNU有工具没内核,Linux有内核没工具。两者一拍即合,组成了我们今天使用的操作系统。

为什么叫GNU/Linux?

这就引出了开源世界一个经典的"家庭纠纷"。

Richard Stallman坚持应该叫GNU/Linux,因为系统的大部分组件来自GNU。而很多人觉得Linux更简短好记。这就像一道菜,到底应该叫"番茄鸡蛋"还是"鸡蛋番茄"?

从技术角度说,你日常使用的"Linux系统"确实应该叫GNU/Linux:

  • 内核(Linux)只占整个系统的一小部分
  • 日常使用的大部分功能来自GNU工具
  • 很多系统软件是用GCC编译的

今天的GNU和Linux

三十多年过去了,GNU和Linux都已经成为IT世界的基石。你的安卓手机运行着Linux内核,世界上大部分服务器跑着GNU/Linux,就连微软也拥抱了开源。

GCC依然是最重要的开源编译器之一,虽然现在有了LLVM/Clang 这样的竞争对手。GNU的各种工具仍然是Linux系统的标配。

更重要的是,GNU倡导的自由软件理念深刻影响了整个软件行业。今天我们习以为常的开源软件,从某种意义上说,都是GNU精神的延续。

写在最后

GNU和Linux的故事告诉我们,伟大的东西往往源于简单的理念。Stallman相信软件应该自由,Linus只是想要一个好用的系统。他们的坚持和努力,加上成千上万贡献者的参与,创造了今天这个充满活力的开源世界。

下次当你在终端里敲下 ls 命令,或者用 gcc 编译程序时,不妨想想这背后的故事。这不仅仅是一些代码,更是一群理想主义者改变世界的见证。

正如GNU的递归缩写所暗示的,这是一个永无止境的故事。GNU's Not Unix,但它确实创造了比Unix更加精彩的世界。