来自:知乎,作者:默然

链接:https://www.zhihu.com/question/63187737/answer/1415937231

他是谁,Linus!

林纳斯・本纳第克特・托瓦兹(Linus Benedict Torvalds, 1969 年~),著名的电脑程序员。Linux 内核的发明人及该计划的合作者。

托瓦兹利用个人时间及器材创造出了这套当今全球最流行的操作系统(作业系统)内核之一。

现受聘于开放源代码开发实验室(OSDL:Open Source Development Labs, Inc),全力开发 Linux 内核。

Linus 研究生时期开始写操作系统(大约是 91 年),那时候个人电脑(PC)虽然兴起一些年了,但是还只是小部分程序员和狂热爱好者的玩具。硬件基本上都靠自己攒,软件也是用开源系统各种魔改。

所以普通人根本没有折腾 PC 的动力和理由。

Unix 已经霸占了许多生产力场景,唯一的缺点就是贵,而且很多发行版是闭源的。个人用户根本不要考虑。

那时候 Linus 自己攒了一套 386,但是找不到好用,廉价 / 免费的操作系统用。当时社区里当然也有一票免费且开源的系统,但是要不就是兼容性差,要不就是各种坑,要不就是没软件,总之各种各样的问题。而兼容性是最主要的问题,那时候的 CPU 不像现在的流行架构就那么两种(x86,Arm),那时候叫的上名的架构有十几种,所以操作系统的兼容性是非常重要的。

Linus 开始自学操作系统,发现了一本很好的教材《操作系统:设计与实现》,然后花了一个暑假看完,开始自己写操作系统。

《操作系统:设计与实现》这本书的作者是塔雷鲍姆,写书的时候已经是业界大牛了,他在大学为了教学操作系统,但苦于学生买不起太贵的 Unix 发行版,于是自己写了一个兼容 Unix 标准操作系统(主要是兼容 POSIX 标准),叫 Minix(名字上就很对仗,Universe - mini)。

Minix 这个系统就是为了教学而生的,只要买了这本书,就免费邮寄一份 Minix 源代码。Minix 为了方便教学,保持代码的简洁,塔雷鲍姆拒绝向里面添加太多复杂的功能。所以 Minix 虽然实现得优雅,但是社区的玩家要自己日常用,要魔改很多东西。

对了,Minix 是微内核的。对,微内核的概念存在几十年了,而不是 2019 年诞生的。

微内核的结构非常优雅,文件系统,内存管理,硬件驱动都是以进程形式存在的,而不是内核代码,这意味着驱动挂了不会带着内核一起挂。缺点就是系统调用开销太大,以至于慢到无法接受。所以现在的桌面系统,没有纯微内核的。

对于教学系统来说,微内核不是问题,毕竟是教学,不是生产工具。

社区和 Linus 都很喜欢 Minix,但是都不满足于 Minix 作者因为教学目的而放弃兼容性和可扩展性。于是 Linus 在自己运行 Minix 的 PC 开始了 Linux 的开发。Linux 是宏内核的。

Linux 本来不叫 Linux,Linus 是一个很内向的人,不好意思取这么自恋的名字,但是合作者强烈建议用这个名字,所以就用了,x 代表 unix 的联系(都兼容 POSIX)。

提一句,Unix 不是为开源和免费而生的,而是为商业而生的,但是 Unix 的发展催生了最好的开源环境(比如 GNU)。

注意,这几年的社区,属于『军阀混战』,大家都缺一款好用的免费操作系统,但并不只是 Linus 想到要解决这个问题,理查德斯托曼领导的 GNU 组织在 90 年代就一直酝酿一款免费的操作系统,因为他们的目的是与商业的 Unix 对抗,光有一个 GCC 编译器还不够,还需要有自己的操作系统。

社区里各种技术人员也对 GNU 的操作系统非常期待,但是这玩意儿难产了。直到很久之后,Linux 流行起来后,依然没做出来。

