SlideShare a Scribd company logo
1 of 45
Download to read offline
The WebKit project
        Juan J. Sánchez
   LinuxCon 2012, San Diego
Myself, Igalia and WebKit



     Co-founder of the company, member of the
     WebKit/Browsers team
     Igalia is an open source consultancy founded in 2001
     Igalia is the main contributor to upstream WebKit after
     Google and Apple
     We work with some of the main IT industry actors
     integrating different WebKit solutions in their frameworks




                   The WebKit project   Juan J. Sánchez
Outline




     The technology: goals, features, architecture, code
     structure, ports, webkit2, ongoing work
     The community: contributors, committers, reviewers,
     tools, events
     How to contribute: bugfixing, features, new ports




                   The WebKit project   Juan J. Sánchez
The technology




 The WebKit project   Juan J. Sánchez
The WebKit project



     Web browser engine (HTML, JavaScript, CSS...)
     The engine is the product
     Started as a fork of KHTML and KJS in 2001
     Open Source since 2005
     Among other things, it’s useful for:
         Web browsers
         Using web technologies for UI development




                   The WebKit project   Juan J. Sánchez
Goals of the project

     Web Content Engine: HTML, CSS, JavaScript, DOM
     Open Source: BSD-style and LGPL licenses
     Compatibility: regression testing
     Standards Compliance
     Stability
     Performance
     Security
     Portability: desktop, mobile, embedded...
     Usability
     Hackability

                   The WebKit project   Juan J. Sánchez
Goals of the project



  NON-goals:
     “It’s an engine, not a browser”
     “It’s an engineering project not a science project”
     “It’s not a bundle of maximally general and reusable code”
     “It’s not the solution to every problem”

     http://www.webkit.org/projects/goals.html




                    The WebKit project   Juan J. Sánchez
WebKit features

     HTML and XML support
     JavaScript support (ECMAScript 5.1, ES6 in progress)
     CSS 2.1, CSS 3 support. Working drafts also
     SVG support
     Support for Plugins (NPAPI, WebKit Plugins)
     HTML5 support: multimedia, 3D graphics, advanced CSS
     animations and transformations, drag’n’drop, offline &
     local storage, connectivity...
     Accessibility support
     Q&A infrastructure: review process, continuous
     integration, 30.000 regression tests, API tests...
     Passing ACID3 with 100/100 tests since March 2008
                    The WebKit project   Juan J. Sánchez
WebKit Architecture

  From a simplified point of view, WebKit is structured this way:

                                   WebKit: thin layer to link against
                                   from the applications
                                   WebCore: rendering, layout,
                                   network access, multimedia,
                                   accessibility support...
                                   JS Engine: the JavaScript engine.
                                   JavaScriptCore by default, but can
                                   be replaced (e.g. V8 in Chromium)
                                   platform: platform-specific hooks to
                                   implement generic algorithms


                    The WebKit project   Juan J. Sánchez
What is a WebKit port?




               The WebKit project   Juan J. Sánchez
How many WebKit ports are there?

  WebKit is currently available for different platforms:
      GTK+ based platforms (GNOME)
      Qt based platforms (KDE, Meego)
      Mac OS X, iOS
      Google Chromium / Chrome
      Enlightenment Foundation Libraries (EFL)
      Symbian devices (S60)
      Adobe Integrated Runtime (Adobe AIR)
      BlackBerry
      WebOS
      Brew MP
      Win32 (Windows CE)
      wxWidgets

                     The WebKit project   Juan J. Sánchez
Some WebKit based browsers

   Amazon Kindle                                 PS3 web browser
   Arora                                         RockMelt
   BOLT browser                                  Safari
   Epiphany browser                              SRWare Iron
   Google Chrome                                 Shiira
   iCab (version >= 4)                           Sputnik for MorphOS
   Iris Browser                                  Stainless
   Konqueror                                     Steel for Android
   Midori                                        TeaShark
   Nintendo 3DS                                  Uzbl
   OWB                                           Web Browser for S60 (Nokia)
   OmniWeb                                       WebOS Browser
                    The WebKit project   Juan J. Sánchez
Architecture of a WebKit port




                The WebKit project   Juan J. Sánchez
Architecture of a WebKit port




                The WebKit project   Juan J. Sánchez
How do we use a WebKit port?

     The WebView widget:
     A platform-specific widget that renders web content.
     It’s the main component and it’s useful for:
         Loading URIs or data buffers pointing to HTML content
         Go fullscreen, text/text+image zooming...
         Navigate back and forward through history...

     Events handling:
     Allows embedders to get notified when something
     important happens or when some input is needed.
     Some examples of these events:
         Getting notified when a load finished or failed
         Asking permission for navigating to an URI
         Requesting authorization for something..


                   The WebKit project   Juan J. Sánchez
A minibrowser written in Python

  #!/usr/bin/env python
  # -*- coding: utf-8 -*-

  import gtk
  import webkit

  def entry_activated_cb(entry, embed):
      embed.load_uri(entry.get_text())

  # Widgets and signals
  window = gtk.Window()
  window.set_default_size(800, 600)
  window.set_title("Mini browser written in Python")
  embed = webkit.WebView(); # WebKit embed
  entry = gtk.Entry()
  entry.connect(’activate’, entry_activated_cb, embed)
  scroller = gtk.ScrolledWindow()
  scroller.add(embed)

  # Pack everything up and show
  vbox = gtk.VBox(False, 5)
  vbox.pack_start(entry, False, False)
  vbox.pack_start(scroller)
  window.add(vbox)
  window.show_all()

  # Load a default URI and run
  embed.load_uri("http://www.webkit.org")
  gtk.main()



                            The WebKit project   Juan J. Sánchez
A minibrowser written in Python




               The WebKit project   Juan J. Sánchez
