写点什么

对话 Linus:Linux 25 岁啦

  • 2016-05-11
  • 本文字数:4123 字

    阅读完需:约 14 分钟

作为芬兰 Helsinki 大学计算机科学系的学生,Linus Torvalds 在 1991 年编写了 Linux 操作系统的原始内核。很快,Linux 就发展成为了一个全特征的操作系统,并开始运行在智能手机、服务器和各种设备中。在本次通过 e-mail 进行的访谈中,Torvalds 回顾了过去 25 年的历程,并展望了未来 25 年可能的发展。

Stephen Cass(以下简称 S.C.):相比于 25 年前,现在你已经是一个经验非常丰富的程序员了。哪件事情是你现在知道,且最想让年轻时的自己尽早学习到的呢?

Linus Torvalds(以下简称 L.T.):实际上,我一直在说一个事实:我当时并不知道我所做的工作会引起以后 Linux 的很多成功。如果我当时就一直知道了我现在所知道的事情,我可能没有勇气去编写我自己的操作系统了:我需要一定的“天真”才会认为自己能完成这项工作。我真的认为,这份“天真”是启动该项目并取得成功所必须的东西。不理解这个项目最终的形态以及在对其前景没有很多预期的时候着手去做其实是帮了很大的忙的。

我不知道该项目最终的结果形态意味着,我会比知道其最终形态抱有更加开放的心态,能够接受被人的建议或影响。我认为,这种开放的心态使得其他人加入该项目更加容易,也更加有趣。人们不用一定要采用别人的版本,他们可以自己的需要进行修改。我认为这激励了很多人的参与。

S.C.:有没有一个在 Linux 发展早起所做的技术决策是你现在觉得最好当时选择另外一个方向的呢?

L.T.:有关错误的技术决策的事,好处的你总是可以回退。当然,错误的决策会让人觉得泄气,而且很多时间和努力都白费了。但同时,它最终也不是完全浪费了:肯定有一个原因导致你做了错误的决定,而意识到该错误就教会了你一些东西。我并不是说,错误的决策是一件好事——但我并不会在做决策时特别担心。我宁可选择一个在以后证明为错误的决策,也不愿意在可能的选择中徘徊很久。

在 2001 年左右,我们在 Linux 虚拟内存子系统方面就遇到了一个非常有名的坏情况。当时,大家对于采用那种方法起了很大的争执,而且我们在某些内存配置方面存在很大的问题。系统的主要组件在大家认为的“稳定”时期的时候被清除。人们非常不开心。

但是,现在回头去看,虚拟内存子系统最终工作很好。当时,它给人们带来了非常大的痛苦。如果能够不再中期的时候再进行逆转,那就最好了。但是,它并不是灾难性的。

S.C.:随着 Linux 的快速发展,从一个开发到多人参与的情况的转变是什么呢?

L.T.:对于我而言,的确存在两个明显的转变。一个发生在大概 1992 年,我当时开始采用别的开发人员的补丁,而不再自己重写。另外一个则比较晚,当时我自己亲自应用所有的补丁已经非常痛苦,我不得不学会信任其他的维护者。

第一步要相对容易很多——由于 Linux 内核编程的大约头六个月都是我一个人完成的,当人们开始把补丁发给我的时候,我并不习惯采用这些补丁。所以,我会亲自查看该补丁,确认编程人员的目的,然后我会重写编写代码——有时,代码类似;有时,我会采用完全不同的方法进行实现。

这种情况很快就难以持续了。在我们开始足够信任别人以致我不再重写根据其想法编写自己的代码后不久,我就开始直接应用他们的补丁。但是,我仍然会经常对补丁进行修改。这么多年过去,我已经非常擅长阅读并修改补丁,以至于我能够一直修改直至睡着。而且这种模式在很多年内都工作的非常好。

但是,正是因为“采用别人的补丁”这种模式多年来工作正常,我一直都非常适应这种模式。对我而言,改变这种模式非常痛苦。在 2000 年左右,我们在内核发展方面有了很大的进展(此时,Linux 开始被商业玩家所注意)。人们开始抱怨我的工作流成为了系统发展的障碍,并提出“Linus 不与时俱进”。但是,我们并没有好的工具来进行源代码的管理。

这最终导致了我们将 BitKeeper 引入近来,作为源代码的维护工具。尽管人们是在若干年以后因为 brouhaha 的版权问题而记住 BitKeeper 的,它的确是完成我们的工作的最合适的工具。而且,它教会了我源码控制是如何工作的以及我们如何能够根据一个更加分布式的开发模型进行合作。

当然,关于分布式源码管理的东西都是在 2005 年从 Git 学习到的。Git 已经明显成为了了源码控制方面最成功的项目之一,而且它让更多人学习到了分布式控制的优势。我们在 2000 年左右内核方面所经历的痛苦最终成为了一个很大的教训,但是这中间的过程不可置疑是痛苦的。

S.C.:还存在像分布式源码控制这样的其他项目,使得你想自己去从头开始完成的吗?

L.T.:没有。而且我也真的希望不会有。我的所有大项目都来源于“天哪,没有人替我完成这种工作!”的时候。当别人能够替我完成工作时,我肯定会比较开心我可以不必花费时间来自己完成。相比于自己解决问题,我肯定会选择躺在沙滩的大型遮阳伞下喝喝冰镇饮料。

好吧,其实我在撒谎。过一段时间,我肯定会开始厌烦这种生活。我非常开心能够 Linux 项目的陪伴——它非常有趣,而且充满了刺激。但同时,开始新的项目肯定是需要艰辛努力的。

S.C.:你为什么认为 Linux 绝对不会成为主流桌面电脑的主要操作系统?

L.T.:好吧,我还努力在推进这项工作。我认为,即使 Chromebooks 只是一个非常有限的桌面环境而非传统的全 Linux 工作站模型,它的表现越来越好。

关于 Linux 为什么不能成为桌面电脑的主流操作系统,原因有很多方面。其中一个最大的原因就是用户的惰性。在计算的世界中,桌面电脑是一个非常独特的存在:它既非常个性化(如果你需要使用计算机进行工作,你基本上每天都会和它进行交互),又非常复杂化(很多其他的计算环境不会在这些方面不会如此复杂)。

以智能手机为例。这是计算技术的直接应用场景,而且深入人们的日常生活(多亏 Android 系统,Linux 在智能手机上工作的非常好)。桌面电脑由于很多历史原因要复杂很多。它是一个非常难以进入的市场。与手机更加不同的是,人们有很多自己已经习惯的应用程序和工作流,这就导致很多人非常不愿意切换到别的操作系统。选择将预装的操作系统替换为其他操作系统的人数非常低。

同时,即使整个通用桌面电脑的市场都在一定程度上存在凋零,在很多任务的更加专业化也更加简单的平台仍然是一个非常重要的市场。例如,智能手机、平板电脑和 Chromebooks 就是例子,它们都是非完全的通用环境。

S.C.:Linux 的哪些应用场景最让你觉得吃惊?

L.T.:最近吗?只从我认为 Linux 已经基本成为新的硬件或服务建模的默认环境后,就没有那么多了。如果你有一些古怪的、特殊的设备,或者你正在设计一些新的互联网框架,这些东西没有采用 Linux 作为操作系统会真的让我觉得吃惊。

但是,当我将 Linux 视为工作站或服务器的操作系统时,这些设备的应用领域的确曾让我非常吃惊。在一些早期的 Linux 会议中,人们会演示运行 Linux 的气泵或冰箱。当时,我感觉非常意外。当第一个 TiVo 面世的时候,它运行 Linux 的事实就像“你可以将现场直播回退”一样有趣。

S.C.:Linux 现在面对的最大挑战是什么?

L.T.:内核现在实际上工作的非常好。人们开始担心事情可能变得太复杂以至于超出人类理解和修复漏洞的能力。这是一个非常好理解的担忧。但同时,我们有很多聪明的编程人员参与其中。系统已经发展的如此巨大和复杂以及很多人都依赖 Linux 的事实使得我们提前开始准备很多事情。让系统变得功能丰富并做出很大的、能接受的改变是非常觉有挑战性的。因此,我不会将其称为令人感觉快乐的工作。但是,我认为,内核的发展目前十分正常。很多其他拥有这些资源的的开源项目可能已经都失败了。

这就意味着,我们在内核方面的一个持续性的挑战就是硬件种类很多。我们支持很多不同的硬件——基本上肯定比其他任何操作系统都要多。但是,基本上每天都会有新的硬件面世。尤其是在嵌入式领域,硬件平台的开发周期通常要短很多(在中国,你可以在 1-2 月内创建一个新的手机平台)。在这种情况下,硬件和系统的整合就要艰难很多。好消息是很多硬件厂商也都在努力。过去,这些都不可能。

S.C.:你现在感兴趣的技术趋势是什么?有什么让你气馁的吗?

L.T.:我一直对新的硬件,尤其是 CPU,非常感兴趣。这就是我为什么一开始研究自己的操作系统,并看到新的平台后非常开心。当然,新的平台很多时候都是现有硬件的简单修改版本(而且,我也相信这就是技术发展应该走的路线)。但是,这就是我努力去追踪的东西。

从更高的层次来看,但并非局限于我所参与的领域,观察 AI 最终如何发生的是非常有趣的。以前,AI 的技术都停留在 20 年前。但它也一直超前 20 年。而且,我对于人们过去做的基于规则的模型不感兴趣。

