Version Numbering

Jeff Kletsky gnucash at allycomm.com
Mon Mar 23 12:58:08 EDT 2015


On 3/23/15 12:20 AM, John Ralls wrote:
> What about API breaks in the Scheme and Python bindings? Not something 
> most users care about, but folks with custom scripts sure do. We've 
> always said that we don't guarantee API stability between major 
> versions, but we also promote the bindings pretty heavily.
>
> I suspect that users care most about file compatibility. We've done 
> pretty well on that through the 2.x series, but along with multi-user 
> will come a shift from default XML to default SQL, and going forward 
> from that we'll want to normalize the schema, especially to move stuff 
> out of slots.
>
> The two combined would be a useful guideline: first-number changes 
> mean that you'll have to revisit your scripts or your database will be 
> upgraded so that it's not readable by the previous version except the 
> closeout release.


 From a consumer perspective, as well as speaking as a product manager 
for enterprise software, I generally expect that (after the database 
upgrade has run):

* Major version number release
     * Meaningful improvement in functionality
     * Database schema may have changed and *likely not* be even 
readable by previous versions of software with the previous major 
version number (even in last of prior major version's releases)
     * API may have changed extensively, and may not be backwards 
compatible

* Minor version number release
     * Some improvement in functionality beyond bug fixes
     * Database schema may have changed and *may not* be read/write 
compatible with previous versions of software with the same major/minor 
version number.
     * API may have been extended and certain features may have been 
deprecated (but still functional)

* "Point" release
     * Primarily bug fixes
     * Database schema may have changed, but still read/write compatible 
with previous versions of the software with the same major/minor version 
number.
     * API may have been extended and certain features may have been 
deprecated (but still functional)

If a non-backwards-compatible database schema change is absolutely 
required for a point release, I'd consider first making it a minor 
release. If that wasn't appropriate, very clear messaging in the app 
prior to running the database upgrade, along with prominent information 
in the release notes would be my approach.



Going along with this are the usual tenants of using mission-critical 
software:

* It is the user's responsibility to back-up data before upgrading 
(though I don't object to a warning before running the database upgrade 
triggers)

* It is the user's responsibility to test, evaluate, and consider the 
impact of upgrading to a new major version to determine if it provides 
benefits sufficient to outweigh unforeseen impact of changes in 
functionality, database, API, and the like *prior* to committing 
production data to the new version

* The user should be able to review release notes that clearly outline 
any deprecations, removals or significant changes in functionality, 
including API changes. These release notes ideally will indicate when a 
change has been made to the database schema.

* The user should have confidence that software vendor has tested the 
new versions against data loss, as well as unexpected regressions or 
changes in behavior. Further, that the vendor will any bugs or 
unexpected behavior should be addressed promptly.



As a consumer example, I never "expect" that if I upgrade an Android 
application that I'll be able to restore a previous version of the app 
and have it work with the database and other data from the newer version.



Personally, I'd rather more time go into the 3.x line utilizing the 
database backing store to improve performance, than having to make sure 
that "2.last" can somehow understand the new schema and revert it to XML 
or what have you.

My 2 cents, or pence, at the moment...

Jeff


More information about the gnucash-devel mailing list