WebKit

From Wikipedia, the free encyclopedia

Jump to: navigation, search
WebKit
Logo
Developed by KDE, Apple, Nokia, Google, Touch Mobile, others.
Preview release nightly builds
Written in C++
Operating system Cross-platform
Type Application framework
License LGPLv2/BSD-style
Website http://webkit.org/

WebKit is an application framework that provides a foundation upon which to build a web browser. WebKit was originally derived by Apple Inc. from the Konqueror browser’s KHTML software library for use as the engine of Mac OS X’s Safari web browser and has now been further developed by individuals from the KDE project, Apple, Nokia, Google, Torch Mobile and others.[1] It has been ported to a number of different platforms and is now used as the rendering engine within a number of different pieces of software. WebKit is open source; its WebCore and JavascriptCore components are available under the GNU Lesser General Public License, and WebKit as a whole is available with a BSD-style license.[2]

Contents

[edit] History

[edit] Origins

WebKit began in 2002 when Apple Inc. created a fork of the KDE project’s HTML layout engine KHTML and KDE's JavaScript engine (KJS). Apple developers explained in an email to KDE developers[3] that these engines allowed easier development than other technologies by virtue of being small (less than 140,000 lines of code), cleanly designed and standards compliant. KHTML and KJS were ported to Mac OS X with the help of an adapter library and renamed WebCore and JavaScriptCore.[3] JavaScriptCore was announced in an email to a KDE mailing list in June 2002, alongside the first release of Apple's changes.[4] WebCore was announced at the Macworld Expo in January 2003 by Apple CEO Steve Jobs with the release of the Safari web browser. JavaScriptCore was first included with Mac OS X v10.2 as a private framework which Apple used within their Sherlock application, while WebCore debuted with the first beta of Safari. Mac OS X v10.3 was the first major release of Apple's operating system to bundle WebKit, although it had already been bundled with a minor release of 10.2.

However, the exchange of code patches between the two branches of KHTML has previously been difficult and the code base diverged because both projects had different approaches in coding.[5] One of the reasons for this is that Apple worked on their version of KHTML for a year before making their fork public.

Despite this, the KDE project was able to incorporate some of these changes to improve KHTML's rendering speed and add features, including compliance with the Acid2 rendering test.[citation needed] Konqueror 3.5 passed the Acid2 test, which was released after Apple had opened its WebKit CVS and Bug Database.

According to Apple, some changes involved Mac OS X-specific features (e.g., Objective-C, KWQ, Mac OS X calls) that are absent in KDE's KHTML, which called for different development tactics.[6]

[edit] Controversy

At one point KHTML developers said they were unlikely to accept Apple's changes and claimed the relationship between the two groups was a "bitter failure".[7] Apple submitted their changes in large patches that contained a great number of changes with inadequate documentation, often to do with future feature additions. Thus, these patches were difficult for the KDE developers to integrate back into KHTML. Furthermore, Apple had demanded developers to sign nondisclosure agreements before looking at Apple's source code and even then they were unable to access Apple's bug database.[8]

During the publicized 'divorce' period, KDE developer pipitas posted an article claiming KHTML developers had managed to backport many (but not all) Safari improvements from WebCore to KHTML, and they always appreciated the improvements coming from Apple and still do so. The article also noted Apple had begun to contact KHTML developers about discussing how to improve the mutual relationship and ways of future cooperation.[9]

Since the story of the fork appeared in news, Apple has released changes of the source code of its KHTML fork in a CVS repository.[10] Since the transfer of the sourcecode into a public CVS repository, Apple and KHTML developers have had increasing collaboration. Many KHTML developers have become reviewers and submitters for Apple's WebKit SVN repository.

The WebKit team had also reversed many Apple-specific changes in the original WebKit code base and implemented platform-specific abstraction layers to make committing the core rendering code to other platforms significantly easier.[11]

[edit] Open-sourcing

On June 7, 2005, Safari developer Dave Hyatt announced on his weblog that Apple was open sourcing WebKit (previously, only WebCore and JavaScriptCore were open source) and opening up access to WebKit’s CVS tree and Bugzilla tool.[12] This was announced at Apple’s Worldwide Developers Conference 2005 by Apple Senior Vice President of Software Engineering Bertrand Serlet.

In mid-December 2005 support for Scalable Vector Graphics was merged into the standard build[13] and in early January 2006 the source code was migrated from CVS to Subversion. The next month the Ars Technica website published an article announcing that the KDE team would move from KHTML to WebKit.[14]

[edit] Further development

In November 2007, the project announced that it had accomplished support for HTML 5 media features, allowing for embedded video to be natively rendered and script-controlled in WebKit.[15]

