linux诞生记

xuyiding xuyiding     2022-12-17     359

关键词:

大家好,我叫Linux,是一名计算机的“大管家”,日常工作是指挥CPU、内存、硬盘、键盘、鼠标、显示器等设备有条不紊地运行起来。形象地讲,我是底层硬件与用户沟通的桥梁。用户可以通过我输入命令,我负责对命令进行解释,驱动硬件设备,实现用户要求。

我出生于1991年,是一名标准的90后,我爸是芬兰一位名不见经传的研究生Linus Torvalds。在我3岁(1994年)的时候,我爸准备正式带我出去见见世面,也就是发表Linux正式核心1.0,于是给我造了一个人设——一只名为Tux的企鹅。

我问我爸为啥给我起这个人设,他跟我说:「企鹅代表南极,而南极又是全世界共有的一块陆地,不属于任何国家。也就是说Linux不属于任何商业公司,是全人类每个人都可以分享的」。

(哼!我爸这个大猪蹄子)说实话,我半点都不信我爸说的话,我认为我的出生是一个意外。至于为什么呢?这要追溯到很久以前:

大概在我爷爷那个年代,有一个传奇人物——UNIX,UNIX他爸是AT&T贝尔实验室的。

对,就是那个研发出电话的实验室,因此UNIX的学习成绩非常优秀。后来,UNIX的源代码被各个大学和实验室采用。作为代价,这些机构需要向UNIX他爸(也就是AT&T贝尔实验室)缴纳一定的许可证费用。

 

有一天,加州大学伯克利分校的一个小组照着UNIX的模式也培养了一个学生——伯克利UNIX(Berkeley UNIX),大名BSD。

 

后来UNIX名气越来越大,UNIX他爸向各大机构收取的许可证费用也越来越高,伯克利认为发展BSD的时机到了,就开始将BSD身上与AT&T有关的代码彻底摒除,对外宣称:

 

以后大家用我们家BSD的代码就可以了,只要承认这些成果是我们Berkeley的即可。

这种模式被人们称为:自由可再发行的代码,即自由使用、自由学习和修改、自由分发、自由创建衍生版。

 

为了更好地交代我的出生,我还要提到一个人——Minix,她生于1987年,跟Unix有点像,被人称为一种基于微内核架构的类Unix计算机操作系统。Minix的一生可以说是完全在象牙塔里度过。

因为早期很多大学机构都在使用Unix,但是后来Unix他爸改变了政策,决定将Unix源代码私有化,也就是在大学中不再能使用Unix源代码。教授为了能在课堂上教授学生操作系统运作的实务细节,决定在不使用任何AT&T的源代码前提下,自行开发与Unix兼容的操作系统,以避免版权上的争议。并以小型Unix(mini-Unix)命名,简称Minix。

后来,有使用者发现了Minix的漏洞,建议用补丁完善,但是被Minix的创造者拒绝,以至于保持了其最原始的风范。(当然,这是后话)

而我爸,起初买了一台属于他自己的电脑,当时人们使用的大多是DOS操作系统,他的电脑也不例外。为了满足他日常读写新闻和邮件的需求,于是他想要开发一个属于自己的操作系统。

由于我爸并不喜欢自己电脑上的DOS系统,他看上了隔壁家乖巧的姐姐——Minix。所以他就想:

既然Minix这么棒、这么稳定,那我何不将它移植到个人计算机上呢?

于是我爸读取了Unix核心,并且去除较为繁复的核心程序,将它改写成可以适用于一般个人计算机的x86系统上面。然后,我就是在他这样误打误撞下才诞生的。随后我爸慷慨地把源代码上传到互联网上,并把这个操作系统命名为“Linux”,意思是“Linus的Minix”。

就问:这样赤裸裸地喜欢人家Minix,把我Linux放在何地?

这还不算,我一出门大家就悄悄议论:哇,Linux和Unix好像。

也不得不承认,我确实是Unix的重新实现。因为我爸在创造我的时候,借鉴了Unix的技术和用户界面。另一方面,我爸在创造我的时候也融入了很多独创的技术进行改进,因此,从开发形式和最终产生的源代码来看,我并不属于BSD和AT&T风格的Unix中的任何一种。严格来说,我是有别于Unix的另一种操作系统。

