halting problem :: Who wrote GTK+ 3.20

:: ~6 min read

A bit late recap of the 3.20 development cycle, now that we already started working on 3.22, but I guess better late than never

Last time I tried to dispel the notion that GTK+ is dead or dying. Others have also chimed in, and it seems that we’re picking up the pace into making GTK a more modern, more useful driving force into the Linux desktop ecosystem.

Let’s see how much has changed in the six months of the 3.20 development cycle.

Once again, to gather the data, I’ve used the most excellent git-dm tool that Jonathan Corbet wrote for the “Who wrote the Linux kernel” columns for LWN. As usual, I’ve purposefully skipped the commits dealing with translations, to avoid messing up the statistics.

You should look at my previous article as a comparison point.

Activity

For the 3.20 cycle, the numbers are:

Version Lines added Lines removed Delta Contributors
GLib 2.48 20597 7544 13053 55
GTK+ 3.20 158427 117823 40604 81

More or less stable in terms of contributors, but as you can see the number of lines added and removed has doubled. This is definitely the result of the changes in the CSS machinery that have (finally) brought it to a stable as well as more featureful state.

Contributors

GLib

Of the 55 developers that contributed the 271 changesets of GLib during the 3.20 development cycle, the most active are:

Name Per changeset Name Per changed lines
Ignacio Casal Quinteiro 56 (20.7%) Ignacio Casal Quinteiro 8530 (39.7%)
Philip Withnall 42 (15.5%) Philip Withnall 5402 (25.1%)
Allison Ryan Lortie 27 (10.0%) Matthias Clasen 3228 (15.0%)
Chun-wei Fan 22 (8.1%) Chun-wei Fan 1440 (6.7%)
Matthias Clasen 18 (6.6%) Allison Ryan Lortie 1338 (6.2%)
Dan Winship 9 (3.3%) Javier Jardón 565 (2.6%)
Mikhail Zabaluev 7 (2.6%) Iain Lane 149 (0.7%)
Marc-André Lureau 6 (2.2%) Ruslan Izhbulatov 147 (0.7%)
Ruslan Izhbulatov 6 (2.2%) Dan Winship 95 (0.4%)
Rico Tzschichholz 6 (2.2%) Lars Uebernickel 79 (0.4%)
Xavier Claessens 6 (2.2%) Xavier Claessens 74 (0.3%)
Emmanuele Bassi 5 (1.8%) Christian Hergert 71 (0.3%)
Iain Lane 4 (1.5%) Mikhail Zabaluev 48 (0.2%)
Lars Uebernickel 3 (1.1%) Rico Tzschichholz 45 (0.2%)
Sébastien Wilmet 3 (1.1%) Daiki Ueno 42 (0.2%)
Simon McVittie 3 (1.1%) Simon McVittie 27 (0.1%)
Javier Jardón 3 (1.1%) Emmanuele Bassi 25 (0.1%)
Christian Hergert 3 (1.1%) Robert Ancell 23 (0.1%)
coypu 2 (0.7%) Marc-André Lureau 14 (0.1%)
Sebastian Geiger 2 (0.7%) Jan de Groot 14 (0.1%)

Ignacio has been hard at work, helped by Ruslan and Fan, in making 2.48 the best GLib release ever in terms of supporting Windows — both for cross and native compilation, using autotools and the Microsoft Visual C compiler suite. If you can build an application for Windows as reliably as you can on Linux, it’s because of their work.

GTK+

For GTK+, on the other hand, the most active of the 81 contributors are:

