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