WebKit

WebKit是一個開源的Web瀏覽器引擎(Web browser engine)。它被用於Apple Safari。

Webkit亦被使用於Apple iOS、BlackBerry Tablet OS及Amazon Kindle的預設瀏覽器。WebKit的C++應用程式接口提供了一系列的Class以在視窗上顯示網頁內容，並且實現了一些瀏覽器的特色，如使用者連結點擊、管理前後頁面列表及近期歷史頁面等等。

WebKit的HTML及JavaScript程式碼源自KDE的KHTML及KJS函式庫的一個分支，現已由KDE、Apple、Google、Nokia、Bitstream、BlackBerry及Igalia等獨立開發。Mac OS、Windows、GNU/Linux以及其他類Unix系統作業系統，皆支援這個專案。2013年4月3日，Google宣佈它建立了WebKit中WebCore元件的分支—Blink，Blink用於新版Google Chrome與Opera。

WebKit的WebCore及JavaScriptCore元件使用GNU寬通用公共許可證，其他元件則採用BSD許可證。

截至2013年3月7日，Webkit商標已被蘋果公司在美國專利及商標局註冊為其商標。

## 緣起

WebKit的程式碼源自1998年所開發的KDE的HTML排版引擎KHTML及KDE的JavaScript引擎KJS的程式碼。Apple的Don Melton於2001年6月25日開始了WebKit這個專案，當時WebKit僅為KHTML及KJS的復刻，Melton在電子郵件中向KDE開發者解釋，KHTML及KJS比起其他技術有著更容易開發、更輕巧（少於140000行程式碼）、更加乾淨的設計，以及更與標準相容的優勢，KHTML及KJS將會透過連接器函式庫（adapter library）的幫忙被移植到Mac OS X，並重新命名為WebCore及JavaScriptCore。JavaScriptCore在2002年6月，於KDE的郵件列表（mailing list）中首度發表，包含著蘋果公司首次釋出的部分。WebCore在2003年1月，首度發佈於Macworld Expo中由蘋果公司CEO Steve Jobs發表的Safari瀏覽器。當WebCore首次使用在第一個Safari的測試版本的同時，JavaScriptCore首次並以私有framework的方式包進Mac OS X v10.2，蘋果公司將其使用在Sherlock軟體。Mac OS X v10.3是第一個Apple發佈內建WebKit的作業系統，儘管它已經被內建在10.2內了。

Apple表示，有些牽涉到Mac OS X的特定功能（例如：Objective-C、KWQ及Mac OS X特定函式）將會在KDE的KHTML中缺席，這行為被稱為不同的發展策略。

### 開發分裂

由於這兩個分支（KHTML及WebCore）有著不同的目的而進行開發，所以他們程式碼互相補丁（patch）的難度越來越高。KHTML的開發者認為，他們不喜歡接受蘋果公司對於KHTML的改變，並宣稱兩個組織的關係有些不好（a bitter failure），蘋果提交他們相當大的補丁，其中包含相當大數目的改變，但是卻缺少相關文件，並且經常包含著未來的擴充，然而這些補丁對於KDE的開發者而言，要整合回KHTML是相當困難的。此外，蘋果公司要求開發者閱覽Apple的程式碼之前必須簽署保密條款（non-disclosure agreements），甚至還不能存取蘋果公司的bug資料庫。

在公佈分裂的期間，KDE開發者Kurt Pfeifle（pipitas）貼出了一篇文章，宣稱KHTML開發者已經設法從WebCore移植許多（但非全部）Safari所改進的項目回KHTML，而他們一直都希望這些改進是來自於蘋果公司。這篇文章讓Apple開始聯絡KHTML的開發者，並討論有關增進彼起關係的方法及未來的合作模式，事實上KDE專案確實有能力合併一些項目，來改進KHTML的渲染速度以及加入一些新的功能特色，包含Acid2渲染測試的改進。

自從新聞播報了fork事件之後，Apple在CVS發布了他們自己維護的WebKit版本，在他們發布代碼後，Apple及KHTML開發者已經加深了合作關係，許多KHTML的開發者也成為了WebKit SVN代碼庫的審查（Reviewer）及提交者（Submitter）。

WebKit工作團隊同時也逆轉許多Webkit程式碼當中，專為蘋果特定的修正，並且實現了一個平台特定的抽象層，可使渲染的程式碼於其他平台可以更順利的運作。

