Everything you always wanted to know about Versions* (*but were afraid to ask)
Versions are incredibly important in modern software development: they are the primary means by which we evolve software and communicate with other developers about the available features, compatibility and stability of our artifacts.
OSGi is also the only environment where versions are used and enforced pervasively, and thus offers an ideal environment for growing and maintaining large software systems. And yet, many OSGi developers still don't use versions properly. In fact some don't even use them at all! Instead, organizations default to synchronous releases of all the modules in their domain... an approach which initially succeeds but ultimately fails to scale, especially when software is released to the outside world. Why is this??
Because proper versioning is complex, and because existing tools force the developer to manually maintain and reason about a very large number of versioned exports and imports. The number of versions to manage quickly exceeds the capacity of any human being.
But it doesn't need to be this way; the problem is eminently manageable with tools. Developers should never have to remember to manually bump a version or reason about what range is required for a particular dependency.
In this talk I will first describe the correct use of versions in OSGi, both at the bundle and at package level. Next I will demonstrate new tools -- based on bnd, Bndtools and the R5 repository/resolver specifications -- that largely automate the process of version management, so that large software projects can be successfully evolved and released in a truly modular way.