linus
linus的成就
- 在全球排名前100万的服务器里,96%运行在linux上,只有1.9%运行在windows上。
- 谷歌也是运行在linux上。安卓是基于linux开发的
- 大部分互联网公司使用的LAMP组合,其中的L就代表linux
- 世界上500个最快的超级计算机(包括神威·太湖之光)全部运行在linux上
- 用了十天时间开发出了git
可以说没有linux就没有互联网,那么这一切怎么发生的呢?
Linux的诞生
上大学的linus最期待的课是《C语言与Unix》。如果你熟读之前的内容就知道C语言和Unix是一奶同胞。当时开发出Unix的汤普森和里奇为方便开发,在bcpl的基础上开发出了b语言,不过b语言的性能低到爆炸,里奇决定再抢救一下,一顿魔改之后,C语言诞生了。并且用C把Unix重新写了一遍。从那个时候起C与Unix就像双胞胎一样形影不离。
安德鲁塔莱鲍姆写的《操作系统设计与实现》。为了让学生更好的理解操作系统,他在书中介绍了自己开发的精简版Unix:minix。看了这本书以后,linux感觉自己被打通了任督二脉。
有一天拉斯把linus拉到赫尔辛基理工大学听讲座。演讲的人正是自由软件的祖师爷Richard Stallman。
他的志向是开发一个比Unix更牛的系统,名字叫做GNU。(GNU 是一个自由的操作系统,它的全称是 GNU's Not Unix,意思是GNU不是Unix。这个名字有点拗口,但它反映了GNU的初衷:创建一个完全自由、可移植的类Unix操作系统。)
他也是一个极端的自由软件主义者,他认为所有的软件都应该是免费开源的。他提到的GPL提起了linus的兴趣,并且后来Linux就是GPL2.0开源协议发布的
为了玩上Unix,他下单买了Minix。linux每天都要用终端仿真连接学校电脑的主机,但Minix自带的仿真就是个渣渣,于是他就是想自己写一个。
为了让这个项目不那么无趣,他决定在裸硬件上直接编程,据说这样可以更好的理解386的工作原理。不过这很麻烦,不光要处理CPU,还有键盘读取,屏幕写入,modem读取,一看这个工作量有点儿放了,纠结了一阵之后,他还是成功战胜了作性决定接受这个挑战。但捣鼓了一段时间后,终端已经可以正常的收发邮件和看新闻了,但还不能上传和下载文件,再想实现这一步就要开发磁盘驱动和文件系统。这俩都是大工程,不是小打小闹。
本来linus到这儿都打住不做了,毕竟自己一个人就是mission impossible,所以他就回学校去听了一段课,结果发现学校这都教的啥呀?我早就学过了,所以就回家了,但是一直无所事事,待着也挺没劲,而且芬兰的冬天也很漫长,思来想去他还是觉得撸代码有意思,于是把窗户帘一拉在小黑屋里搞起。
他爸妈也是心大,知道Linux成名之前压根儿就不知道儿子天天在屋子里干嘛。他妈还觉得这孩子特别省心,时不时往屋里扔点儿面条就行了。
好不容易把上传下载的功能做了Linus还是不满意,又把其他的所有驱动都写了一遍,但是你光有驱动也是不行的,还没有管理CPU进程 内存 文件系统 的模块。这样作为一个整体,系统才能运转起来。
除了这项工作的呢就是内核。实现了内核后,这个小小的终端仿真已经进化成了一个系统的雏形。
然而到这儿Linux只是个单机的演示版本,真正的操作系统还要有自己的系统调用,所有软件都是通过系统调用来实现功能的,没有系统调用,别人就没法儿给Linux写软件。
那么都要实现哪些系统调用Linux?转念一想,unix实现了哪些我就实现哪些呗,费了九牛二虎之力终于找到了一本厚厚的POSIX说明书,知道了要实现哪些调用,接下来的就是怎么实现。这四个月的时间里Linux查了成吨的资料,结果一共也没实现几个,这就让他有点儿emo了。如果当时有姑娘约她出去,他肯定就不继续干了。
然而陪着他的依然只有那台386。休息了几天后Linux又坐不住了,琢磨着怎么搞定shell。
shell是一个命令解释器,当你输入命令时,他就把命令翻译成相应的系统调用,传达给内核操作系统的结构就像洋葱一样,一层套一层的。命令从外部一层层的传到最里边儿的硬件,硬件处理完了再把结果一层层的发送出去。
linus在网上闲逛时。偶然发现了一个免费的shell,这个shell最开始是一个叫bourne的人写的,后来有人做了个翻版就叫bourne again shell,这就是我们熟知的bash。
又经过了四个月的艰苦奋斗,终于成功整合到了这个新操作系统里。
就这样一路到了9月Linus把完整功能的Linux安装到了一个新分区里。
接下来就该给系统起名字了。他一共起了两个名字,一个叫freak表示一个书呆子做的Unix,另一个叫Linux表示linus开发的Unix。他把打包的系统文件改名为freak发到了ftp服务器,当时的ftp管理员觉得你这是瞧谁不起。就改用了小名儿Linux。
1991年的9月7号0.01版的Linux正式发布,Linux就跑到了Linux论坛里发了个帖子,说我做了个免费的minix支持386的多线程特性,而且没有任何代码限制,大家可以下载玩玩,欢迎提反馈意见。
人们还是挺喜欢这个只有1万多行的小玩意儿的,虽然他不是把人家的工作文件搞没了,就是把人家的硬盘给占满了。
仅仅解决这些不痛不痒的小bug是很难让天才保持热情的。
本来Linux都打算做下个项目,结果12月的一天拨号程序没有Modem去拨号,而是用硬盘去拨号。那可是硬盘啊,整个分区都被格式化。
Linus一看,这不是正是Minix的分区吗?这下好了,还要把拔拔插插那16张软盘一遍,要么用Linux做开发环境?于是Linux 选择在Linux上开发Linux。帅不帅?这个叫一边开飞机一边造飞机。
越来越多的人在自己的电脑上安了Linux,不过当时知道Linux的人也仅限Linux和unix论坛的人。
直到有一个人说他的内存只有2M。Linux的编译器就要用1M。问Linux能不能把编译器做小点Linux随便捣鼓了两下,整出了一个虚拟内存功能。他也没在意,就把这个功能放到新版本里。
凭着这个功能Linux干趴了一众收费的操作系统,从此一炮而红,成了1992年电脑圈的大事件,媒体也蜂拥而至。Linux登上了《时代杂志》的封面。
Git的诞生
05年的一天linus收到了一封邮件。发件人是版本控制软件bitkeeper的作者,他不想让Linux继续白嫖了。之前因为bittkeeper,linus还被人吐槽过,因为bitkeeper是收费的闭源软件。但那是觉得人家做的好,直接用不就完了吗?干嘛重复造轮子呢?不过现在人家下逐客令了,那我就自己写一个了,于是他就用了十天时间做出了git。
2008年诞生了github,在他的帮助下,大洋彼岸的另一端移动互联网一片欣欣向荣。
2007开源开发实验室与自由标准组织合并成了Linux基金会。
linus狂喷c++
有一个微软工程师说 git应该用cpp开发,这一下子点燃了linus的怒火。他说
很多不合格的程序员都喜欢用c++,我要把喜欢c++而不是c的人从我的项目里都踢出去。c++最后做出来的就是一堆可怕的,难以维护的垃圾。没有垃圾回收机制,应用软件编程很鸡肋。而系统编程时, c++的特性不能说毫无帮助,只能说在帮倒忙。c++是狗屎,c++根本没啥设计,只不过在c上面加了些渣滓而已。new关键字也很蠢,c++根本解决不了c语言的问题,它只会让事情变得更糟。那些不喜欢c语言的人,可以去找有垃圾回收机制的或简化内存管理的语言,但这个语言绝对不是c++ c++解决的都是错误的问题。说用c++重写内核的人都太幼稚了。c本来就是更偏向硬件语言,所以性能才会如此强大。而这种低级语言压根就不该做垃圾回收和内存管理的工作。如果你需要有着这种功能的高级语言,只要不是c++ 哪个都行
看linus的原话,就应该知道他不是在喷cpp ,他是在喷垃圾程序员用cpp写可以带bug的程序跑起来, 他说c就很好。c自带过滤垃圾程序员的功能,因为垃圾程序员用c写不出程序,但我们知道cpp拥有众多拥护,结果linus就迎来了潮水般的口诛笔伐。
单挑微软
我跟微软工程师交流过,他们非常喜欢在linux上工作,而不是windows上。电脑就好像空调,一旦你打开了窗口(windows) 空调就没用了。
如果你写了程序,把windows弄崩溃了,别人只会告诉你,买windows送系统崩溃。对于某些公司来说,用户界面好看不好看是最重要的,程序能不能运行是次要的。
我从来没想过成为微软的威胁,因为我压根就不把微软放在眼里。
f* you Nvidia
在阿尔托大学的讲座上,一个女生说英伟达在Linux版驱动中不支持独显核显切换,问Linus怎么看?他随即回应道,英伟达跟他接触过的最烂的公司和最麻烦的公司,然后名场面就来了。
不过也正是因为这次事件,就是英伟达在后续的驱动中加入了切换功能,Linux也反映过自己的暴躁言论,但他就是对脑子不那么聪明的人缺乏耐心,他的原话是
我想成为一个好人,少骂人,鼓励人们成长,而不是告诉他们是白痴。很抱歉,我试过了,但是不好使。
不聪明的程序员总是在担心他们的代码,而真正聪明的程序员关心的是数据结构和它们之间的关系。
