Thursday 5th November 2009
Here at Invent Partners, we spend an awful lot of our time working with open source web platforms and code from various sources. We are also involved in the development, support and deployment of a number of proprietary close source systems.
So we've got a foot in both open and closed source code, and we use both, because each has their own unique advantages.
The most obvious advantage of open source software is obvious: it is free - as the saying goes "free as in beer" - in other words, it doesn't cost anything to license the software.
But there's another important meaning of the word "free", and is this sense of the word which is open source code's greatest strength, and also often its greatest weakness.
With open source code, anybody and everybody has full access to the source code upon which the software is built: users are free to modify, extend, customise and re-distribute the code with no restriction other than a requirement that the code is distributed under its original open source license.
This is fanatastic for us as web developers, and it is great for our clients. It means that we can make whatever modifications are necessary in order to make the software behave exactly the way it needs to for the project.
...you may well ask.
The problem is that some open source web platforms have arrived in their current state by the process which I've just described. Platform code has been modified, and extended in response to a specific user's requirements. The code has been developed reactively in response to specific user's requirements.
This can lead to a situation where there is insufficient abstraction and modularity in the code. In other words, code is written to produce a specific solution to a very specific need, rather than coding more generalised improvements which provide different ways of tackling similar problems. Ultimately, this can result in software which is inefficient, inflexible, and in some case insecure or buggy.
Some open source platforms lack a central guiding hand over the codebase, setting out a roadmap for the application and auditing code quality. This can lead to fragmentation of the codebase, and ultimately result in sprawling, unmaintainable mess of code.
Its not all bad news. The best open source platforms are often the ones which do have a central authority guiding development. PHP under the guidance of Zend has become a powerful and versatile object oriented programming language for web applications. WordPress is versatile (although sometimes tricksy) blogging and content management tool. jQuery is a powerful and truly brilliant DOM abstraction library.
Both WordPress and jQuery have "plugin" libraries, where user can contribute their own extensions to the core code. Many of these plugins are very useful, but once again we need to proceeed with caution: plugin libraries are rarely given the same scrupulous code review which the core application is given. Some plugins are memory hungry, buggy, or even insecure. Just because a plugin is available via the WordPress plugin download site, it doesn't mean that it is 100% trustworthy. Before adding plugins to an open source platform, it is good idea to do your research on them. Who else is using them? Are there any known bug reports?
We really do. We use open source stuff every day and it is brilliant.
It fair to say that some commercial web platforms share the same problems as their open source equivalents. Closed source packages are able to hide their bad architectural decisions within their closed source code. That said, the advantage of a closed or single source platform is that it is more likely to have a well controlled codebase with some quality control over the output.
Web applications are great when code is developed by great people who have a clear plan, and good quality control. Not all open source code has this level of quality control.
So, in conclusion: any software platform decision should be taken with extreme care. Check on other user's experiences, and consult trusted sources before making your choice.