A Generation Lost in the Bazaar
Quality happens only when someone is responsible for it.
Poul-Henning Kamp
Thirteen years ago, Eric Raymond's book The Cathedral and the Bazaar (O'Reilly Media, 2001) redefined our vocabulary and all but promised an end to the waterfall model and big software companies, thanks to the new grass-roots open source software development movement. I found the book thought provoking, but it did not convince me. On the other hand, being deeply involved in open source, I couldn't help but think that it would be nice if he was right.
The book I brought to the beach house this summer is also thought provoking, much more so than Raymond's (which it even mentions rather positively): Frederick P. Brooks's The Design of Design (Addison-Wesley Professional, 2010). As much as I find myself nodding in agreement and as much as I enjoy Brooks's command of language and subject matter, the book also makes me sad and disappointed.
Thirteen years ago also marks the apogee of the dot-com euphoria, where every teenager was a Web programmer and every college dropout had a Web startup. I had genuine fun trying to teach some of those greenhorns about the good old-fashioned tricks of the trade—test-restoring backups, scripting operating-system installs, version control, etc. Hindsight, of course, is 20/20 (i.e., events may have been less fun than you remember), and there is no escaping that the entire dot-com era was a disaster for IT/CS in general and for software quality and Unix in particular.
I have not seen any competent analysis of how much bigger the IT industry became during the dot-com years. My own estimate is that—counted in the kinds of jobs that would until then have been behind the locked steel doors of the IT department—our trade grew by two orders of magnitude, or if you prefer, by more than 10,000 percent.
Getting hooked on computers is easy—almost anybody can make a program work, just as almost anybody can nail two pieces of wood together in a few tries. The trouble is that the market for two pieces of wood nailed together—inexpertly—is fairly small outside of the "proud grandfather" segment, and getting from there to a decent set of chairs or fitted cupboards takes talent, practice, and education. The extra 9,900 percent had neither practice nor education when they arrived in our trade, and before they ever had the chance to acquire it, the party was over and most of them were out of a job. I will charitably assume that those who managed to hang on were the most talented and most skilled, but even then there is no escaping that as IT professionals they mostly sucked because of their lack of ballast.
The bazaar meme advocated by Raymond, "Just hack it," as opposed to the carefully designed cathedrals of the pre-dot-com years, unfortunately did, not die with the dot-com madness, and today Unix is rapidly sinking under its weight.
I updated my laptop. I have been running the development version of FreeBSD for 18 years straight now, and compiling even my Spartan work environment from source code takes a full day, because it involves trying to make sense and architecture out of Raymond's anarchistic software bazaar.
At the top level, the FreeBSD ports collection is an attempt to create a map of the bazaar that makes it easy for FreeBSD users to find what they need. In practice this map consists, right now, of 22,198 files that give a summary description of each stall in the bazaar—a couple of lines telling you roughly what that stall offers and where you can read more about it. Also included are 23,214 Makefiles that tell you what to do with the software you find in each stall. These Makefiles also try to inform you of the choices you should consider, which options to choose, and what would be sensible defaults for them. The map also conveniently comes with 24,400 patch files to smooth over the lack of craftsmanship of many of the wares offered, but, generally, it is lack of portability that creates a need for these patch files.
Finally, the map helpfully tells you that if you want to have www/firefox, you will first need to get devel/nspr, security/nss, databases/sqlite3, and so on. Once you look up those in the map and find their dependencies, and recursively look up their dependencies, you will have a shopping list of the 122 packages you will need before you can get to www/firefox.
Modularity and code reuse are, of course, A Good Thing. Even in the most trivially simple case, however, the CS/IT dogma of code reuse is totally foreign in the bazaar: the software in the FreeBSD ports collection contains at least 1,342 copied and pasted cryptographic algorithms.
If that resistance/ignorance of code reuse had resulted in self-contained and independent packages of software, the price of the code duplication might actually have been a good tradeoff for ease of package management. But that was not the case: the packages form a tangled web of haphazard dependencies that results in much code duplication and waste.
Here is one example of an ironic piece of waste: Sam Leffler's graphics/libtiff is one of the 122 packages on the road to www/firefox, yet the resulting Firefox browser does not render TIFF images. For reasons I have not tried to uncover, 10 of the 122 packages need Perl and seven need Python; one of them, devel/glib20, needs both languages for reasons I cannot even imagine.
Further down the shopping list are repeated applications of the Peter Principle, the idea that in an organization where promotion is based on achievement, success, and merit, that organization's members will eventually be promoted beyond their level of ability. The principle is commonly phrased, "Employees tend to rise to their level of incompetence." Applying the principle to software, you will find that you need three different versions of the make program, a macroprocessor, an assembler, and many other interesting packages. At the bottom of the food chain, so to speak, is libtool, which tries to hide the fact that there is no standardized way to build a shared library in Unix. Instead of standardizing how to do that across all Unixen—something that would take just a single flag to the ld(1) command—the Peter Principle was applied and made it libtool's job instead. The Peter Principle is indeed strong in this case—the source code for devel/libtool weighs in at 414,740 lines. Half that line count is test cases, which in principle is commendable, but in practice it is just the Peter Principle at work: the tests elaborately explore the functionality of the complex solution for a problem that should not exist in the first place. Even more maddening is that 31,085 of those lines are in a single unreadably ugly shell script called configure. The idea is that the configure script performs approximately 200 automated tests, so that the user is not burdened with configuring libtool manually. This is a horribly bad idea, already much criticized back in the 1980s when it appeared, as it allows source code to pretend to be portable behind the veneer of the configure script, rather than actually having the quality of portability to begin with. It is a travesty that the configure idea survived.
The 1980s saw very different Unix implementations: Cray-1s with their 24-bit pointers, Amdahl UTS mainframe Unix, a multitude of more or less competently executed SysV+BSD mashups from the minicomputer makers, the almost—but not quite—Unix shims from vendors such as Data General, and even the genuine Unix clone Coherent from the paint company Mark Williams.
The configure scripts back then were written by hand and did things like figure out if this was most like a BSD- or a SysV-style Unix, and then copied one or the other Makefile and maybe also a .h file into place. Later the configure scripts became more ambitious, and as an almost predictable application of the Peter Principle, rather than standardize Unix to eliminate the need for them, somebody wrote a program, autoconf, to write the configure scripts.
Today's Unix/Posix-like operating systems, even including IBM's z/OS mainframe version, as seen with 1980 eyes are identical; yet the 31,085 lines of configure for libtool still check if <sys/stat.h> and <stdlib.h> exist, even though the Unixen, which lacked them, had neither sufficient memory to execute libtool nor disks big enough for its 16-MB source code.
How did that happen?
Well, autoconf, for reasons that have never made sense, was written in the obscure M4 macro language, which means that the actual tests look like this:
## Whether `make' supports order-only prerequisites.
AC_CACHE_CHECK([whether ${MAKE-make} supports order-only prerequisites],
[lt_cv_make_order_only],
[mkdir conftest.dir
cd conftest.dir
touch b
touch a
cat >confmk << 'END'
a: b | c
a b c:
touch $[]@
END
touch c
if ${MAKE-make} -s -q -f confmk >/dev/null 2>&1; then
lt_cv_make_order_only=yes
else
lt_cv_make_order_only=no
fi
cd ..
rm -rf conftest.dir
])
if test $lt_cv_make_order_only = yes; then
ORDER='|'
else
ORDER=''
fi
AC_SUBST([ORDER])
Needless to say, this is more than most programmers would ever want to put up with, even if they had the skill, so the input files for autoconf happen by copy and paste, often hiding behind increasingly bloated standard macros covering "standard tests" such as those mentioned earlier, which look for compatibility problems not seen in the past 20 years.
This is probably also why libtool's configure probes no fewer than 26 different names for the Fortran compiler my system does not have, and then spends another 26 tests to find out if each of these nonexistent Fortran compilers supports the -g option.
That is the sorry reality of the bazaar Raymond praised in his book: a pile of old festering hacks, endlessly copied and pasted by a clueless generation of IT "professionals" who wouldn't recognize sound IT architecture if you hit them over the head with it. It is hard to believe today, but under this embarrassing mess lies the ruins of the beautiful cathedral of Unix, deservedly famous for its simplicity of design, its economy of features, and its elegance of execution. (Sic transit gloria mundi, etc.)
One of Brooks's many excellent points is that quality happens only if somebody has the responsibility for it, and that "somebody" can be no more than one single person—with an exception for a dynamic duo. I am surprised that Brooks does not cite Unix as an example of this claim, since we can pinpoint with almost surgical precision the moment that Unix started to fragment: in the early 1990s when AT&T spun off Unix to commercialize it, thereby robbing it of its architects.
More than once in recent years, others have reached the same conclusion as Brooks. Some have tried to impose a kind of sanity, or even to lay down the law formally in the form of technical standards, hoping to bring order and structure to the bazaar. So far they have all failed spectacularly, because the generation of lost dot-com wunderkinder in the bazaar has never seen a cathedral and therefore cannot even imagine why you would want one in the first place, much less what it should look like. It is a sad irony, indeed, that those who most need to read it may find The Design of Design entirely incomprehensible. But to anyone who has ever wondered whether using m4 macros to configure autoconf to write a shell script to look for 26 Fortran compilers in order to build a Web browser was a bit of a detour, Brooks offers well-reasoned hope that there can be a better way.
LOVE IT, HATE IT? LET US KNOW
feedback@queue.acm.org
Poul-Henning Kamp (phk@FreeBSD.org) has programmed computers for 26 years and is the inspiration behind bikeshed.org. His software has been widely adopted as under-the-hood building blocks in both open source and commercial products. His most recent project is the Varnish HTTP accelerator, which is used to speed up large Web sites such as Facebook.
© 2012 ACM 1542-7730/12/0800 $10.00
![]()
Originally published in Queue vol. 10, no. 8—
see this item in the ACM Digital Library
POUL-HENNING KAMP (phk@FreeBSD.org) is one of the primary developers of the FreeBSD operating system, which he has worked on from the very beginning. He is widely unknown for his MD5-based password scrambler, which protects the passwords on Cisco routers, Juniper routers, and Linux and BSD systems. Some people have noticed that he wrote a memory allocator, a device file system, and a disk encryption method that is actually usable. Kamp lives in Denmark with his wife, his son, his daughter, about a dozen FreeBSD computers, and one of the world's most precise NTP (Network Time Protocol) clocks. He makes a living as an independent contractor doing all sorts of stuff with computers and networks.
For additional information see the ACM Digital Library Author Page for: Poul-Henning Kamp


