谁编写了 GTK+ 3.22

现在 GTK+ 3.22.0 和 GLib 2.50.0 已经发布,是时候回顾一下这个开发周期,看看哪些个人和公司为这些版本的发布做出了贡献。

活动

在 3.22 开发周期中,GLib 总共增加了 14119 行代码,删除了 2031 行代码,净增加了 12088 行代码

glib-changes-3-22而 GTK+ 则总共增加了 46581 行代码,删除了 19163 行代码,净增加了 27418 行代码

gtk-changes-3-22

这些统计数据不包括翻译。

贡献者
GLib

GLib 收到了 60 位个人的贡献

glib-contributors-3-22

即使变更规模有所减少,GLib 的贡献者数量仍呈现增长趋势。

变更集最多的开发者
Matthias Clasen 60 24.7%
Philip Withnall 44 18.1%
Chun-wei Fan 18 7.4%
Mario Sanchez Prada 10 4.1%
Allison Lortie 7 2.9%
Ruslan Izhbulatov 7 2.9%
Emmanuele Bassi 6 2.5%
Krzesimir Nowak 6 2.5%
Jonh Wendell 5 2.1%
Cosimo Cecchi 5 2.1%
Simon McVittie 4 1.6%
Ondrej Holy 4 1.6%
Christoph Reiter 4 1.6%
Rico Tzschichholz 3 1.2%
Dan Winship 3 1.2%
Aurélien Zanelli 3 1.2%
Kjell Ahlstedt 2 0.8%
Piotr Drąg 2 0.8%
Colin Walters 2 0.8%
Emilio Pozuelo Monfort 2 0.8%
代码变更行数最多的开发者
Matthias Clasen 7797 53.6%
Philip Withnall 2736 18.8%
Cosimo Cecchi 767 5.3%
Chun-wei Fan 674 4.6%
Mario Sanchez Prada 418 2.9%
Allison Lortie 365 2.5%
Christoph Reiter 319 2.2%
Krzesimir Nowak 220 1.5%
Jonh Wendell 178 1.2%
Ruslan Izhbulatov 163 1.1%
Marc-Antoine Perennou 142 1.0%
Emmanuele Bassi 104 0.7%
Tim-Philipp Müller 81 0.6%
Benjamin Otte 79 0.5%
Ondrej Holy 48 0.3%
Giovanni Campagna 43 0.3%
Jeremy Whiting 34 0.2%
Debarshi Ray 33 0.2%
Stephan Bergmann 32 0.2%
Christian Persch 30 0.2%

Matthias Clasen 和 Philip Withnall 是本周期最大的贡献者。Matthias 致力于实现门户,以允许沙盒应用程序访问系统服务;Philip 则致力于新的结构化日志 API。

GTK+

GTK+ 收到了 75 位开发者的贡献

gtk-contributors-3-22

贡献者数量呈下降趋势,并且考虑到变更量也有所减少,这可能是向 3.22 长期版本整体稳定化过程的反映。

变更集最多的开发者
Matthias Clasen 369 37.3%
Lapo Calamandrei 73 7.4%
Carlos Garnacho 69 7.0%
Timm Bäder 67 6.8%
Emmanuele Bassi 60 6.1%
Ruslan Izhbulatov 30 3.0%
Jonas Ådahl 28 2.8%
Benjamin Otte 25 2.5%
Olivier Fourdan 21 2.1%
Matt Watson 21 2.1%
Sébastien Wilmet 18 1.8%
Chun-wei Fan 13 1.3%
Andreas Pokorny 12 1.2%
Georges Basile Stavracas Neto 12 1.2%
Christian Hergert 12 1.2%
Piotr Drąg 11 1.1%
Tristan Van Berkom 11 1.1%
Ray Strode 10 1.0%
Stephen Chandler Paul 9 0.9%
William Hua 8 0.8%
代码变更行数最多的开发者
Matthias Clasen 14378 28.2%
William Hua 6212 12.2%
Ruslan Izhbulatov 5222 10.2%
Lapo Calamandrei 4383 8.6%
Carlos Garnacho 3510 6.9%
Emmanuele Bassi 1947 3.8%
Matt Watson 1811 3.6%
Georges Basile Stavracas Neto 1805 3.5%
Jonas Ådahl 1647 3.2%
Chun-wei Fan 1195 2.3%
Stephen Chandler Paul 1099 2.2%
Timm Bäder 1018 2.0%
Sébastien Wilmet 865 1.7%
Benjamin Otte 793 1.6%
Javier Jardón 655 1.3%
Alexander Larsson 486 1.0%
Andreas Pokorny 358 0.7%
Tristan Van Berkom 333 0.7%
Jakub Steiner 317 0.6%
Mohammed Sadiq 298 0.6%

