谁编写了 GTK4

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 小部件
  • GtkNativeGtkRoot 接口
  • 每个小部件的操作
  • 简化的 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 电子邮件地址但没有明确就业状况的贡献者。