A minibrowser written in C
  #include <webkit/webkit.h>
  static void entry_activated (GtkEntry *entry, WebKitWebView *embed)
  {
    webkit_web_view_load_uri (embed, gtk_entry_get_text (entry));
  }
  int main (int argc, char** argv)
  {
    gtk_init (&argc, &argv);

      /* Widgets and signals */
      GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL);
      gtk_window_set_default_size (GTK_WINDOW (window), 800, 600);
      gtk_window_set_title (GTK_WINDOW (window), "Mini browser written in C");
      GtkWidget *embed = webkit_web_view_new();
      GtkWidget *entry = gtk_entry_new();
      g_signal_connect (entry, "activate", G_CALLBACK (entry_activated), embed);
      GtkWidget *scroller = gtk_scrolled_window_new(NULL, NULL);
      gtk_container_add (GTK_CONTAINER(scroller), embed);

      /* Pack everything and show */
      GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0);
      gtk_box_pack_start (GTK_BOX(vbox), entry, FALSE, FALSE, 0);
      gtk_box_pack_start (GTK_BOX(vbox), scroller, TRUE, TRUE, 0);
      gtk_container_add (GTK_CONTAINER(window), vbox);
      gtk_widget_show_all (window);

      /* Load a default URI and run */
      webkit_web_view_load_uri (WEBKIT_WEB_VIEW (embed), "http://www.webkit.org");
      gtk_main();
      return 0;
  }


                             The WebKit project   Juan J. Sánchez
A minibrowser written in C




               The WebKit project   Juan J. Sánchez
What is WebKit2?


     New API layer designed to support a split process model.
     Different to Chromium’s multi-process implementation
              It’s bundled in the framework (reusable)

     Different processes take care of different tasks:
         UI process: the WebView widget, application UI
         Web process: loading, parsing, rendering, layout...
         Plugin process: each plugin type in a process

     It comes with Inter-Process Communication (IPC)
     mechanisms to communicate those processes bundled-in

        http://trac.webkit.org/wiki/WebKit2



                    The WebKit project   Juan J. Sánchez
WebKit VS WebKit2




             The WebKit project   Juan J. Sánchez
WebKit2 VS Chromium




             The WebKit project   Juan J. Sánchez
WebKit2: current status



     Apple and Qt already released WebKit2 browsers
     WebKit2 stable API for the GTK+ port released, browser
     released soon
     Cross-platform and non-blocking C API available
     Most challenges of the split process model solved
     Tests running, need to deploy more test bots
     Still not considered “production quality”. Getting there




                   The WebKit project   Juan J. Sánchez
The Source Code in numbers
  According to Ohloh on 2012 April 29th, lines of code per
  language, without considering blank lines nor comments:

  Language          LoC         %
     HTML         1404469   33.79 %
         C++      1268231   30.51 %
  JavaScript      692274    16.65 %
        XML       254224     6.12 %
 Objective-C      101658     2.45 %
        PHP        97114     2.34 %
     Python        82366     1.98 %
         Perl      75677     1.82 %
         CSS       73587     1.77 %
           C       68469     1.65 %
  Other (19)       38820     0.93 %
        Total     4156889


                    https://www.ohloh.net/p/WebKit/analyses

                Just considering C++, Objective-C and C files,
                          we have almost 1.5M LoC!
                            The WebKit project   Juan J. Sánchez
The Source Code in numbers

  According to Ohloh on 2012 April 29th, files per license:



    License     Files      %
 BSD License    4427    51.09 %
 GNU LGPL       3568    41.18 %
        MPL      607    7.01 %
   Other (9)      63    0.73 %
        Total   8665




                  https://www.ohloh.net/p/WebKit/analyses


  New WebKit code will always be under the terms of either the
  LGPL 2.1+ or the BSD license. Never GPL or LGPL 3.


                          The WebKit project   Juan J. Sánchez
High Level source code overview

     Source/: the code needed to build WebKit. That is,
     WebCore, JavaScriptCore, WebKit and WebKit2
     LayoutTests/: layout tests reside here (More than 27000!).
     They test the correctness of WebKit features
     ManualTests/: specific cases not covered by automatic
     testing
     PerformanceTests/: measure run-time performance and
     memory usage
     See webkit-perf.appspot.com for results
     Tools/: tools and utilities for WebKit development.
     Small test applications, tools for testing, helper scripts...
     Websites/: code and pages for WebKit related sites

                    The WebKit project   Juan J. Sánchez
Tracking ongoing work in WebKit


     Webkit is a big beast and a lot of organizations with
     different agendas are working in different parts:

         Implementing new standards (like the CSS shaders from
         Adobe, or CSS3 GCPM from Apple)
         Improvements in architecture, performance and internal
         code (WebKit2)

     On top of this there is the maintenance work (testing,
     continuous integration, bugfixing)
     Peter Beverloo (Google) reports are usually a good way to
     follow what has happened lately: http://peter.sh/




                   The WebKit project   Juan J. Sánchez
The community




 The WebKit project   Juan J. Sánchez
A bit of history




      Source: http://ariya.ofilabs.com/2011/11/
      one-hundred-thousand-and-counting.html



                   The WebKit project   Juan J. Sánchez
The WebKit Project in numbers

  Commits per year (up to 2012 April 24th)




                    The WebKit project   Juan J. Sánchez
The WebKit Project in numbers

  Commits per month (2011):




                  The WebKit project   Juan J. Sánchez
The WebKit Project in numbers


  Commits per affiliations (2011)




                   The WebKit project   Juan J. Sánchez
WebKit Contributors




  As of 2012 April 24th, we have in WebKit:
      Contributors: >370 people
      Committers: 212 people
      Reviewers: 110 people




                    The WebKit project   Juan J. Sánchez