在2007年7月，Ars Technica網站發佈一篇文章，指出KDE開發團隊將從KHTML轉移到WebKit，再經由多年的整合，KDE開發平台4.5於2010年8月釋出，它同時支援WebKit及KHTML，而KHTML的開發仍在繼續。

### 開源

在2005年6月7日，Safari開發者戴夫·海厄特（Dave Hyatt）於他的blog宣布Apple將把Webkit開源（之前僅有WebCore及JavaScriptCore開源），並且開放了WebKit的CVS程式庫以及bug資料庫工具。這項消息由蘋果公司軟體工程的高階副總（Senior Vice President）Bertrand Serlet於蘋果公司2005年的Worldwide Developers Conference公開。

在2005年12月中，可縮放向量圖形的支援被加入了標準版本，在2006年1月初，這項程式碼從CVS轉移至Subversion。

WebKit的JavaScriptCore及WebCore元件目前以GNU較寬鬆公共許可證方式授權，而其他的WebKit元件則是以BSD授權公開。

### 更進一步發展

在2007年一開始，開發團隊開始實現層疊樣式表（CSS）的擴充，包含動畫、轉換（transitions）以及2D和3D的轉場（transform），這樣的擴充在2009年W3C的標準中被列入草案。

在2007年11月，這項專案宣布，他們已經完成了HTML5媒體特色的支援，允許頁面中以原生的方式嵌入影片，並且可以被script所控制。

在2008年6月2日，WebKit專案宣布他們重寫了JavaScriptCore，被稱為"SquirrelFish"，它是一個字節碼直譯器（Bytecode Interpreter），這項專案驗後來變成SquirrelFish Extreme（SFX），它可將JavaScript編譯為機器語言而不再需要直譯器，這樣的做法加速了JavaScript的執行，這項專案於2008年9月18日發布。一開始，SFX僅支援x86架構，於2009年1月底，SFX於OSX支援了x86-64架構，並且在該平台通過了所有的測試。

### 二次開發分裂

WebKit中WebCore元件被Chromium開源方案所採用，隨著兩邊開發差異越來越大，蘋果在WebKit的WebCore添加許多專有的代碼（如Objective-C）Chromium用不到卻要花時間去編譯，反而拖累了Chromium開發及發展。Chromium的多進程架構（Multi-Process）難以合併入WebCore代碼中，且蘋果也不願妥協採用，選擇自行開發自己的WebKit2多進程架構。

因此Chromium的開發者由於希望在瀏覽器的開發上擁有更大的自由度，同時避免與上游衝突，更可透過移除Chrome沒有使用的元件而簡化自己的程式庫，所以決定開發WebKit的WebCore分支版本Blink，於2013年4月3日釋出，被用於基於Chromium的網頁瀏覽器，如Microsoft Edge與Google Chrome等。

### WebKit2

WebKit2發佈於2010年4月8日，WebKit2的目標是將元件抽象化，並提供更乾淨的網頁渲染，它會利用從周圍的界面或是應用程式的殻，建立一個環境使網頁的內容（JavaScript、HTML、排版等等）將會在另外一個進程(Process)運行，比起WebKit，這個抽象化的做法打算令WebKit2可重覆使用一個更簡單的程序。因為WebKit2對比起WebKit有一個不相容的API，所以導致他的名字被改變為WebKit2。

目前WebKit2僅開放於Mac、Windows及MeeGo-Harmattan。

## 使用

<image>

<image>

作為渲染引擎使用的WebKit，被使用在Safari及Google Chrome瀏覽器於Windows、Mac OS X、iOS及Android平台（然而，Chrome僅僅使用WebCore，而JavaScript引擎及多工系統則自行開發）。其他的在Mac OS X底下的應用程式也使用WebKit，例如Apple的e-mail使用者端軟體Mail以及微軟的個人資訊管理系統Microsoft Entourage 2008，皆使用WebKit來渲染HTML內容的e-mail訊息。

Opera軟體公司於2013年初宣布，他們將停止他們自行開發的Presto排版引擎，由Webkit專案取代，在未來將會以Webkit來取代，並貢獻給Webkit專案。

### iOS

2007年6月29日，iPhone上市，WebKit通過Safari瀏覽器進入iOS平台，而且立即成為當時iOS平台唯一的排版引擎。

蘋果公司成為了這一項目的領導者。

### 內建平台

