blob: d93eea0f8b11a48781c76f944cb9bed029a5fc67 [file] [log] [blame] [view]
Russ Cox2ccff3f2016-01-28 10:16:44 -05001This wiki page is maintained by the Go team.
Andrew Bonventred03c2192019-01-18 21:58:54 -05002Please [send comments to golang-dev](https://groups.google.com/group/golang-dev)
Russ Cox2ccff3f2016-01-28 10:16:44 -05003or [file issues](https://golang.org/issue) instead of making changes directly.
Caleb Spare5e9e0b22015-06-24 23:57:39 -07004
Russ Cox2ccff3f2016-01-28 10:16:44 -05005Short link: https://golang.org/s/release.
Caleb Spare5e9e0b22015-06-24 23:57:39 -07006
Russ Cox2ccff3f2016-01-28 10:16:44 -05007## Overview
Caleb Spare5e9e0b22015-06-24 23:57:39 -07008
Russ Cox2ccff3f2016-01-28 10:16:44 -05009After fourteen months elapsed between Go 1.0 and Go 1.1, the Go team
10adopted a release schedule to streamline the process of working on,
11finishing, and issuing releases.
12The overall goal is to make a major release every six months, which breaks down into
13three months of general development followed by three months of testing and polishing
14known as the release freeze.
15A release is maintained by issuing minor releases to correct
16critical problems such as crashes or security issues.
Andrew Gerrand847452d2015-06-25 22:30:32 +100017
Russ Cox2ccff3f2016-01-28 10:16:44 -050018Note that this page documents what we intend to do for upcoming releases.
19If you are familiar with what we have done in the past,
20pay particular attention to the differences described in the
21[history section](#history).
Caleb Spare5e9e0b22015-06-24 23:57:39 -070022
Russ Cox2ccff3f2016-01-28 10:16:44 -050023## Timeline
Caleb Spare5e9e0b22015-06-24 23:57:39 -070024
Russ Cox2ccff3f2016-01-28 10:16:44 -050025The current release cycle is aligned to start on February 1 and August 1 of each year.
26The target milestones for a release cycle are as described below.
27We try to hit the targets as closely as possible, while still delivering
28a quality release.
Caleb Spare5e9e0b22015-06-24 23:57:39 -070029
Russ Cox2ccff3f2016-01-28 10:16:44 -050030Betas, release candidates, and releases have traditionally been cut and issued
31mid-week, often on Wednesdays.
32We avoid Mondays to give the Go team a work day before to prepare for the cut,
33and we avoid Fridays to give the Go team a work day after in case the cut runs
34into unexpected problems.
Caleb Spare5e9e0b22015-06-24 23:57:39 -070035
Andrew Bonventre20aaa9e2019-01-18 21:57:42 -050036![](images/release-cycle.png)
Joe Tsaic14f3c12017-10-05 16:07:22 -070037
Russ Cox76b49232016-01-28 10:20:05 -050038#### January 15 / July 15: Planning for release begins.
Caleb Spare5e9e0b22015-06-24 23:57:39 -070039
Russ Cox2ccff3f2016-01-28 10:16:44 -050040Planning of major work for upcoming release cycle is announced
41on [golang-dev](https://groups.google.com/group/golang-dev).
42
43Examples:
44[Go 1.4](https://groups.google.com/d/msg/golang-dev/eqBihsj7x-k/3h59pc8FDAoJ),
45[Go 1.5](https://groups.google.com/d/msg/golang-dev/2ZUi792oztM/GNsw1i76LhsJ),
46[Go 1.6](https://groups.google.com/d/msg/golang-dev/vNboccLL95c/XOD3vHKOCQAJ).
47
Russ Cox76b49232016-01-28 10:20:05 -050048#### February 1 / August 1: Release work begins.
Russ Cox2ccff3f2016-01-28 10:16:44 -050049
50This milestone is delayed if the previous release has not yet been issued,
51but note that later milestones are not delayed.
52That is, failure to get one release out on time takes time away from
53the development cycle of the subsequent release.
54
55Note that incoming bug reports should be handled and bugs fixed during
56ordinary release work.
57It is not appropriate to leave all bug fixes for the release freeze.
58See the [history](#history) section for more discussion.
59
Russ Cox76b49232016-01-28 10:20:05 -050060#### May 1 / November 1: Release freeze begins.
Russ Cox2ccff3f2016-01-28 10:16:44 -050061
62This milestone begins the second half of the release cycle, the release freeze.
63The release freeze applies to the entire main repository
64as well as to the code in subrepositories that is needed to build the
65binaries included in the release,
66particularly godoc and all its dependencies in the tools subrepository.
67
68Changes that were mailed before the freeze can be submitted
69if they are reviewed promptly after the freeze begins.
70During the freeze, only bug fixes and doc updates are accepted.
71On occasion new work may be done during the freeze, but only in exceptional circumstances
72and typically only if the work was proposed and approved before the cutoff.
73Such changes must be low risk.
74
75This part of the release cycle is focused on improving the quality of the release,
76by testing it and fixing bugs that are found.
77However, every fix must be evaluated to balance the benefit of a possible fix
78against the cost of now having not as well tested code (the fix) in the release.
79Early in the release cycle, the balance tends toward accepting a fix.
80Late in the release cycle, the balance tends toward rejecting a fix,
81unless a case can be made that the fix is both low risk and high reward.
82
83Examples of low risk changes appropriate late in the cycle include changes
84to documentation and fixes to new features being introduced in the current
85release (since there is no chance of introducing a regression compared to
86an earlier release).
87
88By the end of the first month of the freeze, nearly all known bugs
89should have been fixed or explictly postponed (either to the next
90release or indefinitely). There should be few known bugs left,
91perhaps only the ones that have proven too elusive to chase down.
92
Russ Cox76b49232016-01-28 10:20:05 -050093#### June 1 / December 1: Beta 1 issued.
Russ Cox2ccff3f2016-01-28 10:16:44 -050094
95A beta release is meant to encourage testing to discover new bugs.
96Issuing a beta is an indication that the Go team has fixed nearly all the
97known bugs that are planned to be fixed for the release,
98and now it is time to look for as yet unknown bugs.
99
100The first beta includes a complete draft of the eventual release notes,
101but marked clearly as a draft to avoid confusion when people link
102to them on the internet.
103
104If a release is ahead of schedule, it is acceptable and even encouraged
105to issue a beta a few weeks ahead of this target.
106
107As bugs are reported and fixed, additional betas may be released,
108provided there are significant code changes to test anew.
109Typically betas should not be issued more frequently than two weeks.
110It is important not to issue too many betas, nor too many release candidates:
111we are asking our users for their time to help us test the release
112and must not waste their good will by making too many requests.
113
114A beta is not expected to be bug-free and should not be used in
115production settings where failures or misbehavior cannot be tolerated.
116Organizations can run integration or other tests against a beta
117or even use it in a canary setting, but they should be discouraged from
118deploying the beta for unrestricted production usage.
119
Russ Cox76b49232016-01-28 10:20:05 -0500120#### July 1 / January 1: Release candidate 1 issued.
Russ Cox2ccff3f2016-01-28 10:16:44 -0500121
122A release candidate is meant to be as close as possible to the actual release bits.
123Issuing a release candidate is an indication that the Go team has high confidence
124that the tree is free of critical bugs.
125
126Once a release candidate is issued, only documentation changes
127and changes to address critical bugs should be made.
128In general the bar for bug fixes at this point is even slightly higher than the
129bar for bug fixes in a minor release.
130We may prefer to issue a release with a known but very rare crash
131than to issue a release with a new but not production-tested fix.
132
133If a release is ahead of schedule, it is acceptable and even encouraged
134to issue a release candidate a few weeks ahead of this target.
135Extended release testing is a great way to deliver a robust release.
136
137If critical bugs are reported and fixed, additional release candidates may be issued,
138but typically not more than one every two weeks.
139
140Again, a release candidate is meant to be bug-free, as much as possible.
141Organizations are encouraged to deploy it in production settings
142after appropriate organization-specific testing.
143
144One of the criteria for issuing a release candidate is that
145Google be using that version of the code for new production builds
146by default: if we at Google are not willing to run it for production use,
147we shouldn't be asking others to.
148We may issue the release candidate a few days in advance of Google
149changing over, depending on how the calendar falls.
150For example, the change inside Google makes more sense to do on Mondays,
151so we may issue the release candidate the Wednesday before
152or the Wednesday after Google converts to the new release by default.
153
154The calm period between a release candidate and the final release
155is a good time for additional testing or for discussing the next release
156(see the January 15 milestone above).
157
Russ Cox76b49232016-01-28 10:20:05 -0500158#### August 1 / February 1: Release issued.
Russ Cox2ccff3f2016-01-28 10:16:44 -0500159
160Finally, the release itself!
161
162A release should not contain significant changes since the last release candidate:
163it is important that all code in the release has been well tested.
164Issuing a release is an indication that release testing has confirmed
165the release candidate's high confidence that the tree is free of critical bugs.
166
167One of the criteria for issuing a release is that the release candidate
168has been available for four weeks and any problems that need to be
169addressed have been.
170
171If a release process has run ahead of schedule, with an early beta
172and early release candidate,
173release candidate testing should absorb any extra time,
174leaving the actual release on time, not early.
175This improves the stability of the release, and it also gives developers
176working on the Go release more time to think about and plan the
177next release before code changes start pouring in again.
178
179If a release is behind schedule, it is acceptable (but certainly not ideal)
180to issue a release sooner than four weeks after the release candidate,
181but no sooner than two weeks after.
182Abbreviated release testing is a great way to deliver a buggy release.
183
184Because Google runs the release candidate as the default
185version of Go, four weeks of release testing means that
186at the least Google has been using this version of Go for
187four weeks before it becomes an official release.
188While Google's successful use does not guarantee the
189absence of problems, our experience has been that
190it certainly helps improve the quality of the release.
191We strongly encourage other organizations to test release candidates
192as aggressively as they are able and to report problems that they find.
193
194Once a release is issued, work on the next release, including code reviews
195and submission of new code, can begin, and the cycle repeats.
196Note that if a release is delayed, so is work on the next release.
197
198## Release Maintenance
199
Tobi Fuhrimann7fba9932018-02-09 08:19:58 +0100200A minor release is issued to address one or more critical problems
Russ Cox2ccff3f2016-01-28 10:16:44 -0500201for which there is no workaround (typically related to stability or security).
202The only code changes included in the release are the fixes for the specific
203critical problems.
Brad Fitzpatrick7090ac82017-04-24 15:39:12 -0700204Important documentation-only changes and safe test updates (such as disabling tests), may also be included as well,
Russ Cox2ccff3f2016-01-28 10:16:44 -0500205but nothing more.
206
207Minor releases to address non-security problems for Go 1.x stop once Go 1.x+1 is released.
208
209Minor releases to address security problems for Go 1.x stop once Go 1.x+2 is released.
210For more about security updates, see the [security policy](https://golang.org/security).
211
Filippo Valsorda2027afe2018-04-17 15:02:00 -0400212See also https://github.com/golang/go/wiki/MinorReleases.
213
Russ Cox2ccff3f2016-01-28 10:16:44 -0500214## History
215
216The Go release cycle was discussed and adopted
217after the fourteen month effort to release Go 1.1.
218Go 1.2, Go 1.3, and Go 1.4 followed a six-month cycle
219beginning and ending (alternately) on December 1 and June 1.
220After experience with calendar problems in that cycle,
221we extended Go 1.5's development phase by two months
222to shift the cycle to begin and end on February 1 and August 1,
223as described above.
224
225The [original proposal](https://golang.org/s/release-old)
226did not contain enough detail about the milestones during the freeze,
227and over the course of a few releases development work took over
228much of the freeze.
229Compared to the goal set above of issuing a beta one month
230into the release freeze, the first betas for Go 1.3, Go 1.4, Go 1.5,
231and Go 1.6 were three, four, five, and six weeks late, respectively.
232(Go 1.6 beta 1 was only two weeks late, but it was
233full of known bugs that we still intended to fix,
234primarily to get something out for testing before the winter holidays.
235Go 1.6's first real beta by the above definition was beta 2.)
236
237When the beta is late, everything that follows the beta—shaking out
238the final bugs, thorough testing of the release candidates,
239and the shipping of the release—gets rushed, leading to more bugs
240in the final release and usually a delay in starting the next cycle.
241
242The beta was ready later and later in those four cycles primarily
243because we both postponed too many bugs to the freeze
244and then allowed too many non-essential bug fixes during the freeze.
245
246For Go 1.7 and later we will need to make sure that bugs are fixed
247before the freeze.
248That is, we need to follow the schedule above, not what we've done in the past.