最开始的 Linux 版本,只有几千行代码,现在基础扎实的 CS 本科生,花一段时间都可以看懂,甚至有些 OS 教材就是用 Linux 最初的版本来教学的,比如哈工大李志军的课程。

Linus 从一开始就不断在 minix 论坛上发布自己的进展,搞得论坛上一堆人非常感兴趣,于是许多人加入了开发,这时候 Linus 用邮件接收每个人的代码,然后手动合并。没过一段时间,minix 论坛上就全是讨论 Linux 的了,虽然塔雷鲍姆不是个小气的人,但是这么搞也让塔雷鲍姆很不爽

不久之后 Linus 和塔雷鲍姆之间爆发了一次冲突。

塔雷鲍姆在论坛上写了一篇文章,论证微内核与宏内核的优缺点,其实主要是攻击宏内核,说宏内核除了性能好点,全是缺点,说 Linux 过时了。Linus 是脾气暴躁的人,在技术问题上从不妥协。于是开始嘲讽 minix。Linux 的可移植性比 minix 更好,而且免费开源(minix 需要买书后获得)。

然后来来去去吵了很多次,具体可以看:

https://www.oreilly.com/openbook/opensources/book/appa.html

只是他们两个当时谁也没想到,这次论坛上的口水战会成为几十年后人们依然提起的操作系统之争。

Linus 并不恨塔雷鲍姆,他说后来有一次去了塔雷鲍姆的演讲,完了之后拿着那本书想要塔雷鲍姆的签名,但是没有等到人。

我想 Linus 多少还是尊敬他的,毕竟是自己学习操作系统的领路人。

在 Linus 和社区人员的努力下,通过扩展 GCC 支持 Linux,Linux 也兼容了越来越多的平台。其他各类软件移植到 Linux 也就变得容易了,尤其是在那个许多软件以源代码方式发行的时代,只要有对应平台的编译器,编译一次就算移植好了。

赶上 PC 发展的浪潮,但还不够,毕竟苹果微软不是好对付的,商业操作系统的易用性依然很强。

但是 Linux 开始被各类企业青睐了,因为不是每个企业都有钱花高价买一套 Unix 来用,或者是更贵的软件 + 硬件一体的大型机来用。Linux 让他们看到了省钱的希望。

GNU 开始支持 Linux,Linux 成为了 GNU 的官方操作系统,所以现在叫 GNU/Linux。

可以说 Linux 和 GCC 几乎是最伟大的两个开源项目。它们合起来就更强悍了。

GCC 让软件方便移植,Linux 软件生态就好了,软件生态好了用户就多,用户多了就让硬件公司眼馋,各路硬件公司都为 Linux 开发驱动和各种扩展,以支持自家硬件,这样用户就更多。这个倍增效应是很强的。

Linus 在项目达到一定规模后就不再亲自写代码了,主要是合并代码,毕竟全球那么多人提交代码,他一个人审核合并就够忙了,亲自写代码也没时间。

直到有一天他觉得忙不过来了,审核代码会遇到很多傻逼代码和开发者,于是他开发了现在最流行的版本控制工具,git,字面意思就是饭桶。

不得不说,他对操作系统发展方向的把控是精准的。

总结一下,Linux 的成功,以下几个条件必不可少:

  1. Linus 强大的开发能力

  2. Linus 的项目管理能力

  3. Linus 对操作系统发展方向的把控

  4. 一个群雄割据,缺乏免费好用的操作系统的时代。

  5. 一个不仅群雄割据,缺乏免费好用的操作系统,而且程序语言,操作系统理论,编译器技术发展到一定程度,个人 PC 持续发展的时代。

  6. GNU 的系统没做出来

  7. Minix 死守着『教育』不放

  8. GNU 的支持

  9. 全世界硬件厂商的支持

  10. 全世界软件厂商的支持

  11. 全世界开源开发者的巨大贡献

再总结一下,一个人的命运,当然要靠自我奋斗,但也要考虑到历史的进程。