Committers and Reviewers


  WebKit Committer
  A WebKit Committer should be a person we can trust to follow and
  understand the project policies about checkins and other matters.

         Has commit rights to the public SVN repository.



  WebKit Reviewer
  A WebKit Reviewer should be a person who has shown particularly
  good judgment, understanding of project policies, collaboration skills,
  and understanding of the code.

      A WebKit Committer who can review other’s patches.



                       The WebKit project   Juan J. Sánchez
Copyright for contributions




     There is no copyright transfer for the contributions
     Committers sign some papers where they commit to good
     behaviour




                   The WebKit project   Juan J. Sánchez
Releases




     There are no releases of WebKit itself
     Each port manages the release cycle, typically aligned with
     the target platform schedule




                   The WebKit project   Juan J. Sánchez
Coordination and communication tools

     Website: http://www.webkit.org/
       Port specific Websites (e.g. http://webkitgtk.org/)
     Wiki: http://trac.webkit.org/wiki
     Blogs: http://planet.webkit.org/
     Source Code:
         SVN: http://svn.webkit.org/repository/webkit
         Git mirror: git://git.webkit.org/WebKit.git

     Bugzilla: https://bugs.webkit.org/
     Buildbots: http://build.webkit.org/
     Mailing lists: http://lists.webkit.org/mailman/listinfo.cgi
     IRC (irc.freenode.net): #webkit and #webkitgtk+

                    The WebKit project   Juan J. Sánchez
The WebKit Contributors Meeting




     Meeting for contributors to the WebKit project
     Organized in an “unconference”-like format
     Extremely useful to advance on some topics:
     Implementation of new APIs, WebKit2, accelerated
     compositing, helper tools, QA infrastructure...
     Yearly held in Cupertino, California. Hosted by Apple




                   The WebKit project   Juan J. Sánchez
How to contribute




  The WebKit project   Juan J. Sánchez
Types of contributions




     Bugfixing and new features in:
         An existent port
         The core components: webcore and JSC/V8

     Creation and maintenance of a new port




                   The WebKit project   Juan J. Sánchez
Guidelines for contributing patches to WebKit

   1   Get and build the code from the SVN repository
   2   Choose or create a bug report to work on
   3   Code your changes and make sure you include new
       regression or unit tests if needed
   4   Create a patch for your changes and submit it asking for
       review over it to appropriate reviewers
   5   Update and change your patch as many times as needed
   6   Once approved, land your patch or ask a
       committer/reviewer to do it
   7   Watch for any regressions it might have caused


                     The WebKit project   Juan J. Sánchez
Creating a port: what needs to be done

     High level API (WebKit1 and WebKit2)
     Low level backend specific implementation
         Web Template Framework (WTF): memory management,
         threading, data structures (vectors, hash tables, bloom
         filters, ...) numerical support, etc.
         JSC vs V8
         Networking: HTTP, DNS, cookies, etc.
         Graphics: 2D/3D rendering, compositing, theming, fonts
         Multimedia: media player for audio and video tags
         DOM bindings
         Accessibility
         Smaller tasks: clipboard, popup and context menus,
         cursors, etc.

     Other things: favicons, plugins, downloads, geolocation,
     settings, navigation policies, etc.

                   The WebKit project   Juan J. Sánchez
Creating a port: the social side



      Difficult without full-time reviewers
      Reuse from other ports as much as possible
      Try to work upstream from the very beginning
      The risk of forking is big, the project moves fast
      Focus on testing and continuous integration
      Port-specific events and communication tools




                     The WebKit project   Juan J. Sánchez
Conclusions


     WebKit: an Open Source web engine powering lots of
     applications (not only browsers!) out there
     The only true Open Source alternative for embedders
     Clearly defined and modular architecture. Port friendly
     Complex and fast moving project
     Developed by a community of organizations and
     individuals with different interests, collaborating together
     Lots of contributors. Appropriate policies in place to
     handle permissions and responsibilities in the project




                   The WebKit project   Juan J. Sánchez
Thank you!
      Juan J. Sánchez
  jjsanchez@igalia.com




The WebKit project   Juan J. Sánchez

More Related Content

What's hot

[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것NAVER Engineering
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Kim Hunmin
 
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...Amazon Web Services Korea
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향Young-Ho Cho
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까NAVER D2
 
Hardware Acceleration in WebKit
Hardware Acceleration in WebKitHardware Acceleration in WebKit
Hardware Acceleration in WebKitJoone Hur
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式Shengyou Fan
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Takayuki Shimizukawa
 
Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6AIMDek Technologies
 
XXE: How to become a Jedi
XXE: How to become a JediXXE: How to become a Jedi
XXE: How to become a JediYaroslav Babin
 
Cobol Web com Net Express 5.1 - Parte 3
Cobol Web com Net Express 5.1 - Parte 3Cobol Web com Net Express 5.1 - Parte 3
Cobol Web com Net Express 5.1 - Parte 3Altair Borges
 
스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리우영 주
 

What's hot (20)

NodeJS for Beginner
NodeJS for BeginnerNodeJS for Beginner
NodeJS for Beginner
 
JavaScript Basics
JavaScript BasicsJavaScript Basics
JavaScript Basics
 
[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것[24]안드로이드 웹뷰의 모든것
[24]안드로이드 웹뷰의 모든것
 
Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까? Facebook은 React를 왜 만들었을까?
Facebook은 React를 왜 만들었을까?
 
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...7.	게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
7. 게임 스트리밍 서비스를 위한 아키텍처 - 언리얼 엔진을 중심으로! [레벨 300] - 발표자: 하흥수, 솔루션즈 아키텍트, AWS :...
 
[수정본] 우아한 객체지향
[수정본] 우아한 객체지향[수정본] 우아한 객체지향
[수정본] 우아한 객체지향
 
Rust
RustRust
Rust
 
Introduction Node.js
Introduction Node.jsIntroduction Node.js
Introduction Node.js
 
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까[133] 브라우저는 vsync를 어떻게 활용하고 있을까
[133] 브라우저는 vsync를 어떻게 활용하고 있을까
 
Hardware Acceleration in WebKit
Hardware Acceleration in WebKitHardware Acceleration in WebKit
Hardware Acceleration in WebKit
 
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
[GDG Kaohsiung DevFest 2023] 以 Compose 及 Kotlin Multiplatform 打造多平台應用程式
 
Svelte JS introduction
Svelte JS introductionSvelte JS introduction
Svelte JS introduction
 
Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015Sphinx autodoc - automated api documentation - PyCon.KR 2015
Sphinx autodoc - automated api documentation - PyCon.KR 2015
 
JavaScript: Events Handling
JavaScript: Events HandlingJavaScript: Events Handling
JavaScript: Events Handling
 
Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6Creating custom Validators on Reactive Forms using Angular 6
Creating custom Validators on Reactive Forms using Angular 6
 
XXE: How to become a Jedi
XXE: How to become a JediXXE: How to become a Jedi
XXE: How to become a Jedi
 
200531 jandi
200531 jandi200531 jandi
200531 jandi
 
Cobol Web com Net Express 5.1 - Parte 3
Cobol Web com Net Express 5.1 - Parte 3Cobol Web com Net Express 5.1 - Parte 3
Cobol Web com Net Express 5.1 - Parte 3
 
Flask – Python
Flask – PythonFlask – Python
Flask – Python
 
스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리스트리밍과 디지털 권리 관리
스트리밍과 디지털 권리 관리
 

Viewers also liked

WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 RevolutionWebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutionjuanjosanchezpenas
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overviewYoung-Ho Cha
 
Web browser architecture
Web browser architectureWeb browser architecture
Web browser architectureNguyen Quang
 
Chromium on Wayland Desktop (BlinkOn 7)
Chromium on Wayland Desktop (BlinkOn 7)Chromium on Wayland Desktop (BlinkOn 7)
Chromium on Wayland Desktop (BlinkOn 7)Igalia
 
WebKit and GStreamer
WebKit and GStreamerWebKit and GStreamer
WebKit and GStreamercalvaris
 
Architecture of the Web browser
Architecture of the Web browserArchitecture of the Web browser
Architecture of the Web browserSabin Buraga
 
KIẾN TRÚC CẬN ĐẠI
KIẾN TRÚC CẬN ĐẠIKIẾN TRÚC CẬN ĐẠI
KIẾN TRÚC CẬN ĐẠIluongthuykhe
 
Duomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo André
Duomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo AndréDuomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo André
Duomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo AndréCarlo Andre Sosa Castillo
 
Derecho civil de los bienes sesiones i, ii, iii
Derecho civil de los bienes sesiones i, ii, iiiDerecho civil de los bienes sesiones i, ii, iii
Derecho civil de los bienes sesiones i, ii, iiiElmer
 
La corrupción en mexico
La corrupción en mexicoLa corrupción en mexico
La corrupción en mexicoAlberto Neri
 
Recetas para principiantes
Recetas para principiantesRecetas para principiantes
Recetas para principiantesGallina Blanca
 
A apologia de sócrates
A apologia de sócratesA apologia de sócrates
A apologia de sócratesLuci Bonini
 
World Quality Report 2013 14
World Quality Report 2013 14World Quality Report 2013 14
World Quality Report 2013 14Capgemini
 
A un olmo seco.alicia y sara
A un olmo seco.alicia y saraA un olmo seco.alicia y sara
A un olmo seco.alicia y sarajjdoriga
 
Rococo2
Rococo2Rococo2
Rococo2h8h8rr
 
淘寶實戰基礎營銷概念201510 08
淘寶實戰基礎營銷概念201510 08淘寶實戰基礎營銷概念201510 08
淘寶實戰基礎營銷概念201510 08Chen Terry
 

Viewers also liked (20)

WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 RevolutionWebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolution
 
Browser history and overview
Browser history and overviewBrowser history and overview
Browser history and overview
 
Web browser architecture
Web browser architectureWeb browser architecture
Web browser architecture
 
Guides To Analyzing WebKit Performance
Guides To Analyzing WebKit PerformanceGuides To Analyzing WebKit Performance
Guides To Analyzing WebKit Performance
 
Chromium on Wayland Desktop (BlinkOn 7)
Chromium on Wayland Desktop (BlinkOn 7)Chromium on Wayland Desktop (BlinkOn 7)
Chromium on Wayland Desktop (BlinkOn 7)
 
Chromium vs. Firefox
Chromium vs. FirefoxChromium vs. Firefox
Chromium vs. Firefox
 
WebKit and GStreamer
WebKit and GStreamerWebKit and GStreamer
WebKit and GStreamer
 
Architecture of the Web browser
Architecture of the Web browserArchitecture of the Web browser
Architecture of the Web browser
 
KIẾN TRÚC CẬN ĐẠI
KIẾN TRÚC CẬN ĐẠIKIẾN TRÚC CẬN ĐẠI
KIẾN TRÚC CẬN ĐẠI
 
8A- Bioseguridad
8A- Bioseguridad8A- Bioseguridad
8A- Bioseguridad
 
Duomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo André
Duomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo AndréDuomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo André
Duomo di Milano - Arquitectura Gótica - IV CICLO - Sosa Castillo Carlo André
 
Derecho civil de los bienes sesiones i, ii, iii
Derecho civil de los bienes sesiones i, ii, iiiDerecho civil de los bienes sesiones i, ii, iii
Derecho civil de los bienes sesiones i, ii, iii
 
La corrupción en mexico
La corrupción en mexicoLa corrupción en mexico
La corrupción en mexico
 
Recetas para principiantes
Recetas para principiantesRecetas para principiantes
Recetas para principiantes
 
Exposicion Producto 3D
Exposicion Producto 3DExposicion Producto 3D
Exposicion Producto 3D
 
A apologia de sócrates
A apologia de sócratesA apologia de sócrates
A apologia de sócrates
 
World Quality Report 2013 14
World Quality Report 2013 14World Quality Report 2013 14
World Quality Report 2013 14
 
A un olmo seco.alicia y sara
A un olmo seco.alicia y saraA un olmo seco.alicia y sara
A un olmo seco.alicia y sara
 
Rococo2
Rococo2Rococo2
Rococo2
 
淘寶實戰基礎營銷概念201510 08
淘寶實戰基礎營銷概念201510 08淘寶實戰基礎營銷概念201510 08
淘寶實戰基礎營銷概念201510 08
 

Similar to The WebKit project: architecture, community and contributing

The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)Igalia
 
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...Igalia
 
WebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolutionWebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolutionjuanjosanchezpenas
 
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...Igalia
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitIgalia
 
Building a browser for automotive. alternatives, challenges and recommendatio...
Building a browser for automotive. alternatives, challenges and recommendatio...Building a browser for automotive. alternatives, challenges and recommendatio...
Building a browser for automotive. alternatives, challenges and recommendatio...Igalia
 
Building a Browser for Automotive: Alternatives, Challenges and Recommendations
Building a Browser for Automotive: Alternatives, Challenges and RecommendationsBuilding a Browser for Automotive: Alternatives, Challenges and Recommendations
Building a Browser for Automotive: Alternatives, Challenges and Recommendationsjuanjosanchezpenas
 
DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.JooinK
 
DIY- computer vision with GWT
DIY- computer vision with GWTDIY- computer vision with GWT
DIY- computer vision with GWTFrancesca Tosi
 
Igalia and WebKit: Status update and plans
Igalia and WebKit: Status update and plansIgalia and WebKit: Status update and plans
Igalia and WebKit: Status update and plansIgalia
 
WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)Igalia
 
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...Igalia
 
Next Generation Hybrid Applications with Qt - presentation for SEE 2009
Next Generation Hybrid Applications with Qt - presentation for SEE 2009Next Generation Hybrid Applications with Qt - presentation for SEE 2009
Next Generation Hybrid Applications with Qt - presentation for SEE 2009Nokia
 
The Web, After HTML5
The Web, After HTML5The Web, After HTML5
The Web, After HTML5Jonathan Jeon
 
Developments in the Qt WebKit Integration
Developments in the Qt WebKit IntegrationDevelopments in the Qt WebKit Integration
Developments in the Qt WebKit Integrationaccount inactive
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitAriya Hidayat
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitAriya Hidayat
 
JooinK - DevFest Piemonte 2013
JooinK - DevFest Piemonte 2013JooinK - DevFest Piemonte 2013
JooinK - DevFest Piemonte 2013JooinK
 

Similar to The WebKit project: architecture, community and contributing (20)

The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)The WebKit project (LinuxCon North America 2012)
The WebKit project (LinuxCon North America 2012)
 
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
WebKit and Blink: Bridging the Gap Between the Kernel and the HTML5 Revolutio...
 
WebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolutionWebKit and Blink: open development powering the HTML5 revolution
WebKit and Blink: open development powering the HTML5 revolution
 
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
WebKit and Blink: Open Development Powering the HTML5 Revolution (LinuxCon No...
 
Add the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKitAdd the power of the Web to your embedded devices with WPE WebKit
Add the power of the Web to your embedded devices with WPE WebKit
 
Building a browser for automotive. alternatives, challenges and recommendatio...
Building a browser for automotive. alternatives, challenges and recommendatio...Building a browser for automotive. alternatives, challenges and recommendatio...
Building a browser for automotive. alternatives, challenges and recommendatio...
 
Building a Browser for Automotive: Alternatives, Challenges and Recommendations
Building a Browser for Automotive: Alternatives, Challenges and RecommendationsBuilding a Browser for Automotive: Alternatives, Challenges and Recommendations
Building a Browser for Automotive: Alternatives, Challenges and Recommendations
 
DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.DIY: Computer Vision with GWT.
DIY: Computer Vision with GWT.
 
DIY- computer vision with GWT
DIY- computer vision with GWTDIY- computer vision with GWT
DIY- computer vision with GWT
 
Igalia and WebKit: Status update and plans
Igalia and WebKit: Status update and plansIgalia and WebKit: Status update and plans
Igalia and WebKit: Status update and plans
 
WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)WebKit2 And You (GUADEC 2013)
WebKit2 And You (GUADEC 2013)
 
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
Browsers and Web Runtimes for Automotive: Alternatives, Challenges, and Curre...
 
