Linux:GNU/Linux、BSD、自由软件、GPL、glibc词义说明


全文约 5180 字,预计阅读时长: 15分钟


GNU

GNU 是什么,和 Linux 是什么关系? - 知乎

  Unix 系统被发明之后,大家用的很爽。但是后来开始收费和商业闭源了。一个叫 RMS 的大叔觉得很不爽,于是发起 GNU 计划,模仿 Unix 的界面和使用方式,从头做一个开源的版本。然后他自己做了编辑器 Emacs 和编译器 GCC。

  GNU 是一个计划或者叫运动。在这个旗帜下成立了 FSF,起草了 GPL 等。

  接下来大家纷纷在 GNU 计划下做了很多的工作和项目,基本实现了当初的计划。包括核心的 gcc 和 glibc。但是 GNU 系统缺少操作系统内核。原定的内核叫 HURD,一直完不成。同时 BSD(一种 UNIX 发行版)陷入版权纠纷,x86 平台开发暂停。然后一个叫 Linus 的同学为了在 PC 上运行 Unix,在 Minix 的启发下,开发了 Linux。注意,Linux 只是一个系统内核,系统启动之后使用的仍然是 gcc 和 bash 等软件。Linus 在发布 Linux 的时候选择了 GPL,因此符合 GNU 的宗旨。

  最后,大家突然发现,这玩意不正好是 GNU 计划缺的么。于是合在一起打包发布叫 GNU / Linux。然后大家念着念着省掉了前面部分,变成了 Linux 系统。实际上 Debian,RedHat 等 Linux 发行版中内核只占了很小一部分容量。


Linux

Linux和GNU系统

  林纳斯·本纳第克特·托瓦兹(Linus Benedict Torvalds,1969年12月28日- ),1991年9月17日,Linux内核(当时叫Freax)的0.01版被上传至FTP服务器,从此拉开了一个传奇的序幕……从0.01版的内核开始,Linux内核经过不断迭代成熟,从最初的一万行左右的代码成长至今天千万行级的巨无霸。第一个版本只是一个内核。为了有一个工作系统,还需要一个shell、编译器、库等等。这些全部来自其他GNU软件。一年后的1992年,第一个Linux发行版诞生了。到今天为止,著名的发行版包括Debian、Ubuntu、RedHat Enterprise Linux和Fedora等。

  Linux确实存在,许多人都在使用它,但它仅仅是所用系统的一部分。Linux是内核:它是为你运行的其他程序分配计算机资源的程序。内核是操作系统的基本部分,但是它自己并无用处;它只能在完整的操作系统框架下才能发挥作用。Linux一般和GNU操作系统一起使用:整个系统基本上就是GNU加上Linux,或叫GNU/Linux。所有被叫做“Linux”的发行版实际上是GNU/Linux发行版。

  许多用户并不了解作为内核的 Linux 和也被称作 “Linux” 的整个系统的区别。而不加区别地使用该名称并不能帮助人们对此的理解。这些用户常常认为 Linus Torvalds 在 1991 年凭借一些帮助完成了整个操作系统的开发。例如,许多人相信一旦Linus Torvalds完成了Linux内核,其用户就搜索一些自由软件来和内核一起工作,此时他们发现(没有特别的原因)构成一个类似Unix系统的大多数必要组件已经有了。

  他们的发现不是巧合。因为它正是还没有全部完成的GNU系统。这些已经完成的自由软件加在一起就构成了完整的系统,因为GNU工程从1984年起就在做这件事。在GNU宣言中,我们已经阐明了开发一个自由的类似Unix的系统的目标,它叫做GNU。GNU工程的初始声明也勾画了GNU系统的一些原始计划。在Linux开始时,GNU几乎已经完成。

  大多数自由软件项目以完成某项具体工作为目标。例如,Linus Torvalds编写一个类似Unix的内核(Linux);Donald Knuth编写一个文本排版软件(TeX);Bob Scheifler开发一个窗口系统(X Window系统)。测量该工程里各个程序的贡献是一件自然的事情。

  如果我们这样测量 GNU 工程的贡献,我们会得出什么结论?一个 CD-ROM 提供商发现在他们的 “Linux 发行版”中,GNU 软件 占单一最大的比重,大约是整个源代码的28%,其中包括一些关键性主要部件,没有它们,就没有整个系统。Linux 自身占大约3%。(这个比例在 2008 年也差不多:在 gNewSense 的“主”库中,Linux 占1.5%,而 GNU 包占15%。)所以如果你要根据谁的代码多来命名系统,最合适的单个选择是 “GNU”。

  但是这不是考虑此问题的最深刻方法。GNU工程过去不是、现在也不是,一个开发专门软件包的项目。它不是一个开发C编译器的工程,不过我们做了。它也不是一个开发文本编辑器的工程,我们也做了。GNU工程是要开发一个完全自由的类似Unix的系统:GNU。

  许多人已经为系统中的自由软件作出了重大贡献,他们都应该获得荣誉。但 GNU 是一个整合系统——而不是一些实用程序集合的原因是,GNU 工程的最初目标就是做一个完整系统。我们曾经为完成一个完整的自由系统列了一个所需程序的清单,而且我们系统地寻找、编写、或者征询别人编写清单上的每一个程序。我们编写了关键的但是十分枯燥的 1主要部件,因为这是系统所必需的。有些系统部件,比如编程工具,自己也变成程序员使用的流行工具,但是我们还编写了许多不是工具的部件 2。我们甚至还开发了一个国际象棋游戏,叫GNU Chess,因为一个完整的系统也需要游戏。

  到了90年代初期,我们曾经把除了内核以外的东西放到一起组成了一个系统。我们也在开始开发一个内核,称为GNU Hurd,运行在Mach1之上。开发这个内核比我们的预期要难得多;GNU Hurd在2001年开始可以稳定工作,但是距离能够被人们正常使用还有很长的路要走。

  庆幸的是,我们不必再等 Hurd 了,因为有了 Linux。当 Linus Torvalds 在 1992 年使 Linux 成了自由软件,它填补了 GNU 系统的一个重要空白。人们可以 把 Linux 和 GNU 系统结合起来 组成一个完整的自由系统——一个带有 Linux 的 GNU 系统。换句话说,就是 GNU/Linux系统。

  把它们组合到一起并不是一个简单的工作。有些 GNU 部件 3需要作大量的修改才能适应 Linux。把系统集成到一个完整的发行版本中、使之“能够直接安装并工作”也是一项艰巨的工作。它需要考虑如何安装和启动系统——我们那时还未处理此问题,因为我们还没有走到那一步。因此,那些开发了不同的发行版的人们作出了许多重要的工作。但是这些工作的属性是,它们终究会被某些人做的。

  GNU 工程支持 GNU/Linux 系统,就象支持其 GNU 系统一样。FSF 为重写与 Linux 相关的 GNU C 库提供资金,以至于它们现在可以很好地集成在一起,最新版本的 GNU/Linux 系统使用当前库而无需修改。FSF 也为早期 Debian GNU/Linux 的开发提供资金。

  今天有很多不同的GNU/Linux系统(通常叫做“发行版”)。它们大多数包含了非自由软件—它们的开发者遵循的是和Linux相关的“开源”哲学,而不是GNU的“自由软件”哲学。然而,也有完全自由的GNU/Linux发行版。FSF支持其中一些发行版相关的电脑及其周边件。

  制作一个自由的 GNU/Linux 发行版不止是剔除非自由软件。现在,常规的 Linux 版本也带有非自由程序。这些程序会在系统启动时加载到 I/O(输入输出)设备,它们以很长的数字形式包含在 Linux 的“源代码”中。所以,维护自由的 GNU/Linux 发行版现在承担着维护一个 自由版 Linux 的责任。

  无论你是否使用 GNU/Linux,请不要含糊不清地使用“Linux”这一名称来混淆大众。Linux 是一个内核,是系统的主要基本部件之一。整个系统基本上是 GNU 系统,加上 Linux。如果你说的是这个组合,请称之为“GNU/Linux”。


BSD

  除了GNU,还有一个独立进行的工程开发了一个自由的类似Unix的操作系统。这个系统是BSD,它是由UC Berkeley开发的。在80年代,BSD还不是自由的,但是它在90年代初变成了自由软件。今天,一个自由的操作系统4差不多如果不是GNU系统的派生版本,就是BSD系统的派生版本。

  人们有时会问BSD是否也是一个GNU的派生版本,像GNU/Linux那样。BSD的开发者受到GNU工程的激励而将他们的代码变成了自由软件,尤其受到来自GNU的活动家的明确吸引和帮助,但是他们的代码和GNU并不重合。BSD系统现在也使用一些GNU程序,正如GNU系统及其派生版使用一些BSD程序一样;然而,整体来看,他们是两个独立发展的不同系统。BSD的开发者并没编写一个内核,并将之添加到GNU系统,进而起个譬如叫GNU/BSD的名字,并不是这个情况 5


