From 2b5820038154679d18cf129a1060667413339fb7 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 17 May 2016 11:39:13 -0700 Subject: [PATCH 1/3] Specify Rust compatibility of nursery crates Currently there is unfortunately not a clear guideline for what the compatibility of all rust-lang-nursery crates are. The purpose of this change is to set forth such a guideline to ensure that the nursery crates are all consistent. It may also likely be the case that many other crates in the community wish to follow such a policy as well. This change proposes that all nursery crates are compatible with the **previous two stable releases** of the compiler. For example, if 1.10 is the current release then all crates are guaranteed to compile on 1.8 and 1.9. Nursery crates may compile on older versions, but this is not a guarantee nor can it be relied on. --- text/1242-rust-lang-crates.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/text/1242-rust-lang-crates.md b/text/1242-rust-lang-crates.md index dc24add8ffe..21046973e32 100644 --- a/text/1242-rust-lang-crates.md +++ b/text/1242-rust-lang-crates.md @@ -149,6 +149,27 @@ Deprecated crates move to rust-lang-deprecated and are subsequently minimally maintained. Alternatively, if someone volunteers to maintain the crate, ownership can be transferred externally. +### Compatibility with older compilers + +The rust-lang-nursery crates will currently be guaranteed to compile on the +**previous two stable releases** of Rust and forward. That is, if the current +stable release is 1.10, all nursery crates will compile successfully on both +1.8 and 1.9. Some nursery crates may compile on older versions, but this is not +guaranteed and changes to the crate are allowed which bump the minimum rustc +version requirement. + +This will be implemented in practice by adding continuous integration to all +nursery crates which runs the test suite on older Rust versions. If a change is +made that breaks compatibility with an older Rust version, then the version can +be dropped if it was before two stable releases ago (e.g. by updating the +continuous integration configuration), or the change must wait to land +otherwise. + +Crates are allowed to experiment with new stable features in Rust, however, that +are behind off-by-default Cargo features. For example the `panic::catch_unwind` +API, stabilized, in 1.10, could be behind a feature flag for crates until 1.12 +is released. + ## Advertising Part of the reason for having rust-lang crates is to have a clear, short list of From 30348fe67aeefb05f2369429f6a03c7c94a0cdbe Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Tue, 17 May 2016 14:05:01 -0700 Subject: [PATCH 2/3] Say it's not a major bump --- text/1242-rust-lang-crates.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/text/1242-rust-lang-crates.md b/text/1242-rust-lang-crates.md index 21046973e32..26b6ab38fbd 100644 --- a/text/1242-rust-lang-crates.md +++ b/text/1242-rust-lang-crates.md @@ -163,7 +163,8 @@ nursery crates which runs the test suite on older Rust versions. If a change is made that breaks compatibility with an older Rust version, then the version can be dropped if it was before two stable releases ago (e.g. by updating the continuous integration configuration), or the change must wait to land -otherwise. +otherwise. If the minimum vesion of Rust is increased then this is not +considered a breaking change (e.g. does not require a new major release). Crates are allowed to experiment with new stable features in Rust, however, that are behind off-by-default Cargo features. For example the `panic::catch_unwind` From 59aa48f591b6b83da45a69ebb5d4575c940678b3 Mon Sep 17 00:00:00 2001 From: Alex Crichton Date: Wed, 18 May 2016 09:48:04 -0700 Subject: [PATCH 3/3] Some more tweaks and additions to wording --- text/1242-rust-lang-crates.md | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/text/1242-rust-lang-crates.md b/text/1242-rust-lang-crates.md index 26b6ab38fbd..be18d50e8d8 100644 --- a/text/1242-rust-lang-crates.md +++ b/text/1242-rust-lang-crates.md @@ -151,12 +151,12 @@ ownership can be transferred externally. ### Compatibility with older compilers -The rust-lang-nursery crates will currently be guaranteed to compile on the -**previous two stable releases** of Rust and forward. That is, if the current -stable release is 1.10, all nursery crates will compile successfully on both -1.8 and 1.9. Some nursery crates may compile on older versions, but this is not -guaranteed and changes to the crate are allowed which bump the minimum rustc -version requirement. +The current version of rust-lang-nursery crates will currently be guaranteed to +compile on the **previous two stable releases** of Rust and forward. That is, if +the current stable release is 1.10, all nursery crates will compile successfully +on both 1.8 and 1.9. Some nursery crates may compile on older versions, but this +is not guaranteed and changes to the crate are allowed which bump the minimum +rustc version requirement. This will be implemented in practice by adding continuous integration to all nursery crates which runs the test suite on older Rust versions. If a change is @@ -171,6 +171,10 @@ are behind off-by-default Cargo features. For example the `panic::catch_unwind` API, stabilized, in 1.10, could be behind a feature flag for crates until 1.12 is released. +Note that this policy may change over time. For example if LTS releases of the +compiler as created then it is likely that nursery crates will guarantee +compatibility with an LTS release. + ## Advertising Part of the reason for having rust-lang crates is to have a clear, short list of