Next Generation Hybrid Applications with Qt - presentation for SEE 2009
Next Generation Hybrid Applications with Qt - presentation for SEE 2009Next Generation Hybrid Applications with Qt - presentation for SEE 2009
Next Generation Hybrid Applications with Qt - presentation for SEE 2009
 
The Web, After HTML5
The Web, After HTML5The Web, After HTML5
The Web, After HTML5
 
Developments in the Qt WebKit Integration
Developments in the Qt WebKit IntegrationDevelopments in the Qt WebKit Integration
Developments in the Qt WebKit Integration
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
Hybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKitHybrid Apps (Native + Web) using WebKit
Hybrid Apps (Native + Web) using WebKit
 
JooinK - DevFest Piemonte 2013
JooinK - DevFest Piemonte 2013JooinK - DevFest Piemonte 2013
JooinK - DevFest Piemonte 2013
 
Gwt 2,3 Deep dive
Gwt 2,3 Deep diveGwt 2,3 Deep dive
Gwt 2,3 Deep dive
 
Gwt Deep Dive
Gwt Deep DiveGwt Deep Dive
Gwt Deep Dive
 

Recently uploaded

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsRizwan Syed
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxNavinnSomaal
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 3652toLead Limited
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenHervé Boutemy
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024BookNet Canada
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brandgvaughan
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningLars Bell
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxLoriGlavin3
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.Curtis Poe
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyAlfredo García Lavilla
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfAddepto
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxLoriGlavin3
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxLoriGlavin3
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxLoriGlavin3
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteDianaGray10
 

