GTK 4 是一项历时多年的巨大开发工作,从 2016 年 10 月开始,到 2020 年 12 月结束。现在 4.0 版本终于发布了,是时候回顾一下这四年里数百位贡献者完成的令人难以置信的工作量了。
早在 2016 年,我们对时间表显然有点过于乐观,认为我们可以在三年内,即 2019 年底发布 4.0 版本。计划首先改变 GTK 的渲染管线,将其移动到可以提交给 GPU 的保留操作图,而不是自工具包诞生之初就有的即时模式渲染,该模式经历了两个主要的 API 周期——首先是抽象 Xlib 绘图命令,然后是迁移到 Cairo 操作。当然,我们也知道我们想要改进其他子系统,例如输入和窗口系统 API,以摆脱 X11 的特性,并朝着更符合 Wayland(和其他窗口系统)需求的设计方向发展。最终,我们得到的是对工具包内部的深度重新设计,以及一种不同的编程模型,该模型倾向于通过辅助对象进行更多委托,减少泄漏的抽象和深层类型层次结构;此外,我们精简了暴露的内部结构,以确保工具包以及使用它的应用程序在未来更易于维护。缺点是 GTK 不再是一个“元工具包”,其内部状态可以从外部进行探测,同时期望在多个版本中正常工作;从长远来看,考虑到可用的资源,这种方法是不可持续的,并且使我们无法优化或改进 GTK 的内部结构,从而损害了每个用户。
我们不希望下一个主要开发周期花费这么长时间,但是俗话说:任何作战计划都不会在与主要敌对势力首次接触后还能确定地延续下去。然而,重要的是,我们仍然看到改进的潜力;虽然我们想庆祝 GTK4 的发布以及所有为此做出贡献的人,但我们也想传达 2016 年概述的计划 仍然非常有效。我们已经在我们的 GitLab 项目页面中开始收集 GTK5 开发周期的条目,并且我们计划与各利益相关者就未来在这方面的工作进行更多讨论。
一些统计数据
从 2016 年 10 月 5 日的提交 4cce6104 开始
- 总提交次数: 16852
- 开发人员: 256
- 雇主: 10
- 添加的行数:1053492,删除的行数:1053542(差值:-50)
最有趣的是,对于所有这些工作,我们最终从现有代码库中删除了总共 50 行代码,其中包括测试和文档。
按年份细分
年份 | 开发人员 | 提交次数 | 添加的行数 | 删除的行数 | 差值 |
2016 | 50 | 1422 | 64014 | 152103 | -88089 |
2017 | 84 | 3446 | 186024 | 166198 | 19826 |
2018 | 111 | 2332 | 129726 | 140526 | -10800 |
2019 | 85 | 3244 | 200476 | 207623 | -7147 |
2020 | 109 | 6384 | 470907 | 386761 | 84206 |
我们在 2016 年只有几个月的时间,10 月到 12 月之间最大的工作是删除已弃用的 API,以及为应对从 GTK3 到 GTK4 的重命名进行的各种更改。尽管如此,GSK 最初还是在 11 月/12 月着陆的。11 月 21 日,GTK 3.89.1 发布,这是新 GTK 4 API 的第一个开发快照。
在 2017 年,GSK 的 API 进行了多次迭代:添加了新的渲染节点以实现 CSS 绘图原语,并且小部件从旧的 Cairo 渲染原语移动到 GtkSnapshot
API。此外,还引入了新的剪贴板 API,它采用基于流的实现。3 月 31 日,发布了 GTK 3.90.0,随后在 10 月发布了 3.92.0。
在 2018 年,事情似乎放缓了,但主要是因为我们迁移到了 GitLab。突然,我们可以访问 CI 管道和合并请求,并且我们对我们的开发过程越来越有信心;大量工作发生在开发分支中,特别是大型重构,例如将 GdkWindow
重命名为 GdkSurface
;迁移到 GtkGesture
对象并删除每个小部件的事件信号;或者使叶子类不可派生。GTK 3.94.0 于 6 月发布。
在 2019 年,开发速度再次加快
- 小部件变换
- 布局管理器
- 约束布局
- 不再有
GtkMenu
GtkBuilder
的作用域对象GtkText
小部件GtkNative
和GtkRoot
接口- 每个小部件的操作
- 简化的
GdkSurface
子类型
此外,当然还有渲染管线中的许多性能和功能改进。GTK 3.96.0 于 5 月发布。
最后,我们来到了 2020 年
- 基于事件控制器的新拖放 API
- GDK 中新的 macOS 后端,取代了旧的 Quartz 后端
- 新的辅助功能 API,删除 ATK
- 不再有
GtkContainer
- 不再有
GtkRadioButton
- 简化的
GdkDevice
API - 新的键盘快捷键 API
- 新的表达式和筛选模型
- 新的基于模型的列表和树形小部件
GTK 3.98.0 于 2 月发布;最后,3.99.0 于 7 月发布,作为 GTK 4.0 的第一个真正的测试版。
开发人员

