Do not read this document! It is a working draft. It has not been reviewed. It is not even finished.
There are two areas in which the current NetBeans installation experience should be improved. First there is the technique used by the installer, i.e. HOW to install. For example we have a choice between a local or network installer, multiple installers for add-ons or one centralized installer, InstallShield based installer, linux packages, stadalone or web startable Java installer, installer that is part of NetBeans, a simple .zip (tar.gz) file etc. We have to deal with technical difficulties like installation of bundled software, platform and software dependencies, running the installer in a silent mode from command line or from another installer, etc.
The second area of requirements for installer is often overlooked. It is connected to product definition, i.e. WHAT to install. The modularity of NetBeans and independent versioning of its components poses a challenge in selecting the right granularity for packaging which would make sense both for the users - to select what parts of the tool they need - and for us - to select what part we can develop, test and release as a unit.
NetBeans 5.5 has six different installers - one for NetBeans and five the feature packs. This is an improvement over the previous state when each of the products bundled in it its own (more or less modified and/or dated) version of NetBeans. But the necesity to download and run multiple installers is still not optimal. The grouping of features is also not ideal (e.g. XML, SOA and BPEL togeather in one pack). On the positive side, the common parts are shared: NetBeans platform and IDE and there are no custom changes made in them by the packs. User can choose to install only the packs that they need. On Windows using Install Shield provides optimal user experience for installation from CD or from downloaded file, it is a de facto standard for a native plaform installer. On linux distributions an optimal installer (i.e. native to the platform) would be a linux package, which is currently missing.
Part of the installation story are the update centers. The functionality available from update centers is currently (1) modules which are optional, i.e. not important for all user and thus not included into standard distribution (note that the fact that this is an optional "add on" functionality is similar to the packs) or (2) modules which are developed independently of main schedule and finished after the release (again similar to packs) or (3) patches with bugfixes or (4) unstable experimental modules or (5) third party modules.
Going forward we want to discontinue the packs and point products as the primary delivery of features and move all of the functionality into NetBeans[1]. This means that there will be one product - NetBeans - with common binary platform and all tools produced by Sun will be distributed as additional modules installed into this platform. In other words all the tools need to be able to coexist in the same environment on the same NetBeans platform. Some parts of out tools stack may be simply put into NetBeans standard distribution, but in general it does not mean that we would only produce one monolithical tool with all features always present in it. The feature set will still need to be customizable for several reasons:
[Note:] There may still occasionally be products created for special target audiences, such as Creator or to be bundled with runtimes, such as JSE for JES or Sun Studio for Solaris. But the installers required for these are also quite special, there is likely no modularity required for them.
The notion of "One NetBeans" also does not mean that all features will always be developed and release synchronously at one time. NetBeans 5.5 was unique in this regard and was close (though not 100%) to release NetBeans, VWP, Enterprise pack, Mobility, C/C++ and Profiler in sync. Going forward there will be external drivers (such as releases of targetted runtimes), organizational reasons, scheduling issues, etc., which may make it impossible or inpractical to release all components in sync.
Download size is often quoted as one of the main requirements for building a new installer. First, let's look at what is the real download size of NetBeans today (5.5), what is the download size of competitive products.
| Product | Size |
|---|---|
| Mobility Pack | 22.5 |
| Mobility CDC Profile | 41.5 |
| C/C++ | 7.8 |
| Profiler Pack | 9.0 |
| Ent Pack (SOA, XML, Indentity) - includes app server | 87.0 |
| Visual Web Pack (linux) - includes JDK javadoc | 41.8 |
A sum of all installers as of today: 42.1 + 22.5 + 41.5 + 7.8 + 9.0 + 87 + 41.8 = 251.7. This is increased a little bit by the installer overhead and a lot by inclusion of app server into enterprise pack. Real size of one installer for NetBeans plus all packs w/o application server would be approximately 140 MB, with !GlassFish approximately 200 MB.
| Product | windows | linux | Mac | ZIP |
|---|---|---|---|---|
| Intellij IDEA 6.0.1 | 63 | 58 | 65 | |
| Eclipse 3.2.1 | 118 | |||
| JDeveloper 10.1.3.1.0 Java Edition (only Java/XML, no J2EE, no UML, no DB) | 55 | |||
| JDeveloper 10.1.3.1.0 J2EE Edition: J2EE+UML+DB | 171 | |||
| JDeveloper 10.1.3.1.0 Sudio Edition (complete, recommended download) | 371 | |||
| MyEclipse Enterprise Workbench 5.0 - w/o eclipse 3.2 | 207 | 222 | 190 | 191 |
| JBuilder 2007 Foundation | 51 - 96 | |||
| JBuilder 2007 Developer | 421 - 453 | |||
| JBuilder 2007 Enterprise | 662 - 693 | |||
| NetBeans 5.5 - Java + J2EE | 42 | 41 | 67 | 70 |
| NetBeans 5.5 - w/o J2EE | 30 |
In this analyses I am looking at options to actaully decrease the size of the bits for the same functionality, although there is probably some potential in that (the experiment of reducing size of NetBeans to fit into JDK, etc.). I am looking at how the installer can help to the address the problem of too large download size in many different ways:
From architectural point of view the units are modules and clusters.
From the user perspective the existing units of packaging in NetBeans:
Modules are two small units of packaging, not all modules are interesting for the user. From user perspective it makes more sense to talk about features.
Packs are a little bit artificial grouppings of features. From user perspective it makes more sense to talk about feature sets - a set of modules, e.g. SOA, XML Tools, Java SE, Web Apps, etc. which covers a technology or an area of development. Clusters probably fit pretty closely into this although the primary motivation for clusters is architectural (unit of compatibility) not as an end user unit of functionality.
TBD
Different parts of NetBeans will be likely developed and released at different schedules. In past and mostly at present it has been problematic to develop some of the packs without making changes and bugfixes in NetBeans, althought in some cases (Buzz release of JSE) it was possible. Another issue is how to make all functionality existing in previous version of packs available for the latest NetBeans platform and IDE. It seems unacceptable to release new version of NetBeans and not have all features available (even if an older version) for it. The answer is in backward compatibility, integration testing, etc., but it is not trivial.
The installer should actually help user to manage versions and dependencies, like the auto update does or like the ubuntu installer does. It should not just passively demand that the user downloads and installs the correct versions, like the pack installers.
Interaction of native installers and installers of other software w/update functionality in NetBeans:
Install NetBeans only once. Upgrade and extend the features from then on. Similar model to Firefox or linux distributions.
Produce linux packages and try to get them into all distributions. Ability to upgrade is crutial for this. If the IDE can upgrade itself it does not matter that much if we distribute an older version. These installers should have packages for individual packs (feature sets) and suggest installation of runtimes (application servers, databases, etc.). Produce Mac OS X and windows native-looking installers.
For the first installation there will be several prepackaged options:
The user will be able to select components to install (Full/Custom).
The installer will be implemented in Java. It will download data over network or take from media or downloaded file. There will be one common UI that can be started from JWS, from command line (wrap into exe?) or from NetBeans. This UI will be used as the NetBeans module manager / updater.
The NBI provides capabilities to install third party components, registeration on platform, etc. which will be used for NetBeans module manager / updater.