William Payne | Mon, 20 Aug 2012 14:31:12 UTC
phd_student_doom | Mon, 20 Aug 2012 15:10:25 UTC
Matt Welsh | Mon, 20 Aug 2012 15:13:22 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 15:25:27 UTC
Ken Stox | Mon, 20 Aug 2012 15:48:13 UTC
iain | Mon, 20 Aug 2012 15:48:55 UTC
Kevin Vilbig | Mon, 20 Aug 2012 15:54:38 UTC
philip andrew | Mon, 20 Aug 2012 15:54:51 UTC
Mark dugger | Mon, 20 Aug 2012 15:57:16 UTC
Phil Regnauld | Mon, 20 Aug 2012 16:04:28 UTC
Poul-Henning, spot on. But it's an onset of different factors, not just the "open source" movement. This perfect storm: a lack of vision, the internet, combined with a penchant for instant gratification ("TL;DR" mindset) has brought this about. You only have to read the second comment to convince yourself ("the 'chaos' is what makes programming fun"). No chance I'll be flying a plane where someone like this has contributed code :) But I think you may have another article to write on quality and responsibility. Cf. Dan's excellent talk on software testing (Flying Linux - www.usenix.org/event/lisa04/tech/talks/klein.pdf)Jeremy Huffman | Mon, 20 Aug 2012 16:04:49 UTC
KP Freds | Mon, 20 Aug 2012 16:10:45 UTC
metageek | Mon, 20 Aug 2012 16:11:54 UTC
rdm | Mon, 20 Aug 2012 16:15:22 UTC
drsoong | Mon, 20 Aug 2012 16:32:25 UTC
Fazal Majid | Mon, 20 Aug 2012 16:38:59 UTC
KP Freds | Mon, 20 Aug 2012 16:47:20 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 16:52:15 UTC
Jacob Hallén | Mon, 20 Aug 2012 16:54:10 UTC
David Kastrup | Mon, 20 Aug 2012 16:56:12 UTC
Tom Alexander | Mon, 20 Aug 2012 17:13:21 UTC
metageek | Mon, 20 Aug 2012 17:14:44 UTC
maht | Mon, 20 Aug 2012 17:26:33 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 17:28:39 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 17:30:00 UTC
Steve | Mon, 20 Aug 2012 17:36:12 UTC
Shawn Garbett | Mon, 20 Aug 2012 17:48:31 UTC
Eric S. Raymond | Mon, 20 Aug 2012 17:52:05 UTC
iain | Mon, 20 Aug 2012 17:53:09 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 18:01:05 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 18:02:41 UTC
RORVI | Mon, 20 Aug 2012 18:07:41 UTC
Andre | Mon, 20 Aug 2012 18:11:00 UTC
David F. Skoll | Mon, 20 Aug 2012 18:14:35 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 18:20:48 UTC
rayohauno | Mon, 20 Aug 2012 18:28:56 UTC
anon | Mon, 20 Aug 2012 18:42:23 UTC
CuriousWayne | Mon, 20 Aug 2012 18:44:50 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 18:45:02 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 18:47:53 UTC
Tommy McGuire | Mon, 20 Aug 2012 18:53:45 UTC
Paul W. Homer | Mon, 20 Aug 2012 18:57:00 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 19:03:59 UTC
Justin Alan Ryan | Mon, 20 Aug 2012 19:10:58 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 19:21:21 UTC
Dear Justin, Thanks for illustrating my point about the ignorance of the lost generation so forcefully. You clearly have no idea about what a cathedral is in this context, you clearly did not bother to find out and you spew random insults at the author, without even bothering to check if you were about to make a total ass of youself thereby. The reason I run FreeBSD is that I wrote a very significant part of it and therefore I probably know more about dependencies than you ever will. Building the perl/python bindings as part of glibc is ass backwards in my book. As for your "fucking mac", last I checked, my name was 35 times in the kernel of the open source version ("Darwin") of the OSX kernel.Peter Lindhard | Mon, 20 Aug 2012 19:43:38 UTC
mcur | Mon, 20 Aug 2012 19:50:47 UTC
Sven Türpe | Mon, 20 Aug 2012 19:54:50 UTC
Rick Russell | Mon, 20 Aug 2012 20:26:14 UTC
Elizabeth Marston | Mon, 20 Aug 2012 20:30:09 UTC
Elizabeth Marston | Mon, 20 Aug 2012 20:51:55 UTC
Hector Correa | Mon, 20 Aug 2012 20:53:47 UTC
Mike Smith | Mon, 20 Aug 2012 21:16:28 UTC
Poul-Henning Kamp | Mon, 20 Aug 2012 21:19:50 UTC
Elizabeth Marston | Mon, 20 Aug 2012 21:43:42 UTC
Jonathan Abbey | Mon, 20 Aug 2012 21:45:25 UTC
David F. Skoll | Mon, 20 Aug 2012 22:01:29 UTC
Kartik Agaram | Mon, 20 Aug 2012 22:09:57 UTC
Anton Striklov | Mon, 20 Aug 2012 22:11:16 UTC
ford p | Mon, 20 Aug 2012 23:54:18 UTC
Bernd Jendrissek | Tue, 21 Aug 2012 02:54:11 UTC
mike mccafferty | Tue, 21 Aug 2012 03:19:19 UTC
Terry Lambert | Tue, 21 Aug 2012 03:51:25 UTC
Max Kanat-Alexander | Tue, 21 Aug 2012 05:33:19 UTC
Justen | Tue, 21 Aug 2012 05:45:25 UTC
Justen | Tue, 21 Aug 2012 06:43:22 UTC
Pete | Tue, 21 Aug 2012 07:10:25 UTC
holger | Tue, 21 Aug 2012 10:22:05 UTC
Alkonaut | Tue, 21 Aug 2012 10:41:13 UTC
foljs | Tue, 21 Aug 2012 10:42:18 UTC
Glenn French II | Tue, 21 Aug 2012 12:32:15 UTC
David MacKenzie | Tue, 21 Aug 2012 13:34:45 UTC
Frank Greco | Tue, 21 Aug 2012 14:48:55 UTC
Poul-Henning Kamp | Tue, 21 Aug 2012 17:58:42 UTC
Marty Fouts | Tue, 21 Aug 2012 19:09:26 UTC
Mr Kamp is right, but it is clear from the responses that he is not well understood. I have programmed professionally since 1972. At that time the computer industry was already twenty years old, but those of us who entered it studied its history and learned from it. Sometime between 1980 and 1990 that willingness to learn lessons from past projects disappeared, while a sense of hubris entered the industry, epitomized by the conversion of our job titles from "programmer" to "engineer" that took root in the 1980s. Now, the computer industry is always twenty years old, and those who come to the profession no longer learn the lessons of the past. Recently, an algorithms "expert" I interviewed, admitted to having no idea who Don Knuth was, or why they should be aware of his work. Such interviews are becoming more, not less, common. I can point at hundreds of such examples of dumbing-down in the industry: OS kernel developers who can not describe the difference between a write-through and a write-back cache; people claiming to be C++ experts who can not enumerate the member function in the class definition 'class f {};' C# programmers who can associate the concepts involved in boxing with the underlying mechanisms of stacks and heaps, nor describe the machine level implementation of either. The list is endless. Nor is it limited to the people who entered the industry in the early 2000s and remain. It is a trend that continues to this day. University computer science programs are laughable, and the produce both the above, and at the other extreme, the sort of highly intelligent but extremely inexperienced people that companies like Google hire and that go on to produce abominations like the build system for ChromiumOS. Or the people at Microsoft, who because of the nature of its career path are always moving to new projects for which they have no experience. Microsoft's software looks like it was written by people with three years of experience and no mentoring because it was. Even programmers who have been there for two decades have rarely worked in one area for more than a couple of years before moving on to something else. We are sinking in a morass of mediocrity. In a world where every programmer, regardless their background, experience, or training, is a 'senior software engineer', we should expect no less.Roboknight | Tue, 21 Aug 2012 20:02:19 UTC
Alexander Vlasov | Tue, 21 Aug 2012 22:30:41 UTC
sl | Wed, 22 Aug 2012 01:06:33 UTC
Ivan | Wed, 22 Aug 2012 02:34:30 UTC
Klapauzius | Wed, 22 Aug 2012 09:47:13 UTC
Poul-Henning Kamp | Wed, 22 Aug 2012 11:05:51 UTC
Christophe de Dinechin | Wed, 22 Aug 2012 14:31:41 UTC
Dan Cross | Wed, 22 Aug 2012 14:38:18 UTC
Irene Knapp | Wed, 22 Aug 2012 15:07:29 UTC
denisroyle | Wed, 22 Aug 2012 16:55:01 UTC
Poul-Henning Kamp | Wed, 22 Aug 2012 18:15:03 UTC
Dan Cross | Wed, 22 Aug 2012 20:25:35 UTC
Poul-Henning: The intent with my intellectual curiosity remark had to do with questioning basic assumptions (e.g., "we use autoconf because we've always used autoconf"). This should not be taken to imply that people aren't curious about other things; my concern is that the curiosity about the basics is no longer there ("do we need to use autoconf?"). Had I written your polemic, I would have avoided the cathedral metaphor: it's too overloaded, and I feel that your point has become obscured in the ensuing rhetoric. If I understand you correctly, you mention cathedrals because, by and large, they are beautiful. You are then lamenting the seeming inability of the 'lost generation' to recognize beauty in design and implementation of software, as evidenced by the bloated layers upon layers of cruft that have become the norm (autoconf is just a specific example). I would have used another metaphor to more clearly highlight the argument; say, contrasting between the works of a dutch master or a child's finger painting. Or maybe between a Jackson Pollock and a child's finger painting. There are superficial similarities, but one has sublime aspects of beauty that the other does not, and these take a certain about of refinement to appreciate. It's that refinement that's missing in too many cases. Many would argue that similar refinement has been missing from the Unix community almost since its inception: are they wrong? To some extent these things ARE subjective, and calling one group a 'lost generation' without acknowledging that one may be lost oneself is a tad bit dishonest. Like the Sphere from "flatland" that cannot fathom a 4th or higher dimension, some of the older generation struggle similarly; I know I sure do. Sure, things are reinvented and the reinventers aren't even aware of it because they haven't studied the literature well enough to become acquainted with the full body of work in the relevant field, but the same is true of experienced practitioners as well: e.g., your rediscovery of d-heaps. The seemingly recent rediscovery of DSLs by the design-patterns set. Lisp being rediscovered again and again and again. Etc. PS: I have nothing against command line interfaces. In fact, by and large I prefer them. What I object to is the Unix-centric notion that command line interfaces must be tied to the implementation details of 1970s era hardware devices that have become mostly irrelevant (I realize people still occasionally use serial terminals, but as a primary environment that has become as rare as caring about the name of the FORTRAN-77 compiler on some obscure Unix variant). As far as credible substitutes for the Unix pseudo-tty model: Plan 9 has already been mentioned and the command windows of rio and acme are perfectly usable (many would argue superior) and don't emulate VT100s or have any notion of a BAUD rate.Jussi Pakkanen | Wed, 22 Aug 2012 21:11:52 UTC
Poul-Henning Kamp | Wed, 22 Aug 2012 23:07:41 UTC
sl | Thu, 23 Aug 2012 00:59:00 UTC
denisroyle@gmail.com | Thu, 23 Aug 2012 02:38:32 UTC
Dan Cross | Thu, 23 Aug 2012 12:40:02 UTC
Poul-Henning Kamp | Thu, 23 Aug 2012 19:39:19 UTC
Vadim Goncharov | Thu, 23 Aug 2012 22:26:22 UTC
Joseph | Thu, 23 Aug 2012 23:52:40 UTC
Ganesan Rajagopal | Fri, 24 Aug 2012 12:31:50 UTC
Dan Cross | Fri, 24 Aug 2012 19:18:48 UTC
Zygo | Sat, 25 Aug 2012 07:09:04 UTC
Dan Haffey | Sat, 25 Aug 2012 23:39:06 UTC
Soren | Mon, 27 Aug 2012 09:02:10 UTC
Peter | Tue, 28 Aug 2012 02:49:26 UTC
Martin | Tue, 28 Aug 2012 22:32:10 UTC
Gregor | Fri, 31 Aug 2012 23:30:34 UTC
Charles | Wed, 05 Sep 2012 08:37:15 UTC
Erik Nordstroem | Fri, 07 Sep 2012 01:36:25 UTC
Tom Barrett | Mon, 10 Sep 2012 17:55:45 UTC
clockskew | Fri, 14 Sep 2012 11:42:06 UTC
Ralph Dratman | Fri, 14 Sep 2012 17:49:23 UTC
Rod Grimes | Mon, 24 Sep 2012 10:19:25 UTC
IGnatius T Foobar | Fri, 05 Oct 2012 12:28:54 UTC
Howard B. Golden | Sat, 03 Nov 2012 21:17:43 UTC
Daniel Dumitriu | Tue, 06 Nov 2012 06:07:47 UTC
k | Wed, 07 Nov 2012 03:28:32 UTC
Cellar | Fri, 09 Nov 2012 11:56:05 UTC
HELLYO protocol | Fri, 09 Nov 2012 13:29:20 UTC
Justin Wiley | Fri, 09 Nov 2012 15:51:51 UTC
sed gawk | Fri, 09 Nov 2012 21:28:50 UTC
Daniel Martinez | Sat, 10 Nov 2012 16:53:16 UTC
fishburger | Mon, 12 Nov 2012 11:06:21 UTC
warren | Tue, 13 Nov 2012 23:50:37 UTC
Farid Hajji | Sun, 02 Dec 2012 21:53:24 UTC
Ron Minnich | Wed, 05 Dec 2012 18:12:30 UTC
Ranjit Singh | Fri, 21 Dec 2012 13:46:15 UTC
M. Simon | Wed, 26 Dec 2012 06:08:40 UTC
E. Sarmas | Wed, 26 Dec 2012 12:52:51 UTC
M. Simon | Wed, 26 Dec 2012 22:11:51 UTC
David Ormand | Wed, 02 Jan 2013 19:03:16 UTC
Dan Cross | Thu, 14 Feb 2013 21:22:03 UTC
Dave Wyland | Mon, 01 Apr 2013 18:55:21 UTC
ZenBowman | Wed, 08 May 2013 01:31:53 UTC