Work has started on a new release of ROOT, called ROOT7. It attempts to fix many of the interface issues. It will introduce templates and reduce the amount of global objects. This is good news.
But ROOT needs to change much more drastically. It needs to change the way it sees itself.
The creators of ROOT saw it as a glue framework. They wanted ROOT to be the swiss army knife of data analysis, with the C++ command line interpreter as the single point of entry. They wanted you to use ROOT to query data, work on your selection, train your machine learning classifiers, perform your fits and finally design your plots. ROOT ignores the existence of other frameworks. It defines its own data containers which are incompatible with the STL. And it only writes to its own file format which can only really be read by ROOT itself.
This is the wrong approach.
C++ is neither a command line language nor a scripting language. It is not a good language to glue an analysis together. Nobody wants to call scikit-learn from ROOT via C++ → Python bindings.
ROOT is just one of many libraries that people are going to use in future. It is not the glue, it is the building block.
It should drop the C++ interpreter and start using the standard library containers wherever possible. It should get rid of its LLVM and Clang dependency and give up on the python interpreter. It should deprecated the ROOT file format in favor of HDF5. It should also remove all plotting functionality and instead make it easy to export histograms and graphs which can then be plotted with libraries like matplotlib.
The extensions, such as RooFit and TMVA, should be made as independent as possible, ideally to the point where they can be installed as independent libraries.
This would allow the users to integrate ROOT seamlessly alongside the many other frameworks that exist.
It would also reduce ROOT’s code base and allow the developers to focus on the things that ROOT does best.