Linux学习笔记之(1)~Linux有趣的历史概览
献给知道mono,了解Jexus,对.net混搭技术感兴趣的朋友。
1965年,Bell、MIT和GE公司发起Multics计划,目标是实现一个操作系统可以让大型主机实现连接三百个终端的目标。(那个时候的分时操作系统可不像现在。。。)
1969年,Multics计划滞后,资金紧缺,Bell实验室退出该计划,但原本参与Multics计划的人员,却从中得到了一些启发。 Ken Thompson就是其中一位。
据说 Ken Thompson为了移植一套"太空旅游"的游戏,希望研发一套操作系统以满足自己的需求。经过四个星期的奋斗(这厮简直不是人。。),他终于以汇编语言(Assembler)写出了一组核心程序,同时包括一些核心工具程序, 以及一个小小的文件系统。那个系统就是 Unix 的原型! 当时 Thompson 将 Multics 庞大而复杂系统简化了不少,于是同实验室的朋友都戏称这个系统为:Unics。
由于Thompson 写的那个操作系统实在太好用了,所以在贝尔实验室内部广为流传,并且数度经过改版。后来 Thompson 与 Ritchie 合作想将 Unics 改以高阶程序语言来撰写。当时现成的高级程序语言有B语言。 但是由 B 语言所编译出来的核心功能效能不太好。后来 Dennis Ritchie 将 B 语言改写为C语言(换句话说C语言就是这个时候被开发完成的),接着再以C语言重新改写和编译Unics的核心,最后发行出Unix的正式版本。(这群高级黑客。。。)
由于贝尔实验室是隶属二美国电信大厂 AT&T 公司的, 只是 AT&T 当时忙于其他商业活劢,对于Unix并不支持也不排斥。此外,Unix在这个时期的发展着都是贝尔实验室的工程师,这群工程师对程序相当有研究,但是,Unix在当时可不是一般人可以接受的。不过对于学术界的学者来说,Unix真是学者们进行研究的福音,因为程序代码可以改写并且作为学术研究之用啊。
1977年,Unix的重要版本,BSD诞生。
1979年,AT&T 由由于在商业上的考虑,以及在当时现实环境下的思考,于是想将 Unix 的版权收回去。因此, AT&T 在 1979 年发行的第七版 Unix 中,特别提到了不可对学生提供源码的严格限制。同时,也造成 Unix 业界之间的紧张气氛,并且也引爆了很多的商业纠纷~
这是最不爽的是谁呢?教授。想一想,如果没有核心原始码,那举如何教导学生认识 Unix 呢?这问题对于 Andrew Tanenbaum(谭宁邦)教授来说,实在是很伤脑经!不过,学校的课程还得继续,那怎么办?谭宁邦教授于是乎自己动手写了 Minix 这个 Unix Like 的核心程序! 在撰写的过程中,为了避免版权纠纷,谭宁邦完全不看 Unix 核心原始码!(不愧是教授。。。) 并且强调他的inix 必须能够与 Unix 兼容才行!谭宁邦在 1984 年开始撰写核心程序, 到了 1986 年终于完成。称之为Minix(意思为:mini unix)
Minux 操作系统的开发者仅有谭宁邦教授,因为学者很忙啊!加上谭宁邦始终认为 Minix 主要用在教育用途上面, 所以对于 Minix 是点到为止!没错,Minix 是很受欢迎,不过,使用者的要求/需求的声音可能就比较没有办法上升到比较高的地方了!
这个时候是不是Linux就出现了呢,还没有,介绍另一条故事主线。
在谭宁邦教授撰写minix时,同时进行的还有另外一件事。那就是GNU计划。GNU计划是由Richard Mathew Stallman(史托曼)发起,这个计划对于现今的自由软件风潮,具有不可磨灭的作用。
Richard Mathew Stallman(生于 1953 年)从小就很聪明。他在1971 年的时候,进入黑客圈中相当出名的人工智能实验室(AI Lab.),当时的黑客圈对于软件的着眼点几乎都是在『分享』,所以并没有专利方面的困扰, 这个特色对于史托曼影响很大,不过,后来由于管理阶层的问题,导致实验室里优秀黑客离开该实验室, 并进入其他商业公司继续发展优秀的软件。但史托曼不服输,仍然持续在原来的实验室开发新的程序和软件。 后来,他发现到,自己一个人并无法完成所有的工作,于是想要成立一个开放的团队来继续努力。
1983 年以后,因为实验室硬件的更换,使得史托曼无法继续以原有的硬件和操作系统继续自由程序的撰写~ 而且他进一步发现到,过去他所使用的Lisp 操作系统,是麻省理工学院的专利软件, 是无法共享的,这对于想要成立一个开放团体的史托曼是个阻碍。二是他便放弃了 Lisp 这个系统。 后来,他接触到 Unix 这个系统,并且发现,Unix 在理论上与实际上,都可以在不同的机器间进行移植。虽然 Unix 依旧是专利软件, 但至少 Unix 架构上还是比较开放的!于是他开始转而使用 Unix 系统。
1984 年,史托曼开始 GNU 计划, 这个计划的目的是:建立一个自由、开放的 Unix 操作系统(Free Unix)。 但是建立一个操作系统谈何容易啊!而且在当时的 GNU 是仅有自己一个人单打独斗的史托曼~ 这实在太麻烦,但又不想放弃这个计划,那可怎么办啊?
聪明的史托曼干脆反其道而行~『既然操作系统太复杂,我就先写可以在 Unix 上面运行的小程序,这总可以了吧?』在这个想法上, 史托曼开始参考 Unix 上面现有的软件,幵依据这些软件的作用开发出功能相同的软件,在开发期间史托曼绝不看其他软件的原始码, 以避克吃上官司。后来一堆人知道免费的 GNU 软件,开始实际使用后发现与原有的专利软件相比差不了太多,于是便转而使用 GNU 软件, GNU 计划逐渐打开知名度。
虽然 GNU 计划渐渐打开知名度,但是能见度还是不够。这时史托曼又想:不论是什么软件, 都得要事先编译成为事二进制文件(binary program)后才能够执行,如果能够写出一个不错的编译程序,那不就是大家都需要的软件了吗? 因此他便开始撰写 C 程序的编译程序,那就是现在相当有名的 GNU C Compiler(gcc)!(linux上著名的编译器浮出水面咯~!),在撰写过程中,他成立自由软件基金会(FSF, Free Software Foundation)。此外,他还撰写了更多可以被呼叫的 C 函式库(GNU C library),以及可以被使用来操作操作系统的基本接口 BASH shell!
这些都在 1990 年左右完成了!(linux上著名的bash shell又浮出水面了咯~!)
到了 1985 年,为了避克 GNU 所开发的自由软件被其他人所利用而成为专利软件, 所以他与律师草拟了有名的通用公共许可证(General Public License, GPL), 并且称呼他为 copyleft(相对与利软件的 copyright!)(玩git都知道GPL吧,但是不知道有多少人知道这一段历史~)
由于有 GNU 所开发的几个重要软件(比如GCC,Glibc,bash shell)造成后来很多的软件开发者可以藉由这些基础的工具来进行程序开发! 进一步壮大了自由软件团体,这是很重要的。不过,对于 GNU的最初构想 『建立一个自由的 Unix 操作系统』来说,这些优秀的程序是仍无法满足, 因为,当下并没有『自由的 Unix 核心』存在...所以这些软件仍只能在那些专利的 Unix 平台上工作~~一直到 Linux 的出现...
1991 年,芬兰的赫尔辛基大学的的Linus Torvalds 在 BBS 上面贴了一则消息, 宣称他以 bash, gcc 等工具写了一个小小的核心程序,这个核心程序可以在 Intel 的 386 机器上面运作, 让很多人很感兴趣!从此开始了 Linux 不平凡的路程!
Linus Torvalds(托瓦兹, 1969 年出生)的外祖父是赫尔辛基大学的统计学家, 他的外祖父为了让自己的小孙子能够学点东西,所以很小就将托瓦兹带到身边来管理一些微计算机。 在这个时期,托瓦兹接觉了汇编语言(Assembly Language),那是一种直接和芯片对谈的程序语言,也就是所谓的低级语言。必须要很了解硬件的架构,否则很难以汇编语言编写程序的。
在 1988 年间,托瓦兹顺利的进入了赫尔辛基大学,幵选读了计算机科学系。在就学期间,因为学业的需要和自己的兴趣, 托瓦兹接触到了 Unix 这个操作系统。当时整个赫尔辛基叧有一部最新的 Unix 系统,同时仅提供 16 个终端机(terminal)。 早期的计算机仅有主机具有运算功能,terminal 仅负责提供Input/Output 而已。在这种情冴下, 实在很难满满足托瓦兹的需求,因为.....光是等待使用 Unix 的时间,就很耗时~为此,他不禁想到: 『我何不自己搞一部 Unix 来玩?』不过,就如同 Stallman 当年的 GNU 计划一样,要写核心程序,谈何容易~不过,幸运之神并未背离托瓦兹,因为不久之后,他就知道有一个类似 Unix 的系统, 并且和 Unix 完全兼容,还可以在 Intel 386 (就是教科书上的I386咯) 机器上面跑的操作系统, 那就是我们上面提过的,谭宁邦教授为了教育需要而撰写的 Minix 系统!(真的不要小看教授们。。。) 他在购买了最新的 Intel 386 的个人计算机后,就立即安装了 Minix 这个操作系统。 另外,Minix 这个操作系统是有附上原始码的, 所以托瓦兹也经由这个原始码学习到了很多的核心程序的设计概念。
托瓦兹跟在研究Minix的过程中,发现 Minix 虽然真的很棒,但是谭宁邦教授就是不愿意进行功能的加强,导致一堆工程师在操作系统功能上面的欲求不满! 这个时候年轻的托瓦兹就想:『既然如此,那我何不自己来改写一个我想要的操作系统?』 二是他就开始了核心程序的撰写了。
撰写程序需要什么呢?首先需要的是能够进行工作的环境,再来则是可以将原始码编译成为可执行文件的编译秳序。 好在有 GNU 计划提供的 bash 工作环境软件以及 gcc 编译程序等自由软件, 让托瓦兹得以顺利的撰写核心秳序。他参考 Minix 的设计理念和书上的程序代码,然后仔绅研究出 386 个人计算机的性能优化, 然后使用 GNU 的自由软件将核心程序代码不 386 紧紧的结合在一起,最终写出他所需要的核心程序。 而这个小玩意竟然真的可以在 386 上面顺利的跑起来~还可以读取 Minix 的文件系统。 真是太好了!不过还不够,他希望这个程序可以获得大家的一些修改建议, 二是他便将这个核心放置在网绚上提供大家下载,同时在 BBS 上面贴了一则消息:(这就是Linux出现时的宣言吧)
Hello everybody out there using minixI'm doing a (free) operation system (just a hobby,won't be big and professional like gnu) for 386(486) AT clones.I've currently ported bash (1.08) and gcc (1.40), and things seem to work. This implies that i'll get something practical within a few months, and I'd like to know what features most people want. Any suggestions are welcome, but I won't promise I'll implement them :-)
他说,他完成了一个小小的操作系统,这个核心是用在 386 机器上的, 同时,他真的仅是好玩,并不是想要做一个跟 GNU 一样大的计划! 另外,他希望能够得到更多人的建讧与回馈来发展这个操作系统!这个概念跟 Minix 刚好背道而驰。 这则新闻引起很多人的注意,他们也去托瓦兹提供的网站上下载了这个核心来安装。 有趣的是,因为托瓦兹放置核心的那个 FTP 网站的目录为:Linux, 因此,大家便称这个核心为 Linux 了。(此时的 Linux只是现在linux的 kernel)
后续的故事我就不讲了,Linux发展到现在,已经尽人皆知了,另外关于linux的吉祥物,也有个有趣的故事:托瓦兹是因为小时候去动物园被企鹅咬了一口念念不忘, 而正式的linux 2.0推出时,大家要他想一个吉祥物。他在想也想不到什么动物的情况下, 就将这个念念不忘的企鹅当成Linux的吉祥物了。。。
呵呵~大家同乐~
Linux学习笔记之(1)~Linux有趣的历史概览的更多相关文章
- linux学习笔记3:linux的网络配置,rpm包,shell以及samba服务器的使用和安装
1.linux下的shell<linux命令.编辑器和shell编程> (1)shell种类有很多,常用的有三种,在linux可以通过ls -l /bin/*sh 来显示所有已安装的she ...
- Linux学习笔记之查看Linux版本信息
0x00 概述 这里所谓的Linux版本信息,包括Linux内核版本信息和Linux系统版本信息. 0x01 查看Linux内核版本信息 方法1:登陆Linux,在终端输入 cat /proc/ver ...
- 【linux学习笔记之一】linux系统目录结构以及常用系统命令
序 ???这破笔记也要序?? 昨天开始学linux,做好笔记以备日后翻阅 Linux系统目录结构图 bin --主要用于存放二进制文件(如:命令文件) boot--引导目录 dev --设备目录 ...
- Linux学习笔记01—安装LInux系统
1.首先,使用光驱或U盘或你下载的Linux ISO文件进行安装. 界面说明: Install or upgrade an existing system 安装或升级现有的系统 install sys ...
- 好记性比如烂笔头--linux学习笔记7关于linux中的shell脚本编程
之前看的各种面试,貌似都有shell脚本编程,没了解之前感觉很复杂,现在了解了些,没想象中那么难. 逻辑主要是这样的 编写.sh的脚本文件,文件里面的代码,就是在命令行输入的可执行命令的加强版,所谓加 ...
- linux学习笔记4:linux的任务调度,进程管理,mysql的安装和使用,ssh工具的使用,linux网络编程
1.设置任务调度命令crontab 任务调度是指系统在某个时间执行的特定的命令或程序.任务调度分为:1)系统工作:有些重要的工作必须周而复始的执行,如病毒扫描.2)个别用户工作:个别用户可能希望执行某 ...
- linux学习笔记2:linux 下java开发的软件安装
一.java ee开发环境的搭建 1.jdk的安装步骤 (1)首先必须要有安装文件,具体的可以去相关网站上下载,并制作iso文件 (2)将制作的iso文件挂载到linux系统上,并在虚拟机上将iso文 ...
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(下)Samba经典应用案例
五.[Samba应用案例二] 设置Samba共享目录/software,允许用户jack和mary可以通过Windows客户端访问,并具有读写权限. 1.创建目录/software,添加用户jack, ...
- Linux 学习笔记_12_Windows与Linux文件共享服务_1.1_--Samba(上)
Samba简介:在UNIX系统中,Samba是通过服务器消息块协议(SMB)在网络上的计算机之间,共享文件和打印服务的软件包. SMB简介:Server Message Block,SMB协议是一种服 ...
随机推荐
- Oracle 字符集常见字符集及解决方案
Oracle 字符集常见字符集及解决方案 优先级别:alter session>环境变量>注册表>参数文件 一.查看字符集: 1.查询服务端字符集: select userenv(' ...
- HAOI2010 订货
题目链接:戳我 费用流. 将每天分成早上和晚上两个点.源点向早上连容量INF,费用为进货量的边.早上向汇点连容量供货量,费用0.早上向晚上连容量为S,费用为0的边.晚上向第二天早上连容量S,费用0.之 ...
- Python扫描邮件主题,并打印
import imaplib import email from email.header import decode_header import datetime if __name__ == '_ ...
- 线程概要 Java
线程 进程和线程的区别 串行:初期的计算机只能串行执行任务,大量时间等待用户输入 批处理:预先将用户的指令集中成清单,批量串行处理用户指令,仍然无法并发执行 进程:进程独占内存空间,保存各自运行状态, ...
- 最大子段和问题(dp)
最大子段和问题 给出一个整数数组a(正负数都有),如何找出一个连续子数组(可以一个都不取,那么结果为0),使得其中的和最大? 例如:-2,11,-4,13,-5,-2,和最大的子段为:11,-4, ...
- “全栈2019”Java第十章:关键字
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- Linux系统如何迁移至LVM磁盘
今天遇到一个问题,算是比较严重的把.就是要把当前系统转移到 LVM 卷里面去,下面有一些发生过程介绍. 不感兴趣可以直接跳过,看实战部分<如何迁移系统至LVM卷> 朋友今天突然找我,说是要 ...
- Arch下error: signature from "NAME<EMAIL ADD>"
pacman的unknown trust问题错误消息类似于:error: signature from "NAME<EMAIL ADD>" is unknown tru ...
- docker-compose部署mysql配置
docker-compose部署mysql配置文件如下 version: ' services: mysql: image: mysql environment: - MYSQL_ROOT_PASSW ...
- R 拆分EXCEL成多个文件
setwd("C:/Rworkfile") install.packages("readxl") library(readxl) www<-read_ex ...