按提交次数排名前 20 位
Matthias Clasen | 6519 | (38.7%) | |
Timm Bäder | 3229 | (19.2%) | |
Benjamin Otte | 2596 | (15.4%) | |
Emmanuele Bassi | 1094 | (6.0%) | |
Carlos Garnacho | 494 | (2.9%) | |
Daniel Boles | 383 | (2.3%) | |
Alexander Larsson | 313 | (1.9%) | |
Jonas Ådahl | 167 | (1.0%) | |
Chun-wei Fan | 162 | (1.0%) | |
Christian Hergert | 158 | (0.9%) | |
Jakub Steiner | 134 | (0.8%) | |
Piotr Drąg | 132 | (0.8%) | |
Руслан Ижбулатов | 120 | (0.7%) | |
Alexander Mikhaylenko | 93 | (0.6%) | |
Rico Tzschichholz | 78 | (0.5%) | |
nana-4 | 66 | (0.4%) | |
Christoph Reiter | 62 | (0.4%) | |
Tim-Philipp Müller | 60 | (0.4%) | |
Mohammed Sadiq | 57 | (0.3%) | |
Olivier Fourdan | 42 | (0.2%) |
按更改量排名前 20 位
Matthias Clasen | 620248 | (36.8%) | |
Benjamin Otte | 466996 | (27.7%) | |
Timm Bäder | 187516 | (11.1%) | |
Emmanuele Bassi | 165354 | (9.8%) | |
Alexander Larsson | 53065 | (3.1%) | |
Carlos Garnacho | 27227 | (1.6%) | |
Christian Hergert | 26964 | (1.6%) | |
Руслан Ижбулатов | 21760 | (1.3%) | |
Jakub Steiner | 18388 | (1.1%) | |
Jonas Ådahl | 12824 | (0.8%) | |
Chun-wei Fan | 12518 | (0.7%) | |
Daniel Boles | 12371 | (0.7%) | |
Lapo Calamandrei | 9995 | (0.6%) | |
Christoph Reiter | 8391 | (0.5%) | |
Alexander Mikhaylenko | 4936 | (0.3%) | |
Tim-Philipp Müller | 3932 | (0.2%) | |
Rico Tzschichholz | 3108 | (0.2%) | |
William Hua | 2900 | (0.2%) | |
Jason Francis | 1908 | (0.1%) | |
Peter Bloomfield | 1727 | (0.1%) |
像往常一样,无论是提交次数还是代码更改量,Matthias 都超越了其他所有贡献者。
雇主
按提交次数
红帽 | 13706 | (81.3%) |
(未知) | 1185 | (7.0%) |
GNOME 基金会 | 1095 | (6.5%) |
GNOME | 571 | (3.4%) |
Purism | 93 | (0.6%) |
Canonical | 84 | (0.5%) |
Centricular | 75 | (0.4%) |
Endless | 20 | (0.1%) |
Collabora | 14 | (0.1%) |
Intel | 6 | (0.0%) |
Novell | 3 | (0.0%) |
按更改量
红帽 | 1415771 | (84.0%) |
GNOME 基金会 | 165355 | (9.8%) |
(未知) | 58220 | (3.5%) |
GNOME | 33442 | (2.0%) |
Purism | 4936 | (0.3%) |
Centricular | 4205 | (0.2%) |
Canonical | 3347 | (0.2%) |
Novell | 336 | (0.0%) |
Intel | 222 | (0.0%) |
Collabora | 208 | (0.0%) |
Endless | 121 | (0.0%) |
按贡献者
(未知) | 199 | (72.4%) |
GNOME | 32 | (11.6%) |
红帽 | 22 | (8.0%) |
Endless | 6 | (2.2%) |
Collabora | 4 | (1.5%) |
Centricular | 3 | (1.1%) |
Novell | 3 | (1.1%) |
GNOME 基金会 | 2 | (0.7%) |
Canonical | 2 | (0.7%) |
Intel | 1 | (0.4%) |
Purism | 1 | (0.4%) |
虽然红帽的员工影响了最多的更改,但我们仍然有来自社区的大量贡献者——他们既使用他们的 GNOME 电子邮件地址,也使用他们的工作地址,即使是在个人层面上做出贡献时也是如此。我们还有来自 GNOME 和自由软件生态系统中各个公司的多位贡献者,这表明围绕该项目有一个健康的社区。
将数字与 GTK3 进行比较 比较棘手
- GTK 2 → 3 的开发阶段只花费了一年左右的时间,而不是四年
- 我们仍然在使用旧的 GNOME 基础设施,这意味着较少、较大的补丁,以及以 Bugzilla 的形式提高了贡献的门槛
尽管如此,与 2011 年相比,贡献者的数量增加了一倍多,其中非附属贡献者的数量几乎增加了三倍。
¹ – GNOME 基金会的受薪员工。
² – 使用 gnome.org 电子邮件地址但没有明确就业状况的贡献者。