Linux:一位猫奴的意外产物
作者:Vamei,严禁任何形式转载。
1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘。他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿。
Linus Torvalds
这台电脑价格高达3500美元,对于任何一个芬兰家庭来说都是奢侈品。更何况,托瓦兹的父母没有太多闲钱来赞助儿子。托瓦兹把奖学金和零用钱加在一起,付了电脑三分之二的钱。剩下的三分之一,要在接下来的三年里分期支付。拿到电脑之后,托瓦兹连着几个月都耗在上面。不过,托瓦兹的母亲对此并没有太大意见,只是偶尔会提醒托瓦兹吃饭。倒是妹妹萨拉会在隔壁咆哮,逼着正在拨号上网的哥哥让出电话线。
由于父母早年离异,所以托瓦兹大部分时间都是跟着母亲长大的。他的外公是一位统计学教授,因此有一台工作用的Commodore电脑。这个品牌的电脑和BBC Micro一样,都曾在欧洲流行。不知是为了培养外孙,还是纯粹的偷懒,外公经常会口述程序,让托瓦兹敲入到电脑里。年幼的托瓦兹很快发现,这个其貌不扬的“盒子”并不介意用户是个儿童。只要输入程序,电脑就会根据指令工作,不多也不少。除了服兵役的那将近一年的时间,托瓦兹把大部分时间都花在电脑编程上。进了赫尔辛基大学时,托瓦兹已经有了丰富的编程经验。
托瓦兹写了一个终端模拟程序。通过这个程序,托瓦兹可以通过电话线连接到学校机房的电脑,再通过机房的电脑在互联网上收发邮件。在90年代初,电子邮件还是少数“极客”才能玩得转的高科技,一般人甚至不知道电子邮件是什么。因此,当托瓦兹向妹妹展示终端模拟器时,萨拉一脸茫然,完全不知道哥哥在拽什么。托瓦兹很难向妹妹解释清楚这个程序厉害的地方。这个程序是用汇编语言写的,可以直接和电脑硬件互动。换句话说,对于一台没有安装类似Windows这样的操作系统的电脑,托瓦兹可以让它运行《魔兽争霸》。当然,托瓦兹实现的功能要比游戏简单得多。下一步,他把Unix操作系统下常用的文本交互器bash嫁接到自己的终端模拟程序上。有了这个文本交互界面,家里的电脑就像学校里的Unix一样好用。
当然,如果能直接安装Unix,托瓦兹不用费这么大的周折。Unix是一个操作系统程序,比Windows年长了20岁。贝尔实验室的肯·汤普森想在一台PDP-11型号的电脑上玩一款叫做《太空旅行》的游戏,就编写了最初的Unix。和之前的操作相比,Unix非常简单。计算机的各项活动,无论用户交互,还是编译程序,都组织成结构相似而在运行上相互独立的“进程”。进程之间可以通过文本形式相互通信,从而能协同工作。计算机上的数据,从程序文本,到配置信息,再到硬件接口,都储存成文件。Unix与其说是一个程序,倒不如说是一套关于操作系统的哲学。肯·汤普森就好像计算机世界里的牛顿,把计算机可以实现的复杂活动分解成几条简单的物理定律。Unix流行了将近半个世纪,并影响了非Unix阵营的其他操作系统,如微软的MS-DOS和Windows。
Unix之父与PDP-11
拥有贝尔实验室的AT&T(美国电信电报公司)有政府禁令在身,不能涉足软件业务。因此AT&T允许教育机构免费Unix。因此,Unix系统在大学里传播得很快。肯·汤普森的母校伯克利大学推出了一个更加好用的BSD(Berkeley Software Distribution)版本。这些计算机系的大学生用惯了Unix系统,所以步入社会之后,也把Unix系统推广到IT公司。Unix成为黄金万两的生意,并衍生出各种各样的商用版本。赫尔辛基大学也在刚刚购置的小型机安装了Unix系统,可以让十多个学生同时在线使用。托瓦兹就是这台电脑的常客之一,并很快喜欢上Unix。他不但花了一整个夏天去钻研操作系统的经典教材,还学会了用来开发Unix程序的C语言。只可惜,Unix对于家用并不免费,一个最便宜的Unix系统也要数千美元。已经负债累累的托瓦兹可负担不起。
移植好bash之后,托瓦兹已经能在自家电脑上体验到使用Unix的痛快。他很快又给自己的电脑安装了C语言编译器gcc。由于Unix下的大部分应用程序都是用C编写,托瓦兹意识到,自己已经打开了通往Unix世界的大门。他又一次充满了创造者的骄傲。
1991年8月,托瓦兹在Minix新闻组上发帖:
各位Minix用户,大家好。我正在制作一个(免费)的操作系统(只是作为爱好,不会像gnu那样专业)。这个项目从4月就启动了,并将要准备好。我想听听大家的意见,特别是大家喜欢或不喜欢Minix的地方,因为我的操作系统将会和Minix有些像。我正在移植bash和gcc。这意味着接下来的几个月里,我将获得一些实质性的成果…… 此外,它没有用Minix的代码……
在那个时候,Minix是操作系统世界里的明星。编写Minix的是生活在阿姆斯特丹自由大学的一位计算机教授,安德鲁·塔能鲍姆。为了教学方便,他仿照Unix编写了Minix这款操作系统,并开放源代码,以便学生更好地理解操作系统的原理。他编著的操作系统教材,也非常畅销。托瓦兹就是借着那本700多页的教科书,才摸清操作系统的原理。多年之后,托瓦兹在阿姆斯特丹自由大学演讲时,曾拿着同一本书想获得塔能鲍姆的签名。很不巧,塔能鲍姆正好不在城里。
Minix并不如Unix成熟,但比起托瓦兹的操作系统还是强很多。Minix已经有不少拥趸。还有不少高手给Minix编写补丁,已经大大提高了Minix的可用性。托瓦兹自己工作时,主要用的就是Minix。因此,托瓦兹在Minix新闻组里发布自己的操作系统,看起来就像是闯入瓷器店惹事的公牛。意外的是,托瓦兹在新闻组里获得了不少支持。发帖不久,就有Minix用户向Linus反馈,说明自己想要的功能。有的用户还为托瓦兹建立FTP服务器,用于上传正式发布的操作系统代码。Minix用户看起来有些薄情背,但这应该归咎于塔能鲍姆。他有言在先,不希望人们拓展他的源代码。即使有热心用户编写了改进程序,塔能鲍姆也不会把这些改进加入到正式发行版本里。因此,人们只能编写非正式的补丁并私下交流。Minix的发展陷入停滞。
相反,托瓦兹采用了GPL协议。任何用户都可以自由地使用并修改GPL协议的代码,但基于此修改出的代码,也必须遵照GPL协议开放,供他人使用或修改。这个行动充满了理想主义的味道,意味着托瓦兹不能从自己编写的程序获得直接的经济利益。考虑到托瓦兹的父母都曾是学生运动领袖,他的父亲还是芬兰左翼的重要成员,有人疑心是家庭的文化让托瓦兹轻视物质。但按照托瓦兹自己的解释,他用GPL的唯一原因,就是懒。有了GPL协议,爱好者们可以毫无顾忌地贡献代码。他只要从中择优,加入到正式版本中,就可以省了自己去开发的麻烦。这一“诡计”确实奏效。爱好者们不但贡献了代码,还凑钱帮托瓦兹付了电脑的欠债。他们还用托瓦兹的名字“林纳斯”命名这个操作系统为“Linux”。最后一个字母,按照Unix的传统改成字母“x”。
圈内的很多人都不看好Linux。在Linux大约一年后,Unix之父肯·汤姆普森和Minix之父安德鲁·塔能鲍姆公开批评Linux的实现方式。塔能鲍姆甚至是说,如果托瓦兹是他班上的学生,那这个学生的成绩一定不及格。开源运动领袖艾里克·雷蒙后来回忆说,当他阅读Linux内核代码时,他有每一个理由相信Linux会最终失败。显然,这些人低估了社区爱好者的重要性。即便托瓦兹不是最天才的程序员,但社区的力量能让任何天才程序员都跟不上Linux的速度。另一方面,托瓦兹在保持开源理想的同时,又有足够的实用精神。Linux采用了GPL协议,但托瓦兹并不鼓吹“自由软件就是好”的绝对论断。在他看来,无论是哪一种力量,商业也好,非商业也要好,只有能促进Linux的发展,就都可以为Linux所用。在遇到问题时,托瓦兹也不会陷入“完美系统”的洁癖。他愿意接受一个不甚完美的方案,然后快速迭代,不断地优化方案。同样采用GPL协议、但更富有理想主义的GNU项目也在内核开发上败给了Linux。
1995年,用于HTTP服务的Apache服务器发布。互联网服务商发现,可以把同样免费的Linux和Apache服务器结合在一起,廉价地搭建网站所需的服务器。此时的Linux已经以疯狂的速度演进了很多年,已经足够强健,完全可以胜任网站服务器的工作。内容丰富的网页取代电邮和新闻组,成为互联网的主流。基于这套技术,最早的一批互联网公司建立起来,如雅虎、亚马逊、以及中国的搜狐。“dot-com"热潮给Linux打了一剂强心针,托瓦兹的照片出现在福布斯的封面。在网络服务器市场上,Linux彻底打败微软的Windows NT,成为大多数互联网公司的选择。网景、甲骨文、IBM等公司开始支持Linux系统,甚至同意把自己的部分代码公开,贡献给开源运动。
《福布斯》杂志的封面
来自芬兰的穷小子打败了统治天下的比尔·盖茨,这本来就是话题性十足的故事线。更多人感到困惑,免费的Linux究竟怎么赚钱。记者们抢着给托瓦兹打电话,想要获得独家采访的机会。他们意外地发现,接电话的并非助手,而是这个传奇英雄本人。事实上,托瓦兹也从来没有私人助手。尽管Linux项目有数万的参与者,但这些参与者组织成了不同的项目。托瓦兹真正需要打交道的,只是几十个项目领导人。另一方面,尽管领导着人类历史上规模最大的软件合作项目,甚至坐拥着Linux这个商标,托瓦兹并不富有。1997年,托瓦兹带着妻子和刚出生的女儿迁居美国,他的账户只有几千美元的余额。在美国的第一个晚上,托瓦兹不得不和妻子挤在充气床垫上。
不过,如果托瓦兹愿意,他完全可以凭自己的身份获得更好的生活。微软的史蒂夫·巴尔默对Linux极为警惕,而史蒂夫·乔布斯曾亲自邀请托瓦兹加盟苹果。红帽Linux和VA Linux这样提供Linux服务和支持的公司也成立起来,获得令人瞩目的成功。托瓦兹接受了这些公司表达感谢而赠送给他的期权,却不愿到其中任何一家任职。托瓦兹乐意看到Linux在商业上的突破。他只是在做个人选择时极为谨慎,免得自己因为商业利益而无法保持中立。
不过,生活总是给托瓦兹带来意外的惊喜。随着红帽Linux和VA Linux的上市,托瓦兹手里的股票价值一度高达2000万美元。但托瓦兹还是住在普通的房子里,把大部分时间花在维护Linux上。真正令托瓦兹骄傲的是,社会彻底改变了对像他这样的极客的看法。极客不再是70-80年代留着长胡子穿着拖鞋整日躲在黑暗房间里的怪胎。相反,人们把他们看做技术先锋。大公司愿意出高薪聘用参与Linux核心项目的程序员。除了高超的技术,这些为开源社区做贡献的极客们还能带来一种已经改变了历史的软件开发方式。
如今的技术头条被人工智能、手机、虚拟现实、物联网占据,托瓦兹的Linux似乎有些过时。但IBM的超级电脑、谷歌的安卓手机、虚拟现实和物联网的嵌入式设备上,都运行着Linux系统。就连树莓派这样的超小型电脑,都可以毫无困难地运行Linux。在四分之一个世纪的时间里,Linux已经成为技术世界不可或缺的基础设施。如今,托瓦兹的女儿已经大学毕业,他的猫也从白色的Randi变成了黑色的Minky。但这位极客的大部分时间,都还是对着黑色的屏幕,全神贯注地写程序。
Linux:一位猫奴的意外产物的更多相关文章
- Linux:一位猫奴的意外逆袭
作者:Vamei,严禁任何形式转载. 1991年年中,林纳斯·托瓦兹(Linus Torvalds)在自己房间里敲着键盘.他全神贯注地盯着14寸的黑色屏幕,都没感觉到自己的小猫Randi在扒自己的裤腿 ...
- 手把手VirtualBox虚拟机下安装rhel6.4 linux 64位系统详细文档
下面演示安装的是在VirtualBox里安装rhel 6.4 linux 64位系统. 一.VirtualBOX 版本. 二.虚拟机的配置. 1.现在开始演示安装,一起从零开始.点击“新建”,创建新的 ...
- Linux 64位下一键安装scipy等科学计算环境
Linux 64位下一键安装scipy等科学计算环境 采用scipy.org的各种方法试过了,安装还是失败.找到了一键式安装包Anaconda,基本python要用到的库都齐了,而且还可以选择安装到其 ...
- Linux 权限位详解
1. Linux 权限位 对于权限,有点绕,因为文件的权限和目录的权限是有一些区别的. 在Linux中,有5种权限,分别是,r.w.x.s.t. 可读权限:r 可写权限:w 可执行权限:x Setui ...
- 在Linux 64位系统下使用hugepage
首先,为什么要介绍/使用HugePage? 在步入正题之前,先讲一个非常普遍的数据库性能问题. 众所周知,Oracle数据库使用共享内存(SGA)来管理可以共享的一些资源;比如shared pool中 ...
- Linux特殊位SUID、SGID、SBIT
Linux特殊位SUID.SGID.SBIT 前言 Linux中的文件权限一般有x.w.r,在某个情况下有需要用到s.t,即特殊位. 进程运行时能够访问哪些资源或文件,不取决于进程文件的属主属组,而是 ...
- Oracle Linux(64位)安装64位Oracle10g遇到ins_ctx.mk问题
在Oracle Linux Server Release 5.7上安装64位Oracle 10g 时,遇到如下问题: Error in invoking target 'install' of mak ...
- linux 64位调用
linux系统中64位汇编和32位汇编的系统调用主要有以下不同:(1)系统调用号不同.比如x86中sys_write是4,sys_exit是1:而x86_64中sys_write是1, sys_exi ...
- 浅析Linux 64位系统虚拟地址和物理地址的映射及验证方法
虚拟内存 先简单介绍一下操作系统中为什么会有虚拟地址和物理地址的区别.因为Linux中有进程的概念,那么每个进程都有自己的独立的地址空间. 现在的操作系统都是64bit的,也就是说如果在用户态的进程中 ...
随机推荐
- SQL SERVER - 谈死锁的监控分析解决思路
1 背景 1.1 报警情况 最近整理笔记,打算全部迁移到EVERNOTE.整理到锁这一部分,里边刚好有个自己记录下来的案例,重新整理分享下给大家. 某日中午,收到报警短信,DB死锁异常,单分钟死锁12 ...
- iOS 原生的 UIButton 点击事件是不允许带多参数的,唯一的一个参数就是默认UIButton本身 那么我们该怎么实现传递多个参数的点击事件呢?
UIButton *btn = // create the button objc_setAssociatedObject(btn, "firstObject", someObje ...
- 关于Response.redirect和Response.End出现线程中止异常的处理
最近做了一个项目其中使用了多线程获取POST过来的数据后再Response回复,但由于是多线程,在Response.End()的时候报出了异常: 2013-10-20 10:05:31,606 res ...
- li点击弹出序号
<body> <ul> <li>test1</li> <li>test2</li> <li>test3</li ...
- 如何更新 OpenStack 组件?- 每天5分钟玩转 OpenStack(161)
这是 OpenStack 实施经验分享系列的第 11 篇. 本节教大家更新 OpenStack 组件的方法.请注意,是更新(Update)而不是升级(Upgrade).更新是给组件打补丁,版本不变:而 ...
- div 宽高相等2种实现方式
div.wh{ background:#ff0;width:50%;position:relative;display:inline-block; } div.wh:before{ content: ...
- 学习H5一周随笔
H5学习也已经进行了一个周了,除了学习过程中的乱哄哄的脑子,对H5初学者(我)常见的问题有了如下见解. 1.初学者在建立新的Html文件之后,有时候会把 <meta charset=" ...
- Insertion Sort List Leetcode
Sort a linked list using insertion sort. 这个题我巧妙的设置了一个临时头结点 class Solution { public: ListNode* insert ...
- CentOS7搭建Confluence Wiki
前言 在艾佳生活实习时,有三款团队协作系统特别喜欢:Wiki.Jira和Jenkins.对于Jenkins的搭建,之前<自动部署工具Jenkins>有过记录.这次,搭建一个Wiki,作为知 ...
- js提交表单错误:document.form.submit() is not a function
今天在写JS时,遇上这么个错误:"document.form.submit() is not a function",经过一番搜索,最终找到了修复方法. 这个错误一般是由于表单&l ...