platform-core-home/documents/plugin-versioning.html

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.3 - (view) (download) (as text)

1 : jeff 1.2 <html>
2 :     <head>
3 :     <title>Using Plug-in Versions</title>
4 :     <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
5 :     <link rel="stylesheet" href="http://eclipse.org/default_style.css" type="text/css">
6 : jeff 1.1 </head>
7 :    
8 :     <body bgcolor="#FFFFFF" text="#000000">
9 :    
10 :     <h1>Eclipse Plug-in Versioning Proposal</h1>
11 :     <blockquote>
12 :     <p><b>Summary</b> <br>
13 : jeff 1.2 The Eclipse team currently changes their plug-in version numbers to match each
14 :     major release of Eclipse (e.g., 2.1, 3.0). This is a convenient
15 :     way of understanding the origin of plug-ins but do not capture the actual
16 :     semantics of the changes which occurred. For
17 :     example, the change from 2.1 to 3.0 indicates a major and incompatible change.
18 :     Of
19 :     course, this
20 :     is
21 :     generally not what was intended as most 3.0 plug-ins are in fact compatible
22 :     with their 2.1 versions. Here we outline the current use of version numbers
23 :     and propose a new process for
24 :     using
25 :     plug-in
26 :     version numbering to better indicate levels of compatibility.<br>
27 : jeff 1.3 Last Modified:
28 : jeff 1.2 1200 February 17, 2004</p>
29 : jeff 1.1 </blockquote>
30 :    
31 :     <h2>Problem Definition</h2>
32 :     <p>Current Eclipse practice calls for the teams to increment plugin version numbers
33 :     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
35 :     ship Eclipse 3.0.0 and all plugins (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
37 :     number and immediatly understand what version of Eclipse that plugin is from.</p>
38 :     <p>This approach has several drawbacks however</p>
39 :     <ul>
40 :     <li>Incrementing the major (first)
41 :     version segment renders the plugin &quot;incompatible&quot; with
42 :     all previous versions of that plugin. Dependent plugins which specify a version
43 :     number (e.g., &lt;import plugin=&quot;org.eclipse.foo&quot; version=&quot;2.1.0&quot;/&gt;)
44 :     will not resolve against version 3.0.0 of the prerequisite plugin. Unresolved
45 :     plugins 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
47 :     compatible,
48 :     2.1 based third party plugins (which specify prereq version numbers) require
49 :     changes to work in 3.0.</li>
50 :     <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.
52 :     Following this
53 :     model, plugins like EMF and GEF should increment their version numbers
54 :     to match the Eclipse version numbers regardless of whether they changed
55 :     at all. This
56 :     has the nasty side effect of rendering all of their users incompatible
57 :     as well. It also does not scale well as a little change at the bottom then
58 :     ripples all
59 :     the way up.</li>
60 :     <li> Eclipse is getting away with this because a) we are at the bottom of
61 :     the stack, b) we ship a single wad that is built, packaged and distributed
62 :     in unison
63 :     and c) we do not use version numbered prerequisites ourselves. It is
64 :     really this last point which hurts the most. By not using versioned prereqs,
65 :     we
66 :     are not eating our own dog food. Clearly we do not mean that the resources
67 :     plugin
68 :     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
70 :     and loose.</li>
71 :     <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
73 :     constraints are met, then the underlying plugins will all be happy and thus
74 :     versioned
75 :     plugin dependencies are not needed. This works but assumes that the feature
76 :     writer
77 :     (may not be related to the plugin authors) can understand the plugin
78 :     constraints well enough to define the feature. In practice this means that
79 :     the plugins
80 :     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
82 :     mechanism for plugins. Pushing constraint satisfaction up to the packaging
83 :     layer puts
84 :     a significant load both on the people creating the packages (e.g., features)
85 :     as well as the packaging (e.g., feature) mechanism.</li>
86 :     </ul>
87 :     <h2>Proposal</h2>
88 :     <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
90 :     numbering process works as follows:- new plugins start as 0.0.0 and go through
91 :     various version numbers (&lt;1.0.0)
92 :     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
94 :     required. Prior to first release the numbering process depends mostly on how
95 :     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>
97 :     <ul>
98 :     <li> Immediately after a release, plugins continue with the same number as
99 :     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
101 :     changed to accurately reflect those changes. For example, if some minor fixes
102 :     are done,
103 :     the service (third) segment should be incremented (e.g., 1.0.1). If significant
104 :     but compatible rework is done and/or new function added, the minor (second)
105 :     segment should be incremented. (e.g., 1.1.0). Note that in this example,
106 :     the significant work overshadows the service fixes so the service (third)
107 :     segment
108 :     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
110 :     (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
112 :     release from another. For example, if we release 1.0.0 of a plugin and then
113 :     do some
114 :     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
116 :     number and
117 :     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
119 :     further
120 : jeff 1.2 increment in the version number (i.e., to 1.0.2). Leaving the version at
121 :     1.0.1 still conveys the important information to users of the
122 :     next
123 :     release.
124 :     Of course, teams could increment the version further if needed/desired.
125 :     Either way, the qualifier (fourth) version segment can be
126 :     used (e.g., 1.0.1.M3
127 : jeff 1.1 vs 1.0.1.M5)
128 : jeff 1.2 to differentiate between builds of the same version.</li>
129 : jeff 1.1 <li> Plugin version number changes are solely at the discretion of the plugin
130 :     development team. They are in the best position to understand their changes
131 :     and the scope of impact.</li>
132 :     <li> Features are used to group together plugins and label them with a particular &quot;product&quot; release
133 :     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>
135 :     </ul>
136 :     <h2>Action</h2>
137 :     <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.
139 :     Just as teams are responsible updating their copyright dates, they would be
140 :     responsible for incrementing their plugin versions. These changes are done
141 :     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 &quot;correct&quot; version
143 :     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
145 :     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
147 :     community who have already come to know, like and use the 3.0.0 version numbers.<br>
148 :     </p>
149 :     </body>
150 :     </html>