Responsible Open Source Code Parenting

December 29, 2009

I'm a big fan of John Gruber's Markdown. When it comes to humane markup languages for the web, I don't think anyone's quite nailed it like Mr. Gruber. His philosophy was clear from the outset:

Markdown is intended to be as easy-to-read and easy-to-write as is feasible.

Readability, however, is emphasized above all else. A Markdown-formatted document should be publishable as-is, as plain text, without looking like it's been marked up with tags or formatting instructions. While Markdown's syntax has been influenced by several existing text-to-HTML filters – including Setext, atx, Textile, reStructuredText, Grutatext, and EtText – the single biggest source of inspiration for Markdown's syntax is the format of plain text email.

If you're an ASCII-head of any kind, you will feel immediately at home in Markdown. It was so obviously designed by someone who has done a lot of writing online, as it apes common plaintext conventions that we've collectively been using for decades now. It's certainly far more intuitive than the alternatives I've researched.

With a year and a half of real world Markdown experience under our belts on Stack Overflow, we've been quite happy. I'd say that Markdown is the worst form of markup except for all the other forms of markup that I've tried. Of course, tastes vary, and there are plenty of viable alternatives, but I'd promote Markdown without hesitation as one of the best – if not the best – humane markup options out there.

Not that Markdown is perfect, mind you. After exposing it to a large audience, both Stack Overflow and GitHub independently discovered that Markdown had three particular characteristics that confused a lot of users:

  1. URLs are never hyperlinked without placing them in some kind of explicit markup.
  2. The underscore [_] can be used to delimit bold and italic, but also works for intra-word emphasis. While a typical use like "_italic_" is clear, there are disturbing and unexpected side effects in phrases such as "some_file_name" and "file_one and file_two".
  3. It is paragraph and not line oriented. Returns are not automatically converted to linebreaks. Instead, paragraphs are detected as one or more consecutive lines of text, separated by one or more blank lines.

Items #1 and #2 are so fundamental and universal that I think they deserve to be changed in the Markdown specification itself. There was so much confusion around unexpected intra-word emphasis and the failure to auto-hyperlink URLs that we changed these Markdown rules before we even came out of private beta. Item #3, the conversion of returns to linebreaks, is somewhat more debatable. I'm on the fence on that one, but I do believe it's significant enough to warrant an explicit choice either way. It should be a standard configurable option in every Markdown implementation that you can switch on or off depending on the intended audience.

Markdown was originally introduced in 2004, and since then it has gained quite a bit of traction on the web. I mean, it's no MediaWiki (thank God), but it's in active use on a bunch of websites, some of them quite popular. And for such a popular form of markup, it's a bit odd that the last official update to the specification and reference implementation was in late 2004.

Which leads me to the biggest problem with Markdown: John Gruber.

I don't mean this as a personal criticism. John's a fantastic writer and Markdown has a (mostly) solid specification, with a strong vision statement. But the fact that there has been no improvement whatsoever to the specification or reference implementation for five years is … kind of a problem.

There are some fairly severe bugs in that now-ancient 2004 Markdown 1.0.1 Perl implementation. Bugs that John has already fixed in eight 1.0.2 betas that have somehow never seen the light of day. Sure, if you know the right Google incantations you can dig up the unreleased 1.0.2b8 archive, surreptitiously posted May 2007, and start prying out the bugfixes by hand. That's what I've had to do to fix bugs in our open sourced C# Markdown implementation, which was naturally based on that fateful (and technically only) 1.0.1 release.

I'd also expect a reference implementation to come with some basic test suites or sample input/output files so I can tell if I've implemented it correctly. No such luck; the official archives from Gruber's site include the naked Perl file along with a readme and license. The word "test" does not appear in either. I had to do a ton more searching to finally dig up MDTest 1.1. I can't quite tell where the tests came from, but they seem to be maintained by Michel Fortin, the author of the primary PHP Markdown implementation.

But John Gruber created Markdown. He came up with the concept and the initial implementation. He is, in every sense of the word, the parent of Markdown. It's his baby.

Henry aka 'Rock Hard Awesome' taking a bath

As Markdown's "parent", John has a few key responsibilities in shepherding his baby to maturity. Namely, to lead. To set direction. Beyond that initial 2004 push, he's done precious little of either. John is running this particular open source project the way Steve Jobs runs Apple – by sheer force of individual ego. And that sucks.

Since then, all I can find is sporadic activity on obscure mailing lists and a bit of passive-aggressive interaction with the community.

