|
| 1 | ++++ |
| 2 | +layout = "post" |
| 3 | +date = 2014-12-12 |
| 4 | +title = "Rust 1.0: Scheduling the trains" |
| 5 | +author = "Aaron Turon" |
| 6 | +description = "As 2014 is drawing to a close, it's time to begin the Rust 1.0 release cycle!" |
| 7 | ++++ |
| 8 | + |
| 9 | +As 2014 is drawing to a close, it's time to begin the Rust 1.0 release cycle! |
| 10 | + |
| 11 | +**TL;DR: we will transition to a six week release cycle on Jan 9, 2015, and |
| 12 | +produce Rust 1.0.0 final at least two cycles afterwards**: |
| 13 | + |
| 14 | +* Rust 1.0.0-alpha -- Friday, Jan 9, 2015 |
| 15 | +* Rust 1.0.0-beta1 -- Week of Feb 16, 2015 |
| 16 | +* Rust 1.0.0 -- One or more six-week cycles later |
| 17 | + |
| 18 | +We talked before about [why Rust is reaching 1.0], and also about the |
| 19 | +[6-week train model] \(with Nightly, Beta, and Stable channels) that will enable |
| 20 | +us to deliver stability without stagnation. This post finishes the story by |
| 21 | +laying out the transition to this new release model and the stability guarantees |
| 22 | +it provides. |
| 23 | + |
| 24 | +### The alpha release |
| 25 | + |
| 26 | +Reaching alpha means three things: |
| 27 | + |
| 28 | +* The language is feature-complete. All gates are removed from features we |
| 29 | + expect to ship with 1.0. |
| 30 | + |
| 31 | +* The standard library is nearly feature-complete. The majority of APIs that |
| 32 | + will ship in 1.0 stable will already be marked as `#[stable]`. |
| 33 | + |
| 34 | +* *Warnings* for `#[unstable]` features are turned on by default. (Note that the |
| 35 | + `#[experimental]` stability level is |
| 36 | + [going away](https://github.com/rust-lang/rfcs/pull/507).) |
| 37 | + |
| 38 | +In other words, 1.0.0-alpha gives a pretty accurate picture of what 1.0 will |
| 39 | +look like, but doesn't yet institute release channels. By turning on warnings |
| 40 | +for unstable APIs but not excluding them altogether, we can get community |
| 41 | +feedback about which important APIs still need to be stabilized without those |
| 42 | +APIs simply disappearing over night. |
| 43 | + |
| 44 | +While we expect the pace of breakage to slow dramatically when we reach |
| 45 | +feature-complete status, **1.0.0-alpha is still a [pre-release]**: |
| 46 | + |
| 47 | + A pre-release version indicates that the version is unstable and might not |
| 48 | + satisfy the intended compatibility requirements as denoted by its associated |
| 49 | + normal version. |
| 50 | + |
| 51 | +That is, we will reserve the right to make minor breaking changes to both the |
| 52 | +language and libraries -- including `#[stable]` APIs -- throughout the duration |
| 53 | +of the alpha cycle. But we expect any such changes to be relatively minor |
| 54 | +tweaks, and changes to `#[stable]` APIs to be very rare. |
| 55 | + |
| 56 | +### The beta release(s) |
| 57 | + |
| 58 | +Six weeks later, we will begin the beta period: |
| 59 | + |
| 60 | +* Both the language and libraries are feature-complete. All APIs shipping for |
| 61 | + Rust 1.0 are marked `#[stable]`. |
| 62 | + |
| 63 | +* Release channels take effect: feature gates and `#[unstable]` APIs are |
| 64 | + available on nightly builds, but not on the beta. This change is part of |
| 65 | + [our commitment to stability](https://blog.rust-lang.org/2014/10/30/Stability.html). |
| 66 | + |
| 67 | +Unlike the alpha cycle, where we still expect some minor breakage, the beta |
| 68 | +cycle should *not* involve breakage unless a very significant problem is |
| 69 | +found. Ideally, **the beta cycle will be focused on testing, bugfixing, and |
| 70 | +polish**. |
| 71 | + |
| 72 | +We plan to run at least one beta cycle before the final release. |
| 73 | + |
| 74 | +### The final release |
| 75 | + |
| 76 | +Finally, after one or more beta cycles, we will have produced a release |
| 77 | +candidate that is **ready for the world**: |
| 78 | + |
| 79 | +* We are ready to promise stability -- |
| 80 | + [hassle-free upgrades](https://blog.rust-lang.org/2014/10/30/Stability.html) -- |
| 81 | + for the duration of the 1.X series. |
| 82 | + |
| 83 | +* The core documentation (The Guide/Guides) is fully in sync with the language and |
| 84 | + libraries. |
| 85 | + |
| 86 | +We are incredibly excited for Rust to reach this point. |
| 87 | + |
| 88 | +### What this means for the ecosystem |
| 89 | + |
| 90 | +With the [launch](https://blog.rust-lang.org/2014/11/20/Cargo.html) of Cargo and |
| 91 | +[crates.io](https://crates.io/), Rust's ecosystem has already seen significant expansion, but |
| 92 | +it still takes a lot of work to track Rust's nightly releases. Beginning with |
| 93 | +the alpha release, and especially approaching beta1, this will change |
| 94 | +dramatically; **code that works with beta1 should work with 1.0 final without |
| 95 | +any changes whatsoever**. |
| 96 | + |
| 97 | +This migration into stability should be a boon for library writers, and we hope |
| 98 | +that by 1.0 final there will be a massive collection of crates ready for use on |
| 99 | +the stable channel -- and ready for the droves of people trying out Rust for the |
| 100 | +first time. |
| 101 | + |
| 102 | +Let's do this! |
| 103 | + |
| 104 | +[why Rust is reaching 1.0]: https://blog.rust-lang.org/2014/09/15/Rust-1.0.html |
| 105 | +[6-week train model]: https://blog.rust-lang.org/2014/10/30/Stability.html |
| 106 | +[pre-release]: https://semver.org/ |
0 commit comments