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

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.4 - (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 : dj 1.4 <p>Current Eclipse practice calls for the teams to increment plug-in version numbers
33 : jeff 1.1 to match the upcoming release of Eclipse. For example, about 6 months ago we
34 : dj 1.4 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 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 plug-in version
37 :     number and immediatly understand what version of Eclipse that plug-in is from.</p>
38 : jeff 1.1 <p>This approach has several drawbacks however</p>
39 :     <ul>
40 :     <li>Incrementing the major (first)
41 : dj 1.4 version segment renders the plug-in &quot;incompatible&quot; with
42 :     all previous versions of that plug-in. Dependent plug-ins which specify a version
43 : jeff 1.1 number (e.g., &lt;import plugin=&quot;org.eclipse.foo&quot; version=&quot;2.1.0&quot;/&gt;)
44 : dj 1.4 will not resolve against version 3.0.0 of the prerequisite plug-in. Unresolved
45 :     plug-ins cannot participate in a running Eclipse environment. Even though
46 :     we have worked hard to make the content of the 3.0 plug-ins binary backward
47 : jeff 1.1 compatible,
48 : dj 1.4 2.1 based third party plug-ins (which specify prereq version numbers) require
49 : jeff 1.1 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 : dj 1.4 model, plug-ins like EMF and GEF should increment their version numbers
54 : jeff 1.1 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 : dj 1.4 plug-in
68 : jeff 1.1 from 3.0 will run on ANY version of the Eclipse runtime. People who build
69 : dj 1.4 and distribute plug-ins are not generally able to play it quite so fast
70 : jeff 1.1 and loose.</li>
71 :     <li> Features are not the cure. To address some of this, we use features and
72 : dj 1.4 their abilily to group plug-ins. The assumption is that if the feature
73 :     constraints are met, then the underlying plug-ins will all be happy and thus
74 : jeff 1.1 versioned
75 : dj 1.4 plug-in dependencies are not needed. This works but assumes that the feature
76 : jeff 1.1 writer
77 : dj 1.4 (may not be related to the plug-in authors) can understand the plug-in
78 : jeff 1.1 constraints well enough to define the feature. In practice this means that
79 : dj 1.4 the plug-ins
80 : jeff 1.1 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 : dj 1.4 mechanism for plug-ins. Pushing constraint satisfaction up to the packaging
83 : jeff 1.1 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 : dj 1.4 the version number semantics defined by Eclipse for all their plug-ins. The
90 :     numbering process works as follows:- new plug-ins start as 0.0.0 and go through
91 : jeff 1.1 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 : dj 1.4 <li> Immediately after a release, plug-ins continue with the same number as
99 : jeff 1.1 they had in the release (e.g., 1.0.0). </li>
100 : dj 1.4 <li> As the plug-in is developed for the next release, the version number is
101 : jeff 1.1 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 : dj 1.4 <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 plug-in and then
113 : jeff 1.1 do some
114 :     bug fixes for a milestone (say M3), we increment the version to 1.0.1.
115 : dj 1.4 If that plug-in were eventually released, people could look at the version
116 : jeff 1.1 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 : dj 1.4 <li> Plug-in version number changes are solely at the discretion of the plug-in
130 : jeff 1.1 development team. They are in the best position to understand their changes
131 :     and the scope of impact.</li>
132 : dj 1.4 <li> Features are used to group together plug-ins and label them with a particular &quot;product&quot; release
133 : jeff 1.1 version (e.g., 3.0). The org.eclipse.platform 3.0.0 feature contains a complete
134 : dj 1.4 and precise specification of the plug-ins in the 3.0 platform.</li>
135 : jeff 1.1 </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 : dj 1.4 responsible for incrementing their plug-in versions. These changes are done
141 : jeff 1.1 very infrequently so will not be a particular burden.</p>
142 : dj 1.4 <p>If we decide to follow this new policy we can retrofit the 3.0 plug-ins with &quot;correct&quot; version
143 : jeff 1.1 numbers or start the new approach immediately following the release of Eclipes
144 : dj 1.4 3.0. Starting now avoids situations where Eclipse 2.1 based plug-ins do not
145 : jeff 1.1 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>