<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN2">
<html>
<head>
<title>Plug-in Versioning</title>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
    <meta http-equiv="Content-Style-Type" content="text/css">
    <link href="http://dev.eclipse.org/default_style.css" rel="stylesheet" type="text/css">
</head>
<body bgcolor="#ffffff">

<table width="100%">
<tr><td style="background:#0080C0"><b><span style="color:white">Proposal</span></b></td></tr>
</table>
<h1>Eclipse Plug-in Versioning</h1>
<blockquote> 
  <p><b>Summary</b> <br>
  The Eclipse team currently changes their plug-in version numbers to match each
    major release of Eclipse (e.g., 2.1, 3.0). This is a convenient
    way of understanding the origin of plug-ins but do not capture the actual
    semantics of the changes which occurred. For
    example, the change from 2.1 to 3.0 indicates a major and incompatible change.
    Of
    course, this
    is
     generally not what was intended as most 3.0 plug-ins are in fact compatible
    with their 2.1 versions. Here we outline the current use of version numbers
    and propose a new process for
    using
    plug-in
    version numbering to better indicate levels of compatibility.</p>
  <p>Last Modified:
    November 21, 2004</p>
</blockquote>

<h2>Problem Definition</h2>
<p>Current Eclipse practice calls for the teams to increment plug-in version
  numbers to match the upcoming release of Eclipse. For example, some months
  ago we
  changed our plug-in version numbers from 3.0.0 to 3.1.0. In May 2005 we will
  ship Eclipse 3.1 and all plug-ins (save a few third party ones) will be version
  3.1.0. This is convenient because it allows people to look at the plug-in version
number and immediatly understand what version of Eclipse that plug-in is from.</p>
<p>This approach has several drawbacks however</p>
<ul>
  <li>Incrementing the major (first)
      version segment renders the plug-in &quot;incompatible&quot; with
      all previous versions of that plug-in. Dependent plug-ins which specify a version
      number (e.g., &lt;import plugin=&quot;org.eclipse.foo&quot; version=&quot;2.1.0&quot;/&gt;)
      will not resolve against version 3.0.0 of the prerequisite plug-in. Unresolved
      plug-ins cannot participate in a running Eclipse environment. Even though
      we have worked hard to make the content of the 3.0 plug-ins binary backward
      compatible,
      2.1 based third party plug-ins (which specify prereq version numbers) require
    changes to work in 3.0.</li>
  <li>This approach does not set a good example. People building on top of
      Eclipse look to us to understand how they should structure their world.
    Following this
        model, plug-ins like EMF and GEF should increment their version numbers
      to match the Eclipse version numbers regardless of whether they changed
    at all. This
        has the nasty side effect of rendering all of their users incompatible
      as well. It also does not scale well as a little change at the bottom then
      ripples all
      the way up.</li>
  <li> Eclipse is getting away with this because a) we are at the bottom of
      the stack, b) we ship a single wad that is built, packaged and distributed
      in unison
        and c) we do not use version numbered prerequisites ourselves. It is
    really this last point which hurts the most. By not using versioned prereqs,
    we
      are not eating our own dog food. Clearly we do not mean that the resources
      plug-in
        from 3.0 will run on ANY version of the Eclipse runtime. People who build
      and distribute plug-ins are not generally able to play it quite so fast
    and loose.</li>
  <li> Features are not the cure. To address some of this, we use features and
        their abilily to group plug-ins. The assumption is that if the feature
    constraints are met, then the underlying plug-ins will all be happy and thus
    versioned
      plug-in dependencies are not needed. This works but assumes that the feature
      writer
        (may not be related to the plug-in authors) can understand the plug-in
    constraints well enough to define the feature. In practice this means that
    the plug-ins
        in the feature all have similar constraints such that they can be distilled
        to a smaller set of inter feature constraints. Features are a packaging
      mechanism for plug-ins. Pushing constraint satisfaction up to the packaging
      layer puts
        a significant load both on the people creating the packages (e.g., features)
      as well as the packaging (e.g., feature) mechanism. And finally, features
    are an update mechanism and update is not required to be in a running configuration.</li>
</ul>
<h2>Proposal</h2>
<p>  To address these concerns, we propose that the Eclipse SDK team start using
    the version number semantics defined by Eclipse for all their plug-ins. The
    numbering process works as follows:- new plug-ins start as 0.0.0 and go through
    various version numbers (&lt;1.0.0)
  until they are ready for their first release. At that time, developers may
  choose to set the version number to 1.0.0. This is mostly cosmetic and is not
  required. Prior to first release the numbering process depends mostly on how
  widely availability and use of the early versions. For example, a beta at 0.9
  sets a good tone and might encourage release at 1.0.0. </p>
