Open Source Communities «

Code: , , ,

Open source projects should be judged as much by their community as by their technological achievements. The code tells you what it’s good for, but the community tells you what its future is.

Communities need to be active to continue improving the project, deal with bugs and changes to their ecosystem. If no one is interested enough to talk about the project, none of that will happen. Newcomers need to meet experienced users to be sold on why to use the software, to get help as they learn their way around, to maybe be drawn into contributing to the project itself.

Some communities are maladjusted. They self-defeat (see the section on Bion’s support groups), they lack plans or goals, they abuse newbies to keep from growing or changing, they’re more interested in bringing something down or defending turf than building up their own project. Some successful projects start with a grudge to pick, but most that do so fail to develop their own identify, and you can hear that in a cacophony of blame and flames in their social spaces.

Productivity is the best way to tell if a community is well. Even if it doesn’t have regular releases, it needs explicit plans on a reasonable schedule to meet measurable goals. Good software is produced by careful and deliberate iteration.

All well and good, but what about the slugfest between Django and Rails? When do we get to the part where I reveal myself as an irrational, deceptive propagandist because I say anything nice about the project you don’t prefer? Better question: why is there so much vitrol between the two?

The two are far more alike than dissimilar: extracted from projects that were created in similar dynamic languages from late 2003 through 2004, their core functionality was routing URLs to templates rendered with data retrieved with an ORM.

The biggest early difference is in these two contemporaneous blog posts: Django releases, Rails turns 1. Django was wrongly seen as a Python copy of Rails on its release, though it’s just a case of convergent evolution: to solve similar problems they developed along the same lines.

If success is binary, both Rails and Django are successes. They’re strong, reliable tools for building websites quickly. They are their respective languages’ leading web frameworks. Speaking personally, I enjoy working daily in both.

If success is relative, Rails is far more successful than Django. By any measure I can take, the Rails community is at least ten times larger. For example, Indeed has more jobs and Google Trends shows more searches:

And yesterday I posted about the difference in books with a ridiculous title. The difference between eight books and dozens can’t be explained away by Python being simpler, the Django docs being better, or Rails being more of a moving target (all true); none of them would stop publishers from trying to profit from an audience. The jobs, the searches, the books: they’re imprecise metrics that all point the same direction.

Rewind. Rails and Django were roughly technologically equivalent. They were both once a little flaky and incomplete and Definitely Didn’t Scale. But with the aid of good marketing, Rails turned its earlier release into a lead in in the developer market and created a vibrant, growing community (even if that community acts out a self-parody roughly annually).

Rails has had more resources in the form of bloggers, coders, writers, trainers, and users, and it’s used them to push in far more directions than Django has. Rails has explored dead ends like components, built plugins and changed course to use better integration with its package manager, and soon the entire Merb sort-of-fork project is merging into Rails with the results of its successful experiments.

Django hasn’t moved nearly as fast, it hasn’t had the resources to make as many mistakes to learn from. The Django community is recovering from an 18 month gap between feature releases (0.96 on March 23, 2007 and 1.0 on September 3, 2008). 1.0 included a lot of great features and improvements, but it was a long, quiet year-and-half getting there while Rails was continuing to iterate.

It’s not a question comparing 1.0 minus .96 against 2.2 minus 1.2.3. It’s about activity and momentum, Django lost it while Rails has used the network effect to grow the most active web development community to build better software. Count the amount of blog posts, consultancies, newbies, rants, silliness, projects, and weaknesses addressed instead of books and see how Rails has succeeded. It is its own ecosystem instead of only being part of the web.

The difference in relative success is that Django’s still a useful tool for building good websites. Meanwhile, Rails has Changed The Web, influencing graphic design, pushing collaboration, proving the value of Javascript toolkits, driving the adoption of distributed version control. I’m not claiming Rails is singlehandedly responsible for these trends, I’m saying it’s been a dominant force in these advancements of the web.

