{"id":903,"date":"2014-05-10T00:33:26","date_gmt":"2014-05-10T05:33:26","guid":{"rendered":"http:\/\/littlesvr.ca\/grumble\/?p=903"},"modified":"2014-05-30T07:16:54","modified_gmt":"2014-05-30T12:16:54","slug":"whos-screwing-up-gtk","status":"publish","type":"post","link":"http:\/\/littlesvr.ca\/grumble\/2014\/05\/10\/whos-screwing-up-gtk\/","title":{"rendered":"Who&#8217;s screwing up GTK?"},"content":{"rendered":"<p>For many years I&#8217;ve been a fan of <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span>. I started using <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">linux<\/span><\/span> with <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK1<\/span><\/span> was dominant, as I became a developer <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK2<\/span><\/span> took over, with beautiful themes and very usable widgets. I used <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> software, feeling that the philosophy of the people who write <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> apps matches my own: less fluff and more stability.<\/p>\n<p>Then Gnome went off the rails. Ridiculous decisions like the one-window-per-folder file manager were made with utter disregard for real users&#8217; opinion. Wasn&#8217;t very good for developers either, it got so bad that Gnome was entirely removed from Slackware &#8211; something I thought might be temporary but turned out to be a permanent decision.<\/p>\n<p>Then <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span> and <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">Gnome3<\/span><\/span> came &#8211; both with apparently clear intentions but again inexplicable disregard for anyone not sharing their &#8220;vision&#8221;:<\/p>\n<ul>\n<li>Bugs were introduced (probably not on purpose) into <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK2<\/span><\/span> after <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span> was released, and those bugs will never be fixed. For example I periodically get bug reports for one of my applications which I&#8217;ve traced down to <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GtkFileChooserButton<\/span><\/span> and it&#8217;s a known issue <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">noone<\/span><\/span> will fix in <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK2<\/span><\/span>.<\/li>\n<li>Huge parts of <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK2<\/span><\/span> have been deprecated, for example:\n<ul>\n<li>The horizontal\/vertical Box layout scheme, which is how you were supposed to do all layouts in <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK2<\/span><\/span>, and despite the deprecation warnings from the compiler there has been no alternative layout mechanism identified in the documentation.<\/li>\n<li>The entire thread API, which is at the centre of any multi-threaded application. I don&#8217;t know if this was replaced with something else or dropped completely.<\/li>\n<\/ul>\n<\/li>\n<li>The new library is clearly unfinished. For example the <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GtkAboutDialog<\/span><\/span> is simply broken in the current version of <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span>.<\/li>\n<li>Serious bugs in <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span> are ignored. For example I spent a day researching why they broke the <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">scrollbars<\/span><\/span> in <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span>, found that it was probably done accidentally (the new functionality doesn&#8217;t fit even their own designs), <a href=\"https:\/\/bugzilla.gnome.org\/show_bug.cgi?id=721047\">filed a bug<\/a>, and five months later &#8211; still not so much as an acknowledgement that this is a problem.<\/li>\n<\/ul>\n<p>To be honest I think the Gnome people were always a little too fond of making major experimental changes, but I always felt that <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> itself was a bastion of stability, like the Linux kernel, GCC, Apache, etc. With <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span> that changed. Who&#8217;s running <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> now? I&#8217;ve no idea. I don&#8217;t know who was running it before either. I don&#8217;t know if it&#8217;s a leadership problem, a management problem, a financial problem, or even just a lack of technical knowhow (maybe some tech guru[s] left the project).<\/p>\n<p>I spent some time porting one of my programs (Asunder) from <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK2<\/span><\/span> to <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span>, and the problems I ran into disgusted me so much that I rolled back the &#8220;upgrade&#8221;. I wasn&#8217;t the only one either.<\/p>\n<p>If you have time (45 minutes) I recommend you watch this presentation by <a href=\"http:\/\/www.youtube.com\/watch?v=ON0A1dsQOV0\">Dirk <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">Hohndel<\/span><\/span> at linux.conf.au<\/a>, who with Linus Torvalds as a partner tried really hard to use <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> for their <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">scuba diving<\/span><\/span> application and eventually gave up in frustration. For me the highlight of the presentation was the comment on the <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> community: essentially <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">noone<\/span><\/span> in the project cares about anything other than their own goals, and their goals are not (as you might expect) to create an awesome toolkit, but rather to enable them to create <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">Gnome3<\/span><\/span>. That&#8217;s the only explanation I&#8217;ve heard or read that makes sense.<\/p>\n<p>They&#8217;re not the only ones either. I&#8217;ve run a little unofficial survey of existing software to check how many people moved to <span class=\"hiddenSpellError\">GTK3<\/span>, that was done relatively easily using these commands:<\/p>\n<p><code>cd \/<span class=\"hiddenSpellError\">usr<\/span>\/bin &amp;&amp; for F in *; do <span class=\"hiddenSpellError\">ldd<\/span> $F 2&gt; \/dev\/null | grep gtk-x11-2.0 &gt; \/dev\/null; if [ $? <span class=\"hiddenSpellError\">-eq<\/span> 0 ]; then echo \"$F\"; fi; done<\/code><\/p>\n<p>for F in *; do <span class=\"hiddenSpellError\">ldd<\/span> $F 2&gt; \/dev\/null | grep <span class=\"hiddenSpellError\">gtk-3<\/span> &gt; \/dev\/null; if [ $? <span class=\"hiddenSpellError\">-eq<\/span> 0 ]; then echo &#8220;$F&#8221;; fi; done<\/p>\n<p>The result? 83 binaries using <span class=\"hiddenSpellError\">GTK2<\/span>, and 68 using <span class=\"hiddenSpellError\">GTK3<\/span>. You can&#8217;t read too much into those numbers &#8211; at least half of them are parts of <span class=\"hiddenSpellError\">XFCE<\/span> (<span class=\"hiddenSpellError\">GTK2<\/span>) or Gnome\/Cinnamon (<span class=\"hiddenSpellError\">GTK3<\/span>) but it&#8217;s telling to look at the list rather than the numbers. Essentially <span class=\"hiddenSpellError\">noone<\/span> has moved to <span class=\"hiddenSpellError\">GTK3<\/span> except the Gnome projects and a couple of others. Hm, I wonder if they wonder why, or care&#8230;<\/p>\n<p>Dirk and Linus went on and migrated their application to Qt, and they had a lot of praise for that community. I trust them on the community part, so I decided to consider Qt as a toolkit for my next project. I have, and I wasn&#8217;t entirely happy with what I found:<\/p>\n<ul>\n<li>Writing C++ in and of itself isn&#8217;t a major issue for me, but I dislike <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">overdesigned<\/span><\/span> frameworks and that&#8217;s what Qt is.<\/li>\n<li>Qt doesn&#8217;t use native widgets, and that <span class=\"hiddenSpellError\">explains<\/span> why Qt apps never look native on any platform.<\/li>\n<li>In <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">Qt5<\/span><\/span> (the latest) you have to use JavaScript and <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">QML<\/span><\/span> for the UI, which is a bit too big a jump for me.<\/li>\n<li>But it&#8217;s supposed to work much better on other platforms (like Windows and <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">OSX<\/span><\/span>), which I believe.<\/li>\n<\/ul>\n<p>So with <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span> in limbo for years and the future of Qt unclear &#8211; I don&#8217;t know what to do for my next app. The only other realistic option I found was <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">wxWidgets<\/span><\/span>, but I fear that&#8217;s built on top of <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span> on Linux and it will simply inherit all the <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK3<\/span><\/span> problems. I&#8217;ve started creating a project in <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">wxWidgets<\/span><\/span>, but I am <span class=\"hiddenSpellError\">wary<\/span> of investing a lot more time into it until I know how this relationship will work out.<\/p>\n<p>The point of this blog post though was to bash the people currently running <span class=\"hiddenSpellError\"><span class=\"hiddenSpellError\">GTK<\/span><\/span>, because they deserve it. Shame on you for breaking something that worked.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>For many years I&#8217;ve been a fan of GTK. I started using linux with GTK1 was dominant, as I became a developer GTK2 took over, with beautiful themes and very usable widgets. I used GTK software, feeling that the philosophy of the people who write GTK apps matches my own: less fluff and more stability. &hellip; <\/p>\n","protected":false},"author":3,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3,4],"tags":[],"class_list":{"0":"entry","1":"post","2":"publish","3":"author-andrew","4":"post-903","6":"format-standard","7":"category-opensource","8":"category-safeforseneca"},"_links":{"self":[{"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/posts\/903","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/comments?post=903"}],"version-history":[{"count":6,"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/posts\/903\/revisions"}],"predecessor-version":[{"id":910,"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/posts\/903\/revisions\/910"}],"wp:attachment":[{"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/media?parent=903"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/categories?post=903"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/littlesvr.ca\/grumble\/wp-json\/wp\/v2\/tags?post=903"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}