Recently uploaded (20)

Scanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL CertsScanning the Internet for External Cloud Exposures via SSL Certs
Scanning the Internet for External Cloud Exposures via SSL Certs
 
SAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptxSAP Build Work Zone - Overview L2-L3.pptx
SAP Build Work Zone - Overview L2-L3.pptx
 
Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365Ensuring Technical Readiness For Copilot in Microsoft 365
Ensuring Technical Readiness For Copilot in Microsoft 365
 
DevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache MavenDevoxxFR 2024 Reproducible Builds with Apache Maven
DevoxxFR 2024 Reproducible Builds with Apache Maven
 
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: BNC CataList - Tech Forum 2024
 
WordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your BrandWordPress Websites for Engineers: Elevate Your Brand
WordPress Websites for Engineers: Elevate Your Brand
 
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data PrivacyTrustArc Webinar - How to Build Consumer Trust Through Data Privacy
TrustArc Webinar - How to Build Consumer Trust Through Data Privacy
 
DSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine TuningDSPy a system for AI to Write Prompts and Do Fine Tuning
DSPy a system for AI to Write Prompts and Do Fine Tuning
 
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptxThe Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
The Fit for Passkeys for Employee and Consumer Sign-ins: FIDO Paris Seminar.pptx
 
How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.How AI, OpenAI, and ChatGPT impact business and software.
How AI, OpenAI, and ChatGPT impact business and software.
 
Commit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easyCommit 2024 - Secret Management made easy
Commit 2024 - Secret Management made easy
 
Gen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdfGen AI in Business - Global Trends Report 2024.pdf
Gen AI in Business - Global Trends Report 2024.pdf
 
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptxUse of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
Use of FIDO in the Payments and Identity Landscape: FIDO Paris Seminar.pptx
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
The State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptxThe State of Passkeys with FIDO Alliance.pptx
The State of Passkeys with FIDO Alliance.pptx
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptxDigital Identity is Under Attack: FIDO Paris Seminar.pptx
Digital Identity is Under Attack: FIDO Paris Seminar.pptx
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Take control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test SuiteTake control of your SAP testing with UiPath Test Suite
Take control of your SAP testing with UiPath Test Suite
 

