【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 操作系统。

相关推荐
我材不敲代码4 小时前
Python实现打包贪吃蛇游戏
开发语言·python·游戏
身如柳絮随风扬5 小时前
Java中的CAS机制详解
java·开发语言
-dzk-6 小时前
【代码随想录】LC 59.螺旋矩阵 II
c++·线性代数·算法·矩阵·模拟
韩立学长6 小时前
【开题答辩实录分享】以《基于Python的大学超市仓储信息管理系统的设计与实现》为例进行选题答辩实录分享
开发语言·python
froginwe117 小时前
Scala 循环
开发语言
m0_706653237 小时前
C++编译期数组操作
开发语言·c++·算法
故事和你917 小时前
sdut-Java面向对象-06 继承和多态、抽象类和接口(函数题:10-18题)
java·开发语言·算法·面向对象·基础语法·继承和多态·抽象类和接口
Bruk.Liu7 小时前
(LangChain实战2):LangChain消息(message)的使用
开发语言·langchain
qq_423233907 小时前
C++与Python混合编程实战
开发语言·c++·算法
m0_715575347 小时前
分布式任务调度系统
开发语言·c++·算法