# Go 2, here we come!
29 Nov 2018
Tags: go2, proposals, community
Summary: How Go 2 proposals will be evaluated, selected, and shipped.

Robert Griesemer

## Background

At GopherCon 2017, Russ Cox officially started the thought process on the
next big version of Go with his talk [The Future of Go](https://www.youtube.com/watch?v=0Zbh_vmAKvk)
([blog post](https://blog.golang.org/toward-go2)). We have
called this future language informally Go 2, even though we understand now
that it will arrive in incremental steps rather than with a big bang and a
single major release. Still, Go 2 is a useful moniker, if only to have a way
to talk about that future language, so let’s keep using it for now.

A major difference between Go 1 and Go 2 is who is going to influence the
design and how decisions are made. Go 1 was a small team effort with modest
outside influence; Go 2 will be much more community-driven.
After almost 10 years of exposure, we have
learned a lot about the language and libraries that we didn’t know in the
beginning, and that was only possible through feedback from the Go community.

In 2015 we introduced the [proposal process](https://golang.org/s/proposal)
to gather a specific kind of feedback: proposals for language and library
changes. A committee composed of senior Go team members has been reviewing,
categorizing, and deciding on incoming proposals on a regular basis. That
has worked pretty well, but as part of that process we have ignored all
proposals that are not backward-compatible, simply labeling them Go 2 instead.
In 2017 we also stopped making any kind of incremental backward-compatible
language changes, however small, in favor of a more comprehensive plan that
takes the bigger picture of Go 2 into account.

It is now time to act on the Go 2 proposals, but to do this we first need a plan.

## Status

At the time of writing, there are around 120
[open issues labeled Go 2 proposal](https://github.com/golang/go/issues?page=1&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2&utf8=%E2%9C%93).
Each of them proposes a significant library or language change, often one
that does not satisfy the existing
[Go 1 compatibility guarantee](https://golang.org/doc/go1compat).
Ian Lance Taylor and I
have been working through these proposals and categorized them
([Go2Cleanup](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2+label%3AGo2Cleanup),
[NeedsDecision](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3Aproposal+label%3AGo2+label%3ANeedsDecision),
etc.) to get an idea of what’s there and to make it easier to
proceed with them. We also merged related proposals and closed the ones which
seemed clearly out of the scope of Go, or were otherwise unactionable.

Ideas from the remaining proposals will likely influence Go 2’s libraries
and languages. Two major themes have emerged early on: support for better
error handling, and generics. [Draft designs](https://blog.golang.org/go2draft)
for these two areas have been
published at this year’s GopherCon, and more exploration is needed.

But what about the rest? We are [constrained](https://blog.golang.org/toward-go2)
by the fact that we now have
millions of Go programmers and a large body of Go code, and we need to
bring it all along, lest we risk a split ecosystem. That means we cannot
make many changes, and the changes we are going to make need to be chosen
carefully. To make progress, we are implementing a new proposal evaluation
process for these significant potential changes.

## Proposal evaluation process

The purpose of the proposal evaluation process is to collect feedback on
a small number of select proposals such that a final decision can be made.
The process runs more or less in parallel to a release cycle and consists
of the following steps:

1. _Proposal selection_. The Go team selects a small number of
[Go 2 proposals](https://github.com/golang/go/issues?utf8=%E2%9C%93&q=is%3Aissue+is%3Aopen+label%3AGo2+label%3AProposal)
that seem worth considering for acceptance, without making a final decision.
See below for more on the selection criteria.

2. _Proposal feedback_. The Go team sends out an announcement listing the selected
proposals. The announcement explains to the community the tentative intent to
move forward with the selected proposals and to collect feedback for each
of them. This gives the community a chance to make suggestions and express
concerns.

3. _Implementation_. Based on that feedback, the proposals are implemented.
The target for these significant language and library changes is to have
them ready to submit on day 1 of an upcoming release cycle.

4. _Implementation feedback_. During the development cycle, the Go team and
community have a chance to experiment with the new features and collect
further feedback.

5. _Launch decision_. At the end of the three month
[development cycle](https://github.com/golang/go/wiki/Go-Release-Cycle)
(just when starting the three month repo freeze before a release), and
based on the experience and feedback gathered during the release cycle,
the Go team makes the final decision about whether to ship each change.
This provides an opportunity to consider whether the change has delivered
the expected benefits or created any unexpected costs. Once shipped, the
changes become part of the language and libraries. Excluded proposals may
go back to the drawing board or may be declined for good.

With two rounds of feedback, this process is slanted towards declining
proposals, which will hopefully prevent feature creep and help with
keeping the language small and clean.

We can’t go through this process for each of the open Go 2
proposals, there are simply too many of them. That’s where the selection
criteria come into play.

## Proposal selection criteria

A proposal must at the very least:

1. _address an important issue for many people_,

2. _have minimal impact on everybody else_, and

3. _come with a clear and well-understood solution_.

Requirement 1 ensures that any changes we make help as many Go developers
as possible (make their code more robust, easier to write, more likely to
be correct, and so on), while requirement 2 ensures we are careful to hurt
as few developers as possible, whether by breaking their programs or causing
other churn. As a rule of thumb, we should aim to help at least ten times as
many developers as we hurt with a given change. Changes that don't affect
real Go usage are a net zero benefit put up against a significant
implementation cost and should be avoided.

Without requirement 3 we don’t have an implementation of the proposal.
For instance, we believe that some form of genericity might solve an important
issue for a lot of people, but we don’t yet have a clear and well-understood
solution. That’s fine, it just means that the proposal needs to go back to
the drawing board before it can be considered.

## Proposals

We feel that this is a good plan that should serve us well but it is important
to understand that this is only a starting point. As the process is used we will
discover the ways in which it fails to work well and we will refine it as needed.
The critical part is that until we use it in practice we won't know how to improve it.

A safe place to start is with a small number of backward-compatible language
proposals. We haven’t done language changes for a long time, so this gets us
back into that mode. Also, the changes won’t require us worrying about
breaking existing code, and thus they serve as a perfect trial balloon.

With all that said, we propose the following selection of Go 2 proposals for
the Go 1.13 release (step 1 in the proposal evaluation process):

1. [_\#20706_](https://github.com/golang/go/issues/20706) _General Unicode identifiers based on_ [_Unicode TR31_](http://unicode.org/reports/tr31/):
This addresses an important issue for Go programmers using non-Western alphabets
and should have little if any impact on anyone else. There are normalization
questions which we need to answer and where community feedback will be
important, but after that the implementation path is well understood.
Note that identifier export rules will not be affected by this.

2. [_\#19308_](https://github.com/golang/go/issues/19308), [_\#28493_](https://github.com/golang/go/issues/28493) _Binary integer literals and support for \_ in number literals_:
These are relatively minor changes that seem hugely popular among many
programmers. They may not quite reach the threshold of solving an
“important issue” (hexadecimal numbers have worked well so far) but they
bring Go up to par with most other languages in this respect and relieve
a pain point for some programmers. They have minimal impact on others who
don’t care about binary integer literals or number formatting, and the
implementation is well understood.

3. [_\#19113_](https://github.com/golang/go/issues/19113) _Permit signed integers as shift counts_:
An estimated 38% of all non-constant shifts require an (artificial) uint
conversion (see the issue for a more detailed break-down). This proposal
will clean up a lot of code, get shift expressions better in sync with index
expressions and the built-in functions cap and len. It will mostly have a
positive impact on code. The implementation is well understood.

## Next steps

With this blog post we have executed the first step and started the second
step of the proposal evaluation process. It’s now up to you, the
Go community, to provide feedback on the issues listed above.

For each proposal for which we have clear and approving feedback, we will
move forward with the implementation (step 3 in the process). Because we
want the changes implemented on the first day of the next release cycle
(tentatively Feb. 1, 2019) we may start the implementation a bit early
this time to leave time for two full months of feedback (Dec. 2018,
Jan. 2019).

For the 3-month development cycle (Feb. to May 2019) the chosen features
are implemented and available at tip and everybody will have a chance to
gather experience with them. This provides another opportunity for feedback
(step 4 in the process).

Finally, shortly after the repo freeze (May 1, 2019), the Go team makes the
final decision whether to keep the new features for good (and include them
in the Go 1 compatibility guarantee), or whether to abandon them (final
step in the process).

(Since there is a real chance that a feature may need to be removed just
when we freeze the repo, the implementation will need to be such that the
feature can be disabled without destabilizing the rest of the system.
For language changes that may mean that all feature-related code is
guarded by an internal flag.)

This will be the first time that we have followed this process, hence the
repo freeze will also be a good moment to reflect on the process and to
adjust it if necessary. Let’s see how it goes.

Happy evaluating!