新的網頁瀏覽器已經內建了WebKit，例如Symbian手機的S60瀏覽器、BlackBerry瀏覽器（ver 6.0+）、Midori、Chrome瀏覽器、Android網頁瀏覽器、PlayStation_3_系統軟體4.0以上所使用的瀏覽器、KDE的Rekonq瀏覽器以及Plasma Workspaces都使用WebKit作為原生的網頁渲染引擎。WebKit已經被OmniWeb、iCab及Web（前面所說的Epiphany）採用，並取代原有的渲染引擎，Sleipnir於2012年開始在他們的瀏覽器開發WebKit，並於2012年5月17日進入第三個Alpha階段。Epiphany同時支援Gecko及WebKit，但他們的團隊描述Gecko的發佈週期及未來的開發計劃將會令他們對於Gecko的支援太過笨重。HP的WebOS使用WebKit作為它應用程式執行時期的基礎。Valve Corporation的Steam最新更新的界面，使用WebKit作為它界面的渲染以及內建的瀏覽器。WebKit在Adobe_AIR中被使用在渲染HTML及執行JavaScript，在Adobe Creative Suite CS5，WebKit用來渲染部分元件的使用界面。

截至2010年上半年，分析估計內建WebKit瀏覽器的行動裝置已經達到3億5千萬，WebKit的市場份額已經達到36%，同等於Internet Explorer所使用的Trident/MSHTML引擎的市場份額，如果這個成長持續下去，使用WebKit的總和（Chrome、Safari以及智慧型手機/平板）於2012年底將會超過50%，而WebKit將會是市場的領導者。

### 移植

在Hyatt發佈WebKit開源之後的那一周，Nokia宣布他們將移植WebKit到Symbian作業系統，並為S60開發一個基於WebKit的行動裝置瀏覽器，現在已經被命名為Web Browser for S60，它被使用在Nokia、Samsung、LG及其他使用Symbian S60的行動電話。Apple也已經移植WebKit到iOS並將其運行於iPhone、iPod Touch及iPad，它被使用在這些裝置的網頁瀏覽器及電子郵件軟體。Android行動電話平台也使用WebKit作為它網頁瀏覽器的基礎，而於2009年1月發佈的Palm Pre使用WebKit作為它的界面。Amazon Kindle 3包含著一個以WebKit打造實驗性質的瀏覽器。

在2007年6月，Apple宣布WebKit已經被移植到iOS，並作為Safari的一部分，還有一些正在進行中的項目，將WebKit移植到開源的作業系統Syllable、Haiku以及AROS Research Operating System（AROS）.。

WebKit也被移植到許多Toolkits使其支援多平台，例如GTK+ toolkit、Qt framework,、Adobe AIR、Enlightenment Foundation Libraries (EFL)以及Clutter toolkit。Qt Software（Digia所擁有）於Qt 4.4包含Qt port，Qt port的WebKit也可使用在Konqueror 4.1版本之後。在Qt底下的Iris Browser也使用WebKit。The Enlightenment Foundation Libraries (EFL)的移植還在進行（經由Samsung及ProFUSION），他們將專注在嵌入式及行動系統，並將其作為一個獨立運行的瀏覽器、Widgets/Gadgets、文件閱讀及修改軟體。Clutter的移植是由Collabora所開放，由Bosch所贊助。

還有一個專案與WebKit同步（由Pleyo所贊助），被稱之為Origyn Web Browser，他提供了一個多元的移植方式，將其移植到抽象的平台，目的是讓移植到嵌入式或是輕量系統可以更快速簡單。這個移植被使用在嵌入式裝置，例如set-top boxes、PMP，而他已經被移植到AmigaOS、AROS及MorphOS，MorphOS 1.7是第一個支援HTML5媒體標籤的Origyn Web Browser (OWB)。

### 其他平台

#### Windows

2008年3月18日，Safari 3.1 for Windows轉正，解決了Windows平台下WebKit一直存在的部分兼容性問題。同年9月3日推出的Google Chrome使得這一平台進一步成熟。而在Windows Mobile戰線，領先推出穩定版的是拓馳公司的Iris Browser。

Windows是除Mac OS X外另一個得到WebKit.org官方支持的版本。

#### Linux

2008年10月22日投入市場的Android，其內置瀏覽器Google Chrome Lite代表著脫胎於Linux的Webkit內核「回歸」Linux平台。儘管WebKit的原型Khtml是由Qt寫成，但Linux下當前最受矚目的WebKit項目卻是Gnome領導的WebKit/Gtk+。不過隨著奇趣科技於2008年6月被Nokia收購，Qt方面也加快了WebKit的開發進程。目前，Google Chrome，Xfce的Midori，GNOME的Epiphany、KDE的Konqueror，Arora以及QupZilla是Linux系統下最流行的Webkit內核瀏覽器。

