The Communications of the ACM published an article called “Version Aversion”, which discusses various approaches to using version numbers in a software project. Much of the discussion mirrors the content in my book, API Design for C++, including the use of major/minor/patch version triples, tips on when to bump each of these version numbers, and reference to more esoteric versioning schemes like the Windows operating system choice of Windows 95, Windows 98, Windows ME, Windows NT, Windows XP, etc. You’ll need access to the ACM Digital Library to read the article.
Latest Posts for 'Versioning'
Version Aversion
![]() | Thursday, November 4th, 2010 |
Preserving Backward Compatibility
![]() | Thursday, September 9th, 2010 |
Garrett Rooney wrote an article called “Preserving Backward Compatibility” where he talked about how backward and forward compatibility is maintained for Subversion, client/server source control management (SCM) system. Garrett talks about the importance of planning ahead, not throwing anything away, and of hiding the details. He also talks about exposing and hiding the dependencies of your API. This is a great article to read about how backward compatibility is maintained in a complex real-world system.
Symbian’s API Change Control Process
![]() | Wednesday, September 8th, 2010 |
The Symbian Developer wiki defines a process for public API changes to the Symbian platform. This involves a submitting a Change Request (CR) to an Architecture Council for approval before code is integrated. The main principles of their API development process are:
- Public APIs must remain backwards compatible during their lifetime.
- Public APIs can be extended with non-disruptive changes.
- Public APIs must go through a deprecation period before removal.
For details, see:
The API process is illustrated with the following figure:
KDE’s Binary Compatibility Policy
![]() | Wednesday, September 8th, 2010 |
The KDE Project offers some guidance on the difference between source and binary compatibility, and provides a great list of Do’s and Don’ts if you want to maintain binary compatibility for an API.
This document defines binary and source compatibility as:
A library is binary compatible, if a program linked dynamically to a former version of the library continues running with newer versions of the library without the need to recompile.
If a program needs to be recompiled to run with a new version of library but doesn’t require any further modifications, the library is source compatible.