| 29 |
</blockquote> |
</blockquote> |
| 30 |
|
|
| 31 |
<h2>Problem Definition</h2> |
<h2>Problem Definition</h2> |
| 32 |
<p>Current Eclipse practice calls for the teams to increment plugin version numbers |
<p>Current Eclipse practice calls for the teams to increment plug-in version numbers |
| 33 |
to match the upcoming release of Eclipse. For example, about 6 months ago we |
to match the upcoming release of Eclipse. For example, about 6 months ago we |
| 34 |
changed our plugin version numbers from 2.1 to 3.0.0. In June 2004 we will |
changed our plug-in version numbers from 2.1 to 3.0.0. In June 2004 we will |
| 35 |
ship Eclipse 3.0.0 and all plugins (save a few third party ones) will be version |
ship Eclipse 3.0.0 and all plug-ins (save a few third party ones) will be version |
| 36 |
3.0.0. This is convenient because it allows people to look at the plugin version |
3.0.0. This is convenient because it allows people to look at the plug-in version |
| 37 |
number and immediatly understand what version of Eclipse that plugin is from.</p> |
number and immediatly understand what version of Eclipse that plug-in is from.</p> |
| 38 |
<p>This approach has several drawbacks however</p> |
<p>This approach has several drawbacks however</p> |
| 39 |
<ul> |
<ul> |
| 40 |
<li>Incrementing the major (first) |
<li>Incrementing the major (first) |
| 41 |
version segment renders the plugin "incompatible" with |
version segment renders the plug-in "incompatible" with |
| 42 |
all previous versions of that plugin. Dependent plugins which specify a version |
all previous versions of that plug-in. Dependent plug-ins which specify a version |
| 43 |
number (e.g., <import plugin="org.eclipse.foo" version="2.1.0"/>) |
number (e.g., <import plugin="org.eclipse.foo" version="2.1.0"/>) |
| 44 |
will not resolve against version 3.0.0 of the prerequisite plugin. Unresolved |
will not resolve against version 3.0.0 of the prerequisite plug-in. Unresolved |
| 45 |
plugins cannot participate in a running Eclipse environment. Even though |
plug-ins cannot participate in a running Eclipse environment. Even though |
| 46 |
we have worked hard to make the content of the 3.0 plugins binary backward |
we have worked hard to make the content of the 3.0 plug-ins binary backward |
| 47 |
compatible, |
compatible, |
| 48 |
2.1 based third party plugins (which specify prereq version numbers) require |
2.1 based third party plug-ins (which specify prereq version numbers) require |
| 49 |
changes to work in 3.0.</li> |
changes to work in 3.0.</li> |
| 50 |
<li>This approach does not set a good example. People building on top of |
<li>This approach does not set a good example. People building on top of |
| 51 |
Eclipse look to us to understand how they should structure their world. |
Eclipse look to us to understand how they should structure their world. |
| 52 |
Following this |
Following this |
| 53 |
model, plugins like EMF and GEF should increment their version numbers |
model, plug-ins like EMF and GEF should increment their version numbers |
| 54 |
to match the Eclipse version numbers regardless of whether they changed |
to match the Eclipse version numbers regardless of whether they changed |
| 55 |
at all. This |
at all. This |
| 56 |
has the nasty side effect of rendering all of their users incompatible |
has the nasty side effect of rendering all of their users incompatible |
| 64 |
really this last point which hurts the most. By not using versioned prereqs, |
really this last point which hurts the most. By not using versioned prereqs, |
| 65 |
we |
we |
| 66 |
are not eating our own dog food. Clearly we do not mean that the resources |
are not eating our own dog food. Clearly we do not mean that the resources |
| 67 |
plugin |
plug-in |
| 68 |
from 3.0 will run on ANY version of the Eclipse runtime. People who build |
from 3.0 will run on ANY version of the Eclipse runtime. People who build |
| 69 |
and distribute plugins are not generally able to play it quite so fast |
and distribute plug-ins are not generally able to play it quite so fast |
| 70 |
and loose.</li> |
and loose.</li> |
| 71 |
<li> Features are not the cure. To address some of this, we use features and |
<li> Features are not the cure. To address some of this, we use features and |
| 72 |
their abilily to group plugins. The assumption is that if the feature |
their abilily to group plug-ins. The assumption is that if the feature |
| 73 |
constraints are met, then the underlying plugins will all be happy and thus |
constraints are met, then the underlying plug-ins will all be happy and thus |
| 74 |
versioned |
versioned |
| 75 |
plugin dependencies are not needed. This works but assumes that the feature |
plug-in dependencies are not needed. This works but assumes that the feature |
| 76 |
writer |
writer |
| 77 |
(may not be related to the plugin authors) can understand the plugin |
(may not be related to the plug-in authors) can understand the plug-in |
| 78 |
constraints well enough to define the feature. In practice this means that |
constraints well enough to define the feature. In practice this means that |
| 79 |
the plugins |
the plug-ins |
| 80 |
in the feature all have similar constraints such that they can be distilled |
in the feature all have similar constraints such that they can be distilled |
| 81 |
to a smaller set of inter feature constraints. Features are a packaging |
to a smaller set of inter feature constraints. Features are a packaging |
| 82 |
mechanism for plugins. Pushing constraint satisfaction up to the packaging |
mechanism for plug-ins. Pushing constraint satisfaction up to the packaging |
| 83 |
layer puts |
layer puts |
| 84 |
a significant load both on the people creating the packages (e.g., features) |
a significant load both on the people creating the packages (e.g., features) |
| 85 |
as well as the packaging (e.g., feature) mechanism.</li> |
as well as the packaging (e.g., feature) mechanism.</li> |
| 86 |
</ul> |
</ul> |
| 87 |
<h2>Proposal</h2> |
<h2>Proposal</h2> |
| 88 |
<p> To address these concerns, we propose that the Eclipse SDK team start using |
<p> To address these concerns, we propose that the Eclipse SDK team start using |
| 89 |
the version number semantics defined by Eclipse for all their plugins. The |
the version number semantics defined by Eclipse for all their plug-ins. The |
| 90 |
numbering process works as follows:- new plugins start as 0.0.0 and go through |
numbering process works as follows:- new plug-ins start as 0.0.0 and go through |
| 91 |
various version numbers (<1.0.0) |
various version numbers (<1.0.0) |
| 92 |
until they are ready for their first release. At that time, developers may |
until they are ready for their first release. At that time, developers may |
| 93 |
choose to set the version number to 1.0.0. This is mostly cosmetic and is not |
choose to set the version number to 1.0.0. This is mostly cosmetic and is not |
| 95 |
widely availability and use of the early versions. For example, a beta at 0.9 |
widely availability and use of the early versions. For example, a beta at 0.9 |
| 96 |
sets a good tone and might encourage release at 1.0.0. </p> |
sets a good tone and might encourage release at 1.0.0. </p> |
| 97 |
<ul> |
<ul> |
| 98 |
<li> Immediately after a release, plugins continue with the same number as |
<li> Immediately after a release, plug-ins continue with the same number as |
| 99 |
they had in the release (e.g., 1.0.0). </li> |
they had in the release (e.g., 1.0.0). </li> |
| 100 |
<li> As the plugin is developed for the next release, the version number is |
<li> As the plug-in is developed for the next release, the version number is |
| 101 |
changed to accurately reflect those changes. For example, if some minor fixes |
changed to accurately reflect those changes. For example, if some minor fixes |
| 102 |
are done, |
are done, |
| 103 |
the service (third) segment should be incremented (e.g., 1.0.1). If significant |
the service (third) segment should be incremented (e.g., 1.0.1). If significant |
| 108 |
is set to 0. If major rework is done such that the new version is incompatible |
is set to 0. If major rework is done such that the new version is incompatible |
| 109 |
with previous versions then the major (first) segment should be incremented |
with previous versions then the major (first) segment should be incremented |
| 110 |
(e.g., 2.0.0) Note that the minor and service numbers are 0 here as well.</li> |
(e.g., 2.0.0) Note that the minor and service numbers are 0 here as well.</li> |
| 111 |
<li> A plugin's version number need only be incremented to distinguish one |
<li> A plug-in's version number need only be incremented to distinguish one |
| 112 |
release from another. For example, if we release 1.0.0 of a plugin and then |
release from another. For example, if we release 1.0.0 of a plug-in and then |
| 113 |
do some |
do some |
| 114 |
bug fixes for a milestone (say M3), we increment the version to 1.0.1. |
bug fixes for a milestone (say M3), we increment the version to 1.0.1. |
| 115 |
If that plugin were eventually released, people could look at the version |
If that plug-in were eventually released, people could look at the version |
| 116 |
number and |
number and |
| 117 |
see that a) it is different from 1.0.0 and b) that some bug fixes were |
see that a) it is different from 1.0.0 and b) that some bug fixes were |
| 118 |
done. If instead, further bug fixes are done for M5, there is no need to |
done. If instead, further bug fixes are done for M5, there is no need to |
| 126 |
used (e.g., 1.0.1.M3 |
used (e.g., 1.0.1.M3 |
| 127 |
vs 1.0.1.M5) |
vs 1.0.1.M5) |
| 128 |
to differentiate between builds of the same version.</li> |
to differentiate between builds of the same version.</li> |
| 129 |
<li> Plugin version number changes are solely at the discretion of the plugin |
<li> Plug-in version number changes are solely at the discretion of the plug-in |
| 130 |
development team. They are in the best position to understand their changes |
development team. They are in the best position to understand their changes |
| 131 |
and the scope of impact.</li> |
and the scope of impact.</li> |
| 132 |
<li> Features are used to group together plugins and label them with a particular "product" release |
<li> Features are used to group together plug-ins and label them with a particular "product" release |
| 133 |
version (e.g., 3.0). The org.eclipse.platform 3.0.0 feature contains a complete |
version (e.g., 3.0). The org.eclipse.platform 3.0.0 feature contains a complete |
| 134 |
and precise specification of the plugins in the 3.0 platform.</li> |
and precise specification of the plug-ins in the 3.0 platform.</li> |
| 135 |
</ul> |
</ul> |
| 136 |
<h2>Action</h2> |
<h2>Action</h2> |
| 137 |
<p>The only action required is to decide we want to do this and refine/document |
<p>The only action required is to decide we want to do this and refine/document |
| 138 |
the details of the structure and process. There are no technological hurdles. |
the details of the structure and process. There are no technological hurdles. |
| 139 |
Just as teams are responsible updating their copyright dates, they would be |
Just as teams are responsible updating their copyright dates, they would be |
| 140 |
responsible for incrementing their plugin versions. These changes are done |
responsible for incrementing their plug-in versions. These changes are done |
| 141 |
very infrequently so will not be a particular burden.</p> |
very infrequently so will not be a particular burden.</p> |
| 142 |
<p>If we decide to follow this new policy we can retrofit the 3.0 plugins with "correct" version |
<p>If we decide to follow this new policy we can retrofit the 3.0 plug-ins with "correct" version |
| 143 |
numbers or start the new approach immediately following the release of Eclipes |
numbers or start the new approach immediately following the release of Eclipes |
| 144 |
3.0. Starting now avoids situations where Eclipse 2.1 based plugins do not |
3.0. Starting now avoids situations where Eclipse 2.1 based plug-ins do not |
| 145 |
work on the released 3.0 because of resolution problems (rather than because |
work on the released 3.0 because of resolution problems (rather than because |
| 146 |
of actual incompatibilities). However, it may adversely affect people in the |
of actual incompatibilities). However, it may adversely affect people in the |
| 147 |
community who have already come to know, like and use the 3.0.0 version numbers.<br> |
community who have already come to know, like and use the 3.0.0 version numbers.<br> |