The WebKit project: architecture, community and contributing

  • 1. The WebKit project Juan J. Sánchez LinuxCon 2012, San Diego
  • 2. Myself, Igalia and WebKit Co-founder of the company, member of the WebKit/Browsers team Igalia is an open source consultancy founded in 2001 Igalia is the main contributor to upstream WebKit after Google and Apple We work with some of the main IT industry actors integrating different WebKit solutions in their frameworks The WebKit project Juan J. Sánchez
  • 3. Outline The technology: goals, features, architecture, code structure, ports, webkit2, ongoing work The community: contributors, committers, reviewers, tools, events How to contribute: bugfixing, features, new ports The WebKit project Juan J. Sánchez
  • 4. The technology The WebKit project Juan J. Sánchez
  • 5. The WebKit project Web browser engine (HTML, JavaScript, CSS...) The engine is the product Started as a fork of KHTML and KJS in 2001 Open Source since 2005 Among other things, it’s useful for: Web browsers Using web technologies for UI development The WebKit project Juan J. Sánchez
  • 6. Goals of the project Web Content Engine: HTML, CSS, JavaScript, DOM Open Source: BSD-style and LGPL licenses Compatibility: regression testing Standards Compliance Stability Performance Security Portability: desktop, mobile, embedded... Usability Hackability The WebKit project Juan J. Sánchez
  • 7. Goals of the project NON-goals: “It’s an engine, not a browser” “It’s an engineering project not a science project” “It’s not a bundle of maximally general and reusable code” “It’s not the solution to every problem” http://www.webkit.org/projects/goals.html The WebKit project Juan J. Sánchez
  • 8. WebKit features HTML and XML support JavaScript support (ECMAScript 5.1, ES6 in progress) CSS 2.1, CSS 3 support. Working drafts also SVG support Support for Plugins (NPAPI, WebKit Plugins) HTML5 support: multimedia, 3D graphics, advanced CSS animations and transformations, drag’n’drop, offline & local storage, connectivity... Accessibility support Q&A infrastructure: review process, continuous integration, 30.000 regression tests, API tests... Passing ACID3 with 100/100 tests since March 2008 The WebKit project Juan J. Sánchez
  • 9. WebKit Architecture From a simplified point of view, WebKit is structured this way: WebKit: thin layer to link against from the applications WebCore: rendering, layout, network access, multimedia, accessibility support... JS Engine: the JavaScript engine. JavaScriptCore by default, but can be replaced (e.g. V8 in Chromium) platform: platform-specific hooks to implement generic algorithms The WebKit project Juan J. Sánchez
  • 10. What is a WebKit port? The WebKit project Juan J. Sánchez
  • 11. How many WebKit ports are there? WebKit is currently available for different platforms: GTK+ based platforms (GNOME) Qt based platforms (KDE, Meego) Mac OS X, iOS Google Chromium / Chrome Enlightenment Foundation Libraries (EFL) Symbian devices (S60) Adobe Integrated Runtime (Adobe AIR) BlackBerry WebOS Brew MP Win32 (Windows CE) wxWidgets The WebKit project Juan J. Sánchez
  • 12. Some WebKit based browsers Amazon Kindle PS3 web browser Arora RockMelt BOLT browser Safari Epiphany browser SRWare Iron Google Chrome Shiira iCab (version >= 4) Sputnik for MorphOS Iris Browser Stainless Konqueror Steel for Android Midori TeaShark Nintendo 3DS Uzbl OWB Web Browser for S60 (Nokia) OmniWeb WebOS Browser The WebKit project Juan J. Sánchez
  • 13. Architecture of a WebKit port The WebKit project Juan J. Sánchez
  • 14. Architecture of a WebKit port The WebKit project Juan J. Sánchez
  • 15. How do we use a WebKit port? The WebView widget: A platform-specific widget that renders web content. It’s the main component and it’s useful for: Loading URIs or data buffers pointing to HTML content Go fullscreen, text/text+image zooming... Navigate back and forward through history... Events handling: Allows embedders to get notified when something important happens or when some input is needed. Some examples of these events: Getting notified when a load finished or failed Asking permission for navigating to an URI Requesting authorization for something.. The WebKit project Juan J. Sánchez
  • 16. A minibrowser written in Python #!/usr/bin/env python # -*- coding: utf-8 -*- import gtk import webkit def entry_activated_cb(entry, embed): embed.load_uri(entry.get_text()) # Widgets and signals window = gtk.Window() window.set_default_size(800, 600) window.set_title("Mini browser written in Python") embed = webkit.WebView(); # WebKit embed entry = gtk.Entry() entry.connect(’activate’, entry_activated_cb, embed) scroller = gtk.ScrolledWindow() scroller.add(embed) # Pack everything up and show vbox = gtk.VBox(False, 5) vbox.pack_start(entry, False, False) vbox.pack_start(scroller) window.add(vbox) window.show_all() # Load a default URI and run embed.load_uri("http://www.webkit.org") gtk.main() The WebKit project Juan J. Sánchez
  • 17. A minibrowser written in Python The WebKit project Juan J. Sánchez
  • 18. A minibrowser written in C #include <webkit/webkit.h> static void entry_activated (GtkEntry *entry, WebKitWebView *embed) { webkit_web_view_load_uri (embed, gtk_entry_get_text (entry)); } int main (int argc, char** argv) { gtk_init (&argc, &argv); /* Widgets and signals */ GtkWidget *window = gtk_window_new (GTK_WINDOW_TOPLEVEL); gtk_window_set_default_size (GTK_WINDOW (window), 800, 600); gtk_window_set_title (GTK_WINDOW (window), "Mini browser written in C"); GtkWidget *embed = webkit_web_view_new(); GtkWidget *entry = gtk_entry_new(); g_signal_connect (entry, "activate", G_CALLBACK (entry_activated), embed); GtkWidget *scroller = gtk_scrolled_window_new(NULL, NULL); gtk_container_add (GTK_CONTAINER(scroller), embed); /* Pack everything and show */ GtkWidget *vbox = gtk_box_new (GTK_ORIENTATION_VERTICAL, 0); gtk_box_pack_start (GTK_BOX(vbox), entry, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX(vbox), scroller, TRUE, TRUE, 0); gtk_container_add (GTK_CONTAINER(window), vbox); gtk_widget_show_all (window); /* Load a default URI and run */ webkit_web_view_load_uri (WEBKIT_WEB_VIEW (embed), "http://www.webkit.org"); gtk_main(); return 0; } The WebKit project Juan J. Sánchez
  • 19. A minibrowser written in C The WebKit project Juan J. Sánchez
  • 20. What is WebKit2? New API layer designed to support a split process model. Different to Chromium’s multi-process implementation It’s bundled in the framework (reusable) Different processes take care of different tasks: UI process: the WebView widget, application UI Web process: loading, parsing, rendering, layout... Plugin process: each plugin type in a process It comes with Inter-Process Communication (IPC) mechanisms to communicate those processes bundled-in http://trac.webkit.org/wiki/WebKit2 The WebKit project Juan J. Sánchez
  • 21. WebKit VS WebKit2 The WebKit project Juan J. Sánchez
  • 22. WebKit2 VS Chromium The WebKit project Juan J. Sánchez
  • 23. WebKit2: current status Apple and Qt already released WebKit2 browsers WebKit2 stable API for the GTK+ port released, browser released soon Cross-platform and non-blocking C API available Most challenges of the split process model solved Tests running, need to deploy more test bots Still not considered “production quality”. Getting there The WebKit project Juan J. Sánchez
  • 24. The Source Code in numbers According to Ohloh on 2012 April 29th, lines of code per language, without considering blank lines nor comments: Language LoC % HTML 1404469 33.79 % C++ 1268231 30.51 % JavaScript 692274 16.65 % XML 254224 6.12 % Objective-C 101658 2.45 % PHP 97114 2.34 % Python 82366 1.98 % Perl 75677 1.82 % CSS 73587 1.77 % C 68469 1.65 % Other (19) 38820 0.93 % Total 4156889 https://www.ohloh.net/p/WebKit/analyses Just considering C++, Objective-C and C files, we have almost 1.5M LoC! The WebKit project Juan J. Sánchez
  • 25. The Source Code in numbers According to Ohloh on 2012 April 29th, files per license: License Files % BSD License 4427 51.09 % GNU LGPL 3568 41.18 % MPL 607 7.01 % Other (9) 63 0.73 % Total 8665 https://www.ohloh.net/p/WebKit/analyses New WebKit code will always be under the terms of either the LGPL 2.1+ or the BSD license. Never GPL or LGPL 3. The WebKit project Juan J. Sánchez
  • 26. High Level source code overview Source/: the code needed to build WebKit. That is, WebCore, JavaScriptCore, WebKit and WebKit2 LayoutTests/: layout tests reside here (More than 27000!). They test the correctness of WebKit features ManualTests/: specific cases not covered by automatic testing PerformanceTests/: measure run-time performance and memory usage See webkit-perf.appspot.com for results Tools/: tools and utilities for WebKit development. Small test applications, tools for testing, helper scripts... Websites/: code and pages for WebKit related sites The WebKit project Juan J. Sánchez
  • 27. Tracking ongoing work in WebKit Webkit is a big beast and a lot of organizations with different agendas are working in different parts: Implementing new standards (like the CSS shaders from Adobe, or CSS3 GCPM from Apple) Improvements in architecture, performance and internal code (WebKit2) On top of this there is the maintenance work (testing, continuous integration, bugfixing) Peter Beverloo (Google) reports are usually a good way to follow what has happened lately: http://peter.sh/ The WebKit project Juan J. Sánchez
  • 28. The community The WebKit project Juan J. Sánchez
  • 29. A bit of history Source: http://ariya.ofilabs.com/2011/11/ one-hundred-thousand-and-counting.html The WebKit project Juan J. Sánchez
  • 30. The WebKit Project in numbers Commits per year (up to 2012 April 24th) The WebKit project Juan J. Sánchez
  • 31. The WebKit Project in numbers Commits per month (2011): The WebKit project Juan J. Sánchez
  • 32. The WebKit Project in numbers Commits per affiliations (2011) The WebKit project Juan J. Sánchez
  • 33. WebKit Contributors As of 2012 April 24th, we have in WebKit: Contributors: >370 people Committers: 212 people Reviewers: 110 people The WebKit project Juan J. Sánchez
  • 34. Committers and Reviewers WebKit Committer A WebKit Committer should be a person we can trust to follow and understand the project policies about checkins and other matters. Has commit rights to the public SVN repository. WebKit Reviewer A WebKit Reviewer should be a person who has shown particularly good judgment, understanding of project policies, collaboration skills, and understanding of the code. A WebKit Committer who can review other’s patches. The WebKit project Juan J. Sánchez
  • 35. Copyright for contributions There is no copyright transfer for the contributions Committers sign some papers where they commit to good behaviour The WebKit project Juan J. Sánchez
  • 36. Releases There are no releases of WebKit itself Each port manages the release cycle, typically aligned with the target platform schedule The WebKit project Juan J. Sánchez
  • 37. Coordination and communication tools Website: http://www.webkit.org/ Port specific Websites (e.g. http://webkitgtk.org/) Wiki: http://trac.webkit.org/wiki Blogs: http://planet.webkit.org/ Source Code: SVN: http://svn.webkit.org/repository/webkit Git mirror: git://git.webkit.org/WebKit.git Bugzilla: https://bugs.webkit.org/ Buildbots: http://build.webkit.org/ Mailing lists: http://lists.webkit.org/mailman/listinfo.cgi IRC (irc.freenode.net): #webkit and #webkitgtk+ The WebKit project Juan J. Sánchez
  • 38. The WebKit Contributors Meeting Meeting for contributors to the WebKit project Organized in an “unconference”-like format Extremely useful to advance on some topics: Implementation of new APIs, WebKit2, accelerated compositing, helper tools, QA infrastructure... Yearly held in Cupertino, California. Hosted by Apple The WebKit project Juan J. Sánchez
  • 39. How to contribute The WebKit project Juan J. Sánchez
  • 40. Types of contributions Bugfixing and new features in: An existent port The core components: webcore and JSC/V8 Creation and maintenance of a new port The WebKit project Juan J. Sánchez
  • 41. Guidelines for contributing patches to WebKit 1 Get and build the code from the SVN repository 2 Choose or create a bug report to work on 3 Code your changes and make sure you include new regression or unit tests if needed 4 Create a patch for your changes and submit it asking for review over it to appropriate reviewers 5 Update and change your patch as many times as needed 6 Once approved, land your patch or ask a committer/reviewer to do it 7 Watch for any regressions it might have caused The WebKit project Juan J. Sánchez
  • 42. Creating a port: what needs to be done High level API (WebKit1 and WebKit2) Low level backend specific implementation Web Template Framework (WTF): memory management, threading, data structures (vectors, hash tables, bloom filters, ...) numerical support, etc. JSC vs V8 Networking: HTTP, DNS, cookies, etc. Graphics: 2D/3D rendering, compositing, theming, fonts Multimedia: media player for audio and video tags DOM bindings Accessibility Smaller tasks: clipboard, popup and context menus, cursors, etc. Other things: favicons, plugins, downloads, geolocation, settings, navigation policies, etc. The WebKit project Juan J. Sánchez
  • 43. Creating a port: the social side Difficult without full-time reviewers Reuse from other ports as much as possible Try to work upstream from the very beginning The risk of forking is big, the project moves fast Focus on testing and continuous integration Port-specific events and communication tools The WebKit project Juan J. Sánchez
  • 44. Conclusions WebKit: an Open Source web engine powering lots of applications (not only browsers!) out there The only true Open Source alternative for embedders Clearly defined and modular architecture. Port friendly Complex and fast moving project Developed by a community of organizations and individuals with different interests, collaborating together Lots of contributors. Appropriate policies in place to handle permissions and responsibilities in the project The WebKit project Juan J. Sánchez
  • 45. Thank you! Juan J. Sánchez jjsanchez@igalia.com The WebKit project Juan J. Sánchez