关注微信公众号:互联网架构师,在后台回复:2T,可以获取我整理的教程,都是干货。

猜你喜欢

1、GitHub 标星 3.2w!史上最全技术人员面试手册!FackBoo发起和总结

2、如何才能成为优秀的架构师?

3、从零开始搭建创业公司后台技术栈

4、程序员一般可以从什么平台接私活?

5、37岁程序员被裁,120天没找到工作,无奈去小公司,结果懵了...

6、滴滴业务中台构建实践,首次曝光

7、不认命,从10年流水线工人,到谷歌上班的程序媛,一位湖南妹子的励志故事

8、15张图看懂瞎忙和高效的区别

9、2T架构师学习资料干货分享


http://www.taodudu.cc/news/show-1749900.html

相关文章:

  • 阿里开源代码质量检测工具!
  • Swagger 3.0 官方 starter 诞生,野生的可以扔了!
  • 独家下载 | 《Redis+Nginx+设计模式+Spring全家桶+Dubbo》,附 PDF 架构书籍 下载
  • 分布式服务的幂等性设计,值得学习!
  • 循序渐进,一文详解微服务架构!
  • Java 8 异步 API、循环、日期,用好提高生产力!
  • Java 8 中的 Map 骚操作,学习下
  • Spring Boot + PageHelper 实现分页,总结得很全了!
  • 面试遇Spark,别怂!
  • Java 会是未来第一编程语言吗?
  • RabbitMQ 线上事故!慌的一批,脑袋一片空白……
  • 本以为用的MyBatis框架就万无一失了,没想到还是被黑客注入了,我真的无语了!...
  • 如何学会阅读源码,看这篇就够了!
  • 你向 MySQL 插入 100万 条数据用了多久?
  • 程序员需知的 58 个网站!个个经典
  • 两年经验拿到蚂蚁/头条 Offer(面经分享)
  • 微信团队分享:微信支付代码重构以及软件架构上的思考
  • Elasticsearch 最佳实践!
  • 太赞了!终于有人把怎么在IDEA中使用Java热部署插件JRebel讲清楚了...
  • 利用Github探测发现特斯拉API请求漏洞
  • 你用过Mybatis的动态SQL后,就知道写SQL有多爽了!
  • CTO:不要在代码中写 set/get 方法了,逮一次罚款...
  • 这款工具不用手写一行代码就能做出网站!
  • 蚂蚁金服二面,竟然被问到事务的基本原理?
  • v2ex热帖:面了几个程序员(3-5年),发现他们对MySQL的distinct关键字有误解......
  • 为什么 Eureka 比 ZooKeeper 更适合做注册中心?
  • 我的天!你竟然不会用IDEA远程调试Tomcat...
  • Cglib 如何实现多重代理?
  • 为了满足自己的好奇心,搞了一个业余项目耍,没想到还给我带来了$3000的收入......
  • MySQL 的慢 SQL 怎么优化?

