{"id":911,"date":"2022-07-23T00:25:44","date_gmt":"2022-07-22T22:25:44","guid":{"rendered":"https:\/\/hpjansson.org\/blag\/?p=911"},"modified":"2022-09-13T22:34:30","modified_gmt":"2022-09-13T20:34:30","slug":"gnome-at-25-a-health-checkup","status":"publish","type":"post","link":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/","title":{"rendered":"GNOME at 25: A health checkup"},"content":{"rendered":"\n<p>Around the end of 2020, <a href=\"https:\/\/hpjansson.org\/blag\/2020\/12\/16\/on-the-graying-of-gnome\/\">I looked at GNOME's commit history as a proxy for the project's overall health<\/a>. It was fun to do and hopefully not too boring to read. A year and a half went by since then, and it's time for an update.<\/p>\n\n\n\n<p>If you're seeing these cheerful-as-your-average-<a href=\"https:\/\/en.wikipedia.org\/wiki\/Wiphala\">wiphala<\/a> charts for the first time, the <a href=\"https:\/\/hpjansson.org\/blag\/2020\/12\/16\/on-the-graying-of-gnome\/\">previous post<\/a> does a better job of explaining things. Especially so, the <a href=\"https:\/\/hpjansson.org\/blag\/2020\/12\/16\/on-the-graying-of-gnome\/#methodology\">methodology section<\/a>. It's worth a quick skim.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What's new<\/h2>\n\n\n\n<ul class=\"wp-block-list\"><li><a href=\"https:\/\/github.com\/hpjansson\/fornalder\">Fornalder<\/a> gained the ability to assign cohorts by file suffix, path prefix and repository.<\/li><li>It filters out more duplicate authors.<\/li><li>It also got better at filtering out duplicate and otherwise bogus commits.<\/li><li>I added the repositories suggested by Allan and Federico in <a href=\"https:\/\/github.com\/hpjansson\/fornalder\/issues\/3\">this GitHub issue<\/a> (<a href=\"https:\/\/github.com\/hpjansson\/fornalder\/commit\/86c9609d78dd45597da49ff0ce7189e68b3a488b\">diff<\/a>).<\/li><li>Some time passed.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Active contributors, by generation<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"900\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png\" alt=\"\" class=\"wp-image-914\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png 1920w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-300x141.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-768x360.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1536x720.png 1536w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-2048x960.png 2048w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\n\n<p>As expected, 2020 turned out interesting. First-time contributors were at the gates, numbering about 200 more than in previous years. What's also clear is that they mostly didn't stick around. The data doesn't say anything about why that is, but you could speculate that a work-from-home regime followed by a solid <a href=\"https:\/\/en.wikipedia.org\/wiki\/Staycation\">staycation<\/a> is a state of affairs conductive to finally scratching some tangential &#8212; and limited &#8212; software-themed itch, and you'd sound pretty reasonable. Office workers had more time and workplace flexibility to ponder life's great questions, like \"why is my bike shed the wrong shade of beige\" or perhaps \"how about those commits\". As one does.<\/p>\n\n\n\n<p>You could also argue that GNOME did better at merging pull requests, and that'd sound reasonable too. Whatever the cause, more people dipped their toes in, and that's unequivocally good. How to improve? Rope them into doing even more work! And <a href=\"https:\/\/www.youtube.com\/watch?v=Cj8JrQ9w5jY\">never never let them go<\/a>.<\/p>\n\n\n\n<p>2021 brought more of the same. Above the 2019 baseline, another 200 new contributors showed up, dropped patches and bounced.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Active contributors, by affiliation<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"900\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021-1920x900.png\" alt=\"\" class=\"wp-image-919\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021-1920x900.png 1920w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021-300x141.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021-768x360.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021-1536x720.png 1536w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-authors-year-2021-2048x960.png 2048w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\n\n<p>Unlike last time, I've included the Personal and Other affiliations for this one, since it puts corporate contributions in perspective; GNOME is a diverse, loosely coupled project with a particularly long and fuzzy <a href=\"https:\/\/en.wikipedia.org\/wiki\/Long_tail\">tail<\/a>. In terms of how spread out the contributor base is across the various domains, it stands above even other genuine community projects like GNU and the Linux kernel.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Commit count, by affiliation<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"900\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021-1920x900.png\" alt=\"\" class=\"wp-image-921\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021-1920x900.png 1920w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021-300x141.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021-768x360.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021-1536x720.png 1536w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-domain-commits-year-2021-2048x960.png 2048w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\n\n<p>To be fair, the volume of contributions matters. Paid developers punch way above their numbers, and as we've seen before, Red Hat throws more punches than anyone. Surely this will go on forever (nervous laugh).<\/p>\n\n\n\n<p><a href=\"https:\/\/en.wikipedia.org\/wiki\/Eazel\">Eazel<\/a> barely made the top-15 cut the last time around. It's now off the list. That's what you get for pushing the cloud, a full decade ahead of its time.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Active contributors, by repository<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"900\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021-1920x900.png\" alt=\"\" class=\"wp-image-922\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021-1920x900.png 1920w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021-300x141.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021-768x360.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021-1536x720.png 1536w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-authors-year-2021-2048x960.png 2048w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\n\n<p>Slicing the data per repository makes for some interesting observations:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Speaking of Eazel&#8230; Nautilus may be somewhat undermaintained for what it is, but it's seen worse. The 2005-2007 collapse was <em>bad<\/em>. In light of this, the drive to reduce complexity (cf. eventually removing the compact view etc) makes sense. I may have quietly gnashed my teeth at this at one point, but these days, Nautilus is very pleasant to use for small tasks. And for Big Work, you've got your terminal, a friendly shell and the GNU Coreutils. Now and forever.<\/li><li>Confirming what \"everyone knows\", the maintainership of Evolution dwindled throughout the 2010s to the point where only Milan Crha is heroically left standing. For those of us who drank long and deep of the kool-aid it's something to feel apprehensive (and somewhat guilty) about.<\/li><li>Vala played an interesting part in the GNOME infrastructure revolution of 2009-2011. Then it sort of&#8230; waned? Sure, Rust's the hot thing now, but I don't think it could eat its <em>entire<\/em> lunch.<\/li><li>GLib is seriously well maintained!<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Commit count, by repository<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"900\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021-1920x900.png\" alt=\"\" class=\"wp-image-923\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021-1920x900.png 1920w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021-300x141.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021-768x360.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021-1536x720.png 1536w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-repo-commits-year-2021-2048x960.png 2048w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\n\n<p>With commit counts, a few things pop out that weren't visible before:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>There's the not at all conspicuously named Tracker, another reminder of how transformative the 2009-2011 time frame really was.<\/li><li>The mid-2010s come off looking sort of uneventful and bland in most of the charts, but <a href=\"https:\/\/apps.gnome.org\/app\/org.gnome.Builder\/\">Builder<\/a> bucked that trend bigly.<\/li><li>Notice the big drop in commits from 2020 to 2021? It's mostly just the GTK team unwinding (presumably) after the 4.0 release.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Active contributors, by file suffix<\/h2>\n\n\n\n<figure class=\"wp-block-image size-large\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1920\" height=\"900\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021-1920x900.png\" alt=\"\" class=\"wp-image-925\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021-1920x900.png 1920w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021-300x141.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021-768x360.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021-1536x720.png 1536w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-suffix-authors-year-2021-2048x960.png 2048w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><\/a><\/figure>\n\n\n\n<p>I devised this one mainly to address a <a href=\"https:\/\/hpjansson.org\/blag\/2020\/12\/16\/on-the-graying-of-gnome\/#comment-7026\">comment from Smeagain<\/a>. It's a valid concern:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>There are a lot of people translating with each getting a single commit for whatever has been translated. During the year you get larger chunks of text to translate, then shortly before the release you finish up smaller tasks, clean up translations and you end up with lots of commits for a lot of work but it's not code. Not to discount translations bit you have a lot of very small commits.<\/p><\/blockquote>\n\n\n\n<p>I view the content agnosticism as a feature: We can't tell the difference in work investment between two code commits (perhaps a one-liner with a week of analysis behind it vs. a big chunk of boilerplate being copied in from some other module\/snippet database), so why would we make any assumptions about translations? Maybe the translator spent an hour reviewing their strings, found a few that looked suspicious, broke out their dictionary, called a friend for advice on best practice and finally landed a one-line diff. <\/p>\n\n\n\n<p>Therefore we treat content type foo the same as content type bar, big commits the same as small commits, and when tallying authors, few commits the same as many &#8212; as long as you have at least one commit in the interval (year or month), you'll be counted.<\/p>\n\n\n\n<p>However! If you look at the commit logs (and <a href=\"https:\/\/l10n.gnome.org\/\">relevant infrastructure<\/a>), it's pretty clear that hackers and translators operate as two distinct groups. And maybe there are more groups out there that we didn't know about, or the nature of the work changed over time. So we slice it by content type, or rather, file suffix (not quite as good, but <em>much<\/em> easier). For files with no suffix separator, the suffix is the entire filename (e.g. <code>Makefile<\/code>).<\/p>\n\n\n\n<p>A subtlety: Since each commit can touch multiple file types, we must decide what to do about e.g. a commit touching 10 <code>.c<\/code> files and 2 <code>.py<\/code> files. Applying the above agnosticism principle, we identify it as doing something with these two file types and assign them equal weight, resulting in .5 <code>c<\/code> commits and <code>.5<\/code> py commits. This propagates up to the authors, so if in 2021 you made the aforementioned commit plus another one that's entirely <code>vala<\/code>, you'll tally as .5 <code>c<\/code> + .5 <code>py<\/code> + 1.0 <code>vala<\/code>, and after normalization you'll be a \u00bc <code>c<\/code>, \u00bc <code>py<\/code> and \u00bd <code>vala<\/code> author that year. It's not perfect (sensitive to what's committed together), but there are enough commits that it evens out.<\/p>\n\n\n\n<p>Anyway. What can we tell from the resulting chart?<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Before Git, commit metadata used to be maintained in-band. This meant that you had to paste the log message twice (first to the ChangeLog and then as CVS commit metadata). With everyone committing to ChangeLogs all the time, it naturally (but falsely) reads as an erstwhile focal point for the project. I'm glad that's over.<\/li><li>GNOME was and is a C project. Despite all manner of rumblings, its position has barely budged in 25 years.<\/li><li>Autotools, however, was attacked and successfully dethroned. Between 2017 and 2021, <code>ac<\/code> and <code>am<\/code> gradually yielded to Meson's <code>build<\/code>.<\/li><li>Finally, translators (<code>po<\/code>) do indeed make up a big part of the community. There's a buried surprise here, though: Comparing 2010 to 2021, this group shrank a lot. Since translations are never \"done\" &#8212; in fact, for most languages they are in a perpetual state of being rather far from it &#8212; it's a bit concerning.<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">The bigger picture<\/h2>\n\n\n\n<p>I've warmed to <a href=\"https:\/\/hpjansson.org\/blag\/2020\/12\/16\/on-the-graying-of-gnome\/#comment-6953\">Philip's astute observation<\/a>:<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\"><p>Thinking about this some more, if you chop off the peak around 2010, all the metrics show a fairly steady number of contributors, commits, etc. from 2008 through to the present. Perhaps the interpretation should not be that GNOME has been in decline since 2010, but more that the peak around 2010 was an outlier.<\/p><\/blockquote>\n\n\n\n<p>Some of the big F\/OSS projects have trajectories that fit the following pattern:<\/p>\n\n\n\n<p>f (x) = \u2211 [n = 1:x] (R * (1 &#8211; a)<sup>(n &#8211; 1)<\/sup>)<\/p>\n\n\n\n<p>That is, each year <code>R<\/code> new contributors are being recruited, while a fraction <code>a<\/code> of the existing contributors leave. <code>R<\/code> and <code>a<\/code> are both fairly constant, but since attrition increases with project size while recruitment depends on external factors, they tend to find an equilibrium where they cancel each other out.<\/p>\n\n\n\n<p>For GNOME, you could pick e.g. <code>R = 130<\/code> and <code>a = .15<\/code>, and you'd come close. Then all you'd need is some sharpie magic, and&#8230;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-authors-curve-fit.png\"><img loading=\"lazy\" decoding=\"async\" width=\"1850\" height=\"1293\" src=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-authors-curve-fit.png\" alt=\"\" class=\"wp-image-928\" srcset=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-authors-curve-fit.png 1850w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-authors-curve-fit-300x210.png 300w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-authors-curve-fit-768x537.png 768w, https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-authors-curve-fit-1536x1074.png 1536w\" sizes=\"auto, (max-width: 1850px) 100vw, 1850px\" \/><\/a><figcaption><a href=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/sharpiegate.jpg\">#sharpiegate<\/a><\/figcaption><\/figure>\n\n\n\n<p>Not a bad fit. Happy <a href=\"https:\/\/events.gnome.org\/event\/77\/\">25th<\/a>, GNOME.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Around the end of 2020, I looked at GNOME's commit history as a proxy for the project's overall health. A year and a half went by since then, and it's time for an update.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[30,29,27,28],"class_list":["post-911","post","type-post","status-publish","format-standard","hentry","category-uncategorized","tag-developers","tag-free-software","tag-gnome","tag-statistics"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.3 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>GNOME at 25: A health checkup - Et tu, Cthulhu<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"GNOME at 25: A health checkup - Et tu, Cthulhu\" \/>\n<meta property=\"og:description\" content=\"Around the end of 2020, I looked at GNOME&#039;s commit history as a proxy for the project&#039;s overall health. A year and a half went by since then, and it&#039;s time for an update.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\" \/>\n<meta property=\"og:site_name\" content=\"Et tu, Cthulhu\" \/>\n<meta property=\"article:published_time\" content=\"2022-07-22T22:25:44+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2022-09-13T20:34:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png\" \/>\n<meta name=\"author\" content=\"Hans Petter Jansson\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@hpj\" \/>\n<meta name=\"twitter:site\" content=\"@hpj\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hans Petter Jansson\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\"},\"author\":{\"name\":\"Hans Petter Jansson\",\"@id\":\"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c\"},\"headline\":\"GNOME at 25: A health checkup\",\"datePublished\":\"2022-07-22T22:25:44+00:00\",\"dateModified\":\"2022-09-13T20:34:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\"},\"wordCount\":1405,\"commentCount\":5,\"publisher\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c\"},\"image\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png\",\"keywords\":[\"developers\",\"free software\",\"gnome\",\"statistics\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\",\"url\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\",\"name\":\"GNOME at 25: A health checkup - Et tu, Cthulhu\",\"isPartOf\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png\",\"datePublished\":\"2022-07-22T22:25:44+00:00\",\"dateModified\":\"2022-09-13T20:34:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage\",\"url\":\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021.png\",\"contentUrl\":\"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021.png\",\"width\":2560,\"height\":1200},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/hpjansson.org\/blag\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"GNOME at 25: A health checkup\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/hpjansson.org\/blag\/#website\",\"url\":\"https:\/\/hpjansson.org\/blag\/\",\"name\":\"Et tu, Cthulhu\",\"description\":\"Personal blag of Hans Petter Jansson: Fun with computers edition\",\"publisher\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/hpjansson.org\/blag\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c\",\"name\":\"Hans Petter Jansson\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/33402e5005b34e5ee4ba4f9fd0c5d754f4505d5fb455736e5c585676cb7f2075?s=96&d=retro&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/33402e5005b34e5ee4ba4f9fd0c5d754f4505d5fb455736e5c585676cb7f2075?s=96&d=retro&r=g\",\"caption\":\"Hans Petter Jansson\"},\"logo\":{\"@id\":\"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/image\/\"},\"sameAs\":[\"https:\/\/hpjansson.org\/\",\"https:\/\/x.com\/hpj\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"GNOME at 25: A health checkup - Et tu, Cthulhu","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/","og_locale":"en_US","og_type":"article","og_title":"GNOME at 25: A health checkup - Et tu, Cthulhu","og_description":"Around the end of 2020, I looked at GNOME's commit history as a proxy for the project's overall health. A year and a half went by since then, and it's time for an update.","og_url":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/","og_site_name":"Et tu, Cthulhu","article_published_time":"2022-07-22T22:25:44+00:00","article_modified_time":"2022-09-13T20:34:30+00:00","og_image":[{"url":"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png","type":"","width":"","height":""}],"author":"Hans Petter Jansson","twitter_card":"summary_large_image","twitter_creator":"@hpj","twitter_site":"@hpj","twitter_misc":{"Written by":"Hans Petter Jansson","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#article","isPartOf":{"@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/"},"author":{"name":"Hans Petter Jansson","@id":"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c"},"headline":"GNOME at 25: A health checkup","datePublished":"2022-07-22T22:25:44+00:00","dateModified":"2022-09-13T20:34:30+00:00","mainEntityOfPage":{"@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/"},"wordCount":1405,"commentCount":5,"publisher":{"@id":"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c"},"image":{"@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage"},"thumbnailUrl":"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png","keywords":["developers","free software","gnome","statistics"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/","url":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/","name":"GNOME at 25: A health checkup - Et tu, Cthulhu","isPartOf":{"@id":"https:\/\/hpjansson.org\/blag\/#website"},"primaryImageOfPage":{"@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage"},"image":{"@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage"},"thumbnailUrl":"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021-1920x900.png","datePublished":"2022-07-22T22:25:44+00:00","dateModified":"2022-09-13T20:34:30+00:00","breadcrumb":{"@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#primaryimage","url":"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021.png","contentUrl":"https:\/\/hpjansson.org\/blag\/wp-content\/uploads\/2022\/07\/gnome-full-firstyear-authors-year-2021.png","width":2560,"height":1200},{"@type":"BreadcrumbList","@id":"https:\/\/hpjansson.org\/blag\/2022\/07\/23\/gnome-at-25-a-health-checkup\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/hpjansson.org\/blag\/"},{"@type":"ListItem","position":2,"name":"GNOME at 25: A health checkup"}]},{"@type":"WebSite","@id":"https:\/\/hpjansson.org\/blag\/#website","url":"https:\/\/hpjansson.org\/blag\/","name":"Et tu, Cthulhu","description":"Personal blag of Hans Petter Jansson: Fun with computers edition","publisher":{"@id":"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/hpjansson.org\/blag\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":["Person","Organization"],"@id":"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/a86f9dc39a36a8184d6e6f9a759f235c","name":"Hans Petter Jansson","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/33402e5005b34e5ee4ba4f9fd0c5d754f4505d5fb455736e5c585676cb7f2075?s=96&d=retro&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/33402e5005b34e5ee4ba4f9fd0c5d754f4505d5fb455736e5c585676cb7f2075?s=96&d=retro&r=g","caption":"Hans Petter Jansson"},"logo":{"@id":"https:\/\/hpjansson.org\/blag\/#\/schema\/person\/image\/"},"sameAs":["https:\/\/hpjansson.org\/","https:\/\/x.com\/hpj"]}]}},"_links":{"self":[{"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/posts\/911","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/comments?post=911"}],"version-history":[{"count":14,"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/posts\/911\/revisions"}],"predecessor-version":[{"id":1041,"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/posts\/911\/revisions\/1041"}],"wp:attachment":[{"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/media?parent=911"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/categories?post=911"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/hpjansson.org\/blag\/wp-json\/wp\/v2\/tags?post=911"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}