The time has finally come for Firefox to upgrade the aging Gecko rendering engine that served it for 20 or some years.The upgrade will enable Firefox to take full advantage of modern CPU's and GPU's, and result in lighting fast performance improvements on both desktop and mobile devices.
"Pages will load faster, and scrolling will be silky smooth. Animations and interactive apps will respond instantly, and be able to handle more intensive content while holding consistent frame rates. And the content most important to you will automatically get the highest priority, focusing processing power where you need it the most."
It wouldn't be that easy however.Switching from a solid, long serving and well proven engine to something new, constitutes a formidable task, especially when the project in question, the Firefox browser, is live and in production.
For this reason the transition will be facilitated with the aid of yet another project, project Quantum, an independent, community-based web engine sponsored by Mozilla, which is going to act as the bridge between the two ecosystems, until the transition completes:
"By taking an incremental approach and merging proven components from Servo to Gecko as they are ready, users won't have to wait long to start seeing dramatic improvements to Firefox stability and performance. We're going to ship major improvements in 2017, and we'll iterate from there."
Quantum then, will leverage the high-performance components of Servo to bring more parallelization and GPU offloading to Firefox.These high-performance core components in active development are:
rust-bindgen, a C++ bindings generator for the Rust language.Quantum uses rust-bindgen to generate the glue code between Firefox’s C++ code and Servo’s Rust components.
Quantum CSS (aka Stylo) for integrating Servo's parallelized CSS style system into Gecko.
Quantum Render, Servo's next-generation renderer optimized for GPU rendering, to act as the graphics backend for Firefox.
Quantum Compositor, a compositor that moves Gecko’s compositor into its own process, since moving code that interacts with the GPU into its own process will make Firefox more stable and eliminate most graphics related Firefox crashes.
Quantum DOM, a project that will make Gecko more responsive, especially when there are a lot of background tabs open.
Servo as a project is still considered experimental, as such it has a lot of catching up to do till it's considered a feature rich and complete replacement of Gecko;the fact however is that it continuously evolves and will soon be good enough for making its very first appearance as part of a future Firefox developer build.
As such Servo has two long term goals to meet:
incrementally replace the components in Firefox with the ones written in Rust and shared with Servo,
to determine product opportunities for a standalone Servo browser or embeddable library (e.g., for Android).
These are further broken down into several sub-tasks, as they appear on the project's Roadmap.
The 2016 goals that were completed, were:
Create an initial end-to-end browser tech demo that we can start iterating browser.html frontend
Oxidation: Ship Rust/Servo components in Firefox
Track performance systematically
Allow comparisons with Gecko and Blink
Support more standard benchmarks
Webrender became the default graphics engine in production
while others still on the to-do list are:
Get the autolander working for Stylo to share Servo code with Firefox
Finish off the Servo components required for Stylo
Complete the transition to MSVC on Windows
Experiment with WebRender in other programs
putting more research into Magic DOM and/or other JS optimizations and Software transactional memory (in service of layout + script parallelism)
Basing on Rust looks yet another reason that might slow the project's progress down, since this new systems programming language, despite its advantages in security, safety and parallelization, is still in an infant or experimental state.
Nevertheless, Servo is actively looking for contributors, so if you feel like it you can download, build and get started with Servo from it's Github's repository.
There you'll find several open issues you could contribute to such as :
Add a tidy check for use statements with extraneous spaces
Add a notification for elements that a child text node changed
Produce portable output (avoid generating system-dependent tests + configuration to improve type replacements)