就像他在 GLib 中所做的那样,Matthias 致力于在 GTK+ 中实现对门户的支持,特别是那些需要用户交互的门户,如文件选择和打印;Carlos Garnacho 致力于 Wayland 中的图形平板支持;Jonas Ådahl 和 Olivier Fourdan 致力于 Wayland 后端的窗口系统问题;William Hua 致力于改进 Mir 后端;Ruslan Izhbulatov 和 Chun-wei Fan 致力于 Windows 后端,尤其是在键盘输入方面;Emmanuele 致力于将 GLES 支持添加到 GdkGLContext API;Timm Bäder 致力于 GtkPopover;Matt Watson 致力于 GtkStack 和内部动画处理。

隶属关系

像往常一样,如果没有各个公司的贡献,这些更改中的许多都不可能实现。

对于 GLib

按雇主划分的变更集贡献者排名
Red Hat 84 34.6%
(未知) 78 32.1%
Collabora 43 17.7%
Endless 22 9.1%
Canonical 12 4.9%
Centricular 2 0.8%
Intel 2 0.8%
拥有最多黑客的雇主
(未知) 33 52.4%
Red Hat 14 22.2%
Collabora 4 6.3%
Endless 4 6.3%
Canonical 4 6.3%
Centricular 2 3.2%
Intel 2 3.2%

对于 GTK+

按雇主划分的变更集贡献者排名
Red Hat 548 55.4%
(未知) 333 33.7%
Endless 97 9.8%
Collabora 6 0.6%
Canonical 4 0.4%
Centricular 1 0.1%
拥有最多黑客的雇主
(未知) 49 63.6%
Red Hat 16 20.8%
Endless 6 7.8%
Collabora 3 3.9%
Canonical 2 2.6%
Centricular 1 1.3%

本周 GTK+ – 18

在过去的一周里,GTK+ 的 master 分支有 33 个提交,增加了 9362 行代码,删除了 8025 行代码。

计划和状态
  • Matthias 发布了 GTK+ 3.21.6,这是 9 月 21 日发布的 3.22.0 版本之前的最后一个快照。
  • GTK+ 路线图可在wiki 上找到。
显著变化
  • 本周,我们主要对属性描述和用户可见的消息进行了翻译,为 3.22 版本的发布做准备。
  • Ruslan 修复了 Windows 上的 GdkEventKey.is_modifier() 结构字段,以将 Ctrl、Alt 和 Shift 键报告为修饰键。
  • Jonas Ådahl 为 Wayland 下的组合框和其他弹出窗口添加了最后一分钟的修复。

修复的错误

  • 771117 gtk3 3.21.5 打破了下拉列表的显示,需要滚动才能查看内容
  • 771349 在 X11 上,gdk_screen_get_monitor_scale_factor 在 GTK 3.21+ 中始终返回 1
  • 771463 变量可能在 gtk_widget_render 中未初始化就被使用
  • 602773 对于 Shift、Ctrl、Alt 键,GdkEventKey.is_modifier 为 0
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手的错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

本周 GTK+ – 17

在过去的一周里,GTK+ 的 master 分支有 41 个提交,增加了 19871 行代码,删除了 16800 行代码。

计划和状态
显著变化
  • Matthias 为 GTK+ 附带的小型二进制文件(如 gtk-launchgtk3-demo)添加了 --version 命令行开关;这允许在不求助于发行版软件包或开发文件的情况下检查系统上的 GTK+ 版本。
  • GDK 的 X11 后端现在可以正确检测 VirtualBox 中的 XRandR 1.5 支持。

