MSI, PKG’s and Adobe Installer Needs
Tonight’s post is written by the Sr. Engineering Manager leading the development team for the deployment (installer/updater) and provisioning (licensing) technology, Nagendra Bangalore. Nagendra is a long-time installer guru at Adobe who became responsible for the installer technology for Creative Suite 4. Having successfully addressed many of the goals for Creative Suite 4 installers, namely fixing most of the retail customer workflows, Nagendra now has responsibility for the update technology as well as the provisioning technology for future versions of the Creative Suite. –Eric Wilde
A slight bit of history and maybe a bit of overlap to what Eric wrote in his previous blog; so please bear with me on this one. Note that this article focuses on retail installers. Enterprise deployment considerations are significantly different and will be handled in future posts.
A long time ago when Adobe was not releasing the Creative Suites, life in installer land was very pretty and relatively straightforward. Each team that released a product had a Windows & Mac engineer releasing native installers. The installers were industry standard and worked well and then the Creative Suite came along and changed everything.
Lets take a look at how the first Creative Suite was accomplished.
In the first Creative Suite, all individual products were using InstallShield or MindVision to create non-MSI installers on Windows and Vise Packages on Mac. A team was put together and wrote installers for the Creative Suite that assembled and installed the individual installers in silent mode. At that time there were many engineers each working on individual applications. These engineers working on the individual product installers and the Creative Suite installers ensured six products (Win & Mac) were assembled into a single Creative Suite installer (Win & Mac). The efficiency in original Creative Suite installer development was two engineers per individual product.
It worked great for the Creative Suite as it was custom assembled; but, for every change required by the Creative Suite each product’s installer engineers had to change their code to accommodate the requirements of the Creative Suite. This became a coordination nightmare. We had a staggering number of install order incompatibilities, and we routinely had individual product installers stomping on each other. There was a lot of testing that went into Creative Suite installers that didn't go into general co-existence issues, and in fact a lot of the fixes in suite installers depended on the particular order of installation of the products in the suite. It was, however, still manageable even though the teams working on the individual product installers were in three different geographies (San Jose, Seattle, and Hamburg). One thing was clear going in to Creative Suite 2, we had solve the issue of file sets that were common across many individual products in the Creative Suite.
A look at how the Creative Suite 2 was done.
As the team started on Creative Suite 2, it was decided to standardize on MSI (InstallShield) and Apple Packages for Mac. Standard templates were created, all of the Creative Suite requirements for the installer functionality were moved to scripts and DLLs, (written once but used by everyone) and the Creative Suite Installer team worked on another custom installer to bring them all together.
Since we had a very obvious issue of files being stomped all over the place in the first Creative Suite, we solved the issue by introducing the common files installer (aka shared component installers.) See the note below on MSI and shared compoqnents. Another problem became the co-ordination among installer engineering to pick-up the right version of the common code implemented in DLLs and scripts. Any mismatch meant some Creative Suite functionality was broken. The overwhelming complexity brought in by Creative Suite 2 was a major indicator that for Creative Suite 3 installers would have to use a different technology.
A look at how the Creative Suite 3 was done.
As the team formed in Creative Suite 3 to look at this problem, they had a bigger problem at hand. The acquisition of Macromedia brought many very different products into the Creative Suite. These products plus the integration of the video and audio products in CS3 resulted in much more complexity from the sheer size of the Creative Suite. No longer could we enjoy the luxury of having 1 installer per product. They had to solve this by coming up with a solution that created installers that shared code, could be used across six different Creative Suite offerings, create installers that could simply plug into the Creative Suite architecture, solve package management problems, implement new functionality and requirements, all while keeping the overall installers easy to create.
Phew, there's a bit of history on how the Creative Suites were accomplished. Now lets talk a bit about the technology itself,
Folks always asked me, "Why do you have to make it so complex!! Microsoft Office is a suite of applications and they have MSI-based installers. Why can't Adobe do this?"
Okay, Let’s investigate MSI a bit.
MSI is valuable installation technology for delivering individual products and it does a great job handling all of the installation needs (performance can be a bit more desirable, but hey, if it is reliable then performance can take a back seat for now). But where it breaks down is handling a suite of applications as well as shared components that are independently updatable.
Before we go any further, let me take a brief moment to define what I mean by "shared component" or, in Adobe nomenclature, “Shared Technology Installer”. Many of the Adobe products use certain functionality that is shared between more than one product. These functionalities are called shared components. Shared components should have their own installers and should be managed in such a way that install/uninstall of a particular software that uses the shared component does not break any other software using that shared component. This involves reference counting of that shared component on the end-user’s machine in some way. Examples of shared components are Adobe Camera Raw, Adobe Extension Manager, Adobe Bridge, Dynamic Link, CMaps, TypeSupport and the list goes on. Organizationally, these components are owned by different teams who deliver the shared component to each product team. Shared components are delivered as standalone installers for integration purposes.
By now an MSI expert is thinking “Why installers? Why doesn't Adobe release MSM for the teams to integrate?” Good Question.
Here is why we could not release MSM for shared components:
a) Integration of MSM into an MSI installer means literal addition of these files into the product's MSI and Cab file. If two such products are in a Creative Suite that effectively means you just doubled the space of the media and also means you increased the size of the electronic software download. Now imagine what the Master Collection would look like with all of those duplicates, many of which are in four or more products.
b) Once the MSM's become part of the MSI then those files are not part of the main installers. Once this happen, creating a patch/release/upgrade of the shared component would be a nightmare and in some cases impossible due to the constraints imposed by MSI on upgrades and patches.
c) Now imagine you are on the verge of shipping the Creative Suite. There is a bug in the shared component and a fix is released. If the fix is in an MSM file then every product that included the MSM must rebuild and recertify. This can very readily lead to a slip of the shipment date.
I am not saying that releasing the shared components as installers is the only answer to this; but, it did solve some of our major requirements:
a) Since we released shared components as installers, these installers could now be plugged in to the product installer. The integration became easy. When a Creative Suite was created we needed to carry one copy of the shared component installer.
b) Creation of patches for these shared components is not a problem because they are treated as a product itself.
Once we decided to go with installers it introduced a host of other issues that we had to solve:
a) Reference counting (one more reason why MSI’s can’t be used for the Creative Suites or individual products in the case of Adobe products) - Since MSI only does component ref-count we had to now keep track of the installer ref-count. No one does this currently. We had to come up with a way to handle this.
b) Versioning issues – We now had to make sure that the installers didn’t install the wrong or older version of a shared component.
Apple Packages and Creative Suite Installers
When we first started investigating what installer technology to use for Mac Installers, it was obvious that we should be using Apple PKG and MPKG formats.
In Creative Suite 2, all the individual product installers did use PKG and MPKG formats. As we dug in to Apple PackageMaker we encountered the following issues that made us look at other options.
a) No script can be executed before the UI starts (so that we can check for OS, conflicting process, incompatible versions of application installation, check for pre-release versions, etc).
b) We could not show a serial number dialog as part of the installer workflow.
c) Decision from a script directly affects the selection of items in the UI.
d) Add custom UI and custom messages and insert them into the different workflows, (install, re-install and uninstall workflows)
e) Selection/De-Selection of one package in the options screen must affect other items and prevent users from making an incompatible selection.
f) Prompt for disk-swap when an installer switches from one media to another.
g) Ease of installer creation when it comes to shared technologies, individual products and their integration into Creative Suites.
Here is a simple table that illustrates where MSI and Apple PKG format do or do not meet our needs.
|
Topic
and Issues Critical to Adobe |
MSI |
Apple
Pkgs |
|
Ref-count b/w
Shared Technology Installers |
No |
No |
|
Ability
to Patch/Upgrade/Update smaller portion of the technology in a Creative Suite |
No |
No |
|
Can be used to create Creative Suite installers |
No |
Yes |
|
Media
Management (Disk swapping) |
Yes |
No |
|
UI/Project
Customization |
Yes |
Not
to the extent we require. |
|
Resource
Usage for Installer Creation |
Very
High |
Low;
but, not less than what we have currently. |
|
Package
management Package
management is the ability of a software deployment system to identify and
resolve the needs of a software product on end-user's machine. It includes
various aspects of software deployment such as conflicts, dependencies, 3rd
party dependencies, updates, patching, etc. It is a very complex area. The complexity increases
further when the Creative Suites are introduced, where many products share
Shared Technology Installers. Due
to complex product matrics in different Creative Suites, the
conflict/dependency scenario becomes cumbersome. |
Present
for Products and Non-existent for Creative Suites like Adobe |
Very
Basic |
|
Uninstall/Repair
|
Uninstall
functionality available. Reinstall on windows will not perform a full
re-install but will only repair key file marked items. Assets not marked as
key file are not reinstalled. |
Uninstall/Drag
to trash functionality available. Reinstall
functionality also available. |
|
Scaling
of Productivity (i.e. Engineer handling installer for 4-5 products –
Platforms excluded) |
No
very scalable |
Scalable
but we still need to tackle issues like sharing of installer functionality
across projects. |
In short, our determination was that the native platform installers would not allow us to get the reliability, flexibility and engineering efficiencies of shared component install, package management, and the UI flexibility we needed for our suite installers. We realize that the lack of native installers for our products has raised questions for all of our customers, and presents real problems for enterprise deployment situations. As to the questions: we hope this post has answered many of them, and we look forward to your follow-ups.
We also realize that these factors affect enterprise customers the most. We are working to make this much better. In future blog posts we will address this issue and talk to you all about the options we are thinking about to solve the pain felt by our enterprise customers and we sincerely look forward to your feedback.
Thanks,
Nagendra Bangalore
Sr, Engineering Manager
Nagendra@adobe.com