Courgette Significantly Reduces Chromium Update Sizes

One of the more controversial features of Google’s Chrome/Chromium web browser is the way it handles updates. Contrary to other browsers, updates on Chrome are installed silently and automatically, without asking for the user’s consent. While convenient and effective, it was also a security risk and sometimes it slowed people’s machines down. Google now proposes a fix called Courgette.

Courgette is a new differential compression algorithm which significantly reduces the size of updates to the Chrome web browser. Instead of pushing out a full new browser binary during every update (10MB), Google was using the bsdiff algorithm to reduce the size of updates. Still, Google wanted smaller sizes to increase the bandwidth available for each user downloading a new update, as well as providing a better experience for people with lower connectivity.

So they came up with Courgette, which does a lot of magic stuff that I don’t understand very well. I do understand the end result: updates are now significantly smaller; 89% smaller than the bsdiff method used before. The sizes in this chart refer to the 190.1->190.4 update in Chrome’s developer channel (version 3).

Comparison of Chrome update file sizes.

“Courgette transforms the input into an alternate form where binary diffing is more effective, does the differential compression in the transformed space, and inverts the transform to get the patched output in the original format,” Google explains, “With careful choice of the alternate format we can get substantially smaller updates.”

33 Comments

  1. 2009-07-16 10:05 pm
    • 2009-07-16 10:17 pm
      • 2009-07-16 10:35 pm
      • 2009-07-16 11:53 pm
        • 2009-07-17 12:14 am
          • 2009-07-17 12:20 am
          • 2009-07-17 12:32 am
        • 2009-07-17 12:25 am
      • 2009-07-17 3:39 am
        • 2009-07-17 7:19 am
          • 2009-07-17 7:57 am
    • 2009-07-16 10:37 pm
      • 2009-07-16 10:59 pm
        • 2009-07-16 11:10 pm
          • 2009-07-16 11:21 pm
          • 2009-07-16 11:35 pm
          • 2009-07-17 9:05 am
  2. 2009-07-16 10:07 pm
  3. 2009-07-16 10:24 pm
    • 2009-07-17 3:37 am
  4. 2009-07-16 10:25 pm
    • 2009-07-16 10:40 pm
      • 2009-07-16 10:52 pm
        • 2009-07-17 4:17 am
          • 2009-07-17 6:33 am
          • 2009-07-17 7:51 am
          • 2009-07-17 7:04 am
  5. 2009-07-16 10:53 pm
    • 2009-07-16 11:24 pm
      • 2009-07-17 11:30 am
  6. 2009-07-17 8:45 am
  7. 2009-07-17 4:04 pm