platform-core-home/documents/update.html
Parent Directory
|
Revision Log
Revision 1.1 - (view) (download) (as text)
| 1 : | jeff | 1.1 | <html> |
| 2 : | <head> | ||
| 3 : | <title>Eclipse Update Site: Eating our own dog food</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 : | </head> | ||
| 7 : | |||
| 8 : | <body bgcolor="#FFFFFF" text="#000000"> | ||
| 9 : | |||
| 10 : | <h1>Eclipse Update Site Proposal</h1> | ||
| 11 : | <blockquote> | ||
| 12 : | <p><b>Summary</b> <br> | ||
| 13 : | The current packaging of the Eclipse SDK as a set of large zips (one per platform) | ||
| 14 : | is a convenient one stop shop for getting up and running with the SDK. Unfortunately, | ||
| 15 : | this approach does not scale well. As more and more Eclipse projects (e.g., | ||
| 16 : | EMF, GEF, ...) come into common use, there is increasing interest in including | ||
| 17 : | these in pre-packaged zips. Similarly, as Eclipse is used in more varied scenarios, | ||
| 18 : | so increases the demand for different packagings (smaller and larger). It | ||
| 19 : | is not feasible for eclipse.org to create, manage and distribute pre-packaged | ||
| 20 : | configurations to meet all the demands. This proposal details a structure | ||
| 21 : | which enables Eclipse component providers to contribute their features and | ||
| 22 : | plugins and for Eclipse consumers to efficiently select, download and install | ||
| 23 : | their components of interest.<br> | ||
| 24 : | Last Modified: 1100 February 17, 2004</p> | ||
| 25 : | </blockquote> | ||
| 26 : | |||
| 27 : | <h2>Problem Definition</h2> | ||
| 28 : | <p>The base Eclipse function is currently distributed as roughly the following | ||
| 29 : | zip files</p> | ||
| 30 : | <ul> | ||
| 31 : | <li>binary Platform (one per target OS/WS) (7 x ~24MB)</li> | ||
| 32 : | <li>binary JDT (one OS/WS independent) (~12MB)</li> | ||
| 33 : | <li>SDK zips includind source and all doc (one per target OS/WS) (7 x ~80MB)</li> | ||
| 34 : | <li>assorted other zips (e.g., examples, webdav, ...)</li> | ||
| 35 : | </ul> | ||
| 36 : | <p>Eclipse tools and technology project downloads are available separately and | ||
| 37 : | come in a variety of flavours, sizes and organizations. People wanting the base | ||
| 38 : | SDK are quite comfortable with the current situation. They need only download | ||
| 39 : | the single zip and go. If they need to run on two different platforms they download | ||
| 40 : | the zip for that platform and ignore the fact that 95% of the second download | ||
| 41 : | is the same as the first.</p> | ||
| 42 : | <p>Users looking to combine the base Eclipse with additional plugins/features | ||
| 43 : | are somewhat less happy. They have to search over several web sites, identifying | ||
| 44 : | downloads (zips) of interest and correlating versions manually. In general, | ||
| 45 : | the suppliers of these additional zips do not make it easy for users to understand | ||
| 46 : | their offerings.</p> | ||
| 47 : | <p>The main issues with the current setup are:</p> | ||
| 48 : | <ul> | ||
| 49 : | <li>Does not promote the easy provision, acquisition and use of plugins from | ||
| 50 : | a variety of souces. The basic premise of Eclipse is that plugin consumers | ||
| 51 : | can gather a set of interesting plugins, put them together in an Eclipse platform | ||
| 52 : | configuration and enjoy an integrated seemless environment. Currently plugin | ||
| 53 : | producers provide their plugins in various forms and the lack of any managed | ||
| 54 : | acquisition mechanism forces potential users to grovel around for plugins | ||
| 55 : | and then hope that they got the right thing.</li> | ||
| 56 : | <li>Does not scale as the scope of Eclipse increases. The current approach addresses | ||
| 57 : | the provision/acquisition problem by packaging collections of interesting | ||
| 58 : | plugins together in a single zip. This works for Eclipse since it is at the | ||
| 59 : | bottom of the plugin stack. However, others providers are not so lucky and | ||
| 60 : | are challenged with questions like "how many of my prerequisites should | ||
| 61 : | I include in my download?". Further, as more and more plugins are added | ||
| 62 : | to the Eclipse world, the size of the complete zip increases. A zip of a reasonable | ||
| 63 : | set of SDK drops from projects on eclipse.org could easily reach 150MB (i.e., | ||
| 64 : | double the Eclipse SDK size). Following the current model, there would be | ||
| 65 : | one of these uber-zips per target OS/WS.</li> | ||
| 66 : | <li>Does not scale as the Eclipse use scenarios increase. As the range of people | ||
| 67 : | using Eclipse broadens, there will be increasing demand for alternative collections | ||
| 68 : | of plugins. These will contain either more or less than the Eclipse SDK. While | ||
| 69 : | we can take a stab and produce some common packagings, we will not</li> | ||
| 70 : | <li>Makes poor use of existing disk and bandwidth resources. As mentioned earlier, | ||
| 71 : | something like 95% of each OS/WS specific SDK zip is identical content. Further, | ||
| 72 : | from build to build, not all plugins change. The user doc for example tends | ||
| 73 : | to change slowly. Near the end of a milestone or release cycle we frequently | ||
| 74 : | rebuild to fix isolated problems. Rather than rebuilding just the plugins | ||
| 75 : | in question and providing these for download, we rebuild the whole stack and | ||
| 76 : | repackage an entire set of full zips. Subsequently, interested developers | ||
| 77 : | are forced to redownload the bulk of what they already have. This wastes diskspace | ||
| 78 : | and bandwidth for both eclipse.org and our users.</li> | ||
| 79 : | <li>Finally, it is somewhat ironic that the update/install mechanism has been | ||
| 80 : | designed in part to address exactly these kinds of concerns yet it is one | ||
| 81 : | of the few components that does not see regular use by the Eclipse team itself. | ||
| 82 : | As a result, the update/install team misses out on the regular feedback enjoyed | ||
| 83 : | by the other Eclipse teams. It is seemingly hard to justify putting update/install | ||
| 84 : | forward as a useful technology but not using it ourselves. </li> | ||
| 85 : | </ul> | ||
| 86 : | <h2>Scenarios</h2> | ||
| 87 : | <h3>Scenario 1: minimal install</h3> | ||
| 88 : | <p>User starts with a minimal Eclipse base install. This contains just the runtime, | ||
| 89 : | some UI elements and an Update manager UI. Based on this they want to build | ||
| 90 : | an install containing additional elements from various sources.</p> | ||
| 91 : | <ol> | ||
| 92 : | <li>download and unzip the minimal install form eclipse.org or a mirror</li> | ||
| 93 : | <li>start the new install </li> | ||
| 94 : | <li>the user is presented with an update manager UI </li> | ||
| 95 : | <li>user discovers or is presented with update sites </li> | ||
| 96 : | <li>user selects features to install (the candidates presented are appropriate | ||
| 97 : | to the the current environment e.g., OS/WS/etc as well as already installed | ||
| 98 : | components)</li> | ||
| 99 : | <li>the selected features are downloaded</li> | ||
| 100 : | <li>the features are installed into the current configuration</li> | ||
| 101 : | <li>the appropriate product/application (one that was just downloaded) is started | ||
| 102 : | and the update manager GUI goes away</li> | ||
| 103 : | </ol> | ||
| 104 : | <h4>Variations</h4> | ||
| 105 : | <p>After following the above scenario, the user can manage their configuration | ||
| 106 : | either using the steps outlined in Scenario 2 or by restarting their configuration | ||
| 107 : | with an indication that the update manager UI should be started. This puts them | ||
| 108 : | back at step 3 but with all their previously installed plugins still installed.</p> | ||
| 109 : | <h3>Scenario 2: building on a product install</h3> | ||
| 110 : | <p>In this scenario, the user has an Eclipse product installed (possibly just | ||
| 111 : | the Eclipse SDK from a downloaded zip file or the configuration from the steps | ||
| 112 : | in scenario 1) and wants to add more function. This pretty much follows the | ||
| 113 : | normal update/install scenarios.</p> | ||
| 114 : | <ol> | ||
| 115 : | <li>user installs an eclipse based product (e.g., Eclipse SDK)</li> | ||
| 116 : | <li>at some point, while running the product, the user invokes the update manager | ||
| 117 : | UI </li> | ||
| 118 : | <li>user discovers or is presented with update sites </li> | ||
| 119 : | <li>user selects features to install (the candidates presented are appropriate | ||
| 120 : | to the the current environment e.g., OS/WS/etc as well as already installed | ||
| 121 : | components)</li> | ||
| 122 : | <li>the selected features are downloaded</li> | ||
| 123 : | <li>the features are installed into the current configuration</li> | ||
| 124 : | <li>the installed function is now available to the user</li> | ||
| 125 : | </ol> | ||
| 126 : | <h3>Scenario 3: Web install</h3> | ||
| 127 : | <p>Note: This is an advanced scenario that may not be supported in the near term.</p> | ||
| 128 : | <p>This scenario is very much like scenario 1. The main difference is in how the | ||
| 129 : | initial install is obtained. Rather than manually downloading and unzipping | ||
| 130 : | the minimal install, JNLP (Webstart) is used to fetch and run the minimal install. | ||
| 131 : | </p> | ||
| 132 : | <ol> | ||
| 133 : | <li>user browses some website and clicks on a JNLP link</li> | ||
| 134 : | <li>the appropriate jars are downloaded and "installed" using the | ||
| 135 : | JNLP mechanism</li> | ||
| 136 : | <li>the minimal Eclipse install is started </li> | ||
| 137 : | <li>go to step 3 of scenario 1</li> | ||
| 138 : | </ol> | ||
| 139 : | <h2>Problem Solution</h2> | ||
| 140 : | We propose to use the Eclipse update technology to address the described problems | ||
| 141 : | and implement the listed scenarios. Note that this new structure is a complement | ||
| 142 : | to the existing large zip packagings of Eclipse. We are not proposing to stop | ||
| 143 : | creating the familiar SDK etc zips. | ||
| 144 : | <h3>Update site</h3> | ||
| 145 : | <p>eclipse.org (and others) will provide update sites sporting all the relevant | ||
| 146 : | features and plugins. Collections of projects can cooperate and share an update | ||
| 147 : | site or each supply/support their own update site. Managing your own eliminates | ||
| 148 : | the need for some sort of shared site update mechanism. However, the user must | ||
| 149 : | be able to navigate these individual sites seamlessly (see the section on Update | ||
| 150 : | manager). </p> | ||
| 151 : | <h3>Versioning</h3> | ||
| 152 : | <p>Update sites are not possible unless we use the Eclipse version numbering scheme | ||
| 153 : | effectively. The main challenge is for plugins to have version numbers that | ||
| 154 : | indicate their content. Updating versions so they correctly reflect semantic | ||
| 155 : | change would be good but not essential. What is required however is that if | ||
| 156 : | two plugins have the same id and version, their content is identical. The easiest | ||
| 157 : | way to do this is to use the version qualifier (i.e., the forth version element). | ||
| 158 : | The qualifier should be the version tag from the map file used for the build | ||
| 159 : | which generated them (e.g., 3.0.0.v20040212). The map file defines the content | ||
| 160 : | going into the build. If that does not change, then we can assume that the content | ||
| 161 : | of the output plugin will not change. In this way, identical plugins will not | ||
| 162 : | be duplicated on the update site and consumers will not have to download them | ||
| 163 : | if they already have them.</p> | ||
| 164 : | <p>Features on the other hand are packagings of plugins. They are also relatively | ||
| 165 : | small. Since the content of a feature is indirectly defined by the content of | ||
| 166 : | the plugins included in the feature, it is hard to detect change. The safe bet | ||
| 167 : | here is to use the build stamp as the qualifier for feature version (e.g., 3.0.0.I200402131200). | ||
| 168 : | This has the benificial effect of clearly identifying the features for a particular | ||
| 169 : | build. Further, since the entire feature set is regenerated, the collection | ||
| 170 : | of features with the same version number completely defines the entire build | ||
| 171 : | output.</p> | ||
| 172 : | <p>Nightly builds would not go into the update site. There is no easy way to correlate | ||
| 173 : | the content in a nightly build (out of HEAD) with that of an integration build | ||
| 174 : | (using versioned resources). As a result, all plugins would be new and the economies | ||
| 175 : | of the proposed solution would not be realized. Further, nightly builds are | ||
| 176 : | primarily there for the individual teams to ensure they have not adversely affected | ||
| 177 : | other components etc. That is, they do not figure prominently in the scenarios | ||
| 178 : | driving this proposal.</p> | ||
| 179 : | <p>Plugin directories currently reflect the id and version of the plugin. With | ||
| 180 : | the addition of the map stamp, the directory names will grow by typically ~10 | ||
| 181 : | chars). It is unlikely but this may push some path length limits. The use of | ||
| 182 : | the map stamp in a file/dir name may also place additional constraints the set | ||
| 183 : | of chars that can be used in a map stamp (i.e, CVS tag).</p> | ||
| 184 : | <p>Sidenote on version qualifiers: The qualifier (fourth segment) is | ||
| 185 : | not interpreted. Qualifiers are compared using lexographical sorting. As such, | ||
| 186 : | care should be | ||
| 187 : | taken to ensure that the qualifier for subsequent builds monotonically increase. | ||
| 188 : | For example, rather than prepending the build type identifier (e.g., I20040217... | ||
| 189 : | or M7), the build type should be appended and the build date used as the main | ||
| 190 : | body (e.g., 20040217-I and 20040213-M7).</p> | ||
| 191 : | <p></p> | ||
| 192 : | <p></p> | ||
| 193 : | <h3>Update manager</h3> | ||
| 194 : | <p>The main challenges for the update manager are in making all of this scale | ||
| 195 : | and usable. </p> | ||
| 196 : | <ul> | ||
| 197 : | <li>the UI must support a structured (hierarchical?) view of the available features. | ||
| 198 : | This view (and in fact the underlying feature structure) must be able to span | ||
| 199 : | update sites/servers. </li> | ||
| 200 : | <li>users must be able to select some set of root features and versions and | ||
| 201 : | then click "all required features". Again, this should span update | ||
| 202 : | sites/servers</li> | ||
| 203 : | <li>using these capabilities, user can then create their own uber-features/sites | ||
| 204 : | which simply reference features/sites. This becomes in effect a favourites | ||
| 205 : | list. They select their favourite root, click "all required" and | ||
| 206 : | get everything they need.</li> | ||
| 207 : | <li>the update manager mechanism may cache downloaded elements | ||
| 208 : | (features and plugins) for use in future install operations. That is, if | ||
| 209 : | you already have the plugin/feature, you don't need to download it again. | ||
| 210 : | The | ||
| 211 : | cache location should be (optionally) set by the user.</li> | ||
| 212 : | <li>ideally the update/install scenarios described will be possible when running | ||
| 213 : | offline providing that all required elements have been previously cached. | ||
| 214 : | That is, | ||
| 215 : | |||
| 216 : | if the user has already installed the features for a build, she should be | ||
| 217 : | able to create a new install without touching a server.</li> | ||
| 218 : | <li>as an advanced (i.e., longer term) item, update manager needs a way of | ||
| 219 : | managing its cache/store -- users need a way of purging old elements. Given | ||
| 220 : | a set | ||
| 221 : | of 1000 | ||
| 222 : | plugin jars | ||
| 223 : | of various | ||
| 224 : | versions, | ||
| 225 : | determining which to keep and which to delete is not possible without working | ||
| 226 : | from higher level feature groupings. In the near term, the user can delete | ||
| 227 : | the whole cache.</li> | ||
| 228 : | </ul> | ||
| 229 : | <p>Interesting side note: using the runtime's new ability to run directly out | ||
| 230 : | of jars, it is possible to have many different eclipse configurations sharing | ||
| 231 : | the same actual plugin files from the update manager's cache/store. This will | ||
| 232 : | break some assumptions about plugins being together in a plugins directory etc | ||
| 233 : | (the update reconciler may get upset) and it introduces some challenges for | ||
| 234 : | cache clean up but it is an interesting possibility.<br> | ||
| 235 : | </p> | ||
| 236 : | <h3>PDE Build</h3> | ||
| 237 : | <p>PDE Build already updates feature.xml files with the version numbers of the | ||
| 238 : | plugins involved in the build. To support the version numbering scheme outlined | ||
| 239 : | above, PDE Build will be updated to </p> | ||
| 240 : | <ul> | ||
| 241 : | <li>modify the plugin version number in each plugin.xml (i.e., add the map stamp). | ||
| 242 : | The version number of a plugin.xml is updated only if it contains <_map | ||
| 243 : | stamp_> as the version qualifier. This allows plugins to opt out of this | ||
| 244 : | update mechanism.</li> | ||
| 245 : | <li>modify the version number in the feature.xmls (i.e., add the build stamp). | ||
| 246 : | The version number of a feature.xml is updated only if it contains <_map | ||
| 247 : | stamp_> as the version qualifier. This allows features to opt out of this | ||
| 248 : | update mechanism. </li> | ||
| 249 : | <li>(advanced) modify the version number on <import> statements. Some | ||
| 250 : | plugins and features may specify a perfect match rule in when listing their | ||
| 251 : | dependencies. While this is not recommended, it is certainly possible. Unfortunately, | ||
| 252 : | there is a conflict if the intention was that plugin A depend perfectly on | ||
| 253 : | the version of plugin B with which it was built. During the build, B's version | ||
| 254 : | number will be updated according to its map stamp. Plugin A's <import> | ||
| 255 : | statement for B needs to be updated to reflect this new version. While this | ||
| 256 : | modification is technically possible, it requires more complex analysis of | ||
| 257 : | the plugin.xml file. Updating the version of the plugin itself can be done | ||
| 258 : | using simple string replacement. In this case the builder has to | ||
| 259 : | <ul> | ||
| 260 : | <li>look at each <import> using perfect match and wanting build-time | ||
| 261 : | map stamp substitutoin, </li> | ||
| 262 : | <li>identify the pluign being imported, </li> | ||
| 263 : | <li>discover the new version number</li> | ||
| 264 : | <li>replace the "substitutution desired" flag in the version number | ||
| 265 : | with the correct version number without loosing any other formatting, | ||
| 266 : | comments etc.</li> | ||
| 267 : | </ul> | ||
| 268 : | </li> | ||
| 269 : | </ul> | ||
| 270 : | <p>Note: the plugin.xml updating outlined above must be carried out on any manifest.mf | ||
| 271 : | files present in the build.</p> | ||
| 272 : | <p></p> | ||
| 273 : | <p>PDE Build will also be updated to output directly to update site format. This | ||
| 274 : | is already largely supported but there maybe some modest work required.</p> | ||
| 275 : | <p>A possible longer term advance is to change PDE build to only build the plugins | ||
| 276 : | which actually changed. Since we know the map stamp of the plugins we want in | ||
| 277 : | the output, we can first look for those in the update site (or some cache). | ||
| 278 : | If present, there is no need to rebuild them. This will have a huge (positive) | ||
| 279 : | impact on rebuilds during release cycles.</p> | ||
| 280 : | <h2>Summary</h2> | ||
| 281 : | <p>The problem outlined above is making it hard to scale Eclipse. It is hard for | ||
| 282 : | people to use large numbers of Eclipse components (e.g., EMF, GEF, ...) and | ||
| 283 : | we are failing to put forward a good model of how others would build/stock component | ||
| 284 : | systems. The ability to do this easily is key to the overall Eclipse component | ||
| 285 : | model. The steps proposed here are a good first try at solving the problem. | ||
| 286 : | The result will not be perfect but will allow us to understand what is wrong | ||
| 287 : | and fix it. Fortunately, the bulk of the technology required exists in Eclipse | ||
| 288 : | today. Also, since we are proposing a complementary approach to the current | ||
| 289 : | download strategy, we can stage the implementation of this new mechanism both | ||
| 290 : | as we have time and as we learn more.</p> | ||
| 291 : | <p>The key steps that should be taken for 3.0 are </p> | ||
| 292 : | <ul> | ||
| 293 : | <li>create/populate an update site</li> | ||
| 294 : | <li>update PDE build to automate the stamping of plugins and features</li> | ||
| 295 : | <li>a modest amount of work on update manager to enable reasonable workflows | ||
| 296 : | (i.e., set a stake in the ground)</li> | ||
| 297 : | </ul> | ||
| 298 : | </body> | ||
| 299 : | </html> |
| help@eclipse.org | ViewVC Help |
| Powered by ViewVC 1.0.3 |