#### Symbian

2005年，諾基亞公司的S60團隊成為手機端WebKit的先驅，他們將WebKit框架移植到了Symbian S60平台，作為S60第三版的瀏覽器內核。

### 分支

在2013年4月3日，Google宣布他將自行開發WebCore的分支，也就是Blink引擎。Chrome的開發者由於希望在瀏覽器的開發上擁有更大的自由度，同時避免與上游衝突，更可透過移除Chrome沒有使用的元件而簡化自己的程式庫，所以決定開發WebKit的分支版本。同時Opera軟體在同年稍早也宣布，他們將自有引擎轉換到Chromium的程式庫，在此時也同時轉換到Blink的分支。根據這份聲明，WebKit的開發者開始討論移除Chrome相關程式碼的可能性，以精簡整個WebKit程式庫。

## 元件

### WebCore

WebCore是一個由WebKit專案所開發的佈局（Layout）、渲染（Rendering）及HTML和SVG的DOM函式庫，完整的程式碼皆由GNU寬通用公共許可證所授權，WebKit框架包裝了WebCore及JavaScriptCore，並提供一個Objective-C應用程式接口來接介由C++所開發的WebCore渲染引擎及JavaScriptCore腳本引擎，透過Cocoa API就可以在應用程式中很簡單的使用這些元件。之後的版本同時包含了一個跨平台的C++抽象平台，並且提供各種API使用。

WebKit通過Acid2及Acid3的測試，包含完美像素的渲染（pixel-perfect rendering）以及沒有任何時間及不順的問題。

### JavaScriptCore

JavaScriptCore是一個在WebKit中提供JavaScript引擎的框架，而且在Mac OS X作為其他內容的腳本引擎。JavaScriptCore最初是為KDE的JavaScript引擎（KJS）函式庫及PCRE正則表達式函式庫，JavaScriptCore從KJS及PCRE復刻之後，已比原先進步了許多，有了新的特色以及極大的效能改進。

在2008年6月2日，WebKit專案宣布，將被重寫為"SquirrelFish"，它是一個字節碼直譯器，這個專案演變成SquirrelFish Extreme（簡稱為SFX，市場稱之為Nitro），首次公開於2008年9月18日，它會將Javascript編譯為原生的機器語言，不再需要字節碼直譯器，同時加速了JavaScript的執行效率。

### Drosera

Drosera是一個JavaScript調試工具，它被包含在每日編譯的WebKit版本內。它被命名為茅膏菜屬，這是一種食蟲植物。Drosera目前已經被Web Inspector取代了。

## 現在使用WebKit引擎的瀏覽器

### 開源

- Midori：當前最新測試版0.1.5所用的引擎版本是WebKitGTK+ 1.1.13
- Epiphany：原使用Gecko，2.28版開始改用WebKit
- Arora：當前最新版本號是0.11.0，使用QtWebKit調用Webkit核心
- Falkon：當前最新版本號是1.3.5，使用QtWebKit調用Webkit核心

### 非開源

Avant Browser｜當前最新正式版2018 build 1採用Trident/WebKit/Gecko三引擎。

Lunascape｜當前最新正式版6.15.1採用Trident/WebKit/Gecko三引擎。

Safari｜當前最新版。

Orion｜當前最新版0.99.137beta。

Sleipnir｜當前最新正式版6.2.10採用WebKit引擎。所用的引擎版本是 Blink 537.36 (Chromium 64.0.3282.140)

搜狗高速瀏覽器｜當前最新正式版7.5.8.27113其2.0版開始採用Trident/WebKit雙引擎。

傲遊瀏覽器｜當前最新正式版5.1.6.3000。

QQ瀏覽器｜當前最新正式版9.6.11165.400騰訊公司的瀏覽器產品，採用Trident/WebKit雙引擎。

## 基本資料

- 作者：KDE
- 開發者：蘋果公司、Adobe、KDE、Igalia及其它開發者
- 發行日期：1998年11月4日（KHTML釋出）；2005年6月7日（WebKit開源）
- 作業系統：跨平台
- 程式語言：C++
- 類型：排版引擎
- 許可協議：GNU LGPL v2.1（某些JavaScriptCore與WebCore元件中的檔案）、BSD v2.0（大部分瀏覽器引擎）