热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

学习笔记-Linux与UNIX的关系

学习笔记-Linux与UNIX的关系--Linux通用技术-Linux技术与应用信息,下面是详情阅读。
  在学习Linux的过程中,一度对Linux与UNIX的关系很是感到困惑,曾认为Linux是UNIX的一个分支版本。但后来通过阅读一些资料后,终于对Linux与UNIX的关系有了一个大概的认识。有趣的是,这种关系如果仔细描述出来,是一个有趣的故事。当然,那样将是长遍大论的,所以本文只会将我所阅读以及所认识到的Linux与UNIX的关系做一个提炼,让有兴趣的人能够用比较短的时间来了解这些。

  By the way:本文中的部分文字引用自《鸟哥的Linux私房菜-基础学习篇》(作者:鸟哥 人民邮电出版社 第二版)以及《Linux宝典》(作者:Christopher Negus 人民邮电出版社),下面将不再一一说明。

  一、1965年前后,Bell(贝尔实验室)、MIT(麻省理工学院)以及GE(通用电器公司)共同发起Multics计划,目的是为了强化大型机系统,使一台大型机能提供更多的终端接入。

  二、Multics因进度落后,资金短缺,宣告失败。贝尔实验室退出该计划。

  三、贝尔实验室的的一个参与Multics计划的成员的Ken Thompson,1969年前后,利用汇编语言写了一个操作系统核心程序及一些工具,以及一个小小的文件系统。该程序将原有的Multics宠大复杂的系统简化了许多。实验室的中同事戏称该系统为Unics,也即后来的UNIX。

  四、因Unics非常好用,在贝尔实验室中广为流传。1973年,Unics使用B语言改写。再后来由Dennis Ritchie将B语言重新改写为C语言后又再次使用C语言将Unics改写,并发布了正式版的UNIX。

  五、因为贝尔实验室隶属于AT&T,AT&T将UNIX源代码以像征意义的费用被授权给了加州伯克利大学(Berkeley)。

  六、伯利克大学的Bill Joy在获取了UNIX的核心源码后,着手修改成适合自己机器的版本,并同时增加了很多工具软件与编译程序,最终将其命名为Berkeley Software Distribution (BSD)。(附:Bill Joy后来创办了Sun公司,所以Sun公司是以BSD发展的核心来进行自己的商业UNIX版本的发展的。后来可以安装在x86硬件架构上的FreeBSD,也是BSD的改版。)同时很多商业公司开始了UNIX操作系统的开发(AT&T的System V、IBM的AIX等等),使得这些经过再次开发的UNIX能够运行在自己的主机上。

  七、AT&T想要将UNIX版本收回,于是在1979的UNIX第七版中特别提到了“不可对学生提供源码”的严格限制。

  九、1979年的版权申明给一些在学校教UNIX相关知识的教授造成了相当大的影响。于是Andrew Tanenbaum(谭邦宁)教授尝试自己动手编写Minix这个“类UNIX(UNIX Like)的核心程序。为了避免版权纠纷,谭邦宁完全不看UNIX核心源码,并强调与UNIX的兼容性,终于于1986年完成,并以开源的形式发布。

  十、1984年,Richard Mathew Stallman(史夫曼)发起GNU(目的是为了建立一个自由开放的UNIX操作系统)计划,该计划开始的初期,史夫曼编写了一些与原来UNIX中的一些版权软件功能相似的软件,为了不吃官司,他绝对不看版权软件的源码。这些软件编写后,史夫曼公布源码。

  十一、因为对Minix功能的不满,芬兰大学生Torvalds(托瓦兹)参考Minix的设计理念(并没有使用Minix的源码)使用GUN中的一些软件开发了Linux核心代码,第一个对外发布的代码版本号是0.02。(某种程度上因为托瓦兹使用了GUN中的一些开发工具,从而奠定了Linux本身的开源的基础)

  十二、为了让Linux兼容UNIX,托瓦兹严格参考了POSIX(针对UNIX以及一些软件运行时的标准规范),所以Linux成为了一种“类UNIX”的系统。

  从上面的描述中可以看到,Linux与UNIX之间的渊源颇深,但不完全是一个软件不同版本的问题,代码在从UNIX到MiniX,再到Linux之间经过了两次改写,最为关键的是这两次改写,作者均没有看源代码,所以成就了现在Linux的版权独立,从而也为开源铺平了道路。

  如果不考虑UNIX与Linux的相互独立性,大致将UNIX到Linux之间出现的事件排一序的话,我想大致如下:

  Minix→Linux
  BSD
  Multics→Unics→UNIX→System V
  AIX
  ……
