Core-Gadget - Versioning

DRAFT

   <section title="Versioning" anchor="Versioning">
  
   <t>Both the overall OpenSocial specification and individual Gadget Features
   are versioned. Gadget specification documents SHOULD specify the version 
   of the OpenSocial specification to which they conform by including the 
   "specificationVersion" attribute on the root &lt;Module&gt; element, as well
   as the versions of any optional or required features used by including the 
   "version" attribute on &lt;Require&gt; and &lt;Optional&gt; elements.</t>
   
   <t>Version identifiers are composed of a series of up to three non-negative
   integers separated by the dot (.) character. For example, "1.0.0", "1.2.1",
   etc.</t>
   
   <figure><artwork>
  major = 1*DIGIT
  minor = 1*DIGIT
  patch = 1*DIGIT
  
  version = major [ "." minor [ "." patch ] ]
   </artwork></figure>
   
   <t>The first number in the sequence represents a "major version". Changes 
   in the major version signify possible backward-incompatible changes from
   previous versions. For instance, when the methods are removed from the 
   JavaScript API provided by a feature, or when the definitions of XML 
   elements or attributes used within a gadget specification document are 
   changed, or when the processing requirements for any feature or capability
   are modified, the major version MUST be incremented.</t>
   
   <t>The second number in the sequence is a "minor version" that is 
   interpreted relative to the preceding major version number. When the 
   major version is incremented, the "minor version" MUST be reset to 0. Changes 
   in the minor version signify backward-compatible but forward-incompatible
   changes from previous versions. For example, when new methods are added
   to the JavaScript API provided by a feature, or when new elements or 
   attributes are added to the gadget specification document format, the 
   minor version SHOULD be incremented and the major version SHOULD NOT be 
   incremented.</t>
      
   <t>The third and final number in the sequence is the "patch version" that
   is interpreted relative to the preceding minor version. When the minor
   version is incremented, the "patch version" MUST be reset to 0. Changes
   in the patch version signify changes that are both backward- and forward-
   compatible with previous versions. For example, when making minor clarifications,
   fixing errors in the description of a method or element, or making other 
   small changes that neither affect existing functionality or introduce new
   functionality that would be incompatible with existing versions, the patch 
   version MUST be incremented but the minor and major versions SHOULD NOT
   change.</t>
   
   <t>Version identifiers are hierarchical and can either reference a 
   specific individual version by specifying all three elements (e.g. "1.2.3") or
   can identify all versions at a particular major or minor level. For instance,
   the identifier "2.4" would apply to all combinations of versions specifying a 
   major version of "2" and a minor version of "4" (e.g. "2.4", "2.4.0", "2.4.1",
   "2.4.2", and so on) but not any other minor version (e.g. "2.3", "2.5.2", etc).</t>

   <t>When processing gadget specification documents and determining the 
   appropriate method of processing the gadget itself as well as determining
   the correct features to enable for a gadget, containers are required to 
   appropriately match the version identifiers specified within the gadget
   specification to those provided by the container. For instance, if the 
   gadget requires version "2.3" of a particular feature, the container MUST
   provide an implementation of the feature whose version matches the given 
   major and minor value (e.g. "2.3.1", "2.3.2", etc).</t>

   <t>It is RECOMMENDED that gadget developers specify the most general version
   that will satisfy the requirements of the gadget. Usually, major and minor
   versions will suffice. The patch version MAY be omitted from gadget specification 
   documents.</t>
   
   <t>When a version identifier is omitted from various locations within
   the gadget specification, the value is assumed to be "1.0". As described above,
   this value will match any version beginning with "1.0", including 1.0.0,
   1.0.1, 1.0.22, etc., but not 1.1.0, 2.0.0, etc. This default value will
   not change in future versions of the specification, ensuring that Gadgets
   that omit these values will not have sudden, unexpected changes in behavior
   when containers adopt new versions of the OpenSocial specification or
   Features.</t>
  </section>