谁编写了 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%)
英特尔 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%)
英特尔 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%)
英特尔 1 (0.4%)
Purism 1 (0.4%)

虽然红帽员工贡献了最多的更改,但我们仍然有大量来自社区的贡献者——既使用他们的 GNOME 电子邮件地址,也使用他们的工作地址,即使是在个人层面上做出贡献时也是如此。我们还有来自 GNOME 和整个自由软件生态系统中各家公司的多位贡献者,这表明该项目周围有一个健康的社区。

与 GTK3 比较数字 比较棘手

  • GTK 2 → 3 的开发阶段只花费了一年左右的时间,而不是四年
  • 我们仍然在使用旧的 GNOME 基础设施,这意味着更少、更大的补丁,以及以 Bugzilla 的形式提高了贡献的门槛

尽管如此,与 2011 年相比,贡献者的数量增加了一倍以上,其中非附属贡献者的数量几乎增加了三倍。

¹ – GNOME 基金会的付费员工。

² – 使用 gnome.org 电子邮件地址且就业状况不明的贡献者。

GTK 4.0

2020 年是非常漫长的一年。有什么比发布一个主要版本更好的方式来结束它呢!今天,我们发布了 GTK 4.0。

GTK 4.0 是一小群敬业的开发人员辛勤工作的成果。我们将单独发布一篇文章来回顾统计数据,但简短的总结是,自 2016 年 11 月的 3.89.1 版本发布以来,我们添加了 18000 多个提交,并发布了 20 多个开发版本。

祝贺并衷心感谢所有参与这项工作的人,特别是 Benjamin、Emmanuele、Timm、Carlos、Jonas 和 Christian!

新功能

不可能在一篇文章中总结 4 年的开发工作。在过去的一年中,我们撰写了关于此版本中许多新功能的详细文章:数据传输事件控制器布局管理器渲染节点媒体播放可缩放列表着色器辅助功能。以下是一些视觉形式的亮点

媒体播放

拖放

布局管理器和转换

可缩放列表和网格

着色器

旧功能

GTK 4 现在是稳定的,我们认为它已准备好使用。这并不意味着 GTK 3 已经死亡——我们将在可预见的未来继续支持和更新它(最新的版本 3.24.24 几天前悄悄发布了)。但这确实意味着 GTK 2 已经到了生命的尽头。我们将在未来几天发布一个最终的 2.x 版本,我们鼓励每个人将其 GTK 2 应用程序移植到 GTK 3 或 4。

如何获取它

源代码 tar 包可在通常的 位置找到。二进制包应该很快就会出现在主要发行版中。

GNOME 40 版本将有许多应用程序移植到 GTK 4。如果您想今天尝试 GTK 4.0,可以使用 gtk4-demogtk4-widget-factory 的每日 flatpak 构建。

$ flatpak install https://nightly.gnome.org/repo/appstream/org.gtk.Demo4.flatpakref
$ flatpak run org.gtk.Demo4

如果您渴望将您的应用程序移植到 GTK 4,我们的迁移指南作为 文档 的一部分可用

如何支持 GTK

GTK 的开发离不开众多志愿者的贡献,他们提供了错误报告、补丁、翻译和想法。感谢所有参与者。我们也非常感谢 GNOME 基金会为 GTK 提供开发资源、基础设施和旅行援助。

向 GNOME 基金会捐款是支持 GTK 未来发展的好方法。

接下来会发生什么

我们非常感谢所有早期测试人员提供的错误报告和反馈,这使得本次发布更加完善。但我们完全预计会很快发布 4.0.1 版本,以修复在 .0 版本发布后才会暴露出来的疏忽和陷阱。

现在我们有了 4.0 版本,我们需要将库生态系统也迁移过来,以便应用程序可以使用它。vte、webkit 和 gtksourceview 是一些最常用的与 GTK 一起使用的重要库。我们预计这些库的 GTK 4 移植版本很快就会推出。

如果出现更严重的问题,我们将在 GNOME 40 发布时推出 4.2 版本,否则我们可能会等到夏天再发布。

GTK 4 之后的未来会是什么,还有待观察。我们有一些有趣的项目正在进行中,但我们也想听听应用程序开发人员希望在 GTK 中看到哪些功能。请告诉我们!

庆祝

我们将在本周五举行(在线)聚会来庆祝 4.0 版本的发布。欢迎随时加入!