On 15 Mar 2008, at 02:55, John Gruber wrote:
I despise what you've done with Text::Markdown, which is to more or less make it an alias for MultiMarkdown, almost every part of which I disagree with in terms of syntax additions.
Wow, that's pretty strong language. I'm glad I'm provoking strong opinions, and it's nice to see you actively contributing to Markdown's direction ;)

Personally, I don't actually like (or use) the MultiMarkdown extensions. As noted several times on list, I do not consider what I've done to in any way be a good solution technically / internally in it's current form, and as such Markdown.pl is still a better 'reference' implementation.

However I find it somewhat ironic that you can criticise an active effort to actually move Markdown forwards (who's current flaws have been publicly acknowledged), when it passes more of your test suite than your effort does, and when you haven't even been bothered to update your own website about the project since 2004, despite having updated the code which can be found on your site (if you dig) much more recently than this.

I despise copy-pasted code, and forks for no (real) reason - seeing another two dead copies of the same code on CPAN made me sad, and so I've done something to take the situation forwards. Maybe if you'd put the effort into maintaining a community and taking Markdown.pl forwards at any time within the last 4 years, you wouldn't be in a situation where people have taken 'your baby' and perverted it to a point that you despise. If starting with Markdown.pl and going forwards with that had been an option, then that would have been my preferred route - but I didn't see any value in producing what would have been a fifth perl Markdown implementation.

It's almost at the point where John Gruber, the very person who brought us Markdown, is the biggest obstacle preventing Markdown from moving forward and maturing. It saddens me greatly to see such negligent open source code parenting. Why work against the community when you can work with it? It doesn't have to be this way. And it shouldn't be.

I think the most fundamental problem with Markdown, in retrospect, is that the official home of the project is a static set of web pages on John's site. Gruber could have hosted the Markdown project in a way that's more amenable to open source collaboration than a bunch of static HTML. I'm pretty sure SourceForge was around in late 2004, and there are lots of options for proper open source project hosting today – GitHub, Google Code, CodePlex, and so forth. What's stopping him from setting up shop on any of those sites with Markdown, right now, today? Markdown is Gruber's baby, without a doubt, but it's also bigger than any one person. It's open source. It belongs to the community, too.

Right now we have the worst of both worlds. Lack of leadership from the top, and a bunch of fragmented, poorly coordinated community efforts to advance Markdown, none of which are officially canon. This isn't merely incovenient for anyone trying to find accurate information about Markdown; it's actually harming the project's future. Maybe it's true that you can't kill an open source project, but bad parenting is surely enough to cause it to grow up stunted and maybe even a little maladjusted.

I mean no disrespect. I wouldn't bring this up if I didn't care, if I didn't think the project and John Gruber were both eminently worthy. Markdown is a small but important part of the open source fabric of the web, and the project deserves better stewardship. While the community can do a lot with the (many) open source orphan code babies out there, they have a much, much brighter future when their parents take responsibility for them.

Posted by Jeff Atwood
9 Comments

Please no baby pics in a professional blog. Babies are cute to parents, and in many cases, parents only...

Loser Big on February 13, 2010 8:40 AM

Nice post Jeff.

When it comes to Perl projects, I've found that anything significant
that isn't on the CPAN or at least aspires to migrate into it "soon",
is flying a giant red flag.

The benefits for testing, downstream packaging, and community input
are so large that to stay outside says something notable about the
nature of the project management.

Markdown, Twiki, and Kephra have all been rather flaky (although the
maintainer of Kephra has since repented).

Twiki, as I'm sure you recall, went through a rather spectacular
explosion and community fork.

If Markdown goes the same way, I wouldn't be at all surprised.

Best Regards

Adam Kennedy
CPAN Admin

Adam Kennedy on February 16, 2010 5:23 AM

[Sorry comments were down when I first read this, and I just rediscovered the post in an old tab. This irked me so much when I first read it that I'd still like to respond.]

This post is naive, self-centered, wishful thinking. You have no claim on another's time, until you start paying his wages. All of the things Atwood wants Gruber to do, Atwood should do himself, or hire someone else to do. It's not like the source code is unavailable or something.

Jess on March 5, 2010 6:36 PM

You might consider John MacFarlane's pandoc: http://johnmacfarlane.net/pandoc/

It's Markdown with fixes, pretty ASCII tables, and---best of all---a real parser with a delcarative spec, instead of the ordered-regex nightmare from the original Markdown.

Brian_Sniffen on March 25, 2010 9:49 AM

Hi Jeff, Good Topic.

Markdown is both an excellent idea and a nice tool.

The issue of project succession is a common one.

Some people are great at starting projects and taking them to completion. John Gruber is one of those. He scratched his itch and we got the rewards from it. :-)

Now the project enters a different stage of life and needs a different kind of person to shepherd it along.

What kind of person does the second stage need?

John Gruber is a full tilt, experienced, senior Software Engineer. (or has demonstrated the design intelligence, coding ability and algorithmic intelligence of same. :-) ).

