Toward Go 2
13 Jul 2017
Tags: community

Russ Cox

* Introduction

[This is the text of
[[https://www.youtube.com/watch?v=0Zbh_vmAKvk][my talk today]]
at Gophercon 2017, asking for the entire Go community's
help as we discuss and plan Go 2.]

On September 25, 2007, after Rob Pike, Robert Griesemer, and Ken
Thompson had been discussing a new programming language for a few
days, Rob suggested the name “Go.”

.html toward-go2/div-indent.html
.image toward-go2/mail.png _ 446
.html toward-go2/div-end.html

The next year, Ian Lance Taylor and I joined the team, and together
the five of us built two compilers and a standard library, leading up
to the [[https://opensource.googleblog.com/2009/11/hey-ho-lets-go.html][open-source release]] on November 10, 2009.

.html toward-go2/div-indent.html
.image toward-go2/tweet.png _ 467
.html toward-go2/div-end.html

For the next two years, with the help of the new Go open source
community, we experimented with changes large and small, refining Go
and leading to the [[https://blog.golang.org/preview-of-go-version-1][plan for Go 1]], proposed on October 5, 2011.

.html toward-go2/div-indent.html
.image toward-go2/go1-preview.png _ 560
.html toward-go2/div-end.html

With more help from the Go community, we revised and implemented that
plan, eventually [[https://blog.golang.org/go-version-1-is-released][releasing Go 1]] on March 28, 2012.

.html toward-go2/div-indent.html
.image toward-go2/go1-release.png _ 556
.html toward-go2/div-end.html

The release of Go 1 marked the culmination of nearly five years of
creative, frenetic effort that took us from a name and a list of ideas
to a stable, production language. It also marked an explicit shift
from change and churn to stability.

In the years leading to Go 1, we changed Go and broke everyone's Go
programs nearly every week. We understood that this was keeping Go
from use in production settings, where programs could not be rewritten
weekly to keep up with language changes.
As the [[https://blog.golang.org/go-version-1-is-released][blog post announcing Go 1]] says, the driving motivation was to provide a stable foundation
for creating reliable products, projects, and publications (blogs,
tutorials, conference talks, and books), to make users confident that
their programs would continue to compile and run without change for
years to come.

After Go 1 was released, we knew that we needed to spend time using Go
in the production environments it was designed for. We shifted
explicitly away from making language changes toward using Go in our
own projects and improving the implementation: we ported Go to many
new systems, we rewrote nearly every performance-critical piece to
make Go run more efficiently, and we added key tools like the
[[https://blog.golang.org/race-detector][race detector]].

Now we have five years of experience using Go to build large,
production-quality systems. We have developed a sense of what works
and what does not. Now it is time to begin the next step in Go's
evolution and growth, to plan the future of Go. I'm here today to ask
all of you in the Go community, whether you're in the audience at
GopherCon or watching on video or reading the Go blog later today, to
work with us as we plan and implement Go 2.

In the rest of this talk, I'm going to explain our goals for Go 2; our
constraints and limitations; the overall process; the importance of
writing about our experiences using Go, especially as they relate to
problems we might try to solve; the possible kinds of solutions; how
we will deliver Go 2; and how all of you can help.

* Goals

The goals we have for Go today are the same as in 2007. We want to
make programmers more effective at managing two kinds of scale:
production scale, especially concurrent systems interacting with many
other servers, exemplified today by cloud software; and development
scale, especially large codebases worked on by many engineers
coordinating only loosely, exemplified today by modern open-source
development.

These kinds of scale show up at companies of all sizes. Even a
five-person startup may use large cloud-based API services provided by
other companies and use more open-source software than software they
write themselves. Production scale and development scale are just as
relevant at that startup as they are at Google.

Our goal for Go 2 is to fix the most significant ways Go fails to
scale.

(For more about these goals, see
Rob Pike's 2012 article “[[https://talks.golang.org/2012/splash.article][Go at Google: Language Design in the Service of Software Engineering]]”
and my GopherCon 2015 talk “[[https://blog.golang.org/open-source][Go, Open Source, Community]].”)

* Constraints

The goals for Go have not changed since the beginning, but the
constraints on Go certainly have. The most important constraint is
existing Go usage. We estimate that there are at least
[[https://research.swtch.com/gophercount][half a million Go developers worldwide]],
which means there are millions of Go source files and at
least a billion of lines of Go code. Those programmers and that source
code represent Go's success, but they are also the main constraint on
Go 2.

Go 2 must bring along all those developers. We must ask them to
unlearn old habits and learn new ones only when the reward is great.
For example, before Go 1, the method implemented by error types was
named `String`. In Go 1, we renamed it `Error`, to distinguish error types
from other types that can format themselves. The other day I was
implementing an error type, and without thinking I named its method
`String` instead of `Error`, which of course did not compile. After five
years I still have not completely unlearned the old way. That kind of
clarifying renaming was an important change to make in Go 1 but would
be too disruptive for Go 2 without a very good reason.

Go 2 must also bring along all the existing Go 1 source code. We must
not split the Go ecosystem. Mixed programs, in which packages written
in Go 2 import packages written in Go 1 and vice versa, must work
effortlessly during a transition period of multiple years. We'll have
to figure out exactly how to do that; automated tooling like go fix
will certainly play a part.

To minimize disruption, each change will require careful thought,
planning, and tooling, which in turn limits the number of changes we
can make. Maybe we can do two or three, certainly not more than five.

I'm not counting minor housekeeping changes like maybe allowing identifiers
in more spoken languages or adding binary integer literals. Minor
changes like these are also important, but they are easier to get
right. I'm focusing today on possible major changes, such as
additional support for error handling, or introducing immutable or
read-only values, or adding some form of generics, or other important
topics not yet suggested. We can do only a few of those major changes.
We will have to choose carefully.

* Process

That raises an important question. What is the process for developing
Go?

In the early days of Go, when there were just five of us, we worked in
a pair of adjacent shared offices separated by a glass wall. It was
easy to pull everyone into one office to discuss some problem and then
go back to our desks to implement a solution. When some wrinkle arose
during the implementation, it was easy to gather everyone again. Rob
and Robert's office had a small couch and a whiteboard, so typically
one of us went in and started writing an example on the board. Usually
by the time the example was up, everyone else had reached a good
stopping point in their own work and was ready to sit down and discuss
it. That informality obviously doesn't scale to the global Go
community of today.

Part of the work since the open-source release of Go has been porting
our informal process into the more formal world of mailing lists and
issue trackers and half a million users, but I don't think we've ever
explicitly described our overall process. It's possible we never
consciously thought about it. Looking back, though, I think this is
the basic outline of our work on Go, the process we've been following
since the first prototype was running.

.html toward-go2/div-indent.html
.image toward-go2/process.png _ 410
.html toward-go2/div-end.html

Step 1 is to use Go, to accumulate experience with it.

Step 2 is to identify a problem with Go that might need solving and to
articulate it, to explain it to others, to write it down.

Step 3 is to propose a solution to that problem, discuss it with
others, and revise the solution based on that discussion.

Step 4 is to implement the solution, evaluate it, and refine it based
on that evaluation.

Finally, step 5 is to ship the solution, adding it to the language, or
the library, or the set of tools that people use from day to day.

The same person does not have to do all these steps for a particular
change. In fact, usually many people collaborate on any given step,
and many solutions may be proposed for a single problem. Also, at any
point we may realize we don’t want to go further with a particular
idea and circle back to an earlier step.

Although I don't believe we've ever talked about this process as a
whole, we have explained parts of it. In 2012, when we released Go 1
and said that it was time now to use Go and stop changing it, we were
explaining step 1. In 2015, when we introduced the Go change proposal
process, we were explaining steps 3, 4, and 5. But we've never
explained step 2 in detail, so I'd like to do that now.

(For more about the development of Go 1 and the shift away from
language changes, see Rob Pike and Andrew Gerrand's
OSCON 2012 talk “[[https://blog.golang.org/the-path-to-go-1][The Path to Go 1]].”
For more about the proposal process, see
Andrew Gerrand's GopherCon 2015 talk “[[https://www.youtube.com/watch?v=0ht89TxZZnk][How Go was Made]]” and the
[[https://golang.org/s/proposal][proposal process documentation]].)

* Explaining Problems

.html toward-go2/div-indent.html
.image toward-go2/process2.png _ 410
.html toward-go2/div-end.html

There are two parts to explaining a problem. The first part—the easier
part—is stating exactly what the problem is. We developers are
decently good at this. After all, every test we write is a statement
of a problem to be solved, in language so precise that even a computer
can understand it. The second part—the harder part—is describing the
significance of the problem well enough that everyone can understand
why we should spend time solving it and maintaining a solution. In
contrast to stating a problem precisely, we don't need to describe a
problem's significance very often, and we're not nearly as good at it.
Computers never ask us “why is this test case important? Are you sure
this is the problem you need to solve? Is solving this problem the
most important thing you can be doing?” Maybe they will someday, but
not today.

Let's look at an old example from 2011. Here is what I wrote about
renaming os.Error to error.Value while we were planning Go 1.

.html toward-go2/div-indent.html
.image toward-go2/error.png _ 495
.html toward-go2/div-end.html

It begins with a precise, one-line statement of the problem: in very
low-level libraries everything imports "os" for os.Error. Then there
are five lines, which I've underlined here, devoted to describing the
significance of the problem: the packages that "os" uses cannot
themselves present errors in their APIs, and other packages depend on
"os" for reasons having nothing to do with operating system services.

Do these five lines convince _you_ that this problem is significant?
It depends on how well you can fill in the context I've left out:
being understood requires anticipating what others need to know. For
my audience at the time—the ten other people on the Go team at Google
who were reading that document—those fifty words were enough. To
present the same problem to the audience at GothamGo last fall—an
audience with much more varied backgrounds and areas of expertise—I
needed to provide more context, and I used about two hundred words,
along with real code examples and a diagram. It is a fact of today's
worldwide Go community that describing the significance of any problem
requires adding context, especially illustrated by concrete examples,
that you would leave out when talking to coworkers.

Convincing others that a problem is significant is an essential step.
When a problem appears insignificant, almost every solution will seem
too expensive. But for a significant problem, there are usually many
solutions of reasonable cost. When we disagree about whether to adopt
a particular solution, we're often actually disagreeing about the
significance of the problem being solved. This is so important that I
want to look at two recent examples that show this clearly, at least
in hindsight.

** Example: Leap seconds

My first example is about time.

Suppose you want to time how long an event takes. You write down the
start time, run the event, write down the end time, and then subtract
the start time from the end time. If the event took ten milliseconds,
the subtraction gives a result of ten milliseconds, perhaps plus or
minus a small measurement error.

	start := time.Now()       // 3:04:05.000
	event()
	end := time.Now()         // 3:04:05.010
	
	elapsed := end.Sub(start) // 10 ms

This obvious procedure can fail during a [[https://en.wikipedia.org/wiki/Leap_second][leap second]]. When our clocks
are not quite in sync with the daily rotation of the Earth, a leap
second—officially 11:59pm and 60 seconds—is inserted just before
midnight. Unlike leap years, leap seconds follow no predictable
pattern, which makes them hard to fit into programs and APIs. Instead
of trying to represent the occasional 61-second minute, operating
systems typically implement a leap second by turning the clock back
one second just before what would have been midnight, so that 11:59pm
and 59 seconds happens twice. This clock reset makes time appear to
move backward, so that our ten-millisecond event might be timed as
taking negative 990 milliseconds.

	start := time.Now()       // 11:59:59.995
	event()
	end := time.Now()         // 11:59:59.005 (really 11:59:60.005)
	
	elapsed := end.Sub(start) // –990 ms

Because the time-of-day clock is inaccurate for timing events across
clock resets like this, operating systems now provide a second clock,
the monotonic clock, which has no absolute meaning but counts seconds
and is never reset.

Except during the odd clock reset, the monotonic clock is no better
than the time-of-day clock, and the time-of-day clock has the added
benefit of being useful for telling time, so for simplicity Go 1’s
time APIs expose only the time-of-day clock.

In October 2015, a [[https://golang.org/issue/12914][bug report]] noted that Go programs could not time
events correctly across clock resets, especially a typical leap second.
The suggested fix was also the original issue title: “add a new API to access a
monotonic clock source.” I argued that this problem was not
significant enough to justify new API. A few months earlier, for the
mid-2015 leap second, Akamai, Amazon, and Google had slowed their
clocks a tiny amount for the entire day, absorbing the extra second
without turning their clocks backward. It seemed like eventual
widespread adoption of this “[[https://developers.google.com/time/smear][leap smear]]” approach would eliminate
leap-second clock resets as a problem on production systems. In
contrast, adding new API to Go would add new problems: we would have
to explain the two kinds of clocks, educate users about when to use
each, and convert many lines of existing code, all for an issue that
rarely occurred and might plausibly go away on its own.

We did what we always do when there's a problem without a clear
solution: we waited. Waiting gives us more time to add experience and
understanding of the problem and also more time to find a good
solution. In this case, waiting added to our understanding of the
significance of the problem, in the form of a thankfully
[[https://www.theregister.co.uk/2017/01/04/cloudflare_trips_over_leap_second/][minor outage at Cloudflare]].
Their Go code timed DNS requests during the end-of-2016
leap second as taking around negative 990 milliseconds, which caused
simultaneous panics across their servers, breaking 0.2% of DNS queries
at peak.

Cloudflare is exactly the kind of cloud system Go was intended for,
and they had a production outage based on Go not being able to time
events correctly. Then, and this is the key point, Cloudflare reported
their experience in a blog post by John Graham-Cumming titled
“[[https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/][How and why the leap second affected Cloudflare DNS]].” By sharing concrete
details of their experience with Go in production, John and Cloudflare helped us
understand that the problem of accurate timing across leap second
clock resets was too significant to leave unfixed. Two months after
that article was published, we had designed and implemented a solution
that will [[https://beta.golang.org/doc/go1.9#monotonic-time][ship in Go 1.9]]
(and in fact we did it with [[https://golang.org/design/12914-monotonic][no new API]]).

** Example: Alias declarations

My second example is support for alias declarations in Go.

Over the past few years, Google has established a team focused on
large-scale code changes, meaning API migration and bug fixes applied
across our
[[http://cacm.acm.org/magazines/2016/7/204032-why-google-stores-billions-of-lines-of-code-in-a-single-repository/pdf][codebase of millions of source files and billions of lines of code]]
written in C++, Go, Java, Python, and other languages. One
thing I've learned from that team's work is the importance, when
changing an API from using one name to another, of being able to
update client code in multiple steps, not all at once. To do this, it
must be possible to write a declaration forwarding uses of the old
name to the new name. C++ has #define, typedef, and using declarations
to enable this forwarding, but Go has nothing. Of course, one of Go's
goals is to scale well to large codebases, and as the amount of Go
code at Google grew, it became clear both that we needed some kind of
forwarding mechanism and also that other projects and companies would
run into this problem as their Go codebases grew.

In March 2016, I started talking with Robert Griesemer and Rob Pike
about how Go might handle gradual codebase updates, and we arrived at
alias declarations, which are exactly the needed forwarding mechanism.
At this point, I felt very good about the way Go was evolving. We'd
talked about aliases since the early days of Go—in fact, the first
spec draft has [[https://go.googlesource.com/go/+/18c5b488a3b2e218c0e0cf2a7d4820d9da93a554/doc/go_spec#1182][an example using alias declarations]]—but each time we'd
discussed aliases, and later type aliases, we had no clear use case
for them, so we left them out. Now we were proposing to add aliases
not because they were an elegant concept but because they solved a
significant practical problem with Go meeting its goal of scalable
software development. I hoped this would serve as a model for future
changes to Go.

Later in the spring, Robert and Rob wrote [[https://golang.org/design/16339-alias-decls][a proposal]],
and Robert presented it in a [[https://www.youtube.com/watch?v=t-w6MyI2qlU][Gophercon 2016 lightning talk]]. The next few months
did not go smoothly, and they were definitely not a model for future
changes to Go. One of the many lessons we learned was the importance
of describing the significance of a problem.

A minute ago, I explained the problem to you, giving some background
about how it can arise and why, but with no concrete examples that
might help you evaluate whether the problem might affect you at some
point. Last summer’s proposal and the lightning talk gave an abstract
example, involving packages C, L, L1, and C1 through Cn, but no
concrete examples that developers could relate to. As a result, most
of the feedback from the community was based on the idea that aliases
only solved a problem for Google, not for everyone else.

Just as we at Google did not at first understand the significance of
handling leap second time resets correctly, we did not effectively
convey to the broader Go community the significance of handling
gradual code migration and repair during large-scale changes.

In the fall we started over. I gave a [[https://www.youtube.com/watch?v=h6Cw9iCDVcU][talk]] and wrote 
[[https://talks.golang.org/2016/refactor.article][an article presenting the problem]]
using multiple concrete examples drawn from
open source codebases, showing how this problem arises everywhere, not
just inside Google. Now that more people understood the problem and
could see its significance, we had a [[https://golang.org/issue/18130][productive discussion]] about what
kind of solution would be best. The outcome is that [[https://golang.org/design/18130-type-alias][type aliases]] will
be [[https://beta.golang.org/doc/go1.9#language][included in Go 1.9]] and will help Go scale to ever-larger codebases.

** Experience reports

The lesson here is that it is difficult but essential to describe the
significance of a problem in a way that someone working in a different
environment can understand. To discuss major changes to Go as a
community, we will need to pay particular attention to describing the
significance of any problem we want to solve. The clearest way to do
that is by showing how the problem affects real programs and real
production systems, like in 
[[https://blog.cloudflare.com/how-and-why-the-leap-second-affected-cloudflare-dns/][Cloudflare's blog post]] and in
[[https://talks.golang.org/2016/refactor.article][my refactoring article]].

Experience reports like these turn an abstract problem into a concrete
one and help us understand its significance. They also serve as test
cases: any proposed solution can be evaluated by examining its effect
on the actual, real-world problems the reports describe.

For example, I've been examining generics recently, but I don't have
in my mind a clear picture of the detailed, concrete problems that Go
users need generics to solve. As a result, I can't answer a design
question like whether to support generic methods, which is to say
methods that are parameterized separately from the receiver. If we had
a large set of real-world use cases, we could begin to answer a
question like this by examining the significant ones.

As another example, I’ve seen proposals to extend the error interface
in various ways, but I haven't seen any experience reports showing how
large Go programs attempt to understand and handle errors at all, much
less showing how the current error interface hinders those attempts.
These reports would help us all better understand the details and
significance of the problem, which we must do before solving it.

I could go on. Every major potential change to Go should be motivated
by one or more experience reports documenting how people use Go today
and why that's not working well enough. For the obvious major changes
we might consider for Go, I'm not aware of many such reports,
especially not reports illustrated with real-world examples.

These reports are the raw material for the Go 2 proposal process, and
we need all of you to write them, to help us understand your
experiences with Go. There are half a million of you, working in a
broad range of environments, and not that many of us.
Write a post on your own blog,
or write a [[https://www.medium.com/][Medium]] post,
or write a [[https://gist.github.com/][Github Gist]] (add a `.md` file extension for Markdown),
or write a [[https://docs.google.com/][Google doc]],
or use any other publishing mechanism you like.
After you've posted, please add the post to our new wiki page,
[[https://golang.org/wiki/ExperienceReports][golang.org/wiki/ExperienceReports]].

* Solutions

.html toward-go2/div-indent.html
.image toward-go2/process34.png _ 410
.html toward-go2/div-end.html

Now that we know how we're going to identify and explain problems that
need to be solved, I want to note briefly that not all problems are
best solved by language changes, and that's fine.

One problem we might want to solve is that computers can often compute
additional results during basic arithmetic operations, but Go does not
provide direct access to those results. In 2013, Robert proposed that
we might extend the idea of two-result (“comma-ok”) expressions to
basic arithmetic. For example, if x and y are, say, uint32 values,
`lo,`hi`=`x`*`y`
would return not only the usual low 32 bits but also the high 32 bits
of the product. This problem didn't seem particularly significant, so
we [[https://golang.org/issue/6815][recorded the potential solution]] but didn't implement it. We waited.

More recently, we designed for Go 1.9 a [[https://beta.golang.org/doc/go1.9#math-bits][math/bits package]] that
contains various bit manipulation functions:

	package bits // import "math/bits"
	
	func LeadingZeros32(x uint32) int
	func Len32(x uint32) int
	func OnesCount32(x uint32) int
	func Reverse32(x uint32) uint32
	func ReverseBytes32(x uint32) uint32
	func RotateLeft32(x uint32, k int) uint32
	func TrailingZeros32(x uint32) int
	...

The package has good Go
implementations of each function, but the compilers also substitute
special hardware instructions when available. Based on this experience
with math/bits, both Robert and I now believe that making the
additional arithmetic results available by changing the language is
unwise, and that instead we should define appropriate functions in a
package like math/bits. Here the best solution is a library change,
not a language change.

A different problem we might have wanted to solve, after Go 1.0, was
the fact that goroutines and shared memory make it too easy to
introduce races into Go programs, causing crashes and other
misbehavior in production. The language-based solution would have been
to find some way to disallow data races, to make it impossible to
write or at least to compile a program with a data race. How to fit
that into a language like Go is still an open question in the
programming language world. Instead we added a tool to the main
distribution and made it trivial to use: that tool, the [[https://blog.golang.org/race-detector][race detector]], has become
an indispensible part of the Go experience. Here the best solution was
a runtime and tooling change, not a language change.

There will be language changes as well, of course, but not all
problems are best solved in the language.

* Shipping Go 2

.html toward-go2/div-indent.html
.image toward-go2/process5.png _ 410
.html toward-go2/div-end.html

Finally, how will we ship and deliver Go 2?

I think the best plan would be to ship the [[https://golang.org/doc/go1compat][backwards-compatible parts]]
of Go 2 incrementally, feature by feature, as part of the Go 1 release
sequence. This has a few important properties. First, it keeps the Go
1 releases on the [[https://golang.org/wiki/Go-Release-Cycle][usual schedule]], to continue the timely bug fixes and
improvements that users now depend on. Second, it avoids splitting
development effort between Go 1 and Go 2. Third, it avoids divergence
between Go 1 and Go 2, to ease everyone's eventual migration. Fourth,
it allows us to focus on and deliver one change at a time, which
should help maintain quality. Fifth, it will encourage us to design
features to be backwards-compatible.

We will need time to discuss and plan before any changes start landing in
Go 1 releases, but it seems plausible to me that we might start seeing
minor changes about a year from now, for Go 1.12 or so. That also
gives us time to land package management support first.

Once all the backwards-compatible work is done, say in Go 1.20, then
we can make the backwards-incompatible changes in Go 2.0. If there
turn out to be no backwards-incompatible changes, maybe we just
declare that Go 1.20 _is_ Go 2.0. Either way, at that point we will
transition from working on the Go 1.X release sequence to working on
the Go 2.X sequence, perhaps with an extended support window for the
final Go 1.X release.

This is all a bit speculative, and the specific release numbers
I just mentioned are placeholders for ballpark estimates,
but I want to make clear that we're not
abandoning Go 1, and that in fact we will bring Go 1 along to the
greatest extent possible.

* Help Wanted

*We*need*your*help.*

The conversation for Go 2 starts today, and it's one that will happen
in the open, in public forums like the mailing list and the issue
tracker. Please help us at every step along the way.

Today, what we need most is experience reports. Please tell us how Go
is working for you, and more importantly not working for you. Write a
blog post, include real examples, concrete detail, and real
experience. And link it on our [[https://golang.org/wiki/ExperienceReports][wiki page]].
That's how we'll start talking about what we, the Go community,
might want to change about Go.

Thank you.
