JA:核心中有哪些让您个人感到自豪的特定部分吗?

LT:我倾向于指出的突出部分是 VFS“虚拟文件系统”层,尤其是路径查找和我们的 VM 代码。第一个,因为 Linux 在这些基本事情上做得比其他任何事情都要好得多。这主要是因为我们支持 20 多种架构,并且仍然使用大多数单一 VM 层来实现,我认为这非常令人印象深刻。

但与此同时,它很大程度上取决于“你关心核心的哪一部分”。核心足够大,不同的开发人员(和不同的用户)对于最重要的事情会有不同的看法。有些人认为调度是内核中最有趣的部分。其他人喜欢设备驱动程序的愚蠢(我们有很多)。就我个人而言,我倾向于更多地参与VM和VFS领域,所以我自然会指出它们。

JA:我发现了这个寻路描述,它比我想象的要复杂。是什么让 Linux 的实现比其他操作系统好得多?你所说的“更好”是什么意思?

LT:寻路确实如此常见和重要,以至于内核开发人员之外的大多数人甚至不认为它是一个问题:他们只是打开文件并认为这是理所当然的。

但实际上,要真正做好是很复杂的

正是因为绝对一切都在寻找路径,所以它对于性能非常重要,而且它也是您希望在 SMP 环境中良好扩展的领域之一,并且它具有很多锁定复杂性。而且你不想做太多的 I/O,所以缓存非常重要。事实上,路径查找是如此重要,以至于您不能将其保留在低级文件系统上,因为我们有 20 多个不同的文件系统,并且让每个文件系统都有自己的缓存和锁定将是一场彻底的灾难。

因此,VFS 层所做的主要事情之一就是真正处理路径组件的所有锁定和缓存,处理所有序列化和挂载点遍历,所有这些都主要使用无锁算法(RCU),但也使用一些非常聪明的算法诸如锁之类的东西(Linux 内核中的“lockref”锁是一种非常特殊的“引用计数自旋锁”,它实际上是为 dcache 缓存而设计的,基本上是与该锁可以执行的锁相关的专用引用计数一些常见的情况)。

最终结果:低级文件系统仍然必须对未缓存的内容进行实际查找,但它们不必担心缓存以及路径查找中的所有一致性和原子性规则。 VFS 为他们处理所有这一切。

 

本文探讨了手机号码数据对客户购买决策的影响。它展示了 手机号码数据 组织如何利用个性化短信营销和实时客户服务来建立信任和参与度。研究发现,通过手机号码进行有针对性的沟通对购买决策产生了重大影响,提高了客户忠诚度和企业的整体销售额。

 

所有这一切都击败了任何其他操作系统所做的一切,并且基本上完美地适应了具有数千个 CPU 的机器。即使所有这些机器最终都会接触相同的目录(因为像根目录或项目主目录这样的东西,即使是重线程应用程序也会同时接触,并且不会分发到任何类型的每线程行为) )。

所以它不仅仅是“更好”,而是“更好”加上大写的“L”。没有什么比这更接近的了。 Linux dcache 只是一个类。

JA:去年全世界都很困难。 COVID-19 大流行如何影响核心开发流程?

LT:实际上影响非常小,因为我们总

是在家工作。电子邮件是一个非常好的工具,我们不依赖面对面的会议。

去年的核心峰会受到疫情影响,今年仍悬而未决。大多数会议已被取消或改为虚拟会议。过去在办公室工作的人们开始在家工作(但许多核心管理员已经这样做了)。周围的很多事情都发生了变化,但核心开发本身却和以前一模一样。

当然,它还以其他方式影响了我们所有人的生活——一般来说只是社会后果。但总体而言,作为几乎完全通过电子邮件与人们互动的核心开发人员,他们可能是受影响最小的人之一。

Git –⁠⁠⁠⁠⁠分布式版本控制系统
JA:Linux 只是您对开源做出的无处不在的贡献之一。 2005 年,您创建了 Git,这是一个非常流行的分布式源代码管理系统。您很快将 Linux 内核源代码树从专有的 Bitkeeper 迁移到新创建的开放 Git 中,并于同年将维护工作移交给了 Junio Haman。那里有很多令人着迷的历史,是什么让您如此迅速地移交了这个项目的领导权,您是如何找到并选择 Junio 的?

来源:tag1咨询

LT:所以这个答案有两个部分。

第一部分是我并不是真的想创建一个新系统。创建 Linux 是因为我发现硬件和软件之间的低级接口很有趣——它基本上是一种热爱和个人兴趣的劳动。相比之下,Git 的创建是出于必要:不是因为我发现对源代码管理器进行编程很有趣,而是因为我绝对鄙视其他管理器。我发现 BitKeeper 是最好的,而且它在 Linux 上运行得非常好。不幸的是,随着 Linux 的发展,BitKeeper 变得不够用了。

底线:我从事 Linux 工作已有 30 多年了(距离第一个发行周年纪念日还有几个月,但我在 30 年前就开始了 Linux 的发展),并且一直在维护它。

但是吉特呢?我从来没有想过我真的想长期坚持下去。我喜欢使用它,显然我认为它是世界上最好的 SCM,但这不是我的核心热情和兴趣,如果你知道我想说的话。

