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

Servo: The parallel web engine

Embed Size (px)

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.

Citation preview

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: