ITK/Backward Compatibility Open Discussion
The topic of backward compatibility has generated animated discussions among users and developers.
We gather here multiple points of view from some of the influential users and developers.
The content of this page is not intended to be conclusive on any of the proposed topics. It simple intends to gather elements of discussion that will serve as food-for-thought.
Main Discussion Topics
Discussion Topics
- Deprecation of classes / method. When to deprecate, and how to deprecate.
- Drawing the line where fixing a bug will result in backward compatibility breaks.
- Cathedral/Bazar: How much burden to put on new contributions to the toolkit.
- Is the Insight Journal + Code Review directory a process that is too burdensome.
- When can we require additional effort from users to update their code for using new versions of ITK ?
- Never
- Once a year
- Once every five years
- How far back in time should we maintain backward compatibility (relates to the previous topic)
- Today's version should be compatible with ITK version from N years ago
- 1 year ?
- 2 years ?
- 5 years ?
- Today's version should be compatible with ITK version from N years ago
Position Statement 1 (Luis Ibanez)
Topic A
Topic B
Topic C
Position Statement 2 (Bill Lorensen)
These comments are addressing source code backward compatibility.
One of the major criticisms of open-source software is that new revisions are not compatible with old revisions. Breaking compatibility impedes the acceptance and utility of open-source software. On the other hand, strict backward compatibility polices can impede innovation in software. The tension between these two viewpoints is not easily resolved.
As projects mature and the customer base grows, backward compatibility becomes more important. Commercial hardware and software products call this customer base, the installed base. Commercial products usually have a known customer base consisting of those who have purchased or licensed the software. Also, commercial systems seldom expose internal API's. Open source projects rarely know the identities of their customers. And, since the source is open, customers have access to all public and protected classes, methods and data in the code. For open source software, it is almost impossible to determine how the customer base is using the software.
When a project hits a certain point in its life cycle, the unpleasant issue of backward compatibility begins to rear its ugly head. All of a sudden the changes introduced in a new release of the software have a dark side to them; they hold hidden possibilities that will break something one of your users depends on. This is true in both open and closed source projects, but in the open source world it seems that the community has spent less time worrying about it than in the closed source world. From “Preserving Backward Compatibility, http://www.onlamp.com/lpt/a/5626, Garrett Rooney.
The Dark Side of Extreme Programming: The nightly test/build was so effective in empowering programmers to make changes, that API changes occurred too frequently without the necessary buy-in from the user community. From “Insight Insight”, http://www.itk.org/CourseWare/Training/InsideInsight.pdf, Bill Lorensen
Some argue that open source software should be used at your own risk. But even using open source software requires an investment in time, energy and funds. Also the reputation of the development community is at risk.
...consider your user base. If you have only a dozen highly technical users, jumping through hoops to maintain backward compatibility may be more trouble than it's worth. On the other hand, if you have hundreds or thousands of nontechnical users who cannot deal with manual upgrade steps, you need to spend a lot of time worrying about those kinds of issues. Otherwise, the first time you break compatibility you'll easily burn through all the goodwill you built up with your users by providing them with a useful program. It's remarkable how easily people forget the good things from a program as soon as they encounter the first real problem. From “Preserving Backward Compatibility, http://www.onlamp.com/lpt/a/5626, Garrett Rooney.
These investments are made by customers that include developers, users and sponsors.
Topic A
Topic B
Topic C
Position Statement 3 (Steve Pieper)
This is primarily a policy discussion, and so the central issue is how to effectively communicate with users of the toolkit about what they get when they use a particular piece of code. The general policies could be summarized as:
- Different things should have different names.
- Similar things should have similar names.
- If two things have the same name, you can assume they will behave the same.
A way to interpret this is that if you come up with non-backwards compatible version of an algorithm, you should give it a new class name, like MyFilter2, rather than relying on the toolkit version number to indicate that it is different. Deprecation warnings at compile time can inform the developer that MyFilter is out of date. Dropping support for deprecated classes should happen when the toolkit itself gets a new name (like ITK4 instead of ITK3). Developers can choose when to migrate to a new class and/or a new version of the toolkit.