GPL

一图说明开源许可证GPL、BSD、MIT、Mozilla、Apache和LGPL的区别 。

在这里插入图片描述


自由软件

什么是自由软件?

“自由软件”尊重用户的自由,并且尊重整个社区。粗略来讲,一个软件如果是自由软件,这意味着用户可以自由地运行,拷贝,分发,学习,修改并改进该软件。因此,“自由软件”是关乎自由的问题,与价格无关。要理解这个概念,你要按照Free Software 中的“Free”是指“自由言论(free speech)”中的自由,而非“免费午餐(free lunch)”的免费这一意项。为避免歧义,在使用英文时,我们也会借用法语或西班牙语的“LibreSoftware”来指自由软件,这样可以明确表示我们说得不是免费。<br或\空行>


你可能花钱购买了自由软件的拷贝,也可能免费拿到。但是无论你如何获得你的拷贝,你都有自由复制和修改该软件,乃至 出售 该软件的拷贝。

  我们支持软件用户的自由,因为我们坚信这是每个用户应得的。有了这些自由,软件用户,无论是个人还是集体,都可以掌控所运行的软件,并决定这些程序如何为自己服务。如果一个软件令用户失去了这种控制权,我们则称它为“非自由”的,或“专有”的程序。与自由软件相反,非自由软件会操控它的用户,而软件的开发者则掌控着软件。这使得非自由软件成为了非正义力量的帮凶。

  “开源”是另外一回事:它有基于不同价值观的非常不同的哲学。其实际定义也不同,但是几乎所有的开源程序事实上都是自由软件。

  “自由软件”和“开源”基本上指的是同一范围的程序。然而,出于不同的价值观,它们对这些程序的看法大相径庭。自由软件运动为用户的计算自由而战斗;这是一个为自由和公正而战的运动。相反,开源理念重视的是实用优势而不是原则利害。我们因此不赞同开源运动,也不使用开源这个词。…哲学

在这里插入图片描述


glibc

  glibc是GNU发布的libc库,即c运行库。glibc是linux系统中最底层的api,几乎其它任何运行库都会依赖于glibc。glibc除了封装linux操作系统所提供的系统服务外,它本身也提供了许多其它一些必要功能服务的实现。

  这些库提供关键API,包括ISO C11、POSIX。1-2008、BSD、操作系统特定API等。这些API包括诸如open、read、write、malloc、printf、getaddrinfo、dlopen、pthread_create、crypt、login、exit等基本功能。

  该项目大约始于1988年,已有30多年的历史。您可以 在 wiki 上查看完整的项目发布历史记录。

  GNU C 库每 6 个月发布一次。 有关更多信息,请参阅 glibc 源中的NEWS 文件。

  glibc 的当前稳定版本是 2.36,发布于 2022 年 8 月 1 日。
  glibc 的当前开发版本是 2.37,于 2023 年 2 月 1 日左右发布。


  1. 这些关键但枯燥的部件包括 GNU 汇编器(GAS)和连接器(GLD),他们现在都是 GNU Binutils 软件包的一部分,以及 GNU tar,还有其他许多软件。 ↩︎

  2. 比如,Bourne Again SHell(BASH),PostScript 解释器 Ghostscript,和 GNU C库都不是编程工具。GNUCash、GNOME 和 GNU Chess 也不是。 ↩︎

  3. 例如:GNU C库。 ↩︎

  4. 自从本文出版以来,有一个几乎完全自由的类似 Windows 的系统已经开发完成,但是从技术上说,它根本不像 GNU 或 Unix,所以它不影响这个问题。Solaris 内核的大部分都变成了自由软件,但是如果你要根据这些制作一个自由系统,除了要添加内核缺少的部分,你还需要把它添加到 GNU 或 BSD 中去。 ↩︎

  5. 另一方面,自从本文发表之后,GNU C 库已经移植到多个 BSD 内核版本,这就使组合 GNU 系统和这些内核变得直截了当。正如 GNU/Linux 一样,这些也是 GNU 系统的派生版本,而且他们也因此根据内核的不同,被称为,比如,GNU/kFreeBSD 和 GNU/kNetBSD。普通桌面版本用户很难分辨出 GNU/Linux 和 GNU/*BSD。 ↩︎

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值