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
