Firefox Update Firefox 2.0.0.5 was released earlier this week, which I promptly installed on my computers, and it got me thinking about how software updates are pushed out by various software vendors in the market.

Even though most software updates are delivered via the internet in some shape or form, there’s still a large fraction of applications that don’t include any kind of built-in updating mechanism (which is why tools like FileHippo are so handy). No wonder I come across so many people who continue to run old versions of software on their computers for months, or even years; they simply don’t know that there are updates out there, and who can blame them for it?

Moreover, out of the applications that do include the ability to update themselves automatically, very few manage to do so in an elegant way. Some applications install separate helper utilities that run when the system boots up, and they remain in memory, checking for updates at regular intervals. These tools often slow down the boot up process, consume system resources, and pop up update dialog boxes when you least expect them. Other applications relentlessly notify you of available updates, then force you to manually save and close all your work when you finally run out of patience and give in. I won’t point fingers at any particular apps, but I’m sure most of you can figure out which ones I’m referring to. ;)

For these reasons, I find the Firefox update process so refreshing. It works exactly like one would expect it to, and even goes above and beyond to avoid inconveniencing the user.

  • There are no separate memory-resident helper utilities; Firefox automatically checks for updates only while it’s running.
  • When an update is found, a dialog box appears, giving the user the choice to download and install the update, or defer the process for later.
  • If the user accepts the update, Firefox saves its state (all open tabs), closes, installs the update, and re-opens in the same state as it was before. Brilliant.
  • The update mechanism plays well with the User Account Control (UAC) feature in Windows Vista, something that even many commercial applications have yet to achieve.

If only more software vendors would follow Mozilla’s example, the desktop would be a much better place.

In the next post, we’ll take a look at another great software updating mechanism that uses a different approach, but works very well too. Until then, can you think of other applications that do a particularly good job at keeping themselves up-to-date without getting in the user’s way?


  • Geoff
    From the perspective of "just a user" sparkle is "pretty much like firefox update" in that it automatically lets you know when an update is available, downloads the update, extracts and installs the update and relaunches the application. I've never had a broken app after a Sparkle update either.

    It would be nice if it could do binary patching so you only got what you need but the other features like handling 10k client updates are probably less required as it isn't employed by applications with that kind of size though again that would be nice.
  • Great points, Asa. =)

    I'm sure a lot of effort went into building the Firefox update system, and it clearly shows (kudos to you guys!). As you pointed out, there are so many different things that need to be taken into account to ensure that the update process is as smooth, unobtrusive, and error-free as possible, and I think that's part of the reason why few software vendors manage to get it just right.

    Frameworks like Sparkle definitely have their place too. The ease with which it can be integrated into an existing application is fantastic (I just had a look at the docs). It looks like an appealing choice for smaller ISVs that don't quite have the time and resources to devote towards building custom update systems from scratch. I think this might actually be a good topic for a Part 3. ;)
  • Asa Dotzler
    Sparkle is nice. I'm not really sure it's "pretty much the same as the Firefox" system.

    Does it offer binary patching so that you can download, say, a 100KB patch instead of a 5MB application? Does it have solid error handling so that there is literally no case where a user is left with a non-functional application? Does it support update checks from 100 million clients per day or downloads from 10 million clients per day? Does it throttle background downloading if the user is occupying the connection? Does it allow the client to store all live user data (like text typed in text areas, open tabs, form data, etc.) and restore it after the restart? Does it offer robust tools for managing the Appcast feeds and load balancing?

    Building a robust application update system is actually very complicated. That's why it's only done really well like the really big guys (see Microsoft and Apple which both have solid systems for their OS and their own apps) and those few organizations who make it a real priority for security and usability reasons like Mozilla.

    More and better updates systems are a good thing, Geoff, and I don't mean to sound overly critical of your comment but I do want to highlight that Firefox's update system is actually a lot more than what it first appears. And I'm in no way trying to diss Sparkle. I appreciate that it exists and use it for my Adium updates all the time. It's a fine addition to the mix and has a pretty good feature set. I just wanted to point out that it's not "pretty much" the same as Firefox's system. By the way, Firefox's system is also open source and available to others to modify and use, though it's clearly designed with Firefox and Thunderbird (and other Moz apps) as the primary consumer.

    - A
  • Geoff

    On OS X there is a popular framework called Sparkle (http://sparkle.andymatuschak.org/) which a lot of apps include these days. Means a lot of applications have a really nice update system.


    Its so nice to use, you setup an AppCast RSS Feed, then when the application checks for updates it looks to the AppCast feed and if there is an update it automatically downloads the file, extracts it, verifies it, optionally shows you a changelog or release notes, and gives you the option to install and relaunch or just install.


    Clicking "Install & Relaunch" copies the new version to the same location as the current .app file and then relaunches it.


    All in all pretty much the same as the Firefox one but any Cocoa application can make use of it.

blog comments powered by Disqus