On June 2, 2008, the WebKit project announced they rewrote JavaScriptCore as "SquirrelFish", a bytecode interpreter.[16][17] The project evolved into SquirrelFish Extreme (abbreviated SFX), announced on September 18, 2008, which compiles JavaScript into native machine code, eliminating the need for a bytecode interpreter and thus speeding up Javascript execution.[18] Initially the only supported architecture for SFX was the x86 architecture, but at the end of January 2009 SFX was enabled for Mac OS X on x86-64 architectures as it passes all tests on that platform.[19]

[edit] Usage

WebKit is used as the rendering engine within Safari on Mac OS X, Windows and iPhone OS. Other applications on Mac OS X can make use of WebKit, for example Apple's email client Mail and the 2008 version of Microsoft's Entourage personal information manager both make use of WebKit to render e-mail messages with HTML content.

New web browsers have been built around WebKit such as Shiira and Google's Chrome browser,[20][21] and it has also been adopted as the rendering engine in OmniWeb, iCab and Epiphany replacing their original rendering engines.[22] Epiphany supported both Gecko and WebKit for some time, but the team decided that Gecko's release cycle and future development plans would make it cumbersome to continue supporting it.

[edit] Ports

The week after Hyatt's announcement of WebKit's open-sourcing, Nokia announced that it had ported WebKit to the Symbian operating system and was developing a browser based on WebKit for their mobile phones, which was later named Web Browser for S60. Apple has also ported WebKit to the iPhone OS to run on the iPhone and iPod Touch, where it is used to render content within the device’s web browser and email software,[23] the Android mobile phone platform uses WebKit as the basis of its web browser,[24] and the Palm Pre, announced January 2009, has an interface based on WebKit.[25]

In June 2007, Apple announced that WebKit had been ported to Microsoft Windows as part of Safari. There are also ongoing ports for the open source operating systems Syllable,[26] Haiku[27] and AROS.[28]

WebKit has also been ported to a number of toolkits that support multiple platforms, such as the GTK+ toolkit,[29], the Qt toolkit and the Adobe Integrated Runtime. Qt Software includes the Qt port in the Qt 4.4 release. The Qt port of WebKit is also available to be used in Konqueror in KDE 4.1.[14] There is also a project synchronized with WebKit (sponsored by Pleyo)[30] called Origyn Web Browser, which provides a meta-port to an abstract platform with the aim of making porting to embedded or lightweight systems quicker and easier.[31] This port is used for embedded devices such as set-top boxes, PMP and also the AmigaOS and AROS official ports.[32][33] MorphOS porting of OWB is in development.

[edit] Components

[edit] WebCore

WebCore is a layout, rendering, and Document Object Model (DOM) library for HTML and SVG, developed by the WebKit project. Its complete source code is licensed under the LGPL. The WebKit framework wraps WebCore and JavaScriptCore, providing an Objective-C application programming interface to the C++-based WebCore rendering engine and JavaScriptCore script engine, allowing it to easily be referenced by applications based on the Cocoa API; later versions also include a cross-platform C++ platform abstraction, and various ports provide additional APIs.

WebKit passes the Acid2 test, and as of September 2008, nightly builds (including Safari 4) pass the Acid3 test as well, with pixel-perfect rendering and no timing or smoothness issues on reference hardware.[34]

[edit] JavaScriptCore

JavaScriptCore is a framework that provides a JavaScript engine for WebKit implementations, and provides this type of scripting in other contexts within Mac OS X.[35][36] JavaScriptCore is originally derived from KDE's JavaScript engine (KJS) library (which is part of the KDE project) and the PCRE regular expression library. Since forking from KJS and PCRE, JavaScriptCore has been improved with many new features and greatly improved performance.[37]

On June 2, 2008, the WebKit project announced they rewrote JavaScriptCore as "SquirrelFish", a bytecode interpreter.[16][17] The project evolved into SquirrelFish Extreme (abbreviated SFX, marketed as Nitro), announced on September 18, 2008, which compiles JavaScript into native machine code, eliminating the need for a bytecode interpreter and thus speeding up Javascript execution.[18] As of September 28, 2008, the only supported architecture for SFX is the x86 architecture, although a patch exists to compile the code in x86_64.

[edit] Drosera

Drosera is a JavaScript debugger that was included with the nightly builds of WebKit.[38][39] It was named after Drosera, a genus of carnivorous plants (i.e. bug-eaters). Drosera has been replaced by the inclusion of debugging functionality in the Web Inspector.[40]

[edit] SunSpider

SunSpider Screenshot

A benchmark suite that aims to measure JavaScript performance on tasks that are relevant to the current and near future use of JavaScript in the real world, such as screen drawing, encryption and text manipulation.[41] The suite further attempts to be balanced and statistically sound.[42] It was released by Apple's WebKit team in December 2007.[43] It was well-received,[44] and other browser developers also use it to compare the JavaScript performance of different browsers.[45]

[edit] See also

