While everybody was talking about the iPhone OS 4 event yesterday, Apple also quietly announcedWebKit2, a major contribution to the open source WebKit project that forms the basis of Apple’s Safari and Google’s Chrome browsers. One of the reasons that Google Chrome doesn’t crash very often is that Google uses a split process model. Every tab in Chrome runs in a different process and a crashing plugin or bug only takes down this tab and not the whole browser. While Google had to develop this code from the ground up for Chrome, Apple is now making this technology a core part of the WebKit2 framework.
Here is how Apple’s engineers Anders Carlsson and Sam Weinig describe WebKit2:
WebKit2 is designed from the ground up to support a split process model, where the web content (JavaScript, HTML, layout, etc) lives in a separate process. This model is similar to what Google Chrome offers, with the major difference being that we have built the process split model directly into the framework, allowing other clients to use it.
What does this mean for users? First of all, Safari and every other application that uses WebKit, including the popular NetNewsWire RSS reader or the Konqueror browser for KDE, for example, will soon be able to rely on the same kind of crash protection that Google Chrome currently offers. Microsoft’s IE8 already features a similar crash-protection mechanism and as our own Sarah Perez noted earlier today, the latest beta version of Firefox (Lorentz) now also lets some processes (Flash, QuickTime and Silverlight) run in separate instances.
Getting Ready for Multi-Core Browsing
WebKit2 will also implement a number of APIs that will make applications more responsive. These will allow applications to render web content in the background without blocking other processes that the application wants to execute. As Stephen Shankland points out, this technique will also make it easier for developers (including Apple) to take advantage of multi-core chips.
For a more detailed look at the technical side of WebKit2, also have a look a this document from the WebKit2 team.