当然,虽然我一直吐槽我爸是个大猪蹄子,但是,不得不说,他在培养方式上真的是独出心裁。从我诞生之初,我爸就把我放到了网上,并发布了一个帖子,大概是:

 

我写了一个操作系统的内核,但是还不够完善,你们可以随意使用并且不收费,也可以帮助我一起修改。

帖子发出后引起了强烈的反响,大家对这个产生了浓烈的兴趣。

至于为何大家对“培养”我产生如此强烈的兴趣,不得不再提到一个人——Richard Stallman(自由软件之父),他认为软件是全人类的智慧结晶,不应该为某一家公司服务。

在八十年代,Richard Stallman发起了自由软件运动,即GUN运动,并发布了GPL协议,这得到了很多人的认同。 而我是遵循GPL协议的,这样一来,爱好编程的“爸爸们”在研究我的时候就不至于惹上官司。

 

这使得我的成长在互联网上所有技术人员的注视和关怀下度过,可以说是吃着百家饭长大。

于是,超多的人向社区贡献源代码,而且不向我们索取酬劳,同时他们也可以使用我和我的成果。由此,造成了一种全球性的文化现象,他们把这种文化叫做——开源。

因此,Linux有很多版本,但是严格说来,Linux实际上只定义了一个操作系统内核,这个内核由kernel.org 负责维护。不同的企业和组织在此基础上开发了一系列辅助软件,打包发布自己的“发行版本”。

各种发行版本可以“非常不同”,却是建立在同一个基础之上的。正是由于“爸爸们”不断地努力和改进,也使得我在某种程度上取得了不凡的成绩。值得骄傲的是,2011年,世界排名前500的超级计算机中,有92.4%(462台)的计算机都采用了我作为操作系统。

 

技术图片

▲ 超级计算机

为何我能够取得如此傲人的成绩呢?这跟我身上的独特气质——开源有很大关系。

与占领操作系统大半江山的Windows相比,我的源代码在互联网是可以公开获得的,当使用者发现漏洞后,就可以直接从源代码层面进行漏洞修补 。因此, 有很多需要代码安全审计的用户喜欢选择我,我现在已经在全球范围内受到了热烈追捧。

怎么样,我是不是很厉害?在此,不得不衷心感谢我的亲爸Linus Torvalds,虽然我老说你是个大猪蹄子,但是不得不说,你为人类创造了一个操作系统界的奇迹。

javascript世界万物诞生记

JavaScript世界万物诞生记来源 https://zhuanlan.zhihu.com/p/22989691一.无中生有起初,什么都没有。造物主说:没有东西本身也是一种东西啊,于是就有了null: 现在我们要造点儿东西出来。但是没有原料怎么办?有一个声音说:... 查看详情

javascript世界万物诞生记

作者:manxisuo链接:https://zhuanlan.zhihu.com/p/22989691来源:知乎著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。一.无中生有起初,什么都没有。造物主说:没有东西本身也是一种东西啊,于是就有了null... 查看详情

mpeg诞生记

点击上方“LiveVideoStack”关注我们作者|LeonardoChiariglione翻译|Alex技术审校 | 李忠、张贤国MPEG 视 野#004#纯从逻辑上来讲,MPEG本不应该存在。 20世纪80年代,媒体标准化这个“银河帝国”被牢牢掌握在ITU(视频通信和... 查看详情

rtp诞生记

