第 2 课 - Linux 发展历史与开源文化
1. 学习目标
完成本课学习后,你将能够:
- 叙述 Linux 从 Unix 诞生到内核首次发布的简要发展脉络。
- 区分“开源软件”与“自由软件”的核心理念。
- 识别推动 Linux 及开源运动发展的几位关键人物与组织。
- 使用简单的命令在 Linux 系统中查看相关的版本与许可证信息。
2. 核心概念
从 Unix 到 Linux:一段“自由”的演化史
要理解 Linux,必须先了解 Unix。Unix 是 20 世纪 60-70 年代在贝尔实验室诞生的一个强大的多用户、多任务操作系统,它是现代操作系统(包括 Linux、macOS)的“老祖宗”。
在 80 年代,Unix 变得商业化且昂贵。这时,一个关键人物——理查德·斯托曼 (Richard Stallman) 发起了 GNU 计划,目标是创造一个完全自由、类 Unix 的操作系统。“GNU” 是一个递归缩写,意为“GNU‘s Not Unix”。他创办了 自由软件基金会 (FSF),并提出了著名的 Copyleft(著佐权)概念,其精神体现在 GPL (GNU通用公共许可证) 中:你可以自由地使用、修改和分发软件,但你修改后的版本也必须以同样的许可证发布,保证自由“传染”下去。
到了 1991 年,一位芬兰大学生 林纳斯·托瓦兹 (Linus Torvalds) 出于个人兴趣,编写了一个类 Unix 操作系统的内核,并将其命名为 Linux,并以 GPL 许可证发布。当时,GNU 计划已经开发出了除内核外的大量系统工具。Linux 内核与 GNU 工具集一结合,一个完整的、自由的、强大的操作系统——GNU/Linux 就此诞生。我们今天常说的“Linux系统”,更准确的叫法应该是 GNU/Linux。
开源 vs. 自由软件:理念的分歧与融合
虽然“开源”和“自由软件”常被混用,但它们的出发点不同。
- 自由软件 (Free Software): 强调的是用户的 自由和权利。核心是“四大自由”:运行、研究、修改、分发软件的自由。它更关注伦理和社会问题。
- 开源软件 (Open Source Software): 强调的是 开发的实用方法。核心是公开源代码,允许社区审查、修改,以提升软件质量和开发效率。它更关注工程和商业优势。
两者在技术实践上几乎相同,但背后的哲学不同。Linux 是自由软件运动的典范,也完全符合开源定义。开放源代码促进会 (OSI) 负责认定开源许可证。
类比理解:把软件想象成一道菜谱。
- 自由软件:你不仅拿到菜谱(代码),还可以学习、改进它,并且你改进后的新菜谱也必须让别人同样自由地获取和改进。
- 开源软件:核心也是公开菜谱,但主要目的是让全世界的大厨(开发者)一起改进这道菜,让它更美味(质量更高)。
重要的“人”与“事”
- 理查德·斯托曼: GNU 计划发起人,自由软件运动之父。
- 林纳斯·托瓦兹: Linux 内核的创造者和首席架构师。
- 自由软件基金会 (FSF): 推广自由软件理念,维护 GPL 许可证。
- 开放源代码促进会 (OSI): 推广开源开发方法,认定开源许可证。
3. 代码示例
虽然历史无法用代码“运行”,但我们可以用命令在 Linux 系统中亲自查看与之相关的信息,感受开源的“痕迹”。
#!/bin/bash
# 脚本名称: explore_linux_history.sh
# 用途: 在 Linux 系统中查看与内核、许可相关的历史和文化信息
echo "=== 1. 查看当前系统的内核版本 ==="
# 这正是林纳斯·托瓦兹在1991年创造的那个核心组件
uname -r
echo ""
echo "=== 2. 查看操作系统的发行版信息(这是社区多样性的体现)==="
# 每个发行版都是开源社区基于 Linux 内核和 GNU 工具的不同“组装”方式
cat /etc/os-release
echo ""
echo "=== 3. 查看一个开源工具的帮助文档开头(例如 `ls` 命令)==="
# 几乎所有系统工具都源于 GNU 计划或其他开源项目,文档和源代码都是开放的
ls --version | head -n 1
echo ""
echo "=== 4. 查看系统软件包的许可证信息(以一个常见包为例)==="
# 不同的开源软件使用不同的许可证(如GPL, MIT, Apache),这是开源文化的法律基础
# 注意:以下命令需要已安装 `apt` 包管理器(如 Ubuntu/Debian 系统)
echo "以查看 `coreutils` (提供`ls`, `cp`等命令) 包的许可证为例:"
if command -v apt &> /dev/null; then
# 解析包信息中的 License 字段
apt show coreutils 2>/dev/null | grep -i "License"
else
echo "(本示例需要 apt 包管理器,请在 Ubuntu/Debian 系统上运行。其他发行版有类似查询方式)"
fi
如何运行此脚本:
- 将以上代码保存为
explore_linux_history.sh文件。 - 在终端中赋予执行权限:
chmod +x explore_linux_history.sh。 - 运行脚本:
./explore_linux_history.sh。
预期输出(示例,你的结果会因系统而异):
=== 1. 查看当前系统的内核版本 ===
5.15.0-73-generic
=== 2. 查看操作系统的发行版信息(这是社区多样性的体现)===
PRETTY_NAME="Ubuntu 22.04.3 LTS"
...
=== 3. 查看一个开源工具的帮助文档开头(例如 `ls` 命令)===
ls (GNU coreutils) 8.32
=== 4. 查看系统软件包的许可证信息(以一个常见包为例)===
以查看 `coreutils` (提供`ls`, `cp`等命令) 包的许可证为例:
License: GPL-3
4. 实践练习
练习一:知识巩固(回答问题)
- GNU 计划的主要目标是什么?
- Linux 内核首次发布的年份是哪一年?
- “自由软件四大自由”中的第四条自由是什么?(提示:与分发修改后的版本有关)
练习二:命令实践 在你的 Linux 系统(或虚拟机)终端中,分别执行以下命令,并将输出结果记录下来。
cat /proc/version # 另一个查看内核版本和编译信息的方式
grep -i "license" /usr/share/doc/bash/copyright # 尝试查看 Bash shell 的许可证信息
练习三:思考与讨论(选做) 请简要阐述你对“开源软件通过公开代码来提升质量”和“自由软件通过保障用户权利来推动社会进步”这两种观点的理解。你更认同哪一种?为什么?
5. 常见错误
- 混淆 Linux 与 GNU/Linux: 只看到 Linus Torvalds 的贡献,忽略了 Richard Stallman 和 GNU 计划的关键性基础工作。
- 误解“自由”的含义: 认为“自由软件”意味着“免费软件”。英文 “Free” 在这里是“自由”(freedom)而非“免费”(free of charge)。自由软件可以收费,但必须提供源代码并保障用户的四项自由。
- 将开源许可证一概而论: 认为所有开源软件都可以随意用于商业闭源产品。不同许可证(如 GPL vs. MIT)的“传染性”条款差异巨大,使用前必须仔细阅读。
- 忘记历史的社区性: 认为 Linux 的成功仅仅是林纳斯个人的天才之作。实际上,它是全球成千上万的开发者通过互联网协作的结晶,是开源协作模式的伟大胜利。
6. 小结
- Linux 的诞生是 Unix 思想、GNU 计划 和 林纳斯·托瓦兹的内核 三者结合的产物。
- 自由软件 强调用户的权利与伦理,以 FSF 和 GPL 为代表。
- 开源软件 强调开发模式的实用性与效率,以 OSI 和社区协作为核心。
- 两者在技术实践上高度重叠,共同塑造了今天蓬勃发展的开源生态系统。
- 理解这段历史和文化,有助于你更好地融入 Linux 社区,理解为什么在 Linux 世界中,源代码是开放的,社区是协作的,选择是多样的。这是你后续学习系统管理与运维的坚实文化基础。
下一课我们将开始认识这个大家族中的不同成员——主流的 Linux 发行版。