[edit] References

  1. ^ Maciej Stachowiak (November 9, 2008). "Companies and Organizations that have contributed to WebKit". WebKit Wiki. http://trac.webkit.org/wiki/Companies%20and%20Organizations%20that%20have%20contributed%20to%20WebKit. Retrieved on 2008-11-17. 
  2. ^ "Open Source - WebKit". Apple. http://developer.apple.com/opensource/internet/webkit.html. Retrieved on 2009-03-05. 
  3. ^ a b KDE KFM-Devel mailing list "(fwd) Greetings from the Safari team at Apple Computer", January 7, 2003.
  4. ^ Maciej Stachowiak (June 13, 2002). "Subject: KDE-Darwin JavaScriptCore, Apple's JavaScript framework based on KJS". http://osdir.com/ml/kde.devel.core/2002-06/msg00346.html. Retrieved on 2008-08-21. 
  5. ^ [1]
  6. ^ http://www.kdedevelopers.org/node/1006
  7. ^ The bitter failure named "safari and khtml"
  8. ^ Open-source divorce for Apple's Safari?
  9. ^ WebCore - KHTML - Firefox: Know your facts!
  10. ^ Apple Opens WebKit CVS and Bug Database
  11. ^ Ars at WWDC: Interview with Lars Knoll, creator of KHTML
  12. ^ Daniel Molkentin (June 7, 2005). "Apple Opens WebKit CVS and Bug Database". KDE News. http://dot.kde.org/1118138374/. Retrieved on 2007-01-16. 
  13. ^ Next Generation KDE Technologies Ported to WebCore
  14. ^ a b Unrau, Troy (2007-07-23). "The unforking of KDE’s KHTML and WebKit". Ars Technica. http://arstechnica.com/journals/linux.ars/2007/07/23/the-unforking-of-kdes-khtml-and-webkit. Retrieved on 2007-07-30. 
  15. ^ HTML5 Media Support by Antti Koivisto, Surfin' Safari blog, November 12th, 2007
  16. ^ a b Announcing SquirrelFish
  17. ^ a b SquirrelFish project
  18. ^ a b Introducing SquirrelFish Extreme
  19. ^ [2]
  20. ^ Google Chrome, Google’s Browser Project
  21. ^ Comic describing the Google Chrome Project
  22. ^ Epiphany Mailing list - ANNOUNCEMENT: The Future of Epiphany
  23. ^ Maciej Stachowiak (January 10, 2007). "The Obligatory iPhone Post". Surfin' Safari weblog. http://webkit.org/blog/87/safari-on-the-iphone/. Retrieved on 2008-01-24. 
  24. ^ Android Uses WebKit
  25. ^ Palm Pre in-depth impressions, video, and huge hands-on gallery
  26. ^ Syllable WebKit Port, Syllable Server
  27. ^ Webkit port: talking to Andrea "xeD" Anzani | Haiku Project
  28. ^ Cow launched! | Robert Norris´ Blog on porting WebKit to AROS
  29. ^ Alp Toker – WebKit/Gtk+ is coming
  30. ^ pleyo
  31. ^ See OWB forge
  32. ^ AmigaOS OWB official page
  33. ^ AROS OWB developer page
  34. ^ Maciej Stachowiak (2008-09-25). "Full Pass Of Acid3". Surfin' Safari - The WebKit Blog. http://webkit.org/blog/280/full-pass-of-acid-3/. Retrieved on 2008-09-29. 
  35. ^ The WebKit Open Source Project – JavaScript
  36. ^ KDE-Darwin mailing list, "JavaScriptCore, Apple’s JavaScript framework based on KJS", 13 June 2002.
  37. ^ "The Great Browser JavaScript Showdown". 2007-12-19. http://www.codinghorror.com/blog/archives/001023.html. 
  38. ^ WebKit.org Drosera wiki article
  39. ^ "Introducing Drosera". Surfin’ Safari. http://webkit.org/blog/?p=61. 
  40. ^ "Commit removing Drosera". http://trac.webkit.org/changeset/33547. 
  41. ^ Muchmore, Michael (2008-06-18). "Review: Firefox 3 Stays Ahead of Browser Pack". http://www.foxnews.com/story/0,2933,368182,00.html. Retrieved on 2008-09-06. 
  42. ^ "SunSpider JavaScript Benchmark". http://www2.webkit.org/perf/sunspider-0.9/sunspider.html. Retrieved on 2008-09-06. 
  43. ^ "Announcing SunSpider 0.9". 2007-12-18. http://webkit.org/blog/152/announcing-sunspider-09/. Retrieved on 2008-09-06. 
  44. ^ Atwood, Jeff (2007-12-19). "The Great Browser JavaScript Showdown". http://www.codinghorror.com/blog/archives/001023.html. Retrieved on 2008-09-06. 
  45. ^ Resig, John (2008-09-03). "JavaScript Performance Rundown". http://ejohn.org/blog/javascript-performance-rundown/. Retrieved on 2008-06-09. 

[edit] External links

Personal tools