By francis_hao Oct 26,2016

很久很久以前,大概在1965年左右,由贝尔实验室(Bell)、麻省理工学院(MIT)及通用电气公司(GE)共同发起了一个叫做Multics的项目,目的是充分压榨当时的计算机的资源,期望能实现同时提供三百台以上的终端连接。项目本身非常复杂,看不到希望,于是贝尔实验室在1969年左右退出了该项目。(项目最终是成功了,但是这不是重点)

退出项目的贝尔实验室的一个成员,Ken Thompson。时间就稍稍的充裕了一点,于是想玩玩"太空旅游"的游戏消遣下,但为了玩的更舒服,自己就移植了这个游戏到PDP-7上,当然这需要一个操作系统,因为有之前项目的经历,很快就做好了一个简化版的系统Unics,虽然他的目的在游戏上,但是这个系统却在实验室内部广为流传开了。

因为Unics系统是汇编写的,想要再移植到其他机器上很不方便,Thompson和他的同事Ritchie就想用高级语言来重写以下,但是当时最合适的只有B语言,而编译出来的性能并不能满足他们,于是Dennis Ritchie将B语言重新改写成了C语言,并用C语言编写了了Unics内核,改名为UNIX,1973年,UNIX和C语言出现了。

在这之后,UNIX和C首先风靡学术界,其中加州伯克利大学(Berkeley)的Bill Joy,对源码进行了移植并添加了一些工具软件和编译程序,并命名为Berkeley Software Distribution(BSD),Bill Joy也是后来Sun这家公司的创办者之一。除此之外,IBM也有自己的AIX,以及HP,DEC都开发了适合自己机器UNIX的版本

贝尔实验室是隶属于美国电信大厂AT&T公司的,它们的系统名称是System V,因为商业上的考虑,在1979年发行的第七版UNIX收回了版权,并且特别提出"不可对学生提供源码"。因此UNIX的发展到此也告一段落了。

目前被成为纯种的UNIX就是System V和BSD这两套。

时间来到了1984年,同样是伟大的一年,荷兰的一位大学教授为了能在课上教授UNIX并且避免版权的争议,于是自己开始编写一个类UNIX系统Minix,用了两年多的时间才得以完成。同时,在这一年Richard Mathew Stallman(史托曼)发起了GNU项目,并成立了自由软件基金会(Free Software Foundation,FSF),为避免GNU开发的自由软件被其他人利用而成为专利软件,发布了通用公共许可证(General Public License,GPL),GPL强调软件可以自由的地获取、复制、修改与再发行,并继承GPL的授权模式,不可仅单纯销售其软件,也不可修改软件版权。当时GNU开发的几个重要软件

Emacs

GNU C(GCC)

GNU C Library(GLIBC)

Bash shell

1991年, Linus Torvalds在学习了Minix后,觉得Minix还是有一些不足,于是参考Minix自己写了一个操作系统,放在了网上并在BBS上贴了消息,大家可以自由的下载使用,由于一些软件的兼容性问题,他按照POSIX标准修改了部分内核代码,使得linux兼容了UNIX。Linux不久也加入了GNU,作为GNU项目的内核,我们平时所说的Linux操作系统应该是GNU/Linux。(感觉GNU好可怜,风头都被Linux抢了)

目前,GNU/Linux几个比较重要的发行版

Red Hat、Fedora、Mandriva、SuSE、Debian、Slackware、Gentoo、Ubuntu、CentOS

GNU/Linux发布时间线(GNU/Linux Distribution Timeline)可以到这里去看:http://futurist.se/gldt/

截取部分

参考

鸟哥 《鸟哥的Linux私房菜基础学习篇》人民邮电出版社,2010