Linux!为何他一人就写出这么强的系统,中国却做不出来?相关推荐

  1. 知乎 高级操作系统_知乎高赞:Linux!为何他一人就写出这么强的系统,中国却做不出来?...

    林纳斯・本纳第克特・托瓦兹(Linus Benedict Torvalds, 1969 年-),著名的电脑程序员.Linux 内核的发明人及该计划的合作者. 托瓦兹利用个人时间及器材创造出了这套当今全 ...

  2. Linux!为何他一人就写出这么强的系统?

    公众号关注 "大鱼机器人" 设为 "星标",重磅干货,第一时间送达! 作者:默然 整理:张巧龙 他是谁,Linus! 林纳斯·本纳第克特·托瓦兹(Linus B ...

  3. 为何 Linus 一个人就能写出这么强的系统?

    为何 Linus 一个人就能写出这么强的系统,我们却做不出来? 要想回答这个问题,必须得回到Linux诞生之时去看一看. Linus的技术 现在能手搓操作系统的人确实很多,可是如果我们穿越到80年代末 ...

  4. 为何 Linus 一个人就能写出这么强的系统,国人却做不出来?

    点上方蓝色"菜鸟学Python",选"星标"公众号 重磅干货,第一时间送到 转自:默然 + Coldwings(知乎) www.zhihu.com/questi ...

  5. 为何 Linus 一个人就能写出这么强的系统,中国却做不出来?

    点击上方 "程序员小乐"关注, 星标或置顶一起成长 后台回复"大礼包"有惊喜礼包! 关注订阅号「程序员小乐」,收看更多精彩内容 每日英文 Memories, b ...

  6. php自己写配置项,创建配置文件 用PHP写出自己的BLOG系统 2

    先看看效果图 创建前文件界面 创建配置文件后界面,会提示不能重复安装 下面就上代码吧,html界面的代码就不上了,直接上PHP代码吧 复制代码代码如下: /* FILE:install.php Aut ...

  7. 计算机网络 课后习题2-14 试写出下列英文缩写的全文,并做简单的解释。

    2-14 试写出下列英文缩写的全文,并做简单的解释. FDM(Frequency Division Multiplexing) 频分多路复用,也叫分频多任务,是一种将多路基带信号调制到不同频率载波上再 ...

  8. linux php不能写文件内容,php 在linux系统下写出文件问题

    最近写了一个简单的生成文件,服务器用的linux 但是在将文件写出到路径的时候就会写出一个其他的文件夹 其中一些代码如下 define("paddy",dirname(__FILE ...

  9. 如何写出健壮的代码?

    简介:关于代码的健壮性,其重要性不言而喻.那么如何才能写出健壮的代码?阿里文娱技术专家长统将从防御式编程.如何正确使用异常和 DRY 原则等三个方面,并结合代码实例,分享自己的看法心得,希望对同学们有 ...

  10. 如何写出健壮和优雅的代码?

    阿里妹导读:关于代码的健壮性,其重要性不言而喻.那么如何才能写出健壮的代码?阿里文娱技术专家长统将从防御式编程.如何正确使用异常和 DRY 原则等三个方面,并结合代码实例,分享自己的看法心得,希望对同 ...

最新文章

  1. 深度学习vs机器学习 | 这些本质区别你知道多少?
  2. fp5139应用电路图_四款l6599d经典应用电路图详解
  3. vue These dependencies were not found: * core-js/modules/es.array.iterator in ./node_modules/@babe
  4. 使用wireshark+ssh+tcpdump远程抓包
  5. python3.6安装pip3_python3安装pip3的实例步骤
  6. Python快速计算Fibonacci数列中第n项的方法
  7. 清空image画布并改变大小填充背景色
  8. 解决发http get请求的时候不成功,出现android.os.NetworkOnMainThreadException的异常
  9. Delphi LiveBinds组件
  10. 如果想对控制反转和依赖注入有更深入的理解
  11. Atitit.eclise的ide特性-------abt 编译
  12. 详细推导波特图增益和相位曲线
  13. 消息模板取数据的高阶使用说明
  14. 使用 TiUP 部署 DM 集群
  15. 关于内存地址和内存空间的理解
  16. 绑定点击事件调用百度微信分享
  17. iOS Technical Support 苹果技术支持
  18. bzoj4998 星球联盟
  19. 错误页面不暴漏,显示到一个漂亮页面
  20. 线性代数系列(1)行列式

热门文章

  1. 如何用iMazing备份和恢复辐射避难所(附工具下载)
  2. [Swift][leetcode] 433. 最小基因变化
  3. 如何更好的优化MySQL数据库
  4. vue教程1-03 v-for循环
  5. 禁止用户用手机浏览时上下滑动
  6. 通过cacti+nagios监控服务器的运行—nagios nrpe
  7. 菜鸟也玩系统安装盘的集成(图文教程)
  8. 服务器磁盘管理 知识点
  9. 「leetcode」234. 回文链表:【数组模拟】【翻转后半部分】详解
  10. UNIX环境高级编程之第5章:标准I/O库