【C++基础】GNU简介

GNU(GNU's Not Unix)是一个由**自由软件基金会(FSF, Free Software Foundation)发起的项目,目标是创建一个完全自由的操作系统。GNU 项目由理查德·斯托曼(Richard Stallman)**于 1983 年发起,旨在提供一个类 Unix 的操作系统,但完全由自由软件组成。

GNU 的名字是一个递归缩写,意思是"GNU's Not Unix"(GNU 不是 Unix),表达了 GNU 的目标是创建一个与 Unix 兼容但独立的系统。


GNU 的核心目标

  1. 自由软件
    • GNU 项目强调软件的自由性,用户有权利运行、复制、分发、研究、修改和改进软件。
    • 自由软件的四大自由:
      • 自由 0:自由运行程序。
      • 自由 1:自由研究和修改程序。
      • 自由 2:自由分发程序。
      • 自由 3:自由分发修改后的程序。
  2. 类 Unix 系统
    • GNU 的目标是创建一个与 Unix 兼容的操作系统,但完全由自由软件组成。
  3. GNU 工具链
    • GNU 项目开发了大量的工具和库,如 GCC(GNU Compiler Collection)、GNU Make、GNU Bash 等,这些工具成为了现代软件开发的基础。

GNU 的主要组件

  1. GNU 操作系统
    • GNU 操作系统的核心是 GNU Hurd,一个基于微内核的操作系统。
    • 由于 Hurd 的开发进展缓慢,目前 GNU 操作系统通常使用 Linux 内核(称为 GNU/Linux)。
  2. GNU 工具链
    • GCC(GNU Compiler Collection):支持多种编程语言的编译器,如 C、C++、Fortran、Ada 等。
    • GNU Make:自动化构建工具,用于管理项目的编译过程。
    • GNU Bash:一个功能强大的 Unix shell,广泛用于脚本编写和命令行操作。
    • GNU Coreutils :提供了一系列基本的命令行工具,如 lscprm 等。
    • GNU Binutils:包括汇编器、链接器、库管理工具等。
  3. GNU 库
    • GNU C Library(glibc):C 标准库的实现,提供了系统调用和基本的 C 函数。
    • GNU Scientific Library(GSL):提供了大量的数学和科学计算函数。
  4. GNU 应用程序
    • GNU Emacs:一个功能强大的文本编辑器。
    • GNU GDB:一个强大的调试器。
    • GNU GRUB:一个多操作系统引导程序。

GNU 与 Linux 的关系

  • GNU 项目:目标是创建一个完全自由的操作系统,包括内核和用户空间工具。
  • Linux 内核:由**林纳斯·托瓦兹(Linus Torvalds)**开发,是一个独立的内核项目。

由于 GNU Hurd 的开发进展缓慢,GNU 项目通常使用 Linux 内核来构建完整的操作系统,称为 GNU/Linux。GNU 提供了用户空间的工具和库,而 Linux 提供了内核。


GNU 许可证

GNU 项目开发了大量的自由软件,这些软件通常使用 GNU 通用公共许可证(GPL, General Public License) 发布。GPL 是一种Copyleft许可证,确保软件及其衍生作品始终保持自由。

  • GPL:要求任何分发 GPL 软件或其衍生作品的人必须提供源代码,并允许他人自由使用、修改和分发。
  • LGPL(Lesser General Public License):适用于库,允许非自由软件链接到 LGPL 库。

GNU 的现状

  • GNU 工具链:GNU 工具链(如 GCC、GNU Make、GNU Bash 等)已经成为现代软件开发的基础,广泛应用于各种操作系统(包括 Linux、macOS 和 Windows)。
  • GNU/Linux:GNU 工具和库与 Linux 内核结合,形成了 GNU/Linux 操作系统,广泛应用于服务器、桌面和嵌入式系统。
  • GNU Hurd:GNU Hurd 的开发仍在进行中,但由于技术复杂性和开发资源有限,进展缓慢。

总结

GNU 是一个致力于创建完全自由操作系统的项目,提供了丰富的工具链和库,成为现代软件开发的基础。GNU 项目强调软件的自由性,通过 GPL 许可证确保软件的自由传播和修改。尽管 GNU Hurd 的开发进展缓慢,但 GNU 工具和库与 Linux 内核结合,形成了广泛使用的 GNU/Linux 操作系统。

相关推荐
云泽80831 分钟前
C/C++内存管理详解:从基础原理到自定义内存池原理
java·c语言·c++
weixin_3077791334 分钟前
在Linux服务器上使用Jenkins和Poetry实现Python项目自动化
linux·开发语言·python·自动化·jenkins
润 下34 分钟前
C语言——深入解析C语言指针:从基础到实践从入门到精通(四)
c语言·开发语言·人工智能·经验分享·笔记·程序人生·其他
Empty_77739 分钟前
Python编程之常用模块
开发语言·网络·python
小火柴12342 分钟前
利用R绘制箱线图
开发语言·r语言
wheeldown1 小时前
【Linux】Linux 进程通信:System V 共享内存(最快方案)C++ 封装实战 + 通信案例,4 类经典 Bug 快速修复
linux·运维·服务器·开发语言
小年糕是糕手1 小时前
【数据结构】双向链表“0”基础知识讲解 + 实战演练
c语言·开发语言·数据结构·c++·学习·算法·链表
将车2441 小时前
C++实现二叉树搜索树
开发语言·数据结构·c++·笔记·学习
梵得儿SHI1 小时前
Java 反射机制核心类详解:Class、Constructor、Method、Field
java·开发语言·反射·class·constructor·java反射·java反射机制
hbqjzx2 小时前
记录一个自动学习的脚本开发过程
开发语言·javascript·学习