Wednesday, January 8, 2014

Some myths on Open Source, the way I see it

The Open Source movement is full of myths, there are different myths from inside the movement (i.e. those who live and breath Open Source or at least thinks it's a good thing) and outside (i.e. those who do not think Open Source really is a good idea to those who thinks Open Source is the work of the devil in a bad way (as I think some people think that something that is the work of the devil has to be a good thing. And they have a point, but let's not get into that right now).

I want to cover some of those myths here and how I look at them here. Also, I am aware that I might be stomping on one or another sensitive Open Source toe here.

Open Source software creates better code

No, I don't think this is so. But I do think that using an Open Source model properly can potentially help us create better code. But this is not same as saying that OSS always means better code. I am old enough to have been a developer when C was a "hot" programming language, and one of the virtues of C was that it made it possible to create portable code (yes, this is true, this was a supposedly big advantage). But I am also old enough to have been developing when nearly all code you wrote was for a specific machine.

But I still believe that Open Source has the potential to create better code, but then the project needs to be managed properly. I am sorry that I don't fully understand the wonders of the Internet, and I still don't fully see why taking some half-good piece of code and publishing it will suddenly make it better. Good code is good code, be it closed or open, and bad code is just plain bad, both in closed and open shape. Admittedly, there are advantages to code being open, for example that you can see that it is bad, but that assumes that you or someone else knows the code and the domain and the application well enough to be able tell that this is the case: If some code is a stinker, that's what it is, closed or open source!

Peer reviews created by opening up your code creates better code

In some cases, this is so, in others it doesn't matter. And again for this to work, the field where the code we are looking at is wide enough so more that a few people know it. As for something like MySQL, Linux or JBoss, this is simple. For something like an Open Source ERP system, things start to get more tricky. There are of course OSS ERP systems, but I have to assume that the community involvement is limited.

MySQL is a great Open Source Project

Again I am sorry, but I don't think so. As far as code, adoption and reaching out to create an SQL-based RDBMS that anyone can afford, MySQL / MariaDB has been immensely successful. But as an Open Source project, something being developed together with the community where everyone work on their end with their skills to create a great combined piece of work, MySQL has failed. This is sad, but on the other hand I'm not so sure that it would have as much influence and as wide adoption if the project would have been a "clean" Open Source project.

Let's try to image something: Someone finds a flaw in the GPL license and suddenly it is not allowed to share this code as we used to, instead it would be acquired by a corporation that owns and drives the project as Closed Source. What would happen to Linux? I think that would be devastating if say, Red Hat or IBM or someone was driving this by themselves. What about MySQL? I don't think much would change. And hence I think that MySQL just isn't that reliant on the community and is not really a community driven project. I think Linux to a much larger extent is community driven, and I also firmly believe that this is not related to the size of the project.

And to be clear, what we are talking about here is the OSS attributes of MySQL. As far as an RDBMS goes, MySQL is a fine piece of software.

Anyone can read your Open Source code and that makes you a better programmer

This I think is largely true, and this is one of the things I like best with Open Source. But even this has it's drawbacks. Compare these two developers for some project:
  • A great developer but with limited domain knowledge.
  • Someone who know the field we are developing code for really well, better than most, but is not a top notch developer, but still OK.
That someone reads the code that the latter wrote and determines it's n good, and it might even be inferior, doesn't mean that the code in terms of how it works and get's the job done right, maybe even to a greater extent then the former.

Open Source means Software Freedom

Oh yeah, load up with tomatoes and get ready to throw them now. That the code can be seen by anyone sure means more freedom, right? Well, in some ways it does, but I have two issues with this. First, this software freedom assumes that we are all developers. And not only that, it assumes that we are not only application developers, but also, for example, Database Software Developers with knowledge in C, C++ and it helps to know yacc / bison. Well, I don't have a problem with that, I write C on a daily basis and have done my share of C++ as well as yacc, but then I'm not your average user of MySQL. I am not saying that there is something wrong with being a software developer not being proficient in C, just that C is not very useful for an application developer today, although C probably still one of the big technologies for infrastructure (databases, servers of different kinds, operating system etc). For someone not knowing C, C++ etc, MySQL is just a convoluted piece of software as Oracle. And yes, you can learn C or hire someone who does, but why should you do that? The deal is that we need to separate between the Open Source developers, i.e. those who developer OSS, and Open Source Users, who actually don't get that much more "software freedom", but on the other hand, they probably do not ask for it either.

The other issue with "Software Freedom" that I have is that even though we who are somewhat "in" the OSS Developer Community have a few issues with it. When an OSS developer somewhere out there want's to know how a piece of OSS software works, so he can modify or extend it, he can just read the code, that's all there is to it? Read the Source, Luke! Well, honestly, this isn't by far as good as it sounds, to begin with, the source code doesn't tell you much about what a piece of OSS software does, but it tells you how it does it, but not even how it's supposed to be done. In effect, without proper documentation, OSS provides too much information in some cases. In addition, sometimes I get the feeling that as the source is available for anyone to read, some people think that documentation isn't necessary. But documenting how something works often tells you little about how it is supposed to be used, using the sourcecode to figure out how something is supposed to be used is akin to learning how to drive by dissecting an engine.

My conclusion

The reason I wrote this was not that I don't like Open Source as a development model, that I don't appreciate the hard work of all the OSS developers or that I prefer closed source software. But at the same time, even though OSS in my mind, for many, even most, things, is the best way of developing, distributing, licensing and using software, it's far from perfect. But it is sure is the best model I know, although it is not without it's flaws. And there are areas where OSS really isn't a good model, and I think we have to appreciate that.


No comments: