Greg Kroah-Hartman:“不要让用户发疯”

2020-11-30 13:24:27

目前负责稳定Linux内核发行的Linux基金会研究员Greg Kroah-Hartman在今年的Linux App Summit上分享了他作为内核开发人员所学的经验教训,这些经验教训也适用于其他开发人员。

Kroah-Hartman一直在帮助开发Linux内核已有20多年了(他开玩笑地说,“时间太长了”),但提醒听众他已经完成了一些用户空间工作并维护了一些Linux用户空间小程序包。他首先展示了如何将演讲的实质精炼成一个只有四个字的幻灯片:

“不过,我们再详细一点。”他笑着说。 “我将尽力解释为什么您不想让用户发疯,以及当您这样做时会发生什么。”

“因此,所有这些东西都归结为一件非常简单的事情:您为谁编写代码?”

他说,这很重要,因为您应该做的事取决于您为什么这样做,从最简单的情况开始。如果您要为自己编写代码,则“把它扔在墙上,玩得开心。”

但是,如果您是为其他人编写的,则“现在您必须关心用户。”

“有道理,”他补充说,并分享了一个他称之为臭名昭著的XKCD卡通的极端案例,说明了用户如何甚至可以抱怨最基本的修复程序,例如“按住空格键时CPU不再过热”。

“我在这里所说的一切都是'合理的',因为总有一些用户无论如何都无法取悦。而那些您可以放心忽略的人。”

Kroah-Hartman解释说,这是Linus Torvalds最坚定的信念之一:不要破坏用户空间。

“其他操作系统也有此规则-这是非常严格的规则-因为我们一直希望您进行升级。我们希望您升级而不必担心。我们不希望您感到害怕。如果您看到一个新版本,我们会说:“嘿,这解决了很多问题。”我们不希望您担心这样做。这真的非常重要-尤其是在安全性方面。”

这导致了Kroah-Hartman所说的Greg规则1:“如果用户担心您会破坏当前的系统,他们将不会进行更新。”

显然,这通知了最终进行更改的方式。 Kroah-Hartman解释说:“诀窍是您将支持所有内容,直到没有用户为止。” “弄清楚何时有用户和没有用户取决于您。”

Kroah-Hartman讲述了一个非凡的故事,当时Linux内核开发人员意识到一个特定的体系结构仅被现有的两台机器使用。 “其中一个坏了,另一个-我们实际上付钱给了开发人员来替换它,因为我们不想再支持那个东西了。”

“但是,否则,我们必须继续支持用户。因为我们签订了合同。我们签订了合同,为他们提供了功能。我们无法删除它。”

他指出,Linux仍然可以支持使用25年的二进制文件,因此“人们认为Linux已停滞不前。但实际上,我们在旧功能的旁边创建了新功能,您可以做不同的事情-您可以利用各种东西。”

他提供了另一个非常著名的示例,该示例说明了一个缓慢发展的应用程序:KDE。

给应用程序开发人员的另一条建议:不要拿走有用的东西。 “如果有人在使用此功能,请将其保留在那里。就这么简单……不要以为删除它就可以帮他们一个忙。”

当他将注意力转向图书馆开发人员时,他的第一张幻灯片只是写着:“我很可惜。”

“您不知道一个API是否真的有用,除非您有太多的人使用过该API才能对其进行更改。”-Greg Kroah-Hartman

“这是有史以来最艰巨的工作,”他笑着说。 “我真的非常为您感到难过……这是最难的事情之一。”

“除非有很多人使用它,否则您永远无法知道您的API是否真正起作用。当您有很多人在使用它时,您便意识到其中的所有问题-然后便无法更改。”他笑着说。 “几乎不可能第一次做到这一点。”

有一种选择-但是它仍然涉及向仍在使用您要弃用的旧库的用户致敬。他建议,如果您真的需要重新开始–“作为一个全新的图书馆”。

“然后您就没有用户了!然后,您不知道是否有人在使用您的API,不知道您使用的API是否正确,直到您有了用户,然后它就破裂了,并且循环还在继续。”

他还为实际上希望其用户切换到该新库的开发人员提供了重要提示。 “您需要很好地记录它-因为如果您不这样做,Stack Overflow将会尝试做到这一点。”他有心地笑了起来,回想起大量的不良司机和意见,这显然是受10岁的Stack Overflow职位的启发。 “您不希望Stack Overflow成为您的主要文档。提供良好的文档。”

但是随后他认真地补充道:“如果您违反这些规定,则会导致人们失去信任。如果我在整个地方重建并看到“已弃用”或API发生了变化,那就太可怕了。你不想那样做。如果您违反了这种信任关系,就不会再有该用户了。”

如果您进行更改,请确保确实有令人信服的理由。 “您必须提供足够的理由和足够的善良,以迫使某人花时间学习做其他事情。那是非常罕见的。”

他的示例是systemd,它统一了各种服务配置和初始化过程。 “他们做对了。他们提供了所有功能,解决了一个真正的问题。他们以一种更好用的方式统一了所有这些现有工具和问题,并且提供了足够的动力,每个人都愿意做一些工作来修改自己的东西并转向新模型。

“有效。人们仍然抱怨它,但是它起作用了。每个人都交换了……效果很好。它解决了一个真正的问题。

“这是一个示例,说明了如何提供令人信服的理由继续前进并做出改变。”