Open source - the curse of the abundance
As this blog shows, almost every imaginable field of the programming has been covered with open source Java projects, all vying for the same #1 spot. It may seem at first that this can only be a good thing, competition driving the creators forward to create better and faster libraries. However, not all is fair in this kingdom.
A recent survey that has been performed on the XML data binding frameworks (available here) has provided me with some interesting insights. In this survey, nine different libraries have been tested for time and memory performance on the same XML input (and its Java representation). The biggest problem? Had to write code for each one of them from the scratch. Even though the JAXB API has been available from 2001, the frameworks have not adopted the proposed approach (each one because of its reasons, i'm sure). The result - each marshalling and unmarshalling class has its unique name, unique signatures for its functions and so on. The bottom line for a developer that wishes to switch implementation - no can do.
This seemingly innocent approach of reinventing the wheel (even when the original one is good enough and the only problem with it is that it wasn't invented by you) effectively prevents a potentially successful framework from taking the market lead. Suppose tomorrow a great library comes out, all blazing with performance, with full support of XSD, DTD and Relax. Who will use it? Only the new projects. The cost of switching to a new library and rewriting your code will be too prohibitive for any existing midscale up project.
In addition, this also results in libraries that have not been tested thoroughly in production environments. A recent example of this has been discussed at this entry. This particular class has test functions, they just don't cover the buggy line. It has been there since 0.6.0 version (up until the current 0.6.4). The availability of the source code and the testing by the author apparently have not been enough. The data structure market has been divided by so many players that a new player just goes unnoticed (except by Google).
Lack of coordination between different libraries (even on the most basic interface level) doesn't allow me as the end user to test the libraries by simply switching the implementation in the configuration file. The result - a really good library is sitting somewhere there languishing.