推荐阅读
  • 学习SLAM的女生,很酷
    本文介绍了学习SLAM的女生的故事,她们选择SLAM作为研究方向,面临各种学习挑战,但坚持不懈,最终获得成功。文章鼓励未来想走科研道路的女生勇敢追求自己的梦想,同时提到了一位正在英国攻读硕士学位的女生与SLAM结缘的经历。 ... [详细]
  • Python语法上的区别及注意事项
    本文介绍了Python2x和Python3x在语法上的区别,包括print语句的变化、除法运算结果的不同、raw_input函数的替代、class写法的变化等。同时还介绍了Python脚本的解释程序的指定方法,以及在不同版本的Python中如何执行脚本。对于想要学习Python的人来说,本文提供了一些注意事项和技巧。 ... [详细]
  • 本文介绍了Linux Shell中括号和整数扩展的使用方法,包括命令组、命令替换、初始化数组以及算术表达式和逻辑判断的相关内容。括号中的命令将会在新开的子shell中顺序执行,括号中的变量不能被脚本余下的部分使用。命令替换可以用于将命令的标准输出作为另一个命令的输入。括号中的运算符和表达式符合C语言运算规则,可以用在整数扩展中进行算术计算和逻辑判断。 ... [详细]
  • 恶意软件分析的最佳编程语言及其应用
    本文介绍了学习恶意软件分析和逆向工程领域时最适合的编程语言,并重点讨论了Python的优点。Python是一种解释型、多用途的语言,具有可读性高、可快速开发、易于学习的特点。作者分享了在本地恶意软件分析中使用Python的经验,包括快速复制恶意软件组件以更好地理解其工作。此外,作者还提到了Python的跨平台优势,使得在不同操作系统上运行代码变得更加方便。 ... [详细]
  • 本文介绍了Python高级网络编程及TCP/IP协议簇的OSI七层模型。首先简单介绍了七层模型的各层及其封装解封装过程。然后讨论了程序开发中涉及到的网络通信内容,主要包括TCP协议、UDP协议和IPV4协议。最后还介绍了socket编程、聊天socket实现、远程执行命令、上传文件、socketserver及其源码分析等相关内容。 ... [详细]
  • 本文介绍了使用PHP实现断点续传乱序合并文件的方法和源码。由于网络原因,文件需要分割成多个部分发送,因此无法按顺序接收。文章中提供了merge2.php的源码,通过使用shuffle函数打乱文件读取顺序,实现了乱序合并文件的功能。同时,还介绍了filesize、glob、unlink、fopen等相关函数的使用。阅读本文可以了解如何使用PHP实现断点续传乱序合并文件的具体步骤。 ... [详细]
  • 字符常量与变量的定义及使用方法
    本文介绍了字符常量与变量的定义及使用方法,包括字符常量的定义、值和转义字符的表示方法;字符串常量的定义和结束标志;字符型数据与整型数据的区别;字符型变量的定义和内存占用;字符串变量的运算方法。同时提醒注意字符串常量不可赋值给字符型变量,需使用数组或指针进行存取。 ... [详细]
  • OO第一单元自白:简单多项式导函数的设计与bug分析
    本文介绍了作者在学习OO的第一次作业中所遇到的问题及其解决方案。作者通过建立Multinomial和Monomial两个类来实现多项式和单项式,并通过append方法将单项式组合为多项式,并在此过程中合并同类项。作者还介绍了单项式和多项式的求导方法,并解释了如何利用正则表达式提取各个单项式并进行求导。同时,作者还对自己在输入合法性判断上的不足进行了bug分析,指出了自己在处理指数情况时出现的问题,并总结了被hack的原因。 ... [详细]
  • 31.项目部署
    目录1一些概念1.1项目部署1.2WSGI1.3uWSGI1.4Nginx2安装环境与迁移项目2.1项目内容2.2项目配置2.2.1DEBUG2.2.2STAT ... [详细]
  • 这篇文章主要介绍了Python拼接字符串的七种方式,包括使用%、format()、join()、f-string等方法。每种方法都有其特点和限制,通过本文的介绍可以帮助读者更好地理解和运用字符串拼接的技巧。 ... [详细]
  • 本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ... [详细]
  • 树莓派语音控制的配置方法和步骤
    本文介绍了在树莓派上实现语音控制的配置方法和步骤。首先感谢博主Eoman的帮助,文章参考了他的内容。树莓派的配置需要通过sudo raspi-config进行,然后使用Eoman的控制方法,即安装wiringPi库并编写控制引脚的脚本。具体的安装步骤和脚本编写方法在文章中详细介绍。 ... [详细]
  • C语言判断正整数能否被整除的程序
    本文介绍了使用C语言编写的判断正整数能否被整除的程序,包括输入一个三位正整数,判断是否能被3整除且至少包含数字3的方法。同时还介绍了使用qsort函数进行快速排序的算法。 ... [详细]
  • 本文介绍了使用Python解析C语言结构体的方法,包括定义基本类型和结构体类型的字典,并提供了一个示例代码,展示了如何解析C语言结构体。 ... [详细]
  • C语言常量与变量的深入理解及其影响
    本文深入讲解了C语言中常量与变量的概念及其深入实质,强调了对常量和变量的理解对于学习指针等后续内容的重要性。详细介绍了常量的分类和特点,以及变量的定义和分类。同时指出了常量和变量在程序中的作用及其对内存空间的影响,类似于const关键字的只读属性。此外,还提及了常量和变量在实际应用中可能出现的问题,如段错误和野指针。 ... [详细]
author-avatar
dazhi20
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有