Linux产生背景的更多相关文章

  1. 『Linux基础 - 2 』操作系统,Linux背景知识和Ubuntu操作系统安装

    这篇笔记记录了以下几个知识点: 1.目前常见的操作系统及分类,虚拟机 2.Linux操作系统背景知识,Windows和Linux两个操作系统的对比 3.在虚拟机中安装Ubuntu系统的详细步骤 OS( ...

  2. Linux常用命令[转]

    在博客的草稿箱里一直有一份"Linux命令"的草稿,记录了一些常用的Linux命令,用于需要的时候查询.由于是出于个人使用的目的,所以这个清单并不完整.今天整理了一下这个清单,调整 ...

  3. Linux进程间通信

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 我们在Linux信号基础中已经说明,信号可以看作一种粗糙的进程间通信(IPC, i ...

  4. Linux用户与“最小权限”原则

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 作为一个Linux用户来说,我们并不需要特别关心下面的机制.但是,当我们去编写一个 ...

  5. Linux文件管理相关命令

    Linux文件管理相关命令   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在了解了Linux文件管理背景知识之后, 我们可以 ...

  6. Linux命令行与命令

    Linux命令行与命令   作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Linux的命令是很重要的工具,也往往是初学者最大的瓶 ...

  7. Linux 的多线程编程的高效开发经验(转)

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  8. Linux 的多线程编程的高效开发经验

    http://www.ibm.com/developerworks/cn/linux/l-cn-mthreadps/ 背景 Linux 平台上的多线程程序开发相对应其他平台(比如 Windows)的多 ...

  9. (转)Linux进程间通信

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 谢谢nonoob纠错 我们在Linux信号基础中已经说明,信号可以看作一种粗糙的进 ...

随机推荐

  1. Could not obtain transaction-synchronized Session for current thread 错误的解决方法!

    BsTable bsTable = new BsTable(); // String time = request.getParameter("date"); String tim ...

  2. Leecode刷题之旅-C语言/python-100相同的树

    /* * @lc app=leetcode.cn id=100 lang=c * * [100] 相同的树 * * https://leetcode-cn.com/problems/same-tree ...

  3. YUM工具使用

    一.yum命令概述: 1.简介: yum命令时在Fedora和RedHat以及SUSE中基于rpm的软件包管理器,它可以使系统管理人员交互和自动化地更细与管理RPM软件包,能够从指定的服务器自动下载R ...

  4. linux c 出错集

    2018.7.8 1.声明结构体时,结构体内部不能赋值.比如 struct student{ char id=0; char score=0; }; 这样大错特错! 2.字符数组 char a[10] ...

  5. Mybatis快速入门指南

    简介 当下越来越多的企业项目架构中,在持久层部分,抛弃了Hibernate框架,而选用Mybatis框架取而代之,旨在更加深入细致的控制和数据库的交互. MyBatis 本是apache的一个开源项目 ...

  6. 关闭 Identity 插入限制

    当为identity列插入时会报错: 仅当使用了列列表并且 IDENTITY_INSERT 为 ON 时,才能为表'xx'中的标识列指定显式值. 但在复制表数据时想带主键一起复制时,这时要设置IDEN ...

  7. jquery框架一点小心得

    下面的小事例 主要实现了 一和按ID查找,并获取元素的 value 或 标签内容和一个去字符串空格的小功能能 假设元素id=“myid”: 获取标签内容$("myid").html ...

  8. 通过调用API在JavaWeb项目中实现证件识别

    本文详细介绍自己如何在JavaWeb项目中通过调用API实现证件识别. 一,Face++使用简介 二,两种方式(图片URL与本地上传)实现证件识别 一,Face++使用简介 Face++旷视人工智能开 ...

  9. Sumsets 递推

    Sumsets Time Limit : 6000/2000ms (Java/Other)   Memory Limit : 32768/32768K (Java/Other) Total Submi ...

  10. ES5新增数组方法(1):filter

    检测数组元素,并返回符合条件所有元素的数组. 1.过滤数组中不符合条件的元素 let arr = [1, 2, 3, 4, 5, 6]; // 方式一 let newArr = arr.filter( ...