Hello all,

Guacamole has been in never-ending 0.9.x mode for a while, with a few huge
releases still receiving no more than a patch number bump. I think we
should look to migrating to a version numbering scheme which forces us to
assign numbers more rigorously based on compatibility and the nature of
changes made.

Currently, our answer to "what version of X should I use?" is to use the
latest version possible and not mix libraries/software from different
Guacamole releases. This is difficult to apply in practice, particularly
when the version of guacamole-common, guacamole-common-js, guacamole-ext,
etc. are not bumped due to not being modified in a particular release. The
only way to know which version should be used is to closely inspect the
applicable pom.xml.

I suggest, given a version MAJOR.MINOR.PATCH, we adopt the following strict
definitions of releases, starting with 1.0.0 for the next release:

1) A MAJOR release has removed or changed aspects of the existing public
interface (API, Guacamole protocol, etc.), and is thus incompatible as a
whole with any other MAJOR release. A MAJOR release MAY require third-party
software to make code changes or perform a rebuild to be compatible. All
Guacamole components MUST be bumped to match the new version, even if they
are unmodified, to explicitly denote their compatibility.

2) A MINOR release has added new aspects to the existing public interface
(API, Guacamole protocol, etc.). Components from previous MINOR or PATCH
releases remain compatible. A MINOR release MUST NOT require third-party
software leveraging the existing public interface (API, Guacamole protocol,
etc.) to make code changes or perform a rebuild to be compatible. Only
modified Guacamole components are bumped to match the new version.

3) A PATCH release MUST NOT touch the existing public interface (API,
Guacamole protocol, etc.) at all. Only modified Guacamole components are
bumped to match the new version.

For users, this would mean:

* Anything related to Guacamole version X is compatible only with Guacamole
version X.
* Extensions and guacd with version X.Y are compatible only with Guacamole
version X.Z where Z >= Y.
* Protocol plugins with version X.Y are compatible only with guacd version
X.Z where Z >= Y.
* guacd with version X.Y is compatible only with guacamole-common /
guacamole-common-js version X.Z where Z >= Y.
* Anything implementing the Guacamole protocol as defined in version X.Y is
compatible only with components from the X.Z release where Z >= Y.

Thoughts?

- Mike

Reply via email to