<ul>
  <li> Immediately after a release, plug-ins continue with the same number as
    they had in the release (e.g., 1.0.0). </li>
  <li> As the plug-in is developed (whether for a new release or for maintenance),
    the first three segments of the version number is changed to accurately reflect
    those
    changes.
    For
    example, if some
    minor
    fixes
    are done,
      the service (third) segment should be incremented (e.g., 1.0.1). If significant
      but compatible rework is done and/or new function added, the minor (second)
      segment should be incremented. (e.g., 1.1.0). Note that in this example,
    the significant work overshadows the service fixes so the service (third)
    segment
      is set to 0. If major rework is done such that the new version is incompatible
      with previous versions then the major (first) segment should be incremented
      (e.g., 2.0.0) Note that the minor and service numbers are 0 here as well.</li>
  <li> A plug-in's version number need only be incremented to distinguish one
    release from another. For example, if we release 1.0.0 of a plug-in and then
    do some
      bug fixes for a milestone (say M3), we increment the version to 1.0.1.
    If that plug-in were eventually released, people could look at the version
    number and
      see that a) it is different from 1.0.0 and b) that some bug fixes were
    done. If instead, further bug fixes are done for M5, there is no need to
    further
      increment in the version number (i.e., to 1.0.2). Leaving the version at
    1.0.1 still conveys the important information to users of the
    next
    release.
    Of course,  teams could increment the version further if needed/desired.    </li>
  <li> Plug-in version number changes are solely at the discretion of the plug-in
      development team. They are in the best position to understand their changes
      and the scope of impact.</li>
  <li> Features are used to group together plug-ins and label them with a particular &quot;product&quot; release
    version (e.g., 3.0). The org.eclipse.platform 3.0.0 feature contains a complete
  and precise specification of the plug-ins in the 3.0 platform.</li>
</ul>
<h3>Use of the qualifier</h3>
<p>The current versioning scheme is effectively highlighting <em> release
    families</em>.
  A release family is a set of releases which form a substantial and separable
  effort. For example, Eclipse 2.0, 2.1, 3.0 and 3.1 are all different release
families. The life of release family continues after its initial release (e.g.,
3.0) to include maintenance releases (e.g., 3.0.1, 3.0.2, ...). Using family
    numbers as the base for plugin version numbers is convenient and easy to
    relate to but, as we have seen, conflicts with the Eclipse
  versioning semantics. The proposal outlined above summarily dumps release family
  notions
      in favour of semantically correct version numbers. This is has its own
problems.</p>
<p>For example, assume we have implemented the proposal above.</p>
<ul>
  <li>On June 25, 2004 Eclipse 3.0 is released. org.eclipse.foo is version 1.2.0</li>
  <li> The next day a maintenance stream is created in CVS to continue development
        for the 3.0.x family of releases.</li>
  <li>On June 29, 2004 someone does a minor bug
        fix to org.eclipse.foo in HEAD and ups the plugin version number to 1.2.1
    (correctly capturing the nature of the change)</li>
  <li>On July 7, 2004 someone does a
        different minor bug fix to org.eclipse.foo in the maintenance stream
    and ups the plugin version number to 1.2.1 (correctly capturing the nature
    of the change)</li>
  <li>nothing
          else happens to org.eclipse.help before both Eclipse 3.0.1 and Eclipse
      3.1 ship.</li>
</ul>
<p>In this case we have to different sets of content for org.eclipse.foo but
  the version number is the same. In the current model the plugins would have
  version numbers based on their release family and so their intended target
  would be clear. The question then is how to mix-in the release family progression
  with the plugin content progression. The first three segments of the version
  number have clearly
  defined semantics which do not match the needs for identifying releases or
  release families. The qualifier (fourth segment) however has no particular
semantics and so is free for use.</p>
<p>We propose the use of a convention where the release
      family is the first two digits of the qualifier. In the above example this
  gives the following version numbers
(respectively)</p>
<blockquote>
  <p>1.2.1.31<br>
    1.2.1.30</p>
</blockquote>
<p>These are both semantically correct (i.e., numbering indicates the degree
  of change) and easily understood as being related to 3.1 and 3.0. This story
  is sufficient if we are only concerned about comparing version numbers from
  release to release. The other way in which the current (and above) scheme fall
  down is that during the development cycle, the version number of a plugin never
  changes even though its content may change dramatically. This makes it nearly
  impossible for the Update technology to be used successfully on milestone or
  integration builds. A refinement to the use of the qualifier resolves this.</p>
