GUN与Linux历史

GUN的发起者是Richard Stallman,他是一个著名的黑客。这里的黑客不是指破坏别人系统的黑客,黑客的真正含义是极度热爱编程的人。当年的Unix操作系统有一段时间跟windows一样也要收费了,不提供源码,要花钱购买copy,copy不允许被安装到别人的机器上,跟windows或其余软件的做法如出一辙。
Stallman是一个有理想的人,他想建立一个完全自由的操作系统,公开源码,任何人都可以修改该系统。他给这个操作系统取的名字叫GNU,即GNU is NOT Unix的递归缩写。要提供一个完整的操作系统,需要包含内核、编译器、编辑工具、C库、Shell等等一系列重要组成部件,Stallman开发了Emacs、gcc、gdb等等一系列大牛的东西。。。。;到了1990年左右的时候,GUN社区已经大成气候了,但这时还缺一个内核,Stallman开始开发内核,取名为Hurd,但由于各种原因Hurd被耽误了。这时Linus Torvalds开发了一个linux内核,由于也遵循自由软件之精神,跟GUN完美的融合在一起,终于形成了一个完美的操作系统。革命成功后总要分江山的,从Stallman的观点来看,Linux仅仅是整个GUN项目的一部分,因此我们目前含义上的Linux操作系统应该叫GUN/Linux,这样才能更加贴切的说明GUN和Linux之间的关系,但这个提法没有多少人真正的响应。
下面再来说说C语言的标准,就跟TCP/IP一样,有个ISO标准,还有一个美国标准。C语言也不例外,有个美国标准ANSI C和ISO标准,但事实上各主流编译器厂商遵循的都是ANSI C标准。比较有名的分别是C89(1989年出的标准)、C90(1990年出的标准)、C99(2000年出,采纳了ISO/IEC 9899:1990建议)及最新的C11(2011年出,采纳了ISO/IEC 9899:2011)
上面说的是C,C++也有自己的标准,分别为C++98、C++03、C++11。其中C++98是第一个正式C++标准,C++03是在C++98上面进行了小幅度的修订,C++11则是最新的标准。C++目前主要执行的是ISO标准。标准分为两个部分,一为语言本身的特性、语法等核心内容,另外一部分为标准库,目前C++的标准库涵盖容器、字符串、算法等等一系列内容。C++标准库兼容了C标准库,比如是C++标准库对C库的兼容版本,但里面的变量或函数需要包含在std的namespace下面,也不能完全做到跟C库兼容,因此C++标准库还提供了完全的C库兼容内容,包括了等C库内容。真是由于C++标准里面包含了标准库,因此有些扩充库走在了标准之前,即虽然暂时不是标准,但可能会被合并进下一个标准,因此以technical report的形式出来,比如我们经常看到的std::tr1,就代表这种含义。tr1的内容基本都被合并进入了C++11。
C++还有一个著名的库就是Boost,由于标准的滞后性,在C++98和C++11之间,Java等其它语言取得了长足的发展,Boost提供的各种库功能对于C++的完善和增强起到了巨大的作用。一般来讲,一个新的功能或feature先出现在Boost库,然后进入tr1,有数据统计tr1中有60%的功能来自于boost,然后再通过tr1进入到std。由于Boost社区中有很大一部分人,包括其发起者都是C++标准委员会的成员,因此从Boost到最终进入std这条路是比较顺畅的。
当然,在Linux平台上,我们使用的C++编辑器及标准库,都是GUN社区提供的GCC(GNU Compiler Collection)版本。
C/C++有标准,操作系统其实也有标准,称为POSIX(Portable Operating System Interface for Computing Systems),是由IEEE 和ISO/IEC 开发的一簇标准。该标准是基于现有的UNIX 实践和经验,描述了操作系统的调用服务接口(API),用于保证编制的应用程序可以在源代码一级上在多种操作系统上移植运行。Linux基本上实现了POSIX兼容,但没有参与其认证,Windows部分实现了POSIX。
POSIX除了包含API之外,还包括了C库,即一个操作系统若声称是POSIX兼容的话,不光要满足POSIX的的API接口,同时需要满足C库的接口,C库和API共同组成了系统的调用接口。虽然POSIX是在UNIX的基础上建立起来的,但POSIX并不针对Unix,许多专有的操作系统,都号称自己是POSIX兼容的。
对于Unix操作系统而言,还有一个标准就是The Single Unix Specification(SUS),它是在POSIX基层上的一个超集,包含了比POSIX更多的接口及功能。凡是通过SUS认证的系统,才能号称自己是Unix System。OpenGroup组织拥有UNIX的商标,所有想要贴上Unix商标的系统,必须通过其强制认证。
Unix的起源在Bell实验室,起初是用B语言写的,后来两位Unix创始人发明了C语言,重写了整个Unix系统。这使得Unix的跨平台及迁移能力特别强,因为其不用汇编写的,汇编一般跟目标硬件是绑定的,用C来写隔离了硬件信息,使得迁移时只要修改编译器能让其支持不同平台就可以了。Unix刚刚开始的时候,由于AT&T受到反垄断法的限制,不允许从事跟计算机有关的商业活动,因此Unix是比较开放的,谁要都可以给源代码。Berkeley大学首先看到了Unix的巨大前景,引入到学校并对其进行了大规模的改写、功能的增强,这就是后来的BSD版本。后来BSD版本的创始人离开了学校创办了Sun,他以BSD版本为基础,建立了新的分支,成为Solaris。而Bell实验室后面自己的版本称为了System Release V,简称为SRV版本。这三个版本称为Unix的三大主流派系,其余比如IBM,HP等版本就不说了。到了后来AT&T感觉到了Unix的商机,开始想赚钱了,开始封闭了Unix的版本,不允许学校再对其源码进行传播和改写,并且针对Unix的商业行为都要收取版权费了。也正是这个是RSM开始搞GUN。到后来AT&T跟SUN结成了联盟,跟BSD打起了旷日持久的官司。BSD声称BSD版本的源码几乎没有了Bell实验室的代码,因为经过连续几年的功能改进和重写,原有的代码已经非常少了。这个官司最后不了了之,庭外和解。也正是由于Unix开始对大学封闭,一个非常有名的教授AndrewTanenbaum为了教学目的,开发了一个微小的操作系统Minix。还在上大学的Linus也想写一个内核,其主要参考和学习了Minix的源代码。Linus在写Linux时,做的一个非常正确的决定就是让Linux和Unix保持兼容,即Linux符合POSIX标准,使得Unix上的程序都能够在Linux上面运行起来。
我们经常说的开源软件其free指的是“自由”,而不是免费。因此当Linux出来后,为了用户安装使用方便,同时提供有效的技术支持服务,因此推出了商业的套装操作系统,比如RedHat公司通过rpm进行发布,其包含了linux内核、所有需要的库、各种服务器程序及其自己开发的各种工具。这个套装是收费的,但套装提供的核心组件内容都是遵守开源协议的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值