Servo 2023
Delan Azabani (she/her)
June 2023
Quick recap
- Started in 2012 by Mozilla as a research project
- Since then, Servo has been a vehicle for
- developing the Rust language
- experimenting with parallelism
- taking those lessons back to Firefox
- …and then the layoffs happened
Servo and Firefox

What now?
- Servo is…
- an independent web engine
- written (almost) entirely in Rust
- with parallelism in style and layout
- designed for modularity from the start
- designed to allow embedding in the future
- What can we do with that?
Servo <3 embedded
- We need more web engine diversity
- But general-purpose engine diversity means taking on
Apple, Google, and Mozilla - On the other hand, the embedded web engine space…
- is even less diverse — WPE (WebKit) and CEF (Chromium) are the only major players
- allows for use cases with restricted content
Since the start of 2023
- Restarted the Technical Steering Committee
- Started reconciling the two layout engines
- 328 patches landed in servo/servo alone (vs 223 in 2022)
- Many improvements to builds and releases
- Several big dependency updates
- WPT failures and flaky tests
- New impl work on Layout 2020
- Non-Igalia contributors in bold :)
Technical Steering Committee

- Oversees Servo’s
- Committers and other roles
- Design and architecture
- Infrastructure, outreach, …
- Now meets monthly (dates and times announced on Zulip)
- Anyone can raise points to discuss on GitHub
- Minutes published live on Zulip and on GitHub
Reconciling layout engines
- Layout 2013 still the default, Layout 2020 was left unfinished
- everything between DOM+style and WebRender
- 2020 does not yet support floats or incremental layout
- 2020 uses opportunistic parallelism, not eager parallelism
- 2020 splits flow tree into separate box and fragment trees
- 2020 generates a WebRender display list directly
- 2020 better aligns its naming and architecture with specs
Reconciling layout engines
- We propose a gradual transition to Layout 2020
- Improve support for Layout 2020 in CI and releases
- Implement some smaller features in Layout 2020
- Decision time: should we remove Layout 2013?
- Implement floats and other complex features
- More details in our report
WPT failures and flaky tests
- Retry unexpected results to find random flakes (mrobinson)
- Support for giving tests multiple expectations (mrobinson)
- Fixed flakiness in scrolling (mrobinson)
- Fixed flakiness in hit testing (mrobinson)
- Fixed flakiness in animations (mrobinson)
- Named access on the window object (pylbrecht, yvt, delan)
- (wip) CSS Font Loading API (mukilan)
Builds and releases
- New test result comments on pull requests (mrobinson)
- New intermittents dashboard for flaky tests (delan)
- Several improvements to builds in forks (sagudev)
- Several improvements to WPT upstreaming (mrobinson)
mach try
(sagudev)- sccache on Linux and macOS (sagudev)
Dependency updates
- truetype crate (IvanUkhov)
- Python 3.11 (andreubotella)
- Rust toolchain (mukilan)
- euclid crate (mrobinson)
- winit crate (atomgardner)
- WebIDL.py (sagudev)
- many crate dedupes (atouchet)
- (wip) WebRender (mrobinson)
New progress on Layout 2020
mach
support (mrobinson)- partial CI support (mrobinson)
- iframes (mrobinson)
- ‘{min,max}-width’ + ‘{min,max}-height’ (delan)
- ‘text-indent’ (Loirooriol)
- ‘outline’ + ‘outline-offset’ (Loirooriol)
- ‘text-decoration’ improvements (Loirooriol)
Next up for Layout 2020
- position: sticky
- ‘vertical-align’
- ‘white-space’
- counters
- floats (eventually)
Servo on wpt.fyi
- wpt.fyi → EDIT → ADD PRODUCT → Servo → SUBMIT
- Great for drilling down specs → tests → subtests
- Not so great for tracking progress over time
(but it’s possible) - Layout 2013 only for now, Layout 2020 coming soon

Servo WPT dashboard
- Tracks progress over time
- Supports both Layout 2013 and 2020
- Has filters for our focus areas:
- CSS2: abspos, box-display, floats, linebox, margin-padding-clear, normal-flow, positioning
- CSSOM
- CSS Position

Demos in Layout 2020
Demos in Layout 2020
- Servo Experiments — demo.servo.org
- Mosaic Gallery — parallel style
- TWGL Tunnel — WebGL
Demos in Layout 2020
Contributing
- HACKING_QUICKSTART.md + Zulip
- Hack on layout (maybe after we switch to Layout 2020)
- Hack on other parts of Servo too :)
- especially DOM, CSSOM, navigation, iframes, devtools
- #29831 — Devtools support is broken
- Make cool demos for Servo Experiments
- Report any bugs you find on GitHub