<p>Noticing that plugin version numbers are intended to relate to content, the
  qualifier should
  include the version tag from the map file used for the build. Eclipse is built
  by reading a map file which lists a CVS repository location and a version tag
  to use when fetching the content. If a team has no input for a build, they
  do not update the map file and the version (and thus the plugin) remains unchanged
  and identical plug-ins will not be duplicated on the update site and consumers
  will not have
  to download them if they already
  have them.</p>
<p>Using this approach the qualifier looks like &lt;release family&gt;_&lt;tag&gt;. In the
  example from above this approach give the following version numbers respectively:</p>
<blockquote>
  <p>	1.2.1.31_v20040629<br>
    1.2.1.30_v20040707</p>
</blockquote>
<p>This approach gives version numbers which correctly reflect the progression
  of the content and respects the release family progression.</p>
<h2>Issues</h2>
<h3>Generating the warm fuzzies</h3>
<p>The main issue that arises from this proposal is that some people
  have been getting a warm fuzzy feeling from the current state where plugin
  version numbers do &quot;match&quot; the release version number.
Unfortunately this sense of happiness is false. </p>
<ul>
  <li> Between releases the plugin contents change but the numbers stay the same.
      This apparent matching is only relevant for final GA releases.</li>
  <li>Some plugins
      (e.g., 3rd party) do not have matching numbers (e.g., lucene) </li>
  <li>No warmth
        is generated regarding additions or deletions of plugins or features.
    Sure they are all numbered nicely but are the right things there?</li>
</ul>
The true warmth generator is a relatively simple tool that checks
  the installed set of pluigns/features against a bill of materials generated
  as part of the build. The output of this tools shows up in the Configuration
  Details
  dialog to warm service personel and in the
  feature/plugins views of the About dialog to warm users. For example, in the
  configuration details, any discrepencies are highlighted while in the About
  dialog the matchin is rendered, for example,
as a green check mark beside plugins that match the bill of materials.
<h3>Existing uses of the qualifier</h3>
<p>In some cases we currently use the qualifier to indicate emergency fixes or
  patches. Version numbers such as 3.0.1.1 indicate an emergency change made
  for 3.0.1 while it was in the field. This proposal does not conflict with that
  approach though it does indicate a different approach. 3.0.1.1 as a version
  number does generate some warmth as a minor fix to 3.0.1. Under our proposal
  the version numbering would look more like:</p>
<blockquote>
  <p>1.2.1.30_v20040911 = base version in the 3.0.1 release<br>
    1.2.1.30_v20041004 =
  patch for the plugin in the 3.0.1 release</p>
</blockquote>
<p>Again, rather than using the version numbers themselves to generate (a somewhat
  false) warmth, the simple reporting tool would correctly identify the configuration
  as having been patched.</p>
<h2>Action</h2>
<p>The main action required is to decide we want to do this and refine/document
  the details of the structure and process. PDE build would need some very minor
  modifications to accomodate the addition of the release family number but otherwise
  there are no technological hurdles. This approach dovetails nicely with a proposal
  to enhance Eclipse's use of the update technology. See <a href="http://dev.eclipse.org/viewcvs/index.cgi/%7Echeckout%7E/platform-core-home/documents/update.html">Update Site Proposal</a> for more details.</p>
<p>Going forward teams would be responsible for updating the plugin version just
  as they are responsible for updating their
    copyright
    dates, etc. Note however that these changes are done
very infrequently and will not be a particular burden.</p>
<h3>Transitioning</h3>
<p>If we decide to follow this new policy we can retrofit the 3.1
  plug-ins with &quot;correct&quot; version
  numbers or start the new approach immediately following the release of Eclipes
  3.1. Starting now avoids situations where Eclipse 3.0 based plug-ins do not
  work on the released 3.1 because of resolution problems (rather than because
  of actual incompatibilities). However, it may adversely affect people in the
community who have already come to know, like and use the 3.1.0 version numbers.</p>
<p>A concrete proposal for how to do this follows:</p>
<ol>
  <li>Assume that the baseline version number is 3.0.0</li>
  <li>All teams do a quick review of their plugin changes and update their plugin
    version numbers correctly reflect the degree of change since <strong>3.0.0</strong>.</li>
  <li>All version numbers are updated to have a &quot;.qualifier&quot; suffix (e.g., 3.0.1.qualifier).</li>
  <li>The line &quot;qualifier = context&quot; is added to all build.properties
        files</li>
  <li>PDE build is setup to add &quot;31_&quot; to the qualifier context for current builds<br>
  </li>
</ol>
</body>
</html>