修复的错误

  • 767391 cross-fade() 不进行交叉淡入淡出
  • 771033 自 3.21.2 以来,GtkStatusIcon 无法在 VirtualBox 中显示激活菜单
  • 764979 取消密码对话框后,连接到服务器不可用
  • 770278 使示例应用程序现代化
  • 770508 [回归][二分查找] GtkTreeView::grab_focus_and_unset_draw_keyfocus() 中的最新更改打破了快捷键分配
  • 770906 Wayland:从菜单/弹出窗口取消映射顶层窗口可能会导致协议错误
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手的错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

本周 GTK+ – 16

在过去的一周里,GTK+ 的 master 分支有 32 个提交,增加了 5125 行代码,删除了 4393 行代码。

计划和状态
  • Matthias 发布了 GTK+ 3.21.5,这可能是 3.22.0 版本发布之前的最后一个开发者快照。
  • GTK+ 路线图可在wiki 上找到。
显著变化
  • GTK+ 需要 Wayland 协议定义的 1.7 版本,以便使用 xdg_shell 协议的 v6。
  • GtkScrolledWindow 现在可以选择将其子级的首选自然大小传播给父级。

修复的错误

  • 770550 gtkplacessidebar:修复信号编组
  • 770458 GtkAboutDialog 在长长的信用列表和 GtkScrolledWindow 中存在问题
  • 770307 关闭 glade 项目时崩溃
  • 770624 [补丁] 修复拼写错误。
  • 770745 wayland:当应用程序尝试错误地映射弹出窗口时发出警告
  • 769498 滚动条已损坏
  • 770703 修复在 GtkListBox 上使用 page-down 时崩溃的问题
  • 770614 高对比度主题中,当 value = 0 时,GtkScale:警告:将负内容宽度/高度分配给节点高亮
  • 770849 带有内边距的 GtkLabel 损坏
  • 766569 更好地为 GTK_SCROLL_NATURAL 子级请求大小
参与进来

有兴趣参与 GTK+ 的开发吗?请查看新手的错误列表,并加入 irc.gnome.org 上的 IRC 频道 #gtk+。

GTK+ 中的版本控制和长期稳定性承诺

本文中提出的计划取代了 2016 年 6 月在多伦多 GTK+ 黑客松之后公开的计划。

本月,GTK+ 团队将发布一系列长期稳定版本中的第一个。这将使 GTK+ 更具可预测性和可靠性,同时不会阻碍 GTK+ 未来的改进。

这些计划是在自去年 6 月在多伦多举行的 GTK+ 黑客松上制定初步计划以来,与各种利益相关者进行讨论的结果。

背景

自 2002 年发布 2.0 版本以来,GTK+ 一直遵循相当简单的版本控制方案

  • 主版本指定一般的 API 版本
  • 次版本指定开发周期(如果为奇数)和稳定周期(如果为偶数)
  • 微版本指定错误修复更新

在 GTK+ 中引入的任何 API 都保证存在到下一个主版本;在开发周期中引入的 API 保证在稳定周期开始后保留。稳定周期不提供新功能或新 API。

该方案运行良好,但其问题在 3.x 系列中变得越来越明显,特别是与 6 个月基于时间的开发周期相结合时。在 2.x 周期中,GNOME 应用程序中的新功能被迫出现在其他库中,因为工具包太复杂或移动太慢。自从 3.0 以来,GTK+ 的开发速度一直在加快。GTK+ 已被放在首位,每六个月都会引入新的窗口小部件和新功能。然而,为了实现这些新的窗口小部件和功能,工具包的一些内部结构一直处于不断变化的状态。

从 GNOME 的角度来看,GTK+ 一直是一个相对稳定但不断变化的目标,因为 GNOME 开发人员和 GTK+ 开发人员可以共享反馈和建议,并快速跟上内部变化。另一方面,从社区的角度来看,跟踪 GTK+ 的开发更加痛苦。GNOME 项目之外的应用程序开发人员很难了解工具包中的哪些更改会影响他们的代码库。GTK+ 团队试图改进其沟通渠道,但仅仅在开发周期中发布有关更改的博客对于更广泛的 GTK+ 用户社区中的许多人来说是不够的。

长期稳定的 GTK+ 版本

GTK+ 有三个主要利益相关者:希望功能和 API 稳定版本的应用程序开发人员;希望访问 GTK+ 开发版本以便快速引入新功能的桌面开发人员(包括 GNOME 项目的大部分);以及 GTK+ 团队本身,该团队需要在较长的开发周期中迭代库的内部结构。

