A long while ago, Bob wrote a short blog entry about the WiX toolset's upcoming bootstrapper adoringly named Burn. We made some early progress back then but refocused our energy on finishing WiX v3.0 which recently released. Now I'm back to Burn which will release with WiX v3.5.
What is Burn?
Burn is a bootstrapper/chainer. Because Burn is both, I tend to use the term "bootstrapper" and "chainer" interchangeably. I know some people like to have some distinction between the terms. However, I've found nobody agrees on the distinctions. I tend to lean towards the use of the word "bootstrapper" because it starts with the letter "b" and Burn was a cool name for the next WiX tool.
What is the purpose of Burn?
As you might expect from the name, a bootstrapper is responsible for getting the setup process started. You might expect that this should be unnecessary. Double clicking an MSI file should be sufficient to get the installation process going. Unfortunately, due to several design decisions in the Windows Installer there are a plethora of work items for a bootstrapper.
Burn also chains multiple setup packages to create a single installation experience. The original design of the Windows Installer expected that a product and all of its prerequisites would be installed via a single MSI file. That is why Merge Modules were developed. Unfortunately, Merge Modules do not meet the needs of all types of prerequisites and have some pretty serious deficiencies, particularly in relation to patching.
Thus the purpose of Burn is to provide a unified experience for initiating and applying one or more setup packages to the machine.
What are the features of Burn?
Let me just list the features planned for the first version of Burn. The complete list of features to implement in a bootstrapper is very long. Our first release is a balance of features vs. time to completion. As always, I welcome feedback. Particularly, if you think something important is missing.
- Size - you might not think of the size of the bootstrapper as a feature but it is very important to Burn. The goal is to keep the Burn overhead under 256 KB. Why? Well, we've found that with a broadband connections 256 KB equates to an almost instantaneous download and launch experience via Internet Explorer.
- Elevation - every bootstrapper I've seen gets elevation (aka: UAC) wrong or not-quite-right. The really bad bootstrappers prompt for elevation multiple times while others prompt before showing some branded UI. The real unfortunate part is that these bootstrappers cannot correctly handle per-user setup packages. There is a lot to elevation and I'll talk more about how Burn handles it in the future.
- UI - let's face it the Windows Installer user interface was designed in 1997 and it still looks like it. Burn on the other hand does not restrict the user interface at all. Setup developers provide a UX.DLL that has full control over the user interface and interaction (that's why we call it user experience, or UX). In the WiX toolset we will ship a couple standard Burn UX.DLLs (just like we provide standard UI for MSI files). A stretch goal for WiX v3.5 is to allow the UX.DLLs to be written in managed code (think WPF).
- Progress - progress is one of the most visible aspects of setup and one of the hardest to get right. Burn does a lot of work to create a seamless progress system so it is easy for developers to create a unified user experience across multiple setup packages. For those of you familiar with the Windows Installer, this means the progress bar no longer resets twice during the install. I can't tell you how pretty that is. <smile/>
- Download - redistributables (think .NET Framework and SQL Express) that are larger than the applications which use them are unfortunately really common right now. If you are distributing your application over the Internet (and how many people today aren't?) shipping those redistributes in your setup is expensive. Burn has the ability to only download what the user needs and/or chooses to install. That means if the .NET Framework is already installed, no need to download it again. Also, when your product is broken up into multiple MSI files it becomes possible to optimize the distribution further. Oh, and did I mention Burn will support resume if the download server supports HTTP 1.1?
Those are the big features. I'm sure I've left out a lot of little things. Again, remember this is the first version. We'll be back for more.
When is Burn available?
Burn is one of two key features in WiX v3.5. Votive support for Visual Studio 2010 is the other. We are planning to be done around a month after Visual Studio 2010 releases. Of course, the code to Burn is available right now but it is under a lot development and not at all stable. So, I would not recommend trying to use Burn too much until I get the WiX v3.5 install using it. Once WiX v3.5 is installing with Burn then you'll know the core functionality is in place. That plus there will be a working example of how to create your own UX.DLL.
I hope we'll be at that point by the end of July. A lot of that depends on how busy real life gets. Go, Sounders! <smile/>
RobMensching.com LLC
22 Comments
Comment by Christopher Painter on Tuesday, July 14, 2009 9:06 PM
I'm also curious about the anticipated 3.0 to 3.5 migration path. Are many language changes expected resulting in WiXCopy migrations or will it pretty much be switch out the tool to use the new features and assorted bug fixes?
Comment by Kevin Dente on Tuesday, July 14, 2009 9:35 PM
Comment by Bartek Szafko on Tuesday, July 14, 2009 11:43 PM
maybe some screenshots?
Comment by Philip Stears on Tuesday, July 14, 2009 11:49 PM
Comment by Yan on Wednesday, July 15, 2009 12:04 AM
Are you serious, Rob? The end of July this year, 2009, right?
I often have an impression you never sleep, guys.
Well, hold fast, anyway! ;-)
Comment by marklam on Wednesday, July 15, 2009 12:54 AM
Comment by Henry Boehlert on Wednesday, July 15, 2009 1:36 AM
Comment by Sam on Wednesday, July 15, 2009 2:10 AM
Firstly, congratulations on shipping Wix 3.0. I've been a great fan of Wix for the last couple of years.
Your plans for Burn sound great - I've found several tools that, in combination, will do most of what I want, but Burn sounds like it will do the lot. I especially like the sound of being able to create UIs in managed code.
Keep up the good work.
Comment by Neil Sleightholm on Wednesday, July 15, 2009 4:28 AM
Comment by wcoenen on Wednesday, July 15, 2009 6:00 AM
- authoring your own prerequisite packages is a real pain. The xml format is poorly documented and the slightest mistakes results in the package definition being silently ignored by the msbuild task, without any indication of what the problem is.
- the bootstrapper presents a license agreement for .NET 3.5 but then in the next dialog it will not list .NET in the list of prerequisites that will be installed
- if you move the bootstrapper's main progress dialog at all during installation, it turns into a white rectangle.
Needless to say, I'll be an early adopter of Burn :-)
Comment by Mark Johnson on Wednesday, July 15, 2009 7:48 AM
Comment by Colby Ringeisen on Wednesday, July 15, 2009 11:38 AM
In particular:
[Yan] Did you really mean July 2009?
[marklam] Option to create a single EXE?
* [Henry] Support for VS package manifests? Maybe adding support for using the ClickOnce product and package XML schemas?
[Neil] Ability to specify location of required dependencies (such as on a CD/DVD for shrink-wrap software) in addition to support for downloading the pre-reqs?
To that, I'll add my own (even though it probably goes without saying): The ability to dynamically change the msiexec.exe command line based on coded logic (custom UX.dll). For example, I'd like to be able to adjust the msiexec.exe command line for a first time install to include applying a patch if one is detected in a pre-defined location.
Comment by dB. on Sunday, August 16, 2009 1:16 PM
* platform support - maybe it's really time to forget about windows 95/98, but definitely not w2k - there should be no pre-requisites regardless of os
* os, registry-based, file-based, msi-product-based, whatever-based filters to select which components to install
* support for executing other things than MSI
* embed some components in a single executable, download others, extract only those that are being installed
* download configuration(s) from web, not just components themselves
Comment by Rob on Tuesday, September 15, 2009 2:41 PM
Comment by Tobias on Wednesday, October 14, 2009 12:49 AM
we are quite some time after July and WIX does not use burn for installation until now. Is there a new plan when it will be in?
Comment by Etienne on Monday, November 09, 2009 11:59 AM
For exemple, will burn be able to detect that the current Windows is in French and run package_fr.msi instead of package_en.msi?
Comment by Bryan on Thursday, December 03, 2009 7:55 PM
We need a bootstrapper that can elevate to admin to install the prereqs (.NET, VSTO, etc), then de-elevate back to the currently logged-in user account to install the app/add-in.
Comment by Allan.C on Sunday, February 28, 2010 9:56 PM
Comment by Markus Hopfenspirger on Tuesday, April 13, 2010 8:04 AM
Now VS 2010 ist out. What about WIX, Votive and Burn?
Thanks for your work and nice greetings from Germany
Markus
Comment by Luca on Wednesday, September 15, 2010 7:10 AM
I have Wix 3.5 built on july 2010 and I can't find it.
I tried to make it from sources but I got many other build error.
And again, is there some documentation and samples, about burn ?
Comment by Blair on Wednesday, September 22, 2010 11:57 PM
Comment by Christoph on Tuesday, May 03, 2011 11:59 PM