Cheap as Free
[Note: The WO series goes on hold while I work on other stuff for a while.]
It was at a Christmas party in Atlanta last year that my good friend Trevor Conn (I always want to spell it Kahn. Kaaaaahhhhhnnnnnnn!) started telling me about a new software development project he was working on. It was to be a web-based application developed using Java/JSP. Ahh. My bread and butter.
Trevor's background is more on the Microsoft side of the fence, so there was a bit of a paradigm shift for him. I'm not talking about syntax or event models or software frameworks. That stuff is pretty easy to figure out, and genereally there's an equilivent concept somewhere under the hood, only with a different name. In fact, there is a much deeper division that separates the Microsoft world from the Java world.
I'm talking about money.
Trevor was surprised to find out that absolutely everything he needed to do Java/JSP development was available for free. And we're not jut talking about a couple of clunky compilers that required you to do your coding in notepad. All of the best of breed development and deployment tools you could ever need if you're doing Java development are out there on the internet for the taking. And with some free support and maintenance thrown in for the bargain.
While there may be some free development tools for the Microsoft world (nAnt comes to mind) for the most part, people who develop in that world expect to, well, get paid.
Trevor was genuinely curious about this. How can all these tools be out there for no cost? As the lead developer of a free, open source project myself, I'm in a better position than many to answer that question.
Really, the answer is not all that interesting. The short answer is that, with Microsoft so dominating the game, the only price at which many products can compete is zero dollars and zero cents. For example, no one is going to pay for an operating system not made by Microsoft. Ok. Ok. I know, there are literally thousands of Mac users out there proving me wrong everyday on that one. Fine. But the point stands. The only price at which Linux competes with Windows XP is $0.00. The same is true for development tools as well.
What you have in the Java world is a number of big companies that need to compete wtih Microsoft. They fund many of the big free, open-source projects in order to a) keep the Java development community alive and b) to provide some kind of competition to Visual Studio. Thus, IBM funds Eclipse and Sun gives away the JDK and NetBeans and all kinds of other stuff. And I believe (though I've not done the research to back it up) a lot of the big boys are funding the Apache project for similar reasons.
But in addition to the high profile projects funded by big corporate dollars, you've got the little guys like my baby, SourceJammer. Why would I spend thousands of hours of my time developing a source control system just to give away? Well, ego certainly plays a part. It's a neat thing to have thousands of people out there using and depending on your software. And you can dream that maybe, just maybe you've developed the next JBoss or JEdit that will become a quasi standard in the community. This would not only be good for your ego, but also for your career, especially if the work you do for money is a bit less cutting edge and rewarding.
And there's a karma thing to it as well. Giving back what you've taken. Because I use free, open source software every single working day. From Tomcat to Eclipse to Ant to Log4J, my work depends on free software. In fact, I am so used to development tools being free that, from time to time, when I go looking for an existing solution to a problem that I must solve, if I find something that is not free I immediately get annoyed and dismiss it out of hand. How dare they charge for software!
I'll admit that this is an odd attitude, but it's not uncommon in the Java development community, I think. Something would have to be awfully important for me to ask my boss to actually pay for a license.
Now, if the world were turned around, would the Java community still be the same way? If Sun or IBM were somehow dominant and Microsoft were scrambling to keep up, would all of these great Java tools still be free? Would people like me who come up with Java solutions immediately assume that our work should be given away? Somehow I doubt it. I think the culture of free software developed as a sort of rebellion against the culture of monoply. The altruism involved, as with so much altruism, when you really dig down into it, is triggered by a selfish impulse. What it comes down to is survival.


http://www.khaaan.com/
Reading your post just now Rob, I get a sense that the best of what I've seen from the Open Source community is exactly what you say -- guys trying to design the best of some niche app which may become a standard or simply a point of pride. It seems like there must be also some drive to do it for the fun of it. Could be, I suppose, that alot of us know there's a better way to design software than what is evidenced in the spaghetti we look at every day. If some of these projects were born out of a desire to work on something better, that's great. If not payment there's at least some achievement in that the person doing it becomes a better coder/architect by virtue of their personal exploration.
I'm excited to get this first site up that's done in JSP. I'm enjoying the experience of learning Java so far, but I'm passing by alot of the stuff I hear about in terms of frameworks for implementing JSP -- Struts, ServerFaces, Hibernate. I feel like I know how to implement a solid web infrastructure just from the OO and internet work I've done. Man, I know I'm gonna make some mistakes though. Struts sounds like the coolest thing of any of the above options from what I've read. If I had to, I could probably get into that. My hosting provider runs Resin though, so it isn't even an option I don't think. Tht's one of the big things I've struggled with is the separation of logic from presentation. The ability in ASP.NET to control your UI elements in the code-behind via the runat="server" attribute is just genious, and I'm SO used to it. JSP feels annoyingly like ASP in many ways. But the MVC pattern (and thus something like Struts) mitigate alot of that.
But like you say, what I'm working on is definitely born in part out of an urge to keep learning and stay creative. Building the toolbox as they say. If money follows, that'd be nice too.