盘点Canonical旗下Ubuntu的那些大转向
2016-10-08 16:08:43 阿炯

放弃Upstart转投Systemd

在继Debian转向Systemd之后,Canonical 的 Martin Pitt 宣布将不再使用他们自己的 Upstart 初始化系统来启动 Ubuntu 桌面会话,取而代之的是所谓更现代化的、却仍有争议的 Systemd。

Upstart 是 Canonical/Ubuntu 自家的项目,它同 Systemd 一样,目标都是取代传统的初始化系统,用在几乎所有的 Ubuntu Linux 上。然而从 Ubuntu 15.04 开始,逐步使用 Systemd 替代 Upstart 初始化系统,这让许多用户很愤怒。

每次 Systemd 发布,我们都对发现这个所谓的“初始化系统”又做了比原来的设计目标还要多得多的工作。它慢慢地接管了 GNU/Linux 操作系统越来越多的内部组件的工作,甚至我们毫不怀疑,它将会完全取代它们,而这一天并不远了,或许将来你会看到 Systemd/Linux 操作系统——除了 Linux 内核,其它的都叫 Systemd。目前,Upstart 仍被用来控制各种启动过程中的服务和任务的运行和停止,比如桌面会话的启动还是使用 Upstart 控制的。不过 Canonical 计划使用 Systemd 来替代 Upstart 来管理桌面会话。

