# WebKit

WebKit è un motore di rendering per browser web utilizzato per il rendering delle pagine web. Il progetto WebKit è stato creato da Apple il 25 giugno 2001.
Viene rilasciato con licenza BSD 2-Clause. La base mondiale installata ammonta alla quota di circa il 50.3% di tutti i browsers.
Esso viene utilizzato oggi da browser come ad esempio Safari di Apple per macOS e iOS, PlayStation a partire da PS3, Dolphin di Samsung, Opera dalla v16, Tizen, Amazon Kindle, BlackBerry browser, Symbian con S60, Midori, Rekonq di KDE e molti altri sia come motore browser, che come motore di rendering web all'interno di applicazioni eterogenee come ad esempio in Creative Suite di Adobe o Steam di Valve o Plasma Workspace.
È stato usato in passato da Google Chrome fino alla versione 27, Android Web browser fino alla versione KitKat, e successivamente al 2013 questi hanno proseguito derivando dal WebKit un proprio fork WebCore/JavaScriptCore denominato Blink.

## Storia

In generale, quando si crea un browser si inizia dall'individuazione del motore di rendering su cui basare il client. WebKit nacque in Apple, sviluppato inizialmente da parte di Don Melton nel 2001 (a capo del WebKit Team e del Safari Team di Apple) da un fork del motore open source KHTML e il motore JavaScript di KDE (KJS), grazie ad un adattamento e modifica delle librerie iniziali fu poi sviluppato col nome WebCore e JavaScriptCore. Melton ha spiegato in un'e-mail agli sviluppatori di KDE che KJS e KHTML hanno permesso uno sviluppo più facile rispetto alle altre tecnologie disponibili in virtù dell'essere di piccole dimensioni (meno di 140.000 linee di codice) e progettato in modo pulito nonché conforme agli standard.
Il suo sviluppo fu annunciato da Steve Jobs ed, all'epoca di Mac OS X v 10.2, fu integrato nel software di sistema Sherlock; successivamente debuttò il 7 gennaio 2003 nella versione Mac OS X Panther come nuovo browser web Safari.
Il 7 giugno 2005 lo sviluppatore Dave Hyatt di Safari annunciò sul suo blog che Apple stava per pubblicare il codice sorgente di WebKit, aprendo l'accesso al CVS e al tool Bugzilla. L'annuncio coincise con il WWDC del 2005.
Sono poi stati eseguiti molti porting, ad esempio per Windows (ora abbandonato da Apple), AmigaOS, MorphOS, Gnome, GTK toolkit per Linux, Enlightenment Foundation (EFL), QT Software per Linux (ora abbandonato dalla versione successiva alla 4.4), Orygin WB, ed altri.
Ad oggi tutte le compagnie che integrano il Webkit collaborano con Apple nel suo sviluppo attuale.

## Caratteristiche

WebKit è un progetto open source che nasce dalla combinazione di componenti di codice KDE con tecnologie e sviluppo di Apple. WebKit può interagire con un server web, richiamare e visualizzare le pagine web, scaricare i file e gestire i plugin. È disponibile come aggiornamento per macOS a partire dalla versione 10.2.7 e integrato in Mac OS X Panther e successivi. Esso permette a sviluppatori terzi di includere con facilità nelle loro applicazioni molte delle funzioni proprie di Safari.
Webkit ha passato i test Acid2 e Acid3, essendo completamente aderente al pixel-perfect rendering ed esente da problemi di scorrevolezza sull'hardware di riferimento;
esso include due framework di basso livello che incapsulano:
* WebCore, un parser HTML e un renderer derivato da KHTML
È un DOM (Document Object Model) per SVG (Scalable Vector Graphics) del lay out e rendering, rilasciato sotto GNU Lesser General Public License (LGPL). L'API in Objective C di WebKit si interfaccia ai Web/JavaScript Cores in C++, permettendo un accesso facilitato alle applicazioni basate su Cocoa API. Nel tempo sono state incluse ulteriori migliorie, come l'astrazione cross-platform C++, e port con accesso ad altre API.
* JavaScriptCore, un motore JavaScript derivato da KJS.
È una implementazione del motore JavaScript delle librerie PCRE (regular expression libraries) e dello JavaScript Engine KJS, ma da questi elementi si è poi diversificato moltissimo, con nuove funzioni e performances elevate, sino ad arrivare ad una completa riscrittura totale nel 2008, con un interprete bytecode denominato SquirrelFish, poi evoluto in SqurrelFish Extreme (SFX, Nitro) con ulteriori accelerazioni di esecuzione JavaScript. Nel 2014 è stato introdotto un compilatore ottimizzato Just-in-Time (JIT) denominato FTL (Fourth-Tier-LLVM, Faster-Than-Light) che usa LLVM per generare codice macchina ottimizzato, e nel 2016 fu poi sostituito da B3 (Bare Bones Backend).

## Applicazioni che usano WebKit
### Browser

* Arora, un browser open-source.
* Dolphin, il browser proprietario di Samsung usato per la prima volta sul Samsung S8000 Jet.
* Dooble, un browser multipiattaforma
* FireWeb, un browser open-source sviluppato da :HanSolaris Group
* Iris browser, un browser per dispositivi Windows Mobile 5 e 6.
* Limited Browser, un browser per Windows Xp/vista/7 sviluppato dalla limitedsoftware.
* Midori, un browser open-source.
* Opera, dalla versione 15 "Next".
* Rekonq, un browser open-source per KDE.
* Safari, il browser sviluppato da Apple per macOS.
* Shiira, un browser open-source e multilingua (il principale sviluppatore è giapponese).
* WebPositive, il browser nativo del sistema operativo Haiku.
* Web, il browser nativo del progetto GNOME (utilizza il porting WebKitGtk).
* Browser nativo per cellulari Nokia (da Symbian S60v3 in su) BlackBerry (dal sistema operativo 6 in su) Apple iPhone

### Altri usi

* Mail (Apple), un'applicazione che si occupa della gestione delle e-mail.
* Adium, un'applicazione di chat, che usa WebKit per visualizzare i messaggi.
* BBEdit, un editor di testo e di pagine HTML, che usa WebKit per visualizzare l'anteprima delle pagine web.
* Colloquy, un client chat che supporta IRC e SILC, che usa WebKit per visualizzare il traffico delle chat.
* Growl, un sistema di notificazione globale, che usa WebKit per delle sue viste.
* NetNewsWire, un lettore RSS che usa WebKit per visualizzare i feed RSS e per navigare sul web.
* NewsFire, un gestore di feed RSS, che usa WebKit per la sua interfaccia.
* Qt, un framework per la costruzione di applicazione che integra WebKit per il rendering delle pagine web.
* Steam, la piattaforma di Valve usa WebKit nel suo browser interno dal cambiamento dell'interfaccia del 2010.
* SubEthaEdit, un editor di testo collaborativo, che usa WebKit per generare l'anteprima delle pagine web.
* TextWrangler, un editor di testo e HTML, versione ridotta (e freeware) di BBEdit.
* WebKitGtk è un ambizioso progetto per il porting di WebKit su piattaforma GTK+.
* Xcode, l'IDE di Apple, che usa WebKit per visualizzare la documentazione.
Una lista completa è disponibile sulla wiki del progetto WebKit.