{"id":123,"date":"2008-03-02T09:30:11","date_gmt":"2008-03-01T23:30:11","guid":{"rendered":"http:\/\/www.erisian.com.au\/wordpress\/?p=123"},"modified":"2008-03-02T09:30:11","modified_gmt":"2008-03-01T23:30:11","slug":"been-a-while","status":"publish","type":"post","link":"https:\/\/www.erisian.com.au\/wordpress\/2008\/03\/02\/been-a-while","title":{"rendered":"Been a while&#8230;"},"content":{"rendered":"<p>So, sometime over the past few weeks I clocked up ten years as a Debian developer:<\/p>\n<blockquote>\n<pre>\nFrom: Anthony Towns &lt;aj@humbug.org.au&gt;\nSubject: Wannabe maintainer.\nDate: Sun, 8 Feb 1998 18:35:28 +1000 (EST)\nTo: new-maintainer@debian.org\n\nHello world,\n\nI'd like to become a debian maintainer.\n\nI'd like an account on master, and for it to be subscribed to the\ndebian-private list.\n\nMy preferred login on master would have been aj, but as that's taken\najt or atowns would be great.\n\nI've run a debian system at home for half a year, and a system at work\nfor about two months. I've run Linux for two and a half years at home,\ntwo years at work. I've been active in my local linux users' group for\njust over a year. I've written a few programs, and am part way through\npackaging the distributed.net personal proxy for Debian (pending\napproval for non-free distribution from distributed.net).\n\nI've read the Debian Social Contract.\n\nMy PGP public key is attached, and also available as\n&lt;http:\/\/azure.humbug.org.au\/~aj\/aj_key.asc&gt;.\n\nIf there's anything more you need to know, please email me.\n\nThanks in advance.\n\nCheers,\naj\n\n-- \nAnthony Towns &lt;aj@humbug.org.au&gt; &lt;http:\/\/azure.humbug.org.au\/~aj\/&gt;\nI don't speak for anyone save myself. PGP encrypted mail preferred.\n\nOn Netscape GPLing their browser: ``How can you trust a browser that\nANYONE can hack? For the secure choice, choose Microsoft.''\n        -- &lt;oryx@pobox.com&gt; in a comment on slashdot.org\n<\/pre>\n<\/blockquote>\n<p>Apparently that also means I&#8217;ve clocked up ten and a half years as a Debian user; I think my previous two years of Linux (mid-95 to mid-97) were split between Slackware and Red Hat, though I couldn&#8217;t say for sure at this point.<\/p>\n<p>There&#8217;s already been a few other grand ten-year reviews, such as Joey Hess&#8217;s <a href=\"http:\/\/kitenet.net\/~joey\/blog\/entry\/ten_years_of_free_software_--_part_1_pdmenu\/\">twenty-part serial<\/a>, or LWN&#8217;s <a href=\"http:\/\/lwn.net\/Articles\/264402\/\">week-by-week review<\/a>, or ONLamp&#8217;s <a href=\"http:\/\/www.onlamp.com\/pub\/a\/onlamp\/2008\/02\/12\/a-look-back-at-10-years-of-osi.html\">interview with Bruce Perens, Eric Raymond and Michael Tiemann<\/a> on ten years of &#8220;open source&#8221;. I don&#8217;t think I&#8217;m going to try matching that sort of depth though, so here are some of my highlights (after the break). <!-- more --><\/p>\n<ul>\n<li>\n<p>Starting small: my first package was distributed-net-pproxy, which would claim a bunch of work units which could then be distributed over the local LAN. Useful if you&#8217;re in Australia in the mid-90s and being charged by the minute for Internet access. distributed.net didn&#8217;t allow general distribution, so I asked for (and received) explicit permission to include it in Debian. (distributed.net had a <a href=\"http:\/\/n0cgi.distributed.net\/cgi\/planarc.cgi?user=bovine&amp;plan=2007-04-25.06:42\">ten year anniversary<\/a> last year too)<\/p>\n<\/li>\n<li>\n<p>Diving straight in: I got sucked in to the mailing lists pretty quickly, and within a couple of months was up to my neck trying to <a href=\"http:\/\/lists.debian.org\/debian-devel\/1998\/05\/msg01756.html\">redesign the way we did releases<\/a>; oddly enough that didn&#8217;t turn out quite so easy, but at least it ended up with <a href=\"http:\/\/lists.debian.org\/debian-devel\/1998\/07\/msg02085.html\">some<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel\/1998\/07\/msg02821.html\">concrete<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel\/1998\/08\/msg00002.html\">proposals<\/a> within a couple of months, pretty much synchronously with the hamm (2.0) release going out (and, I guess, about a year after I&#8217;d started using Debian&#8230;). At around the same time was, I think, <a href=\"http:\/\/lists.debian.org\/debian-devel\/1998\/05\/msg01744.html\">my first recorded comment<\/a> about trade offs regarding freeness&#8230;<\/p>\n<\/li>\n<li>\n<p>cruft: My first bit of Debian specific code was <a href=\"http:\/\/lists.debian.org\/debian-devel\/1998\/04\/msg00434.html\">cruft<\/a> (that its name, not it&#8217;s value&#8230;), which worked okay as a prototype, but got <a href=\"http:\/\/lists.debian.org\/debian-policy\/1998\/04\/msg00089.html\">snagged up in debian-policy<\/a> trying to get packages to make a note of files they&#8217;ll put on the system without telling dpkg (eg, \/etc\/passwd, \/var\/cache\/apt\/archives\/*.deb, etc). That pretty much sapped my interest in it, and cruft stagnated until Marcin Owsiany picked it up in 2005.<\/p>\n<\/li>\n<li>\n<p>Played for a sucker, part one: a few months later I was messing around doing QA stuff and fixing bugs and as part of that did an NMU of netbase (which at the time directly contained all sorts of important tools like ping and inetd directly). That went something like:<\/p>\n<blockquote>\n<pre>\n<i>From: Anthony Towns<\/i>\n<i>Date: Sat, Nov 21, 1998<\/i>\nThere are a few bugs accumulating against the netbase package which\nyou're maintaining. I was wondering if you'd mind if I made an NMU\nto fix some of them for the upcoming slink release?\n<\/pre>\n<\/blockquote>\n<blockquote>\n<pre>\n<i>From: Peter Tobias<\/i>\n<i>Date: Sat, Nov 21, 1998<\/i>\nNo, please go ahead ... I'm quite busy right now and I would really\nappreciate any help. Please let me know if you need additional information\nabout the package.\n<\/pre>\n<\/blockquote>\n<blockquote>\n<pre>\n<i>From: Anthony Towns<\/i>\n<i>Date: Sun, Dec 6, 1998<\/i>\nThere's an NMU sitting in Incoming now. It fixes a few bugs, viz:\n<i>[...]<\/i>\n<\/pre>\n<\/blockquote>\n<blockquote>\n<pre>\n<i>From: Peter Tobias<\/i>\n<i>Date: Fri, Dec 25, 1998<\/i>\ndue to my current job I don't have much time to work on my debian\npackages. In order to have more time for my other debian packages\nI would like to give away the netbase package. Are you interested\nin maintaining this package?\n<\/pre>\n<\/blockquote>\n<blockquote>\n<pre>\n<i>From: Anthony Towns<\/i>\n<i>Date: Fri, Dec 25, 1998<\/i>\nUmmm. Sure. I guess. (or, iow, *Eeeeeeeeeeeeek*!!!)<br \/>\n<\/pre>\n<\/blockquote>\n<\/li>\n<li>\n<p>ifupdown: As part of maintaining netbase I tried to figure out a way of fixing bugs like <a href=\"http:\/\/bugs.debian.org\/31745\">31745<\/a> and <a href=\"http:\/\/bugs.debian.org\/39118\">39118<\/a>. Basically, Debian used to do networking by generating a script on install that you could modify by hand, and that was it &#8212; so when the commands needed changed between 2.0 and 2.2 (no more &#8220;route add -net&#8221;), you couldn&#8217;t make that upgrade &#8220;just work&#8221;. Red Hat handled it with &#8220;ifup&#8221; and &#8220;ifdown&#8221; commands that would look at a whole bunch of shell-format variables in \/etc, which worked but wasn&#8217;t elegant, so I came up with <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/08\/msg00207.html\">something I thought was actually pleasant<\/a>. It&#8217;s fundamental attitude is to be a parser &#8212; the networking commands are specifed as compile-time configuration, the description of your network is your runtime configuration, and ifupdown just puts those all together without trying to actually understand what&#8217;s going on. To some degree, that works really well &#8212; it keeps all the knowledge separate so when you&#8217;re writing an \/etc\/network\/interfaces, you&#8217;re not worried about how DHCP works; in others it breaks down &#8212; in particular if bringing up an interface fails part way through, is it up, or down, or something else entirely?<\/p>\n<\/li>\n<li>\n<p>bugs.debian.org: I&#8217;m not entirely sure why, but in August &#8217;99 I decided to start running a script to stop old bugs from being permanently deleted:<\/p>\n<blockquote>\n<pre>\nFrom: Anthony Towns\nSubject: BTS and old bugs\nDate: Tue, 24 Aug 1999 22:33:16 +1000\nTo: debian-private@lists.debian.org\n\nObPrivate: Erm. I'm not sure. It is only even vaguely relevant to\ndevelopers.\n\nSince bugs #9705 and #36727 don't seem like being fixed any time soon\nand Darren hasn't managed to convert the BTS to using debbugs.deb yet,\nI've made a little script to stop us from continuing to lose bug\nreports, and am running it in my crontab on master.\n\n~ajt\/debian-bugs\/archive\/ contains hardlinked copies of the bugs in\n~iwj\/debian-bugs\/spool\/db (except split into sub-directories). When\nthe bugs get expired from the BTS, the hardlink in ~ajt remains, so\nthe file doesn't get lost forever.\n\nIn the week or so I've been running it, some 500 odd bugs expired [0].\n<\/pre>\n<\/blockquote>\n<p>Next month I sent Darren Benham a first version of bugreport.cgi, and at some point around then must&#8217;ve sent off a pkreport.cgi too; by the month after (October) I&#8217;d evidently been added to the debbugs group, because I was merging my archived bugs into the official debbugs directories.<\/p>\n<\/li>\n<li>\n<p>testing: So a year and a bit later and there had been some more discussions about making major changes to our release process, and since I&#8217;d done some more algorithms subjects at university by this point, dove in a bit more seriously. For me, the main challenge seemed to be keeping dependencies consistent, and it turns out validating dependencies and conflicts is <a href=\"http:\/\/lists.debian.org\/debian-newmaint\/2007\/11\/msg00003.html\">an NP-complete problem<\/a>, and solving that reasonably efficiently seemed like a good first step. By October &#8217;99 I&#8217;d come up with a <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/10\/msg00306.html\">first pass solution<\/a>, which I think was still in Perl at the time. A <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/10\/msg00446.html\">couple<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/10\/msg00584.html\">more<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/10\/msg00894.html\">rounds<\/a> of playing with consistency checking stuff ensued, resulting in some regularly updated lists <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/10\/msg00584.html\">being generated<\/a> by December, and by March 2000 or so that had graduated to a <a href=\"http:\/\/lists.debian.org\/debian-devel\/1999\/10\/msg00894.html\">simulation of testing<\/a> as we know and love it today.<\/p>\n<\/li>\n<li>\n<p>Played for a sucker, part two: so after a few months of maintaining a testing suite while potato (Debian 2.2) was getting finalised for release I figured it&#8217;d be useful to get broader release experience, so asked Richard Braakman if I could help out with the last bits of the potato release. At which point he said &#8220;sure&#8221;, gave me James Troup&#8217;s email address for accepting\/rejecting packages etc, then buzzed off to a mobile phone related junket in the US, and laid low until the release was actually out&#8230; A cunning plan, for sure. Happily, that didn&#8217;t take too long &#8212; I think I started around June, and potato was finished baking for release at LinuxWorld Expo in August, though it did involve about 2000 lines of archive changes and stuff mailed to James over the period, <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/06\/msg00007.html\">along<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/06\/msg00008.html\">with<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/06\/msg00010.html\">half<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/06\/msg00012.html\">a<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/07\/msg00000.html\">dozen<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/07\/msg00009.html\">mails<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/07\/msg00010.html\">to<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/08\/msg00005.html\">-devel-announce<\/a>.<\/p>\n<\/li>\n<li>\n<p>Junket: In the middle of that was my first ever debconf &#8212; or technically the Debian portion of the 2000 LSM\/RMLL in Bordeaux, aka Debconf 0. It was awesome &#8212; met heaps of cool people, got to practice my high school French, and enjoy some lovely red wine while gossipping about free software. Also heard RMS sing the free software song live. But the wine was great!<\/p>\n<\/li>\n<li>\n<p>katie\/dak: The biggest problem with the &#8220;simulation of testing&#8221; mentioned above was it was held together with paperclips and sticky-tape; or less metaphorically, shell one-liners and hardlinks. Since packages would originally get uploaded to unstable, and then move into testing, and then get deleted from unstable, you&#8217;d end up at least doubling the bandwidth required to mirror Debian, because each package would get sent to mirrors once for unstable and once for testing. Which is fine for a simulation, but for deployment, well, we needed package pools, which in turned required a rewrite of <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/10\/msg00007.html\">dinstall<\/a>.<\/p>\n<p>James did all the initial work, apart from some of the schema design and the scarier SQL, and by November had it <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/11\/msg00012.html\">deployed for the non-US archive<\/a>, and got it onto <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/12\/msg00004.html\">ftp-master in December<\/a>. At which point the time was ripe for <a href=\"http:\/\/lists.debian.org\/debian-devel-announce\/2000\/12\/msg00011.html\">hooking up testing into the archive proper<\/a>, which is about the point that the testing scripts got named &#8220;britney&#8221; so as to fit in with all silly names in the da-katie suite. I&#8217;m pretty sure the rationale was that I did the final coordination of the potato release (archive changes, cd images, announcement, etc), I spent from about 3am to 10am listening to a handful of Britney Spears songs on repeat. The phrase &#8220;scarred for life&#8221; might come to mind.<\/p>\n<p>Since that point, there&#8217;s been lots of evolutionary changes to both dak and testing (including a rewrite of the perl parts of testing into python), but it&#8217;s all built fairly naturally from that point.<\/p>\n<\/li>\n<li>\n<p>debootstrap: I&#8217;m pretty sure my motivation for <a href=\"http:\/\/bugs.debian.org\/82245\">writing debootstrap<\/a> was a mix of just wanting to avoid having to worry about out of date base tarballs for the purposes of keeping testing in-sync, and wondering if it was actually possible to write a script to bootstrap a Debian system from the sort of minimally functioanl environment the installer has to put up with. In the end, it turned out pretty cool &#8212; it was used by the final boot-floppies, it&#8217;s part of d-i, it makes tools like pbuilder possible, I think it helps embedded folks heaps, it&#8217;s spawned <a href=\"http:\/\/packages.debian.org\/cdebootstrap\">some<\/a> <a href=\"http:\/\/lists.debian.org\/debian-devel\/2005\/09\/msg00345.html\">imitators<\/a>, and generally been a pretty cool exercise in hackery.<\/p>\n<\/li>\n<li>\n<p>Freedom and purity: About six months earlier, there was a big flamewar and <a href=\"http:\/\/lists.debian.org\/debian-vote\/2000\/06\/msg00000.html\">an attempted vote<\/a> on whether to remove non-free from the archive. I&#8217;d written a <a href=\"http:\/\/lists.debian.org\/debian-vote\/2000\/06\/msg00017.html\">rebuttal<\/a> and <a href=\"http:\/\/lists.debian.org\/debian-vote\/2000\/06\/msg00018.html\">counter-proposal<\/a>, but it all ended up <a href=\"http:\/\/lists.debian.org\/debian-vote\/2000\/09\/msg00007.html\">collapsing in a heap<\/a>, due to disputes about the constitution. For some reason I feel like <a href=\"http:\/\/lists.debian.org\/debian-vote\/2000\/08\/msg00008.html\">this mail<\/a> was more interesting than all the previous ones combined&#8230;<\/p>\n<p>That ended up needing a <a href=\"http:\/\/lists.debian.org\/debian-vote\/2002\/08\/msg00009.html\">whole bunch of changes<\/a> to the constitution: one to make it clear under what circumstances the social contract can be changed, and another on what happens when one option on a vote requires a supermajority while another doesn&#8217;t, and working that out ended up taking from October 2000 until October 2003. It was actually kind-of interesting; trying to analyse a good voting system that works in the real world has all sorts of interesting maths to it, and there&#8217;s a whole bunch of election methods guys that have studied it in a bunch of depth. And since its elections, you can have fun with all sorts of scenarious of corruption &#8212; <a href=\"http:\/\/lists.debian.org\/debian-vote\/2002\/03\/msg00265.html\">like what if the secretary&#8217;s trying to change the results<\/a>. In practice, the difference between good and bad election methods seems to turn out to be negligible, but why wouldn&#8217;t you have the best one you possibly can?<\/p>\n<p>A couple of months after those changes were done, dropping non-free got reproposed, and I did another <a href=\"http:\/\/lists.debian.org\/debian-vote\/2004\/02\/msg00046.html\">counter-proposal<\/a>; this time they were actually voted on, with the counter-proposal winning, by a little under a two-to-one margin. Which means we get to get rid of non-free by making it completely superfluous, rather than just near enough.<\/p>\n<\/li>\n<\/ul>\n<p>Hrm, this is going on longer than I&#8217;d hoped. Oh well, to be continued!<\/p>\n","protected":false},"excerpt":{"rendered":"<p>So, sometime over the past few weeks I clocked up ten years as a Debian developer: From: Anthony Towns &lt;aj@humbug.org.au&gt; Subject: Wannabe maintainer. Date: Sun, 8 Feb 1998 18:35:28 +1000 (EST) To: new-maintainer@debian.org Hello world, I&#8217;d like to become a debian maintainer. I&#8217;d like an account on master, and for it to be subscribed to [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":[],"categories":[4],"tags":[],"_links":{"self":[{"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/posts\/123"}],"collection":[{"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/comments?post=123"}],"version-history":[{"count":0,"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/posts\/123\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/media?parent=123"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/categories?post=123"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.erisian.com.au\/wordpress\/wp-json\/wp\/v2\/tags?post=123"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}