Confirmed users
111
edits
(Mark proposed schedule as adopted and improve layout) |
(Move more motivation out of the Introduction) |
||
Line 1: | Line 1: | ||
Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language]. | Firefox [[Oxidation|depends on code]] written in the [https://www.rust-lang.org/ Rust programming language]. | ||
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox. | |||
and required to build Firefox. | |||
This allows contributors to know when new features will be usable, and | This allows contributors to know when new features will be usable, and | ||
downstream packagers to know what toolchain will be required for each | downstream packagers to know what toolchain will be required for each | ||
Firefox release. Both benefit from the predictability of a schedule. | Firefox release. Both benefit from the predictability of a schedule. | ||
== Schedule == | == Schedule == | ||
Line 83: | Line 59: | ||
''We ship official stable Firefox with stable Rust.'' | ''We ship official stable Firefox with stable Rust.'' | ||
Typically we build Firefox Nightly with the current stable Rust and let | |||
Firefox Nightly with the current stable Rust and let that configuration | that configuration ride through beta to release. There have been frequent | ||
ride through beta to release. There have been frequent exceptions where | exceptions where we've adopted a beta Rust during the Nightly phase to | ||
we've adopted a beta Rust during the Nightly phase to address some | address some platform support issue, and later updated when that Rust | ||
platform support issue, and later updated when that Rust version became | version became stable. For example, we needed to use beta Rust for our | ||
stable. For example, we needed to use beta Rust for our own builds when | own builds when we first added Rust support to Firefox for Android. | ||
we first added Rust support to Firefox for Android. | |||
The policy provides good stability guarantees once Firefox is in | The policy provides good stability guarantees once Firefox is in | ||
Line 122: | Line 97: | ||
=== Rationale === | === Rationale === | ||
We need to be fast and efficient across the whole system which includes | |||
the Rust, Servo, and Firefox development teams. We realise that the | |||
decisions we make have an impact downstream, and we want to minimise the | |||
negative aspects of that impact. However, we cannot do so at the expense | |||
of our own productivity. | |||
There are many other stakeholders, of course, but our work in Gecko and | |||
Servo are major drivers for Rust language, compiler, and library | |||
development. That influence is more effective if we can iterate quickly. | |||
Servo itself often uses experimental language features to give the | |||
necessary early feedback on features as they evolve. | |||
Rust updates every six weeks, just like Firefox. This is more like web | |||
languages than native languages, but it's been great for building | |||
community. We (as Gecko developers) should embrace it. | |||
Many of us think of the toolchain and source code as being conceptually | |||
different. At this point in time, Rust is evolving much more quickly | |||
than Python or C++. For now it is easier to think of Rust as being part | |||
of Firefox, rather than thinking of it like a C++ toolchain with decades | |||
of history which we we have little influence on. | |||
Official build configurations are generally part of the Firefox | Official build configurations are generally part of the Firefox | ||
Line 148: | Line 145: | ||
developers working on Gecko modules. | developers working on Gecko modules. | ||
I think this is the correct trade-off between those two groups. | I think this is the correct trade-off between those two groups. | ||
==== Alternate Proposals ==== | ==== Alternate Proposals ==== |