Rust Update Policy for Firefox: Difference between revisions

Move more motivation out of the Introduction
(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].
Rust toolchain dependency changes have been made on an ad-hoc basis. We
 
want to clarify the decision making and planning around this. We are
We document here the decision making and planning around when we update the Rust toolchains used and required to build Firefox.
therefore defining a policy for when we update the Rust toolchains used
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.
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.
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.
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.


== Schedule ==
== Schedule ==
Line 83: Line 59:
''We ship official stable Firefox with stable Rust.''
''We ship official stable Firefox with stable Rust.''


So far we've had no problem meeting this requirement. Typically we build
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 ====
Confirmed users
111

edits