“按照 Ubuntu 开发者峰会上的讨论,我们准备放弃用 Upstart 来启动图形桌面会话,而使用 Systemd 来管理它,”Martin Pitt 说,“这样,一半的桌面会话将会由 Systemd unit 来管理。”这些更改主要是将 /usr/share/xsessions/*.desktop 里面的 Exec= 行切换为 Systemd 管理,显示管理器使用它们来显示哪些桌面会话可用,以及了解如何启动它们。这会影响到 Ubuntu 16.10 的 ubuntu-desktop 3.18.1.2-1ubuntu5 和 xubuntu-default-settings 16.10.1 软件包。Unity 、HUD 和指示器这些目前仍然由 Upstart 运行,它们会在之后的 CI 过程中转换,此外 dbus、gnome-session 等 Upstart 管理的任务还会继续由 Upstart 运行。

放弃支持 Unity 和 Mir

Canonical 于2023年年中放弃了 Unity 和 Mir 开发,转向 Gnome 作为默认桌面环境。Ubuntu 做为全世界Linux界的桌面先驱者和创新者,突然宣布放弃自己多年开发的Unity,相当于在桌面领域,直接放弃了理想?不仅仅是Linux桌面的悲哀,更是对于全球Linux黑客信心的打击。

回顾往昔

在2006~2007年,那时候笔者还在成都写手机游戏,当时年少轻狂的我,一直幻想自己要做最牛掰的开发者,就像科幻电影里面的黑客一样,无所不能。那时候虽然Windows玩的很溜,但是一直都在核心技术外徘徊,不知道如何达到个人目标。上学的时候玩过 RedHat 6.0, 也装过 KDE/Gnome 的桌面环境,但是系统中的各种问题,比如无法使用输入法、中文字体配置很差,甚至因为显卡驱动的原因都无法正常开机,所以Linux对于当年的我来说,就像神话一样,只有顶级黑客才能玩的转的系统。直到后面用了 Ubuntu 6.10 和 Ubuntu 7.04,当时的Ubuntu可以说是非常惊艳,原来RedHat和SUSE在桌面端的各种细节问题一扫而光,装上系统以后就可以直接用,而且还可以非常容易的安装应用软件来深入学习Linux。可以说是Ubuntu带领我真正的入门了Linux, 经过很多年的深入学习Linux, 到后来在Linux上开发Emacs和Haskell相关的项目,直至后面创业做 deepin 操作系统。

从个人来说,对Ubuntu系统以及背后的开发者都是怀着无比的敬畏和崇拜。来看看这么多年 Ubuntu 的发展,它从当年最佳的Linux桌面操作系统到今天宣布放弃自己研发的Unity桌面,已经有13年历史了,主要有以下几个阶段:

最初的惊艳

Ubuntu最初的发展目标就是把原来Linux系统需要手动操作的基本配置,比如字体、输入法和显卡驱动等问题内置到操作系统中,用户不用安装系统后还需要跟乱码、中文输入以及显示等问题斗智斗勇, 可以说那个时代的Ubuntu是解决了当时Linux普及的几个重要问题,把Linux系统从当时只有开发者才能玩转的高手系统普及到普通的电脑爱好者就可以折腾使用。

酷炫的Compiz管理器

相信很多Linux爱好者都惊叹于当年 Compiz 这个3D窗口管理器能够达到的酷炫效果,比如3D旋转桌面、拖动窗口的果冻效果、一把火烧掉窗口的效果…特别是同时代的Windows系统都还是非常原始的2D效果,甚至XP的窗口连窗口阴影都还没有的时候。当时的Linux系统的,特别是Compiz吸引大部分用户去尝试Linux系统,即使最后大家仅仅只是因为好奇或是玩玩,也大大增强了Linux系统的曝光率。从另外一方面,Linux从当年Compiz发展十年以后,反而是那些简单特效甚至没有特效的Linux系统得到最高的用户量,原因我觉得主要有两个:

1.PC这种生产力的工具最重要的是高效,非常酷炫的特效长时间用,反而会极大干扰用户视觉,进而影响用户对内容的专注力,而且时间长了也很容易引起用户的视觉疲劳,反而是Mac那种恰到好处的轻微动画让用户感到优雅和舒服, 这方面Linux发行版 Elementary OS 做的要好很多。

2.任何操作系统需要长久留住用户,还是需要靠优秀的人机交互设计和丰富的应用来留住用户,操作系统只有给用户带来真实的价值,让用户工作更高效和生活更快乐,用户才会长期坚持下去,光靠酷炫的动画吸引,用户一旦视觉疲劳以后,最终还是会放弃Linux, 因为一个操作系统不能解决用户日常遇到的各种问题,在用户心中最多就是一个好玩的玩具而已

Gnome3 vs Unity

在 2011 年底, Gnome 发布了它最新的 Gnome3 系统, 当时 Gnome3 以酷炫的特效加上 JavaScript 的插件体系而吸引了开源社区开发者的兴趣,特别是 Gnome3 内置 GJS 引擎,可以直接在桌面环境中编写 JavaScript 插件后直接 reload 即可更新桌面环境的功能和视觉效果,还有惊羡的 inspector 特性,可以直接通过鼠标点击界面后定位到对应的代码位置,再加上 GJS 可以从屏幕顶部打开一个类似 quake terminal 的下拉调试环境,在调试环境中直接像脚本语言那样实时列出任何对象的属性和方法,立即改立即生效。

上面这些开发者特性,在那时候 Google 满天吹嘘 Html5/JavaScript 的美好未来的大环境下,对于开发者有极大的诱惑力,很多开发者都奔着 Gnome3 这些类似 Web 的开发方式而去,并贡献了大量好玩的插件。

在 Gnome3 之前, Ubuntu 一直都在用 Gnome2 桌面环境,其实 Gnome3 在 2011 年发布之前已经规划了2年,从当时的宣传来说是下一代桌面环境,2010年前后Gnome3还在社区发布了大量惊羡的预览视频。作为当时桌面系统先锋的 Ubuntu 也非常期待能用上 Gnome3。 而无奈 Gnome3 一次又一次跳票,最后Ubuntu实在等不及了,就在 Gnome2 桌面环境后台服务的基础之上,开发了自己的 Unity UI。当时社区也因为 Unity 和 Gnome3 的很多设计理念类似谴责Ubuntu在进行分裂行为。

Unity 产品的特点主要定位在几点:
1.HUD 的左上角搜索设计,快速搜索应用和很多插件提供的搜索结果,这一点和 Gnome3 的Launcher插件体系非常像,通过插件,可以搜索除应用外的更多搜索结果(比如天气、在线视频、计算器结果等)
2.任务栏固定在左边,对宽屏更加优化,相对于程序员有更多的纵向空间
3.全局菜单,通过合并顶部栏和窗口标题栏,进一步节省纵向空间

个人并不喜欢这些面向开发人员(而不是面向普通用户)的设计,但是撇开个人的主观设计喜好外,认为Unity 是相对于 Gnome3 更成熟的产品,Unity 的很多改动都是针对 PC 桌面系统的真实痛点来改进的,特别是一些程序员的用户很喜欢 Unity 诸多设计。而不是像 Gnome3 那样一味的追求平板用户体验,极大降低了PC桌面用户的习惯和易用性。不论从商业公司的独立性发展考虑还是产品质量负责的角度,都是非常支持 Ubuntu 当时独立开发自己Unity 桌面环境的行为,Unity 确实在随后的几年证明了自己的产品质量和设计细节都比 Gnome3 要好很多。

Wayland vs Mir

在 Gnome3 和 Unity 发展的同时,Intel的雇员 Kristian Høgsberg 正在领导开发新的显示服务器。Wayland相对于古老的X11来说最大的提升是,Gtk/Qt 这些图形库进行图形绘制时,不用像X11那样发送绘制消息到XServer来进行绘制,而是由Client自己进行图形绘制,Wayland只用担任图层混合器的作用。这样不但减少了X Client和X Server之间不必要的通讯,而且因为由Client自己进行渲染,所以很多画面撕裂和闪屏的现象从原理上就避免了。大家可以看一下下面的两张架构图来理解两者的差别:


X-architecture


Wayland-architecture

Wayland 因为要彻底从技术架构上颠覆Linux几十年X11的渲染方式,不论从架构设计还是代码实现上都会非常复杂,不但要开发协议本身,还需要开发适合Wayland的混合器和窗口管理器,最后导致Wayland 1.0稳定版一再跳票。而Ubuntu在独立开发Unity桌面环境的同时,也仿造了Wayland的架构开发了自己的Mir显示服务器,除了等不及Wayland稳定之外,更重要的是Ubuntu要为了它的下一步宏伟计划“Ubuntu Touch” ,按照Mark的设想,Mir不仅仅要像Wayland那样从原理上提升Linux图形渲染效率,而且Mir还得担负起手机和电脑融合的使命,可以让Ubuntu Touch的手机在插上显示器底座时,手机的应用通过Mir的支持,可以直接在外接显示器上显示手机应用窗口,最终达到“当你手机放到底座时就是电脑,拿走就是手机”的设想。

不论Wayland还是Mir,虽然底层架构都非常先进,但是为了兼容现有的X11程序,它们分别开发了 XWayland 和 XMir 用于在新的显示服务器协议上支持现有的大多数 X11 程序(主要是Gtk2/Qt3/Qt4开发的大多数应用)。

具有讽刺意味的是,Wayland和Mir本来就是要解决 X11 那种不适合现代PC场景繁琐的通讯协议,甚至很多开发者为了技术的洁癖都在大力安利 Wayland/Mir ,但是最后 XWayland 和 XMir 本身的兼容实现却比 X11 的实现更加“恶心”和繁琐,包括Mir的开发者最后都放弃 XMir 的开发。

正是因为Wayland/Mir这样的技术无法彻底解决和大部分原本就基于X11协议而开发的应用的兼容性问题,最后导致基于Wayland/Mir开发的桌面系统从 “解决渲染性能问题” 转变到“无法运行很多现有Linux应用”这一个更加让用户难以接受的结果。这也是后面基于Mir开发的新版Unity难产的重要原因。


Ubuntu工程师使用 Rust 为 Linux 开发内核调度程序

Ubuntu 内核团队工程师 Andrea Righi 在2024年2月使用 Rust 编写了一个 Linux 内核调度程序 scx_rustland —— 在用户空间 (user-space) 运行,并利用 eBPF 在运行时动态加载。

Righi 称创建该项目初衷是因为他的一个想法:在运行时热插拔 Linux 内核调度程序并将其替换为用户空间程序 —— 之所以在用户空间而非内核空间,是因为前者可以提供更多的灵活性和安全性。基于这个想法,Righi 最终采用 eBPF、sched-ext 和 Rust 在 Ubuntu 上创建了这个新的 Linux 调度程序。

eBPF 是 Linux 内核提供的一项技术,支持从用户空间向内核空间注入沙盒程序。
sched-ext 是 Linux 内核中引入的一个新的调度类,它提供了一种将调度策略实现为 eBPF 程序的机制

编程语言方面,Righi 最终选择 Rust 编写这个调度程序,他认为 Rust 可以提供极大的编码灵活性和优势,例如内存安全、零成本抽象和强大的类型系统。Ubuntu 还没有承诺将其作为发行版的一部分,Righi 也在博客表示这是一个实验性内核项目,用于探索 Rust 在 Ubuntu 的应用,并谈到了未来利用 Rust 和 eBPF 进行 “微内核设计” 的可能性。


Righi 在博客介绍称,用 Rust 开发的内核调度程序不仅为开发者提供了便利,还能让用户也受益,比如可以根据用户的工作负载和其他特殊情况加载优化的调度程序。博文最后写道:
“我们正朝着一种微内核设计迈进,并有可能获得 Linux 认可:在上述情况下,如果用户空间调度程序崩溃,任务将无缝切换到默认的内核调度程序,从而确保系统的持续可用性,而不会出现任何停机。这表明,类似的方法也可用于其他子系统,从而使 Linux 内核能够提供完全冗余和崩溃安全的系统。”