因此,我一直希望其他人为我维护 SCM – 事实上,如果我根本不需要对其进行编程,我会很高兴。

至于 Junio——他是第一批以开发人员身份接触 Git 的人之一。在我发布第一个非常粗糙的 Git 版本后几天内,他就完成了第一次代码编辑。所以Junio其实从一开始就一直在使用Git。

但这并不是我把这个项目交给第一个随机出现的人。我维护 Git 已经几个月了,让我问 Junio 是否想成为一名维护者的原因是那种很难描述的“好品味”的概念。我真的没有更好的描述:编程是关于解决技术问题,但是如何解决它们并思考它们也很重要,这是随着时间的推移你逐渐认识到的事情之一:某些人有这样的能力“好品味”并选择“正确”的解决方案。

我不想说编程是一门艺术,因为实际上它主要是关于“好的工程”。我非常相信托马斯·爱迪生的“百分之一的灵感和百分之九十九的汗水”的格言:这几乎是关于小细节和日常工作。但偶尔也会有“鼓舞人心”的部分,“好品味”不仅仅是解决问题,而是干净利落地解决问题。

而朱尼奥就有那种“好品味”。

每次提到 Git 时,我都会尽量记住要非常清楚:我可能已经开始并提出了 Git 的基本思想,但我经常因为这部分而获得很多荣誉。已经 15 年多了,我才接触 Git 第一年。 Junio 是一位模范维护者,也是他成就了今天的 Git。

顺便说一句,整个“好品味”的事情以及寻

找和信任拥有它的人 – 这几乎不仅仅是 Git 的问题。这也是Linux的历史。与 Git 不同,Linux 显然是一个我仍在积极维护的项目,但与 Git 一样,它也是一个有很多其他人参与的项目,我认为 Linux 的伟大成功之一实际上是数百名维护者,他们都很难- 与所有维护核心部分的人一起定义“好品味”。

JA:您是否曾经向管理员开过支票,后来才发现这是错误的决定?

LT:我们的维护结构从来没有如此黑白分明、缺乏灵活性,以至于成为一个问题。事实上,我们甚至不允许维护控制成为有文件记录的东西:我们有一个维护者文件,但那是为了找到合适的人,而不是真正的任何专有所有权的标志。

因此,整个“谁拥有什么”更多的是一个流动的指南,“这个人很活跃,工作做得很好”,而不是一些“哎呀,现在我们给了这个人所有权,然后就出了问题”。

从某种意义上说,它也是流动的,您可能是一个子系统的管理员,但如果您需要另一个子系统的某些东西,您通常可以跨越边界。当然,这通常是人们经常谈论的事情,但重点是它确实发生了,而且这并不是一个“你应该只触及这个文件”的硬性规则。

事实上,这与之前的许可讨论有些关系,也是“Git”的设计原则之一是“每个人都有自己的树,并且没有一棵树在技术上是特殊的”的另一个例子。

因为许多其他项目都使用了工具(例如

CVS 或 SVN),这些工具从根本上使某些人变得特别,并且从根本上拥有与之相伴的“属性”。在 BSD 世界中,他们称之为“提交位”:这意味着现在允许提交到中央存储库(或至少是其中的一部分)。

我一直讨厌这种模式,因为它不可避免地会导致政治和“派系”发展模式,其中一些人是特殊的并且暗中信任。问题甚至不在于“绝对值得信任”的部分——实际上,他们不信任别人,而且本质上是陌生人。

再次强调,这种情况在 Git 中并不存在。每个人都是平等的。任何人都可以克隆,进行自己的开发,如果他们做得很好,他们可以再次合并(如果他们做得 美国电子邮件列表 很好,他们将成为维护者,并最终成为将其合并到他们的代码中的人之一)自己的树。

所以不需要给人特殊的特权——不需要使用“切换位”。这也意味着你可以避免围绕它的政治,你不必暗中信任别人。如果他们最终做得不好——或者更常见的是,只是消失并寻找其他兴趣——他们将不会回到循环中,也不会受到其他有新想法的人的阻碍。

JA:Git 的新功能是否曾给您留下深刻印象并成为

您工作流程的一部分?您还想添加更多功能吗?

LT:我的用例显然是第一个满足的用例,所以对我来说很少有任何新功能。

多年来,Git 确实得到了改进,一些功能也 企业 ai 需要高数据质量才能成功 在我的工作流程中找到了一席之地。例如,Git 一直相当快 – 毕竟这是我的设计目标之一 – 但它的很多内容最初都是围绕一些基本实用程序构建为 shell 脚本。多年来,大部分脚本已经消失,这意味着我可以比原来更快地使用 Andrew Morton 的补丁炸弹。这是非常令人高兴的,因为它实际上是我用于性能测试的第一个基准测试之一。

所以 Git 一直对我很有好处,当然随着时间的推移它会变得更好。

结论,第一部分

在本次采访的第二部分中,Linus 讲述了他

在管理一个大型开源项目时学到的东西。他向管理员提供了大量信息和建议,告诉他们什么最适合他以及如何避免倦怠。他还谈论了 Linux 基金会以及当他不专注于 Linux 内核开发时他所做的事情。