{"id":1343,"date":"2018-02-03T15:25:45","date_gmt":"2018-02-03T15:25:45","guid":{"rendered":"http:\/\/dlang.org\/blog\/?p=1343"},"modified":"2021-10-08T11:06:24","modified_gmt":"2021-10-08T11:06:24","slug":"the-dbugfix-campaign","status":"publish","type":"post","link":"https:\/\/dlang.org\/blog\/2018\/02\/03\/the-dbugfix-campaign\/","title":{"rendered":"The #dbugfix Campaign"},"content":{"rendered":"<h3 id=\"whysomanybugs\">Why so many bugs?<\/h3>\n<p><img loading=\"lazy\" class=\"alignleft size-full wp-image-1345\" src=\"http:\/\/dlang.org\/blog\/wp-content\/uploads\/2018\/02\/bug.jpg\" alt=\"\" width=\"256\" height=\"156\" \/>Every major release of DMD comes with a list of closed issues <a href=\"https:\/\/issues.dlang.org\/\">from Bugzilla<\/a>. For example, looking at <a href=\"https:\/\/dlang.org\/changelog\/2.078.0.html#bugfix-list\">the changelog for DMD 2.078.0<\/a> shows the following counts for closed regressions, bugs, and enhancements: 51 for the compiler, 37 for the standard library, 6 for the runtime, 17 for the website, and 1 for the linker. That\u2019s 112 total issues, the majority related to the compiler. The total number of closed issues fluctuates between releases, but the compiler and standard library normally get the lion\u2019s share.<\/p>\n<p>This isn\u2019t news to anyone who regularly follows DMD releases. But spend enough time on the forums and you\u2019ll eventually see someone under the impression that bugs aren\u2019t getting fixed. They cite the number of open issues in the database, or the age of some of the open issues, or the fact that they can\u2019t find any formal process for fixing bugs. In reaction, it\u2019s easy to point to the changelogs, or cite the number of closed issues in the database, or bring up the number of open issues in other language compilers. And, of course, to explain once again that this is a volunteer community where people work on the things that matter to them, and organizing groups to complete specific tasks is like herding cats.<\/p>\n<p>That\u2019s all quite reasonable, but really isn\u2019t going to matter to someone who found the motivation to check D out, but is still looking for the motivation to stay. For me personally, I really don\u2019t care how many issues are in the database, or the age of the oldest. All I care about is that it works for me. But I\u2019m already invested in D. I don\u2019t need to be motivated to stick around. And while I wouldn\u2019t use a bug database as criteria to judge a new language, I can see that others do. It\u2019s akin to looking at a stable repository on GitHub and dismissing it as abandoned because of its lack of recent activity. If you don\u2019t see the whole picture, you can\u2019t make an informed judgement.<\/p>\n<p>If perception were the only issue, then it would simply be a matter of web design and PR. However, there have been, and are, people invested in D who have become frustrated because issues they reported, or that directly affect them, have languished in Bugzilla for months or even years. This can\u2019t simply be dismissed as not seeing the whole picture. This is a matter of manpower and process. A number of issues are still open because there isn&#8217;t a simple fix, or perhaps because no one has taken an interest. The set of people who can solve complex issues is small. The set of people willing to work on issues that aren&#8217;t interesting to them is smaller. But again, how do you get a disparate group of volunteers of varying skill levels to devote their free time to fixing other peoples\u2019 problems?<\/p>\n<p>This is something the D community has struggled with as it has grown. There are no easy, comprehensive solutions without a full-time team of dedicated personnel, something we simply don\u2019t have. However, it\u2019s possible that there are opportunities to take baby steps and chip away at some of these issues without the complications inherent in herding cats.<\/p>\n<h3 id=\"thedbugfixcampaign\">The #dbugfix campaign<\/h3>\n<p>To recap, there are two primary complaints about the D bug-fixing process (such as it is):<\/p>\n<ul>\n<li>Too many (old) bugs in the database<\/li>\n<li>Bugs you care about aren\u2019t getting fixed<\/li>\n<\/ul>\n<p>In an effort to alleviate these problems, one baby step to chip away at it, I\u2019m announcing the <strong>#dbugfix<\/strong> campaign.<\/p>\n<p>It works like this. If there is an issue in <a href=\"https:\/\/issues.dlang.org\/\">D\u2019s Bugzilla<\/a> that you want to see fixed, whatever the reason (maybe it\u2019s blocking you, or it\u2019s annoying you, or it\u2019s an enhancement you want, or you think it\u2019s too old \u2013 it doesn\u2019t matter), then either tweet out the issue number with <strong>#dbugfix<\/strong> in the tweet, or create a topic in <a href=\"https:\/\/forum.dlang.org\/group\/general\">the general forum<\/a> with the issue number and <strong>#dbugfix<\/strong> in the subject line. I\u2019ll monitor both Twitter and the forums and keep a running tally of issue numbers.<\/p>\n<p>A week before a major version of DMD is released (starting with 2.080.0, which is slated for May 1), I\u2019ll look at the tally and find the top five issues. I\u2019ve already gotten people to commit to fixing <em>at least<\/em> two of the top five. That doesn\u2019t mean <em>only<\/em> two. It could well be more. It depends on the complexity of the issues and how many other volunteers we can scrounge up. Hopefully, the two (or more) fixed bugs will be ready to be merged in the subsequent major release.<\/p>\n<p>In the blog post announcing each major release, I\u2019ll report on which bugs in the current release were fixed as a result of the campaign and announce the two selected for the subsequent release. If any of the top five from the previous release were not fixed, I\u2019ll call for volunteers to help so that they can be squashed as soon as possible.<\/p>\n<p>Yes, I know. We enabled voting on Bugzilla issues and that didn\u2019t change anything. That\u2019s because there was no real commitment to fixing any of the highest-voted issues. The votes simply served a guideline for the people browsing the database, looking for issues to fix. For this campaign, there really are people <em>committed<\/em> to fixing at least two of the issues that float to the top for every major release.<\/p>\n<p>But two is not a lot! No, it isn\u2019t. But it also isn\u2019t zero. As I mentioned at the top of this post, dozens of issues are already fixed with each major DMD release. The problem (for those who see it as such) is that there\u2019s currently next to zero community involvement in deciding which issues get fixed. This campaign gives the community more input into the selection process and it provides public updates on the status of that process. It is my hope that, in addition to changing perception and chipping away at the bug count, it encourages more people to help fix bugs.<\/p>\n<p>If you would like to volunteer your time and knowledge to helping out with this campaign and increase the number of <strong>#dbugfix<\/strong> bugs fixed in each release, please email me at <a href=\"mailto:aldacron@gmail.com\">aldacron@gmail.com<\/a>. For everyone else, I\u2019ve got a search for <strong>#dbugfix<\/strong> set up in my Twitter client, so start tweeting!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Every major release of DMD comes with a list of closed issues from Bugzilla. For example, looking at the changelog for DMD 2.078.0 shows the following counts for closed regressions, bugs, and enhancements: 51 for the compiler, 37 for the standard library, 6 for the runtime, 17 for the website, and 1 for the linker. That\u2019s 112 total issues, the majority related to the compiler. The total number of closed issues fluctuates between releases, but the compiler and standard library normally get the lion\u2019s share.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":[],"categories":[15,8,4],"tags":[],"_links":{"self":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts\/1343"}],"collection":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/comments?post=1343"}],"version-history":[{"count":4,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts\/1343\/revisions"}],"predecessor-version":[{"id":1361,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/posts\/1343\/revisions\/1361"}],"wp:attachment":[{"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/media?parent=1343"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/categories?post=1343"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/dlang.org\/blog\/wp-json\/wp\/v2\/tags?post=1343"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}