GNU
背景
GNU(GNU’s Not Unix)
GNU项目由Richard Stallman在1983年宣布发起
背景:软件社区逐渐从“自由共享代码”转向“闭源专有”
目标:创建一个完整的、类Unix的自由操作系统,让全世界的用户可以自由地运行、复制、分发、学习、修改和改进软件
GNU既是一种操作系统,又是一个具有深远影响的哲学理念和工程项目
GNU创立了自由软件的哲学
- 四项自由:
- 为任何目的运行程序的自由
- 研究程序如何工作,并修改它的自由
- 再分发拷贝,帮助邻居的自由
- 改进程序,并向公众发布改进的自由
- GPL许可证(GNU General Public License):Stallman创造了GPL许可证来实现这些理念。它利用版权法来保障自由,这被称为Copyleft
- 其核心机制是:如果你分发了一个包含GPL代码的程序,你必须同时提供源代码,并允许接收者同样拥有修改和再分发的权力。这使得自由得以延续,不会被闭源化
核心技术贡献
GNU项目开发了大量的基础工具。但没有内核,GNU并不是一个完整的系统,可以抽象为三层
- 应用层
- Shell工具
- 文本工具
- 编译开发工具
- 中间层
- C Library
- Runtime支持
- 底层
- Kernel接口
- 系统调用封装
典型代表
- GNU Coreutils:
ls,cp.rm,cat,… - GNU Bash:大多数Linux发行版默认的命令界面
- GCC(GNU Compiler Collection):编译套件
- GNU Binutils(Binary Utilities):一组用于处理二进制文件的底层工具集合:
as,ld,objdump,readelf,nm, … - Emacs:一个高度可扩展的编译器
- Glibc:GNU C库,是程序与Linux内核交互的核心库
- GDB:GNU调试器
GNU 与 Linux
- GNU项目开发了操作系统所需的大部分核心工具(编译器、库、shell等),但缺少一个最关键的部分:内核
- Linux,内核