Tuesday, March 2, 2010

Why Open Source sucks.

Bewarned Open Source fanboys, I am most definitely prejudiced and biased against Open Source software, with a vengeance. Whatever I say and state in this blog is my opinion which you most certainly don't have to agree with. 

With that disclaimer out of the way, just to reaffirm my stand; Open Source Software sucks. I sincerely wish I could make an honest and genuine effort to try and convince you as to why I feel so, but from my experience talking to people about technology in general over the last 10 years or so has made me realize one very important point; (most) believers in the Open Source movement think of themselves as elitists of some kind or the other. They feel they have to do things differently, just because they can. If you try and reason otherwise, with a group of such people, be prepared to invite their disdain and repeatedly be called a "n00b".

And I say this out of experience as a geek, student and now a professional. I have tried on multiple occasions to dip my teacup into the simmering open source pool, to get a taste of some of the eclectic concoctions it claims to offer. However, time and again, I have had to try very hard to rid myself of the utter bitterness it left behind. Be it installing and using a Linux distro on my netbook for everyday use, trying and running some kind of an open source simulator in Linux for my assignments or getting an open source tool to work with or test an application I have developed...one word can sum up the collective experience; clusterf***. That is exactly how I end up feeling after trying to work with most open source applications.

Most. You see, until some time ago, I always used to try and justify the existence and general enthusiasm for open source software by its ability to get things done, even though I myself never found them to be less than painful. To the end user, it doesn't matter how it is done, as long as it is done. This thought process could justify using open source frameworks, applications and tools to build what the end user wouldn't have to see or interact with, the back-end. And this is true because it would be very difficult to find a website not running off of some permutation or combination of Apache, Drupal, MySQL, PHP etc. However, currently having to work with these very open source technologies to get the job done is proving to be akin to playing with a hornets nest. To be fair, there is a learning curve associated with any new endeavor you may set out on and although I don't have any real-world numbers to compare and contrast actual performance, I guess it would also be safe to say that open source applications are far leaner than their proprietary counterparts, and definitely cheaper (if not free). However, these advantages almost always come at a price. A price that is paid by the end user in terms of usability and a price paid by me as a developer in terms of compatibility and just getting things done. When this lean-mean-open-source-machine starts eating into your productivity, it becomes hard to justify its performance and cost advantages.

Let me give you an example. I had to test some scripts today. Normally, this would entail downloading and installing some executable the tool comes packed in and spending the majority of the time actually testing scripts. I would have positively wet my pants with joy if things had gone this way. Instead, I had to use an open-source tool (PHPUnit) to get the job done and at the end, I got everything but the job done! 

You see, after reading up on less than helpful (for the beginner) manuals and documentation, I realized I had to download and install the latest PHP binary on my machine to get PHPUnit up and running. After spending time reading up and deciding which one of the 4 available versions I had to get, I went along with the installation. But by now you'd have guessed it wasn't going to be that simple, right? Right! You see, for some inexplicable reason beyond the grasp of us mere mortals who haven't laid ourselves bare at the altar of the open-source gods, the installer package for PHP does not come with a library file needed to install PHPUnit, even though it is required, to go through with the installation! Maybe the elite open-source gurus found some way around using that particular library? Who knows (and cares!)...for not a single forum or board meant as a support resource for PHP knew jack-squat. It is by pure chance I figured out that the Zip package of the very same version of PHP, from the very same website contained the required file!! After extracting the files, I searched around for clues of anything remotely to do with PHPUnit itself. Nope. Nada. I apparently had to run some PHP script which would in turn pull out PHPUnit from something called a PHP Extension and Application Repository (PEAR) channel. However, some component needed to run PHPUnit had to be download from some other channel. I followed the steps to get the required components from both the channels. But it didn't let me. Apparently, the version of the PEAR installer I had (the version included in the latest binary on the PHP website FYI) was seemingly old. I first had to update it. And how do you update it? Call another PHP script that pulls out the latest version from some other PEAR channel!! I finally got, what looked like PHPUnit, running, after a good hour and 15 mins of scratching my hair and a lot of other things! Time I could have otherwise spent actually working.

And cases like this are far more the norm than the exception. There are very very few Open Source applications out there which are readily accessible, usable and supported by normal humans with normal IQ's. More often than not, you will be dealing with a project that some random whiz-kid with a lot of time in his/her hands started off to pass time. Add to this mix the contributions and extensions added by 200 other people, and you're left to deal with something that would make being shot point blank with a sawed off shotgun, after being run over by an 18-wheeler, feel positively refreshing and revitalizing.

I prefer interacting with simple clicky-pointy-GUI's over typing mind-numbingly complicated commands and arguments at the command line. I prefer double clicking the installer, have it do the rest and run the application, to extracting multiple tarballs, compiling code and running MAKE files to build and manage them and run 3 different scripts with 12 different arguments to update the application! I would definitely prefer clicking something and have it just...work, than to run something and spend hours trying to figure out how to get it to work. Why? Because I'm sane and normal, value time and want to get the job done.

Off to getting Apache solr working...