采访 Systemd 和 PulseAudio 创始人 Lennart

LinuxFR.org 近日对 Systemd 和 PulseAudio 的创始人 Lennart 进行了采访,其中有一些颇有意思的内容值得分享。

下文是采访内容的简要翻译

首先是 Avahi,然后 PulseAudio,现在是 Systemd,你是如何在如此多个几乎不相关的领域做出这么大的贡献的?

实现 Avahi 的想法上是在研究 PulseAudio 的过程中出现的。在学习 mDNS/DNS-SD 网络协议过程中,我注意到现有的 Howl 实现有一些缺点和协议上的问题,于是打算重新由零开始实现它,Avahi 就是这样诞生的。

目前 Avahi 是 Linux 安装中唯一默认使用 chroot() 的守护进程(现在有另外一个 RealtimeKit 了,不过那个也是我编写的)。

在此之后我一直应该有初始化系统去解决这些问题,于是最终 Kay 和我提出并实现了 systemd 。

早期 PulseAudio 收到了很多批评。你认为这是由于 PulseAudio 还不够成熟,还是认为这些批评是不理智的?

PulseAudio 当然不是没有问题的,但当时发行版开始使用它的时候,很多问题是由于音频驱动而不是 PulseAudio 造成的。PulseAudio 基于时序的调度需要从音频驱动获得正确时序信息,而那时候的不少音频驱动并没有正确提供这些信息。而驱动没法提供正确信息的根本原因在于硬件的问题,导致在驱动层面难以找出合适的解决方法。

另外,请不要忘记在 Linux 音频通用堆栈方面只有 3.5 位全职开发人员。在如此少的人力投入下,目前成果相当不容易。当然距离 CoreAudio 还有差距,但已经相当接近了。所以在此希望那些不断抱怨的人可以更宽容些。

目前大多数硬件厂商已经意识到这个问题了,从某种程度上讲 PulseAudio 已经成为厂商驱动检查标准中的一部分了。当然,在较新的 USB 或者 HD 音频上设备依然可能出现问题。

另一方面,当时的选择也是迫不得已。在如此紧张的人力条件下,只能借助发布后的反馈来找出并修复错误。别忘记当年 CoreAudio 推出的时候,也是经历了类似的过程,而它现今已经成为音频堆栈的测试标准(现在也不是毫无问题,我上次尝试一个 USB 声卡时就出现了内核问题)。实现基于时序调度的音频堆栈是件相当复杂的工作,需要一段时间来达到稳定。

现在 Linux 平台上的音频堆栈和 Win 以及 OS X 平台上的相比如何呢?

Win 和 OS X 平台上音频堆栈的整合工作都比 Linux 平台的要好,但我们拥有一些独特的功能它们难以匹敌,比如网络传输、低延迟模式和无浮点音频管道(float-less audio pipelines)。

总体上 CoreAudio 是要比我们强,但是现在差距缩小。Win 平台上的无法像 CoreAudio 一样成为测试标准,但是它的整合性带来了比我们更好的开发体验。

相比 OSSv4 来说 ALSA/PulseAudio 有什么优势?你认为为什么 BSD 依然坚守 OSS 而不是去实现 ALSA/PulseAudio ?

OSS 是90年代风格的简化设计,它跟现代的桌面使用并没有太大关系。BSD 关注点在服务器,所以对于声音并不在意。另外一个也是更重要的原因是,BSD 和 Solaris 也没有别的选择。

OSS 的模式过于简化而无法实现基于时序的调度策略(这对于当前要求以节能的方式处理多种不同延迟设备十分重要),而在内核实现混音和采样率转换也是存有争议的。混音器的接口也过于简单,不能适应现代硬件的需求。

音频设备已经和过去不同了,现在有蓝牙、UPnP 设备、USB 声卡等。OSS 的模式适用于经典的声霸卡年代,现在并不适用了。

OpenBSD 使用了称为 aucat 的音频服务器,你认为它怎么样?

如果一个音频堆栈没有实现基于时序的调度,那么和消费级别音频设备就没有大多关系。据我所知,PulseAudio 是唯一实现源自 CoreAudio 的基于时序调度设计的开源音频堆栈。同时,PulseAudio 的零拷贝设计(在内存中交换音频数据的引用对象,而不是在应用程序和音频堆栈间交换音频数据本身)也是难以匹敌的。

具有讽刺意味的是,实现针对专业设备的音频堆栈要比消费音频设备及移动设备的音频堆栈简单的多。在专业设备上,低延迟是唯一需要考虑的因素,而节能并不重要。于是说基于时序的调度和零拷贝也就没有必要了。这也是将 Jack 和 PulseAudio 进行比较时需要注意的方面

除了 Ubuntu,似乎 systemd 将成为未来主要 Linux 发行版的初始化系统,你是否预料到了如此快的接受速度?

我们从一开始就知道我们创造了一个很好的东西,但是将其这么快就推广开来比预先料想的要容易。另外我认为最终 Ubuntu 也会接受 systemd 的,因为现在它已经无法和 systemd 相比了。另外 Scott 也不再是 Upstart 项目的领导人,项目前景难料。当然,这只是我的一面之词,毕竟我不在 Canonical 工作。

你介绍 systemd 的博文相当出色,不知道你是否觉得出色的社区沟通技巧也是你工作的一部分呢?

是的,我被要求将自己的工作通过博客的形式表现出来。

