servo: the parallel web engine

24
Servo: The parallel web engine Bruno de Oliveira Abinader [email protected] [email protected] FISL 15 | 2014 | Porto Alegre, Brasil

Upload: bruno-abinader

Post on 08-Jul-2015

1.103 views

Category:

Software


1 download

DESCRIPTION

This talk exposes the reasons what Servo is and why it is necessary, its current status, future plans and details on the Rust programming language, which has a symbiotic relationship with Servo.

TRANSCRIPT

Page 1: Servo: The parallel web engine

Servo: The parallel web engine

Bruno de Oliveira Abinader

[email protected] [email protected]

FISL 15 | 2014 | Porto Alegre, Brasil

Page 2: Servo: The parallel web engine

/whoami abinader @ irc.freenode.org | irc.mozilla.org | irc.w3.org

Ohloh: ohloh.net/accounts/brunoabinader

GitHub: github.com/brunoabinader

Blog: abinader.com.br

Page 3: Servo: The parallel web engine

Introdução

• Scenario: Mobile web browsers

• What is Servo? What is Rust?

• Servo: Objectives

• Servo: Current status

• Servo: Challenges and future plans

• Contributing to Servo and Rust

Page 4: Servo: The parallel web engine

Scenario: Mobile web browsers

Predictions for 2014 and beyond*:

• Web pages will grow in size and complexity

• Focus on mobile web browsers performance

• Devices will have more cores, not faster cores

Page 5: Servo: The parallel web engine

Scenario: Mobile web browsers

Load time of a web page in Desktop vs. Mobile**:

Sources: http://www.webperformancetoday.com/2014/01/07/eight-web-performance-predictions-for-2014/ http://www.eecs.berkeley.edu/~lmeyerov/projects/pbrowser/pubfiles/playout.pdf

Page 6: Servo: The parallel web engine

Scenario: Mobile web browsers

Slowness causes:

• Single-core mobile devices

• Browsers do not adapt to multi-core devices

• JavaScript code run in a single thread

Page 7: Servo: The parallel web engine

Scenario: Mobile web browsers

Further issues:

• Huge code base: multiple architectures, multiple ports

• Support for deprecated platforms, specifications and architectures

• Security vulnerabilities on C++ memory management

Page 8: Servo: The parallel web engine

What is Servo?

Page 9: Servo: The parallel web engine

What is Servo?

document

html

head body

title p

DOM Example Hello World!

Page 10: Servo: The parallel web engine

What is Servo?

Servo is an experimental web engine:

• Developed by Mozilla, in partnership with Samsung

• Aims to create a highly parallel and safe environment

• Focus on mobile and embedded

• Has symbiotic relationship with Rust programming language

Page 11: Servo: The parallel web engine

What is Servo? Under the hood:

• SpiderMonkey JavaScript engine

• Azure drawing library, Skia, Cairo

• Hubbub HTML parser

• Harfbuzz text shaping library

Page 12: Servo: The parallel web engine

What is Rust?

Page 13: Servo: The parallel web engine

What is Rust? Rust is a programming language:

• Developed to be safe, concurrent and practical

• Focus on creation of reliable and efficient systems

• #2 on GitHub’s “repositories with most amount of closed issues” in 2013

Page 14: Servo: The parallel web engine

What is Rust?

Example:

Page 15: Servo: The parallel web engine

Servo: Objectives

• Advantage from parallelism in various levels

• Eliminate common causes for bugs and security flaws

• Based on WHATWG live specifications

Page 16: Servo: The parallel web engine

Servo: Current status

We do ACID2!

Page 17: Servo: The parallel web engine

Servo: Challenges

• Performance: Parallelism trade-offs

• Rust data structures

• Rust language immaturity

• Hostile libraries to parallelism and security controls

Page 18: Servo: The parallel web engine

Servo: Challenges

Strategies for optimal parallelism:

Task-based architecture

Copy-on-write DOM

Parallel rendering

Tiled rendering

Layered rendering

Selector matching

Parallel layout

Text shaping

Parallel parsing

Image decoding

Other decodings (eg. Video)

GC JS in parallel with layout

Page 19: Servo: The parallel web engine

Servo: Future plans

Roadmap for 2014:

• Demonstrate better performance than other web engines (eg. Gecko, WebKit, Blink, Trident)

• Implement all Servo architecture

ACID2 | Parallel layout | HTML parser in Rust | Bidirectional writing | Vertical writing | Gestures | XMLHTTPRequest |

Incremental layout | COW DOM | W3C Platform Tests | CSS WG tests | Android buildbot | Embedding | Pagination | CSSOM |

CSS Properties | DOM bindings | Caching | FlexBox | Web Animations | Multiprocess | Multimedia | Sandboxing | Addons

| Bookmarks | History | Cookies | …

Page 20: Servo: The parallel web engine

Contributing to Servo and Rust

• Contributions are welcome!

• Servo: github.com/mozilla/servo

• Rust: github.com/mozilla/rust | rust-lang.org

• #servo | #rust | #rust-internals @ irc.mozilla.org

• dev-servo | rust-dev @ lists.mozilla.org

• Reviews: critic.hoppipolla.co.uk

• News: blog.octayn.net

Page 21: Servo: The parallel web engine

Contributing to Servo and Rust

• Servo: Supported systems:

Page 22: Servo: The parallel web engine

Contributing to Servo and Rust

• First good bugs list @ GitHub issues

• CSS properties

• DOM Bindings

• Janitoring

• Tests

• Documentation

Page 23: Servo: The parallel web engine

Questions?

Page 24: Servo: The parallel web engine

Thank you!

Special thanks: