About GNU/Linux
GNU 项目 (GNU Project)
GNU 项目(发音为 /ɡnuː/,类似 “g-noo”),由理查德·斯托曼 (Richard Stallman) 于 1983 年发起,其核心目标是创建一个完全由自由软件 (Free Software) 组成的、与 Unix 兼容的完整操作系统。这个操作系统被命名为 GNU。
“GNU” 这个名字本身就是一个典型的黑客式幽默,它是一个递归缩写,全称为 “GNU’s Not Unix!”(GNU 不是 Unix!)。这个名字巧妙地表明了 GNU 的目标:它在技术上兼容 Unix,能够运行为 Unix 编写的软件,但在哲学上,它与当时商业化、封闭的 Unix 截然不同。
核心理念:自由软件 (Free Software)
要理解 GNU 项目,就必须理解其基石——“自由软件”的理念。这里的“自由” (Free) 指的是自由的权利 (Freedom),而非“免费” (Free of charge)。
理查德·斯托曼认为,软件用户应该拥有控制自己所使用软件的权利。他将这种权利具体化为四项基本自由:
自由 0:无论出于任何目的,用户都有运行程序的自由。
自由 1:用户有学习和修改程序源代码的自由,从而让程序真正为自己服务。(访问源代码是这项自由的前提。)
自由 2:用户有重新分发软件副本的自由,从而可以帮助他人。
自由 3:用户有将自己修改后的版本分发给他人的自由,从而让整个社区有机会从你的改进中受益。
一个软件,只有当其用户享有全部这四项自由时,才能被称为“自由软件”。GNU 项目的所有产出都遵循这一原则。
GNU 项目的主要组成部分
为了构建一个完整的操作系统,GNU 项目开发了大量的核心软件组件。这些组件如今已成为几乎所有 Linux 发行版和许多其他开源系统的基石。
- GNU 工具链 (GNU Toolchain) 这是 GNU 项目最核心、影响最深远的贡献之一,是软件开发的“基础设施”。
GCC (GNU Compiler Collection):GNU 编译器套装。最初是 C 语言编译器,现已支持 C++、Objective-C、Fortran、Go、Rust 等多种语言。它是世界上最重要、使用最广泛的编译器之一。
GDB (GNU Debugger):一款功能强大且应用广泛的编译型语言命令行调试工具。GDB 允许您“进入”另一个正在运行或崩溃的程序内部,查看其内部状态,并控制其执行流程。它主要用于 C、C++、Go、Rust、Ada 等编译型语言,是 Linux 和 Unix-like 系统下进行软件开发不可或缺的工具。
Make:一个自动化构建工具,可以根据文件依赖关系自动执行编译链接等任务。
- 核心应用程序与工具 (Core Applications & Utilities)
Bash (Bourne-Again SHell):GNU 的命令行外壳(Shell),是今天绝大多数 Linux 系统默认的交互界面。
Coreutils (Core Utilities):一套包含所有基础命令行工具的软件包,如 ls, cd, cp, mv, rm, cat 等。
- GNU 通用公共许可证 (GPL)
- 为了在法律上保障软件的“自由”,斯托曼设计了 GPL (GNU General Public License)。这是一个具有“传染性”的许可证,它要求任何修改或分发受 GPL 保护的软件的人,也必须以 GPL 的形式分享其修改后的版本。
- 这确保了自由软件的衍生品同样保持自由,防止其被商业公司闭源。
GNU 与 Linux :一个历史性的结合
到了 90 年代初,GNU 项目已经基本完成了构建一个完整操作系统所需的所有组件——除了最核心的部分:内核 (Kernel)。
内核是操作系统的“心脏”,负责管理硬件资源(CPU、内存、硬盘等),并为上层软件提供服务。
GNU 项目自己的内核,名为 GNU Hurd,由于设计过于宏大复杂,开发进度一直非常缓慢。
就在此时,1991年,一位名叫林纳斯·托瓦兹 (Linus Torvalds) 的芬兰大学生,出于个人兴趣编写了一个与 Unix 兼容的内核,并将其命名为 Linux。他将 Linux 内核以 GPL 许可证发布。
这个行为带来了历史性的结合:
Linux 内核 + GNU 项目的系统软件和工具 = 一个完整、可用的自由操作系统。
这就是我们今天所熟知的“Linux”操作系统。或者说, 这个操作系统更准确的名称应该是 GNU/Linux,因为 GNU 贡献了除了内核之外的绝大部分组件,并且是整个自由软件理念的源头。