Name Per changeset Name Per changed lines
Matthias Clasen 1220 (43.7%) Matthias Clasen 78960 (41.1%)
Benjamin Otte 472 (16.9%) Benjamin Otte 35975 (18.7%)
Lapo Calamandrei 203 (7.3%) Lapo Calamandrei 35352 (18.4%)
Cosimo Cecchi 167 (6.0%) Cosimo Cecchi 10408 (5.4%)
Carlos Garnacho 147 (5.3%) Jakub Steiner 6927 (3.6%)
Timm Bäder 107 (3.8%) Carlos Garnacho 5334 (2.8%)
Emmanuele Bassi 41 (1.5%) Alexander Larsson 3128 (1.6%)
Paolo Borelli 39 (1.4%) Chun-wei Fan 2394 (1.2%)
Ruslan Izhbulatov 29 (1.0%) Paolo Borelli 1771 (0.9%)
Carlos Soriano 28 (1.0%) Ruslan Izhbulatov 1635 (0.9%)
Jakub Steiner 26 (0.9%) Timm Bäder 1326 (0.7%)
Olivier Fourdan 26 (0.9%) Takao Fujiwara 1269 (0.7%)
Jonas Ådahl 23 (0.8%) Jonas Ådahl 1243 (0.6%)
Chun-wei Fan 22 (0.8%) Emmanuele Bassi 885 (0.5%)
Piotr Drąg 18 (0.6%) Olivier Fourdan 646 (0.3%)
Ray Strode 18 (0.6%) Ray Strode 570 (0.3%)
Ignacio Casal Quinteiro 16 (0.6%) Sébastien Wilmet 494 (0.3%)
William Hua 16 (0.6%) Carlos Soriano 427 (0.2%)
Alexander Larsson 14 (0.5%) Ignacio Casal Quinteiro 333 (0.2%)
Christoph Reiter 10 (0.4%) William Hua 321 (0.2%)

Benjamin has worked on the new CSS gadget internal API; Matthias, Cosimo, and Timm have worked on porting existing widgets to it, in order to validate the API. Lapo and Jakub have worked on updating Adwaita and the other in tree themes to the new style declarations.

Carlos Soriano has worked on the widgets shared between the file chooser dialog and Nautilus.

Carlos Garnacho has worked on the input layer in GDK, in order to make it behave correctly under the new world order of Wayland; and speaking of Wayland, Carlos, Jonas, and Olivier have worked really hard to implement all the missing features in the Wayland backend, as well as the fallout of the Wayland switch when it comes to window sizing and positioning.

Affiliation

GLib

Affiliation Per changeset Affiliation Per lines Affiliation Per contributor (total 55)
(Unknown) 136 (50.2%) (Unknown) 10942 (50.9%) (Unknown) 35 (60.3%)
Collabora 49 (18.1%) Collabora 5491 (25.6%) Red Hat 9 (15.5%)
Canonical 41 (15.1%) Red Hat 3398 (15.8%) Canonical 5 (8.6%)
Red Hat 36 (13.3%) Canonical 1612 (7.5%) Collabora 4 (6.9%)
Endless 6 (2.2%) Endless 34 (0.2%) Endless 2 (3.4%)
Centricular 1 (0.4%) Centricular 4 (0.0%) Centricular 1 (1.7%)
Intel 1 (0.4%) Intel 2 (0.0%) Intel 1 (1.7%)
Novell 1 (0.4%) Novell 1 (0.0%) Novell 1 (1.7%)

As usual, GLib is a little bit more diverse, in terms of employers, because of its versatility and use in various platforms.

GTK+

Affiliation Per changeset Affiliation Per lines Affiliation Per contributor (total 81)
Red Hat 1940 (69.5%) Red Hat 131833 (68.7%) (Unknown ) 63 (75.9%)
(Unknown) 796 (28.5%) (Unknown) 59204 (30.8%) Red Hat 15 (18.1%)
Endless 41 (1.5%) Endless 885 (0.5%) Canonical 4 (4.8%)
Canonical 13 (0.5%) Canonical 104 (0.1%) Endless 1 (1.2%)

Not many changes in these tables, but if your company uses the GNOME core platform and you wish to have a voice in where the platform goes, you should really consider contributing employee time to work upstream.

It is also very important to note that, while Red Hat still retains the majority of commits, the vast majority of committers are unaffiliated.

Methodology

The command line I used for gitdm is:

git log \
 --numstat \
 -M $START..$END | \
 gitdm -r '.*(?<!po)$' -l 20 -u -n

For GLib, I started from commit 37fcab17 which contains the version bump to 2.47, and ended on the 2.48.0 tag.

For GTK+, I started from commit 2f0d4b68 which contains the first new API of the 3.19 cycle and precedes the version bump, and ended on the 3.20.0 tag.

The only changes to the gitdm stock configuration are the addition of a couple of email/name/employer association; I can publish them on request.

glib gtk development gnome who makes gnome