...者之一RonFrederick将为我们讲述这个如此重要的协议是如何诞生的。01—前因1992年10月,我开始试验SunVideoPix的图像采集卡,因为我打算基于IP组播写一个网络视频会议工具。该工具以vat(由L 查看详情

漫画|揭密微信诞生记

据民间流传微信的诞生源于张小龙因得一扫地高僧指点,才有了微信的诞生,而这其中也少不了程序员们的付出,一起来看看它的故事吧~本期漫画灵感来源于《微信第1行代码曝光!》文章,部分情节仅为民间流传或虚构。篇... 查看详情

(转载)javascript世界万物诞生记

一.无中生有起初,什么都没有。造物主说:没有东西本身也是一种东西啊,于是就有了null:现在我们要造点儿东西出来。但是没有原料怎么办?有一个声音说:不是有null嘛?另一个声音说:可是null代表无啊。造物主说:那就... 查看详情

jquery诞生记-原理与机制

一、看似偶然的东西实际是必然会发生的我大学时候在图书馆翻过一本很破旧的书,讲生物理论的,主要内容就是探讨生命的产生是偶然还是必然。里面很多亚里士多德都看不懂的公式计算什么的,还有模拟原始地球环境出现了... 查看详情

bug诞生记——临时变量栈变量导致的双杀(代码片段)

    这是《bug诞生记》的第一篇文章。本来想起个文艺点的名字,比如《Satan(撒旦)来了》,但是最后还是想让这系列的重心放在“bug的产生过程”和“缺失的知识点”上,于是就有了本系列这个稍微中性... 查看详情

我为什么还要造轮子?monk.ui诞生记

...端数据交互的问题,导致数据绑定非常难!,所以Monk.UI诞生了。 Monk.UI目前只是一个表单美化工具,非常小巧,适合PC使用 预览地址:http://www.baisoft.org/public/monkui 查看详情

leafage诞生记(二nuxt.js如何在组件和页面请求数据)

本文个人博客地址:https://www.abeille.top/posts/detail/213489UI上一篇创建了前端工程,接下来开始写代码。因为初始化项目,只是最小的一些基本依赖,再开发中,需要一些第三方的库来支持,比如样式/组件库。在开发Leafage网站的过... 查看详情

bug诞生记——不定长参数隐藏的类型问题(代码片段)

    这个bug的诞生源于项目中使用了一个开源C库。由于对该C库API不熟悉,一个不起眼的错误调用,导致一系列诡异的问题。最终经过调试,我们发现发生了内存覆盖问题。为了直达问题根节,我将问题代码简化... 查看详情

bug诞生记——不定长参数隐藏的类型问题(代码片段)

    这个bug的诞生源于项目中使用了一个开源C库。由于对该C库API不熟悉,一个不起眼的错误调用,导致一系列诡异的问题。最终经过调试,我们发现发生了内存覆盖问题。为了直达问题根节,我将问题代码简化... 查看详情

一个高扩展高可用高负载的应用架构的诞生记(原创)

本文希望通过实现一个用户中心的应用来模拟一个高可用、高扩展、高性能的架构环境。目录结构1、需求分析2、功能设计3、技术要求4、技术准备1)git版本控制2) 前端css/vue3)node4)nginx5)memcache/redis6)mysql/mongodb/hbase7)docker&nb... 查看详情

bug诞生记——信号(signal)处理导致死锁(代码片段)

    这个bug源于项目中一个诡异的现象:代码层面没有明显的锁的问题,但是执行时发生了死锁一样的表现。我把业务逻辑简化为:父进程一直维持一个子进程。(转载请指明出于breaksoftware的csdn博客)   ... 查看详情

bug诞生记——信号(signal)处理导致死锁(代码片段)

    这个bug源于项目中一个诡异的现象:代码层面没有明显的锁的问题,但是执行时发生了死锁一样的表现。我把业务逻辑简化为:父进程一直维持一个子进程。(转载请指明出于breaksoftware的csdn博客)   ... 查看详情

bug诞生记——const_cast引发只读数据区域写违例(代码片段)

    对于C++这种强类型的语言,明确的类型既带来了执行的高效,又让错误的发生提前到编译期。所以像const这类体现设计者意图的关键字,可以隐性的透露给我们它描述的对象的使用边界。它是我们的朋友&#x... 查看详情

天时地利人和—一个传奇操作系统的诞生记

“无意中发现了一个巨牛的人工智能教程,忍不住分享一下给大家。教程不仅是零基础,通俗易懂,而且非常风趣幽默,像看小说一样!觉得太牛了,所以分享给大家。点这里可以跳转到教程。”在科学技... 查看详情

bug诞生记——隐蔽的指针偏移计算导致的数据错乱(代码片段)

    C++语言为了兼容C语言,做了很多设计方面的考量。但是有些兼容设计产生了不清晰的认识。本文就将讨论一个因为认知不清晰而导致的bug。(转载请指明出于breaksoftware的csdn博客)classBasepublic:Base()=defau... 查看详情