A new compression algorithm to make Google Chrome updates small
blog.chromium.org
blog.chromium.org
http://src.chromium.org/viewvc/chrome/trunk/src/courgette/
BTW, I've read about 40% of the Chrome code and I have to say it is the single best open-source project I've come to study so far. Incredibly clean code, really shows how much code reviews done properly can benefit project in the long run.
I don't know all the details behind Courgette, but it sounds very similar to Exediff. In my thesis I show that bsdiff (well, a slightly improved version of bsdiff which I never got around to releasing publicly) performed on par with or slightly better than Exediff; so I'm surprised that Courgette is getting this far ahead of bsdiff.
Based on the numbers they've published (a 10 line source code patch to a 10MB executable resulting in a 700kB bsdiff patch), it sounds like there's something weird going on which is breaking bsdiff -- the FreeBSD kernel is roughly the same size as Chrome, but normally for a small (e.g., 10 line) source code patch I would see a bsdiff patch of between 50kB and 100kB.
Beyond that, I really can't offer any more insight -- unless someone wants to hire me to spend a week looking at the old and new binaries and figuring out where bsdiff is going wrong. :-)
x86 is variable length, so this isn't trivial, but surely it is possible. I guess I don't like the "assembler" step because, hmm, SSE7 might not look like x86.
Also, if you were willing to have the loader to do the work, it sounds like you could do a -fPIC sort of thing, and load most code as a DLL.
Very cool that they got it working, though.
The small size in combination with Google Chrome's silent update means we can update as often as necessary to keep users safe.
[An extra tidbit- courgette is a 'summer squash'. Silly Google...]
"Why Silent Updates Boost Security" http://www.techzoom.net/publications/silent-updates/
"Hi everyone, welcome to the Monday morning Chrome staff meeting. Um... so we've gotten some push back from management. They -- guys you're not going to believe this -- they think we might be using too much bandwidth. I tried to make a snarky joke about YouTube, but they weren't having any of it. So, um... we're gonna go ahead and pull two or three guys from the [INSERT IMPORTANT BROWSER COMPONENT THAT WILL LEAD TO A BETTER BROWSER HERE] team and have them work on making the updates smaller."
Since broadband penetration here is not very good, people who travel a lot and need to be online most of the time use mobile Internet, which is much slower and costs much much more.
So, what do you mean by "today's Internet"?
http://www25.wolframalpha.com/input/?i=700+kilobytes/256+kbps
And it's going to happen in the background anyway. jQuery (as per jQuery.com) is nearly 20k minified and gzipped. So they have gone from 35 jQuery downloads to 3.5 jQuery downloads. The 10x factor is impressive, but in absolute terms I don't think it's really that noticeable."Today's Internet" is the one with jQuery, YouTube, Netflix streaming, last.fm, Flickr, and GMail. It's the one where most of us can get multiple mbps, or at least several hundred kbps, to our homes. It's the one where we dont notice the difference between 70k and 700k. It's actually quite nice. :-)
If they set the time interval of update check to 1 hour, then they have 1 hour to push out this data. If they can reduce the data by 10 times, they can schedule the update check more aggressively.
Every bit helps.
Anyway, doing it as well as can be done is a good challenge.