引入长期稳定的 GTK+ 版本旨在确保 GTK+ 在每个受众之间取得良好的平衡。特别是,应用程序开发人员将可以使用一个稳定的平台,该平台仍然可以访问在 3.x 系列中开发的新 GTK+ 功能,例如 CSS 样式、触摸屏支持、HiDPI 显示支持、Wayland 支持、新窗口小部件、GTK+ 检查器等等。

GTK+ 将继续发布主版本、次版本和微版本。新的主版本将在新功能稳定后发布,预计大约每 2-3 年发布一次。当升级到新的主版本时,将删除已弃用的 API。之后,该 API 系列将被认为是稳定的。新的次版本可能会引入新的窗口小部件,或更新 GDK 后端中窗口系统协议的实现,但不允许其他功能或主题更改。以前次版本每六个月发布一次,现在将根据需要生成。我们还将继续进行微版本发布以修复错误和安全问题,至少三年。此后的维护可能会继续,具体取决于可用的志愿者资源数量。操作系统发行版具有超过三年的长期支持发布周期,可能需要联系 GTK 团队以建立回溯策略。

长期稳定系列中的更新将是 ABI 稳定的。 除了这些稳定系列之外,GTK+ 的开发将在半稳定的开发系列中继续进行。这些开发版本将在次版本之间包含一些 API 更改,尽管更改将尽可能受到限制。这是我们期望 GNOME 应用程序采取的路径,但其他应用程序开发人员如果想要访问最新功能,也可以选择此选项,但代价是每个次版本都需要进行一些潜在的移植工作。

虽然 GTK+ 团队保留在开发系列中更改 API 的权利,但这并不意味着整个 GTK+ API 在每次发布时都会不断中断;只有特定的,并且希望很少使用的 API 部分可能会更改,如果更改过于广泛,则很可能会延迟到下一个主要开发周期。我们将确保提前充分沟通这些更改。

新的版本控制方案

新的 GTK+ 版本控制方案是对我们迄今为止遵循的“语义版本控制”方案的修改。一旦新的主稳定版本发布,开发周期就会开始,我们将

  • 将 pkg-config 文件更新到新的主版本,以允许 GNOME 开发人员在开发期间以新的 API 为目标
  • 将现有的主版本保留为相同的编号
  • 将次版本更新为 90 以表示开发版本

例如,在 3.22.0 版本发布之后以及新的开发周期开始时,pkg-config 文件将被称为 gtk+-4.0,并且 configure.ac 文件中的版本将设置为 3.90

每六个月将发布一个新的偶数开发版本,例如 x.90x.92x.94,直到 GTK+ 团队确信新的 API 和功能集是稳定的。每个次版本都会增加共享库的 soname,以确保自动化工具可以拾取最终更改并通知发行商和维护人员。一旦我们达到 API 和功能集足够稳定以供更广泛的社区使用的程度,我们将发布一个新的主版本 (x + 1).0 并声明 API 稳定。

一旦发布此零版本,将创建一个新的稳定分支,并且主分支将升级到下一个九十版本,并开始新的开发周期。九十版本将与以前的稳定版本并行安装。

gtk-versioning-scheme

3.22 将是 3.x 系列的最后一个次版本,新的版本控制方案将在 3.90 生效。3.22 版本在该方案中是不规则的,因为它是一个长期稳定版本,但不会收到进一步的次版本发布,并且没有 .0 版本号。这是一个必要的过渡步骤。

下一步是什么

有关这些计划的更多详细信息,包括库开发人员和分发打包程序的具体信息,将在后续的博客文章中发布。GTK+ 开发博客也将继续提供有关 GTK+ 本身技术变更的更新,以便提供有关每个即将发布的主要版本中将出现的变更的信息。

我们对这些计划感到兴奋,并希望它们能为 GTK+ 开创一个新时代,在这个新时代中,应用程序作者可以对我们的平台更有信心,同时仍然允许我们在 3.x 系列中看到的快速开发速度。

本文中提出的计划取代了 2016 年 6 月在多伦多 GTK+ 黑客松之后公开的计划。