systemd 相比 upstart 有什么技术优势?你认为 Ubuntu 会逐渐接受 systemd 么?

具体优势可以在这篇博文中找到(译注:可以参见本站先前报道)。

我觉得会 Canonical 会接受的,理由如上。

可以解释这句话么:systemd 是首个能正确的杀死一个服务的 Linux 初始化系统。

一个像 Apache 那样的服务可能会有很多个子进程,比如 CGI 脚本。这些子进程可能是由第三方创建的所以对其只有极为有限的控制。所以他们极为可能从 Apache 主服务中剥离出来,而这在现实中很常见。

而这在 systemd 中将不再可能,子进程将无法逃出监控。这将是我们第一次可以完全的结束一个服务及其它的全部子进程,于是我们可以确保没有遗留的 CGI 脚本。详情可以参看这篇博文

我听说你计划使用 systemd 补充或取代桌面进程管理器,在这个领域 systemd 有什么优势么?

登录后的用户服务启动过程和整个系统的启动有着很多相似的地方,systemd 引入的那些提升系统服务启动速度的特性对于用户服务同样适用。实际上 OS X 上的 launchd 在启动系统服务之外也被用来启动用户服务。

为了达到这个目的,我们计划将用户服务进程也像系统进程那样并入不同 cgroups 分区,同时要保证多用户情况下的支持。

在 FOSDEM 采访中你这样说道:“我推荐黑客们只考虑 Linux 系统并享受它所带来的自由和机遇”。你知道 BSD 开发者们看到这番话时有多愤怒么?

我当然知道,他们看到我这番话感到愤怒,再正常不过了。

systemd 使用了大量 Linux 特用的 API,你是否认为 Linux API 已经取代了 POSIX API 的地位并且其他操作系统已经不再重要了?

是的,我的确认为 BSD 已经不再重要了。而在社区软件开发中为了 POSIX 兼容性的让步对发展的阻碍远远大于其带来的益处。

当然我也肯定像 BSD 这类系统不是对所有人都不再重要了,毕竟还有人在维护他们。但是对于希望将 Linux 带入主流的人们来说,不应该由于跟它们的兼容性而束缚了自身的脚步。 我们的目标是将 Free Software 带给每个人,在这一点上,BSD 的确不再重要了。

这只是我的个人想法。肯定每个做 Free Software 的人都有自己的想法,我有我的,其他人也有他们自己的。

可能 Debian 将不会使用 systemd 因为它需要考虑和 Debian GNU/kFreeBSD 的兼容性,你怎么看?

如果是那样的话,那么无疑是它们的损失。不要忘记 Debian kFreeBSD 是个试验性质的玩具系统。创建玩具系统没什么问题,毕竟所有人都喜欢玩具。但是如果 Debian 为了符合几个玩具操作系统开发者的想法而限制了其自身的发展,那么就是 Debian 自身的问题了。

如果我是 Debian 项目领导者的话,我会努力让 Debian 变得更具专业性,而忘掉 Debian kFreeBSD 玩具系统,不过我并不是 Debian 开发者。

另一方面,我没有觉得在 Debian kFreeBSD 中使用一个 BSD 的初始化系统而在 Debian Linux 版本中使用 systmed 有何不可。软件包只需要同时携带一份 systemd 的单元文件和 SysV 标准的脚本即可,systemd 可以很好的处理这种情况。所以我认为由于 Debian kFreeBSD 的原因而拒绝 systemd 的说法可能并不是真的。

通过阅读你在 LWN 及其他地方的文章,我发现你并不害怕激烈的争执和口水战。你喜欢这个过程,还是觉得很无聊?

我并不害怕。应对恶毒的评论是在开源软件社区推行巨大变革中必经之路。实际上,我怀疑我在这方面做的是否足够好。很多时候,我应该在讨论演变成口水战之前更早的回复,比如说句“无论怎样,我们要不同意 A 同意 B”, 从而阻止口水战的恶化。

为什么桌面 Linux 没有被主流用户所接纳?Linus 大神认为这是一个文化问题而不是技术问题,你同意他的观点么?

我认为我们原先在用户界面方面还不够创新,同时也没有传达出一个明确的信息和清晰的平台。如果你认同 OS X 是用户界面领域的参照标准的话,我们只是在复制它,但没有比上它。现在情况正在改观,GNOME 3 是首个严格遵循 UI 设计原则执行桌面环境,对于 Linux 桌面界面来讲是一个巨大的进步。

现在界面方面得到改观了,剩下就是明确的信息和清晰的平台了。Linux 平台还是过于零碎,一个希望为 Linux 平台制作软件的作者需要在一堆 API 中做出选择,它们很多看起来貌似很相近但其实是极度混乱,选择一个 API 可能意味着在一些系统上能工作而在另外一些不能。所以我认为我们应该从上到下简化整个平台,传递出一个明确的信息告诉人们桌面 Linux 操作系统是什么。
当然,我认为我在用户底层做的这些改善是在朝简化平台这个方向努力的。

最后,你对自己在 Linux 桌面领域做出的改变感到自豪么?你最开始的动机是什么呢?

当然咯~

动机嘛,最开始只有由于我喜欢折腾,很自然的发现闭源软件是没法折腾的。我希望在缔造一个可以和现有闭源产品的开源操作系统方面做出自己的小小贡献。

译文完,原文地址

Read More: