Omaha 3: Modernizing Automatic Software Updating

Wednesday, September 14, 2011

In 2007, Google built the Google Update engine to provide a common background automatic updater for all of its products on Windows, and released it to open source as the Omaha project. Since its release, multiple developers have successfully reused the Omaha code base to provide updating for their own products.

Over the past few years Google has continued to improve Omaha, and we're happy to announce that the third major release of Omaha has now been released as open source. The Omaha 3 code base can be used to replicate Google Update binaries, or it can be reused and tweaked by developers to create your own automatic updater for your software.

Major improvements over Omaha 2 include:

* A new API: Omaha 3 has a new state model that can be exposed via COM, allowing for finer control of the updating process and more detailed feedback from it. (It is backwards-compatible with the Omaha 2 'OnDemand' API as well.)

* Improved debugging: Omaha now generates far more detailed logs, which can be collected in the form of either text files or ETW events that can be collected using Sawbuck.

* Improved data collection and delivery: Pings for both successful and failed installs and updates are finer grained and easier to process. Omaha 3 can gracefully handle intermittent network connections as well; the results of an automatic update can be queued and re-sent at later dates.

* Machine-preferred installs: Omaha can now do elevation-optional installs, where it can attempt to install an application either per-machine or per-user and notify the installer of which mode to use. This allows you to deploy products that ship in both flavors using a single installer.

Omaha 3 is already being used by Google Chrome, Google Talk, and other Windows applications.

Developers who have used prior releases of Omaha should definitely check out the new release, which can be found at using the Apache License, Version 2.0.

We welcome feedback/questions at as well.

By Ryan Myers, Software Engineer at Google