The Django and Rails communities fight so much and so rudely because they’re too similar not to. Projects survive and thrive because they have attention from developers, and developers don’t often pick up two tools to do the same job (usually it’s one tool for every job). Community is the lifeblood of every open source project and the world of difference between Django and Rails is evidence.


  1. I have been churning out Django-based apps for over 3 years and I have never bothered to participate in any Rails vs. Django fights. I haven’t even been aware that there was any fighting going on until your blog got added to the the Django Community Aggregator. And yes I partake of the community activities and support them where I can.

    Now offer the last few years I have happened to stumbled over some Rails infighting and have been impressed by the verocity and lack of technical basis for those disagreements. I admire raw passion like that, but I hope that tradition remains a part of the Rails community and does not infect Django. We are all kind of too busy for all that.

    So please feel free to take this tripe somewhere else. Other than that, the Django community response to this stuff is likely to get as impassioned as “whatever dude”.

  2. Django is not less successful than Rails, nor is the opposite true. Success is not measured by popularity and you are confusing both.
    Django clearly delivers what it promises, “A Web framework for perfectionists with deadlines”;”Django makes it easier to build better web apps, more quickly and with less code”.

    Django is already successful, and Django’s success does not depend on Rails or having a larger community.

    Rails has influenced web development much more than Django has, it’s true, but saying that it influenced graphic design, collaboration, js toolkits and distributed version control is just too much of a stretch. Would you say that Django influenced cloud computing because of Google App Engine? How has jQuery turned into the dominant js framework if Rails uses protoype? Is design influenced by code? Are you sure? Wikipedia was built in PHP, not Rails.

    I can see where RoR influenced web developers, it was a fresh approach to a large problem, that proved to be quite popular. It influenced a huge number of developers that use not only Rails but other similar frameworks as well. That can be Rails way to measure success, but in my opinion success != popularity, and that’s why I chose Django and not Rails when I made the switch from PHP. It just fits my needs better and I can relate better to it’s goals.

    PS: If Google Trends is any indicator, you’ll see that Django has been growing steadily, and Rails declining, so should we say that Django is a better choice mid/long term?

  3. I have to agree with the two comments from Rock and Marco above. I’ve been a Django user for over a year now, knowing no Python beforehand and the reason I chose Django over Rails was for two reasons:

    A) The documentation was much more concise and clear, and didn’t make assumptions.
    B) The community members will more willing to take the time and explain themselves when I asked a question, rather than shout that I suck.

    I also tend to find that the rails community is full of “rockstar programmers” who are willing to spout out their ideas and opinions to anyone who will listen, without actually sitting down and looking at the problems or actually providing any proof.

    In terms of all the books for Django vs Rails, have you not heard the saying “Too much of a good thing”?.

    Marco also makes a good point on the influence of rails – Rails users do tend to use Prototype more often in their code or examples, yet jQuery is a much more popular library. And, any rails examples I saw, developers were putting javascript code right into the page using onclick handlers. This is just bad practice and I hope one that has stopped.

  4. OK Peter, let me defend the framework I do not prefer (and with great restraint, I will ignore Tane’s completely from freakin’ Mars post):

    1) I think popularity or trend (by whatever measure) is a bad, bad way to choose a framework. A community does not have to be the largest to be viable. It only needs to reach the point where it is self-sustaining, where the codebase and community around it can survive without the founder(s). I think Django has clearly reached that point, so I wouldn’t hesitate to use it in production. (In fact, we are… along with Rails.)

    2) Rails has had a broader influence in general, I agree. But I actually think this has helped both frameworks reach a point very very quickly where enterprise users are willing to adopt them. Remember how long it took PHP? Years and years. I remember reading endless uninformed critiques from IT managers saying… you know… it’s not ready… it can’t scale… it’s a toy… real websites are done in java… etc. etc.

    3) It’s funny you mention Merb, because the Rails community is anything but unified on the direction of RoR. Merb itself rose out of a frustration by some Rails folks who felt Rails was getting too featureful, and too bloated. It might be a stretch to say this, but I think the Merb phenomenon is basically Rails developers influenced (directly or not) by Django — or at least the Django way of doing things. Less magic, more explicit, looser coupling among components, etc. So in a way, I might argue that Django has influenced Rails — and I think for the better.

    The Merb/Rails merger also proves that, at least within the Ruby/Framework community, there is room for intelligent criticism and compromise. Now, if we could only find a way to bring that same healthy discourse to discussions outside our respective communities, we might have something.

    But, I’m not holding my breath.

  5. If it weren’t for Rails, I would have never heard about Django. I’m thankful for both projects. I wouldn’t mind developing in either, I just prefer Python and hence Django.

    I have to say that whatever fighting goes on between the two camps really doesn’t affect me as a user of the frameworks. I benefit from any improvement and competition. I feel like the author’s post focuses on a noisy minority, whereas the majority just wants a good tool to get the job done, and will take it in whatever form it comes.

  6. I feel that the Rails developers, including DHH, were much better at promoting their framework. Thus they got more attention and popularity. On top of this I think that Rails is a bit easier to setup and that it is easier to get started, because of all those sensible defaults and a certain amount of black magic ;). Especially the “black magic” thing, however, is something that many (including me) do not like much. Merb, for an example, originally started with the intention to get rid of this afaik.
    Anyway, I kinda like both frameworks and it’s good to have both. One should not forget that both frameworks helped us to get out of the PHP and J2EE world ;)

  7. Marco: That’s what I was getting at with the notion of binary success. Django has succeeded at its goals, but Rails has succeed at its goals and many other things because it had a bigger community.

    Tane: Yeah, the paragraph on maladjusted communities that hurt their newbies was written with Rails in mind. I’ve never seen “You don’t want to do that” used seriously anywhere else, it’s sad that patronizing is considered acceptable.

    As for the argument that Rails couldn’t have popularized js frameworks because jQuery is currently more successful – well, silly when I say it that way. Ford may be going out of business, but it did a lot to popularize cars. Before Prototype, JS was just seen as a bad toy language best to be ignored or used for pop-ups. I think the fundamental mechanic of Prototype, extending the built-in types, has been shown up by jQuery, but it was the first popular js library and showed that js shouldn’t be ignored. (Can you name one before it? All I’ve got is x.js, but it didn’t really go anywhere.)

    Aron: I actually like that Merb was the result of strongly differing opinions. One of the things I tried to emphasize was that large communities are valuable because they can try more of these experiments.

    I agree that picking tools by popularity is a mistake — if that made sense, I’d probably listen to [insert overhyped pop music performer] instead of good music. I said that community was important as tech, but you put it better when you say that projects need to cross a threshold of viability based on community.

    And to write in general to the reaction around this piece: I’m a little sorry to have emphasized Django and Rails so much (though it did make it more fun to write). I’m interested in them as a case study in the importance and effects of community, not for a flame war. Thanks to the folks who saw through to that.

Leave a Reply

Your email address will not be published.