Courgette algorithm reduces Chrome update size
Use of a new algorithm will allow Google to provide smaller, faster updates for its Chrome browser, and thereby significantly reduce server and network workload. For security updates in particular this results in a narrower window of vulnerability. In a blog post Stephen Adams describes the "Courgette" technique. Until now Google has used the bsdiff algorithm to identify differences in the binary versions of the browser. "We are big fans of bsdiff - it is small and works better than anything else we have tried."
However, the amount of data that the program generated as the difference between two versions of Chrome, was still too big. The problem is that only a small number of changes in the source code of a program can result in much larger changes in the compiled code and bsdiff does not take this into account. The Google developers realised that if they could step backwards a little and return internal pointers to a symbolic state, updates might be made smaller. Courgette acts as a simple disassembler, finding the internal pointers and generating pseudo-assembler code. On the client side a simple 'assembler' is used to create the patched browser code.
The developers describe the details of the procedure on the Chrome website. According to this, Courgette cut the size of the updates from Chrome version 190.1 to 190.4 to only 78,848 bytes. Using bsdiff the update is quite a bit larger at around 700 Kbyte. The complete executable file weighs in at around 10 megabytes.