The challenge of a wrestling a totally new, formless idea into a full blown implementation is the mainlined-heroin|crack|crystal-meth of software developers. Once you have the addiction nothing else satisfies. People with that addiction are the people you want driving the initial stage of a project, like a start up. 

Another reason a person cannot move their project to the second stage is that their life has changed and they can no longer have the free time and effort available to put into it. (romance, family, health, finance, changing priorities, caring for sick relatives [who will die soon and haven't finished their will...] )

Whatever the reason, the second stage of project life needs a group that wants to do things to the project making it better than it already is, or another sole developer with the time, energy and most of all, the -desire- to scratch their own itch.

Most important, it also needs the active cooperation of the original parent to move to the new stage.

Any parent can tell you it's difficult to let go of a child and even harder to deliberately put your child up for adoption. Both in real life and in the spiritual, creative sense. [ ALL types of engineering can be acts of creation identical to what every artist or craftsman has when they create. The degree of spirituality involved is determined by the amount of challenge the creator experiences, I think. :) However, We engineers will never admit this. We're Engineers dammit! Not namby pamby artists! ;-) **** ]

It is a difficult thing, but thousands of mothers place their children into adoption every year. Many who do so love their children desperately and out of that love, believing the child will have a better life, give up a baby that they love and cherish so it can have a better life.***

It can be the same for a project like this one.

I'm not trivializing the real human tragedy of such. I'm drawing the analogy of the emotional parallelism. As a biological and adoptive parent, these concepts rather leap to mind.

Being a parent isn't easy. Can Markdown grow and flourish, surviving to software adulthood or will it continue its failure to thrive and slowly, painfully wither away?

Malnutrition and slow, creeping death are horrible things for people, and a sad waste for software.

Do we need a "Software Children's Fund"? Or an adoption agency where Project starters can find qualified second stage 'parents' who've been through a vetting process?

Would we call it "ParentForge" or "Project Overflow"? :)

Attempts at humor aside, many projects never make the transition to the second stage and we are all the worse for it. The waste of effort and many fine tools is a loss for us all. Be a responsible parent, make sure your project gets to the next stage. :)

** "Singular they" usage. If you find this strange, please visit the language log and search for "prescriptivist poppycock" tags.

*** On a more serious note, please consider supporting organizations that assist children waiting to be adopted, like "Half the Sky Foundation" at http://www.halfthesky.org or if you are able to, please consider adopting.

**** See SNL|Eddie Murphy 'I'm Gumby, dammit!' - circa 1980's

jkinz on March 26, 2010 8:30 AM

Jeff .. some of us lay eggs on the beach then swim out to sea and forget about it. Some of us have kids, introduce them to a modeling career and push them straight into lip enhancement at age five, while starving them to maintain an `ideal` weight. Most of us have stable incomes and forgiving spouses which allow us to actually maintain our code. Some of us just eat our young (i.e. relicense it and demand copyright assignment) because we're actually making a profit out of it.

This is a really, really bad analogy. Quite possibly, the worst ever. It only leads to even worse analogies.

Maybe you could bring this up in a new post that does not involve children?

Tinkertim on March 28, 2010 12:04 PM

The following tips ensure that your family time will be stress free and will ensure that you will make your family memories last for a lifetime:

- Try to set at least an hour or two aside with your family, before your next scheduled activity.
- Parents have to first establish some positive uplifting points or topics for dinner table conversations. Avoid criticisms, arguing or squabbling during family dinners.

Simple parenting techniques that tame difficult kids. Free trial.
http://www.ralvic.com/parentingtips.html

Ralph on July 27, 2010 5:38 PM

I believe the image of a baby was a good mental stimulator. Evey new idea starts small and eventually grows. How we direct it's growth is what makes it good or bad when it becomes mature. http://www.ralvic.com/parenting

Ralph on August 15, 2010 3:56 AM

The overriding design goal for Markdown’s formatting syntax is to make it as readable as possible.
But some disagree -lacked a few features that would allow it to work with documents, rather than just pieces of a web page.

http://www.transformkidsnow.com/articles/temper_tantrums.htm

goodparent101 on December 29, 2010 11:40 AM

The comments to this entry are closed.