现在,神经网络终于开启了人工智能的新篇章。我发现,神经网络非常有趣。这不是一个我正在参与或将来会参与的领域,但它的确让人觉得非常有趣。与疯狂的 LISP 和 Prolog 语言方法不同,我们所知的神经网络都是从自然界而来。而且,我觉得,AI 或许会像很多人所想的那样,最终会出现。一点也不觉得意外!

S.C.:你认为 Linux 在其 50 年庆的时候仍然会处于活跃开发阶段吗?你认为 Linux 系统在 25 年后应该怎样呢?

L.T.:我不是一个非常有远见的人。我是一个非常枯燥的宅男工程师,而且我一直努力将精力放在具体事务上。我会让其他人在预测 5 年、10 或 2 年后 Linux 的未来——我认为,只要我们尽力做好每天的工作,未来也一定会非常美好。

如果 25 年后的社会经过了大的变革或变得与现在非常不同,肯定会非常有趣。但是,有很多基本的问题,无论是在 Linux 之前、真正的操作系统刚刚出现的 19 世纪 60 年代,还是在 25 年后的未来,肯定和现在一样。我怀疑,我们在过去 50 年已经看到了很多发生在计算中的出乎意料的变化将来不会再发生。和软件工程师一样,硬件工程师已经学会了什么可以工作、什么不可以工作。

当然,神经网络等将改变整个世界,但你不会来对其进行“编程”。人工智能可以学习。他们是模糊的。我可以非常肯定的保证,他们不会替换传统的计算模型。人们希望比机器聪明,但又希望机器能够按照要求完成应该完成的工作。因此,我们老的计算模式不会消失,它将会得到增强。

对原文感兴趣的读者请点击继续阅读


感谢魏星对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-05-11 17:021584
用户头像

发布了 268 篇内容, 共 112.7 次阅读, 收获喜欢 23 次。

关注

评论

发布
暂无评论
发现更多内容

HTTP 长连接和短连接

看山

TCP/IP HTTP协议 6月日更

模块六作业 - 拆分电商系统为微服务

张大彪

【Vue2.x 源码学习】第十二篇 - 生成 ast 语法树-流程说明

Brave

源码 vue2 6月日更

未来,能源枯竭可以逆转吗?

脑极体

一文带你深入了解 Java 字节码

mghio

技术 后端 Java 25 周年 基础

JAVA设计模式系列--单例模式

加百利

Java 后端 设计模式 单例模式 6月日更

【Flutter 专题】105 图解自定义 ACEPageMenu 滑动菜单 (一)

阿策小和尚

Flutter 小菜 0 基础学习 Flutter Android 小菜鸟 6月日更

分享8个可以提高开发效率的JavaScript库

devpoint

node.js axios 6月日更

【通俗易懂】虚拟DOM,如何更高效DIFF

蛋先生DX

Diff 6月日更

SpringCloud Gateway 路由数量对性能的影响研究

黄仲辉

性能优化 动态路由 SpringCloud Gateway JMH性能基准测试

架构实战营-作业六

大可

TempDB 的使用和性能问题

悟空聊架构

sql 性能调优 6月日更 TempDB

MySQL基础之十:union与limit

打工人!

myslq 6月日更

【21-5】Grafana 时间Panel 如何使用

耳东@Erdong

Grafana 6月日更 panel clock

未来,能源枯竭可以逆转吗?

白洞计划

《原则》(十二)

Changing Lin

6月日更

提升代码格调——JavaScript 数组的 reduce() 方法入门

编程三昧

JavaScript 大前端 数组 js ES6

并发王者课-黄金2:行稳致远-如何让你的线程免于死锁

MetaThoughts

Java 多线程 并发

Scrum Patterns : MetaScrum(译)

Bruce Talk

敏捷开发 译文 Agile Scrum Patterns

【译】JavaScript 中几种循环遍历方式对比

KooFE

6月日更

贪心算法最优装载问题(Java代码实现)

若尘

数据结构 贪心算法 6月日更

内卷的出路是躺平?

Qien Z.

创新 内卷 6月日更 躺平

Python——数值列表

在即

6月日更

雪花算法的原理及实现

架构精进之路

算法 6月日更

Windows 10 如何设置网络属性为私有

HoneyMoose

立flag(第………………次)

凯迪

随笔杂谈

redis分布式锁原理

Skysper

redis 分布式锁

网络攻防学习笔记 Day43

穿过生命散发芬芳

网络攻防 6月日更

话题讨论|如何看待腾讯试点强制6点下班

石云升

话题讨论 加班文化 6月日更

「SQL数据分析系列」1. SQL背景知识介绍

数据与智能

数据库 sql

【LeetCode】重复的DNA序列Java题解

Albert

算法 LeetCode 6月日更

对话Linus:Linux 25岁啦_Linux_张天雷_InfoQ精选文章