aboutsummaryrefslogtreecommitdiff
path: root/content/open-source.article
diff options
context:
space:
mode:
authorRuss Cox <rsc@golang.org>2015-07-08 16:17:08 -0400
committerRuss Cox <rsc@golang.org>2015-07-08 20:20:10 +0000
commit7b101d6e451f8ff9e184553a13f8be5f64974001 (patch)
tree0e5a9e40d0d0a1f31ba4a1677f9fa1040d1eddf3 /content/open-source.article
parentf0fb9815741d7258b1fb0669109cd2cc6e2926d1 (diff)
content: add gophercon 2015 opening
Change-Id: I1a1026473525ffb68ff0af07576cccd0ccd79ed4 Reviewed-on: https://go-review.googlesource.com/11983 Reviewed-by: Andrew Gerrand <adg@golang.org>
Diffstat (limited to 'content/open-source.article')
-rw-r--r--content/open-source.article1120
1 files changed, 1120 insertions, 0 deletions
diff --git a/content/open-source.article b/content/open-source.article
new file mode 100644
index 0000000..82cd338
--- /dev/null
+++ b/content/open-source.article
@@ -0,0 +1,1120 @@
+Go, Open Source, Community
+08 Jul 2015
+Tags: community
+
+Russ Cox
+
+* Welcome
+
+[This is the text of my opening keynote at Gophercon 2015.
+We will add a link to the video when it is available.]
+
+Thank you all for traveling to Denver to be here,
+and thank you to everyone watching on video.
+If this is your first Gophercon, welcome.
+If you were here last year, welcome back.
+Thank you to the organizers
+for all the work it takes
+to make a conference like this happen.
+I am thrilled to be here and to be able to talk to all of you.
+
+I am the tech lead for the Go project
+and the Go team at Google.
+I share that role with Rob Pike.
+In that role, I spend a lot of time thinking about
+the overall Go open source project,
+in particular the way it runs,
+what it means to be open source,
+and the interaction between
+contributors inside and outside Google.
+Today I want to share with you
+how I see the Go project as a whole
+and then based on that explain
+how I see the Go open source project
+evolving.
+
+* Why Go?
+
+To get started,
+we have to go back to the beginning.
+Why did we start working on Go?
+
+Go is an attempt to make programmers more productive.
+We wanted to improve the software development process
+at Google,
+but the problems Google has
+are not unique to Google.
+
+There were two overarching goals.
+
+The first goal is to make a better language
+to meet the challenges of scalable concurrency.
+By scalable concurrency I mean
+software that deals with many concerns simultaneously,
+such as coordinating a thousand back end servers
+by sending network traffic back and forth.
+
+Today, that kind of software has a shorter name:
+we call it cloud software.
+It's fair to say that Go was designed for the cloud
+before cloud's ran software.
+
+The larger goal is to make a better environment
+to meet the challenges of scalable software development,
+software worked on and used by many people,
+with limited coordination between them,
+and maintained for years.
+At Google we have thousands of engineers
+writing and sharing their code with each other,
+trying to get their work done,
+reusing the work of others as much as possible,
+and working in a code base with a history
+dating back over ten years.
+Engineers often work on or at least look at
+code originally written by someone else,
+or that they wrote years ago,
+which often amounts to the same thing.
+
+That situation inside Google
+has a lot in common with
+large scale, modern open source development
+as practiced on sites like GitHub.
+Because of this,
+Go is a great fit for open source projects,
+helping them accept and manage
+contributions from a large community
+over a long period of time.
+
+I believe much of Go's success is explained by the fact that
+Go is a great fit for cloud software,
+Go is a great fit for open source projects,
+and, serendipitously, both of those are
+growing in popularity and importance
+in the software industry.
+
+Other people have made similar observations.
+Here are two.
+Last year, on RedMonk.com, Donnie Berkholz
+wrote about
+[[Go as the emerging language of cloud infrastructure][http://redmonk.com/dberkholz/2014/03/18/go-the-emerging-language-of-cloud-infrastructure/],
+observing that
+“[Go's] marquee projects ... are cloud-centric or otherwise
+made for dealing with distributed systems
+or transient environments.”
+
+This year, on Texlution.com, the author
+wrote an article titled
+[[Why Golang is doomed to succeed][https://texlution.com/post/why-go-is-doomed-to-succeed/]],
+pointing out that this focus on large-scale development
+was possibly even better suited to open source than
+to Google itself: “This open source fitness is why I think
+you are about to see more and more Go around ...”
+
+* The Go Balance
+
+How does Go accomplish those things?
+
+How does it make scalable concurrency
+and scalable software development easier?
+
+Most people answer this question by talking about
+channels and goroutines, and interfaces, and fast builds,
+and the go command, and good tool support.
+Those are all important parts of the answer,
+but I think there is a broader idea behind them.
+
+I think of that idea as Go's balance.
+There are competing concerns in any software design,
+and there is a very natural tendency to try to solve
+all the problems you foresee.
+In Go, we have explicitly tried not to solve everything.
+Instead, we've tried to do just enough that you can build
+your own custom solutions easily.
+
+The way I would summarize Go's chosen balance is this: *Do*Less.*Enable*More.*
+
+Do less, but enable more.
+
+Go can't do everything.
+We shouldn't try.
+But if we work at it,
+Go can probably do
+a few things well.
+If we select those things carefully,
+we can lay a foundation
+on which developers can _easily_ build
+the solutions and tools they need,
+and ideally can interoperate with
+the solutions and tools built by others.
+
+** Examples
+
+Let me illustrate this with some examples.
+
+First, the size of the Go language itself.
+We worked hard to put in as few concepts as possible,
+to avoid the problem of mutually incomprehensible dialects
+forming in different parts of a large developer community.
+No idea went into Go until
+it had been simplified to its essence
+and then had clear benefits
+that justified the complexity being added.
+
+In general, if we have 100 things
+we want Go to do well,
+we can't make 100 separate changes.
+Instead, we try to research and understand
+the design space
+and then identify a few changes
+that work well together
+and that enable maybe 90 of those things.
+We're willing to sacrifice the remaining 10
+to avoid bloating the language,
+to avoid adding complexity
+only to address specific use cases
+that seem important today
+but might be gone tomorrow.
+
+Keeping the language small
+enables more important goals.
+Being small makes Go
+easier to learn,
+easier to understand,
+easier to implement,
+easier to reimplement,
+easier to debug,
+easier to adjust,
+and easier to evolve.
+Doing less enables more.
+
+I should point out that
+this means we say no
+to a lot of other people's ideas,
+but I assure you
+we've said no
+to even more of our own ideas.
+
+Next, channels and goroutines.
+How should we structure and coordinate
+concurrent and parallel computations?
+Mutexes and condition variables are very general
+but so low-level that they're difficult to use correctly.
+Parallel execution frameworks like OpenMP are so high-level
+that they can only be used to solve a narrow range of problems.
+Channels and goroutines sit between these two extremes.
+By themselves, they aren't a solution to much.
+But they are powerful enough to be easily arranged
+to enable solutions to many common problems
+in concurrent software.
+Doing less—really doing just enough—enables more.
+
+Next, types and interfaces.
+Having static types enables useful compile-time checking,
+something lacking in dynamically-typed languages
+like Python or Ruby.
+At the same time,
+Go's static typing avoids
+much of the repetition
+of traditional statically typed languages,
+making it feel more lightweight,
+more like the dynamically-typed languages.
+This was one of the first things people noticed,
+and many of Go's early adopters came from
+dynamically-typed languages.
+
+Go's interfaces are a key part of that.
+In particular,
+omitting the ``implements'' declarations
+of Java or other languages with static hierarchy
+makes interfaces lighter weight and more flexible.
+Not having that rigid hierarchy
+enables idioms such as test interfaces that describe
+existing, unrelated production implementations.
+Doing less enables more.
+
+Next, testing and benchmarking.
+Is there any shortage of testing
+and benchmarking frameworks in most languages?
+Is there any agreement between them?
+
+Go's testing package is not meant
+to address every possible facet of these topics.
+Instead, it is meant to provide
+the basic concepts necessary
+for most higher-level tooling.
+Packages have test cases that pass, fail, or are skipped.
+Packages have benchmarks that run and can be measured
+by various metrics.
+
+Doing less here is an attempt
+to reduce these concepts to their essence,
+to create a shared vocabulary
+so that richer tools can interoperate.
+That agreement enables higher-level testing software
+like Miki Tebeka's go2xunit converter,
+or the benchcmp and benchstat
+benchmark analysis tools.
+
+Because there _is_ agreement
+about the representation of the basic concepts,
+these higher-level tools work for all Go packages,
+not just ones that make the effort to opt in,
+and they interoperate with each other,
+in that using, say, go2xunit
+does not preclude also using benchstat,
+the way it would if these tools were, say,
+plugins for competing testing frameworks.
+Doing less enables more.
+
+Next, refactoring and program analysis.
+Because Go is for large code bases,
+we knew it would need to support automatic
+maintenance and updating of source code.
+We also knew that this topic was too large
+to build in directly.
+But we knew one thing that we had to do.
+In our experience attempting
+automated program changes in other settings,
+the most significant barrier we hit
+was actually writing the modified program out
+in a format that developers can accept.
+
+In other languages,
+it's common for different teams to use
+different formatting conventions.
+If an edit by a program uses the wrong convention,
+it either writes a section of the source file that looks nothing
+like the rest of the file, or it reformats the entire file,
+causing unnecessary and unwanted diffs.
+
+Go does not have this problem.
+We designed the language to make gofmt possible,
+we worked hard
+to make gofmt's formatting acceptable
+for all Go programs,
+and we made sure gofmt was there
+from day one of the original public release.
+Gofmt imposes such uniformity that
+automated changes blend into the rest of the file.
+You can't tell whether a particular change
+was made by a person or a computer.
+We didn't build explicit refactoring support.
+Establishing an agreed-upon formatting algorithm
+was enough of a shared base
+for independent tools to develop and to interoperate.
+Gofmt enabled gofix, goimports, eg, and other tools.
+I believe the work here is only just getting started.
+Even more can be done.
+
+Last, building and sharing software.
+In the run up to Go 1, we built goinstall,
+which became what we all know as "go get".
+That tool defined a standard zero-configuration way
+to resolve import paths on sites like github.com,
+and later a way to resolve paths on other sites
+by making HTTP requests.
+This agreed-upon resolution algorithm
+enabled other tools that work in terms of those paths,
+most notably Gary Burd's creation of godoc.org.
+In case you haven't used it,
+you go to godoc.org/the-import-path
+for any valid "go get" import path,
+and the web site will fetch the code
+and show you the documentation for it.
+A nice side effect of this has been that
+godoc.org serves as a rough master list
+of the Go packages publicly available.
+All we did was give import paths a clear meaning.
+Do less, enable more.
+
+You'll notice that many of these tooling examples
+are about establishing a shared convention.
+Sometimes people refer to this as Go being “opinionated,”
+but there's something deeper going on.
+Agreeing to the limitations
+of a shared convention
+is a way to enable
+a broad class of tools that interoperate,
+because they all speak the same base language.
+This is a very effective way
+to do less but enable more.
+Specifically, in many cases
+we can do the minimum required
+to establish a shared understanding
+of a particular concept, like remote imports,
+or the proper formatting of a source file,
+and thereby enable
+the creation of packages and tools
+that work together
+because they all agree
+about those core details.
+
+I'm going to return to that idea later.
+
+* Why is Go open source?
+
+But first, as I said earlier,
+I want to explain how I see
+the balance of Do Less and Enable More
+guiding our work
+on the broader
+Go open source project.
+To do that, I need to start with
+why Go is open source at all.
+
+Google pays me and others to work on Go, because,
+if Google's programmers are more productive,
+Google can build products faster,
+maintain them more easily,
+and so on.
+But why open source Go?
+Why should Google share this benefit with the world?
+
+Of course, many of us
+worked on open source projects before Go,
+and we naturally wanted Go
+to be part of that open source world.
+But our preferences are not a business justification.
+The business justification is that
+Go is open source
+because that's the only way
+that Go can succeed.
+We, the team that built Go within Google,
+knew this from day one.
+We knew that Go had to be made available
+to as many people as possible
+for it to succeed.
+
+Closed languages die.
+
+A language needs large, broad communities.
+
+A language needs lots of people writing lots of software,
+so that when you need a particular tool or library,
+there's a good chance it has already been written,
+by someone who knows the topic better than you,
+and who spent more time than you have to make it great.
+
+A language needs lots of people reporting bugs,
+so that problems are identified and fixed quickly.
+Because of the much larger user base,
+the Go compilers are much more robust and spec-compliant
+than the Plan 9 C compilers they're loosely based on ever were.
+
+A language needs lots of people using it
+for lots of different purposes,
+so that the language doesn't overfit to one use case
+and end up useless when the technology landscape changes.
+
+A language needs lots of people who want to learn it,
+so that there is a market for people to write books
+or teach courses,
+or run conferences like this one.
+
+None of this could have happened
+if Go had stayed within Google.
+Go would have suffocated inside Google,
+or inside any single company
+or closed environment.
+
+Fundamentally,
+Go must be open,
+and Go needs you.
+Go can't succeed without all of you,
+without all the people using Go
+for all different kinds of projects
+all over the world.
+
+In turn, the Go team at Google
+could never be large enough
+to support the entire Go community.
+To keep scaling,
+we
+need to enable all this ``more''
+while doing less.
+Open source is a huge part of that.
+
+* Go's open source
+
+What does open source mean?
+The minimum requirement is to open the source code,
+making it available under an open source license,
+and we've done that.
+
+But we also opened our development process:
+since announcing Go,
+we've done all our development in public,
+on public mailing lists open to all.
+We accept and review
+source code contributions from anyone.
+The process is the same
+whether you work for Google or not.
+We maintain our bug tracker in public,
+we discuss and develop proposals for changes in public,
+and we work toward releases in public.
+The public source tree is the authoritative copy.
+Changes happen there first.
+They are only brought into
+Google's internal source tree later.
+For Go, being open source means
+that this is a collective effort
+that extends beyond Google, open to all.
+
+Any open source project starts with a few people,
+often just one, but with Go it was three:
+Robert Griesemer, Rob Pike, and Ken Thompson.
+They had a vision of
+what they wanted Go to be,
+what they thought Go could do better
+than existing languages, and
+Robert will talk more about that tomorrow morning.
+I was the next person to join the team,
+and then Ian Taylor,
+and then, one by one,
+we've ended up where we are today,
+with hundreds of contributors.
+
+Thank You
+to the many people who have contributed
+code
+or ideas
+or bug reports
+to the Go project so far.
+We tried to list everyone we could
+in our space in the program today.
+If your name is not there,
+I apologize,
+but thank you.
+
+I believe
+the hundreds of contributors so far
+are working toward a shared vision
+of what Go can be.
+It's hard to put words to these things,
+but I did my best
+to explain one part of the vision
+earlier:
+Do Less, Enable More.
+
+* Google's role
+
+A natural question is:
+What is the role
+of the Go team at Google,
+compared to other contributors?
+I believe that role
+has changed over time,
+and it continues to change.
+The general trend is that
+over time
+the Go team at Google
+should be doing less
+and enabling more.
+
+In the very early days,
+before Go was known to the public,
+the Go team at Google
+was obviously working by itself.
+We wrote the first draft of everything:
+the specification,
+the compiler,
+the runtime,
+the standard library.
+
+Once Go was open sourced, though,
+our role began to change.
+The most important thing
+we needed to do
+was communicate our vision for Go.
+That's difficult,
+and we're still working at it..
+The initial implementation
+was an important way
+to communicate that vision,
+as was the development work we led
+that resulted in Go 1,
+and the various blog posts,
+and articles,
+and talks we've published.
+
+But as Rob said at Gophercon last year,
+"the language is done."
+Now we need to see how it works,
+to see how people use it,
+to see what people build.
+The focus now is on
+expanding the kind of work
+that Go can help with.
+
+Google's primarily role is now
+to enable the community,
+to coordinate,
+to make sure changes work well together,
+and to keep Go true to the original vision.
+
+Google's primary role is:
+Do Less. Enable More.
+
+I mentioned earlier
+that we'd rather have a small number of features
+that enable, say, 90% of the target use cases,
+and avoid the orders of magnitude
+more features necessary
+to reach 99 or 100%.
+We've been successful in applying that strategy
+to the areas of software that we know well.
+But if Go is to become useful in many new domains,
+we need experts in those areas
+to bring their expertise
+to our discussions,
+so that together
+we can design small adjustments
+that enable many new applications for Go.
+
+This shift applies not just to design
+but also to development.
+The role of the Go team at Google
+continues to shift
+more to one of guidance
+and less of pure development.
+I certainly spend much more time
+doing code reviews than writing code,
+more time processing bug reports
+than filing bug reports myself.
+We need to do less and enable more.
+
+As design and development shift
+to the broader Go community,
+one of the most important things
+we
+the original authors of Go
+can offer
+is consistency of vision,
+to help keep Go
+Go.
+The balance that we must strike
+is certainly subjective.
+For example, a mechanism for extensible syntax
+would be a way to
+enable more
+ways to write Go code,
+but that would run counter to our goal
+of having a consistent language
+without different dialects.
+
+We have to say no sometimes,
+perhaps more than in other language communities,
+but when we do,
+we aim to do so
+constructively and respectfully,
+to take that as an opportunity
+to clarify the vision for Go.
+
+Of course, it's not all coordination and vision.
+Google still funds Go development work.
+Rick Hudson is going to talk later today
+about his work on reducing garbage collector latency,
+and Hana Kim is going to talk tomorrow
+about her work on bringing Go to mobile devices.
+But I want to make clear that,
+as much as possible,
+we aim to treat
+development funded by Google
+as equal to
+development funded by other companies
+or contributed by individuals using their spare time.
+We do this because we don't know
+where the next great idea will come from.
+Everyone contributing to Go
+should have the opportunity to be heard.
+
+** Examples
+
+I want to share some evidence for this claim
+that, over time,
+the original Go team at Google
+is focusing more on
+coordination than direct development.
+
+First, the sources of funding
+for Go development are expanding.
+Before the open source release,
+obviously Google paid for all Go development.
+After the open source release,
+many individuals started contributing their time,
+and we've slowly but steadily
+been growing the number of contributors
+supported by other companies
+to work on Go at least part-time,
+especially as it relates to
+making Go more useful for those companies.
+Today, that list includes
+Canonical, Dropbox, Intel, Oracle, and others.
+And of course Gophercon and the other
+regional Go conferences are organized
+entirely by people outside Google,
+and they have many corporate sponsors
+besides Google.
+
+Second, the conceptual depth
+of Go development
+done outside the original team
+is expanding.
+
+Immediately after the open source release,
+one of the first large contributions
+was the port to Microsoft Windows,
+started by Hector Chu
+and completed by Alex Brainman and others.
+More contributors ported Go
+to other operating systems.
+Even more contributors
+rewrote most of our numeric code
+to be faster or more precise or both.
+These were all important contributions,
+and very much appreciated,
+but
+for the most part
+they did not involve new designs.
+
+More recently,
+a group of contributors led by Aram Havarneau
+ported Go to the ARM 64 architecture,
+This was the first architecture port
+by contributors outside Google.
+This is significant, because
+in general
+support for a new architecture
+requires more design work
+than support for a new operating system.
+There is more variation between architectures
+than between operating systems.
+
+Another example is the introduction
+over the past few releases
+of preliminary support
+for building Go programs using shared libraries.
+This feature is important for many Linux distributions
+but not as important for Google,
+because we deploy static binaries.
+We have been helping guide the overall strategy,
+but most of the design
+and nearly all of the implementation
+has been done by contributors outside Google,
+especially Michael Hudson-Doyle.
+
+My last example is the go command's
+approach to vendoring.
+I define vendoring as
+copying source code for external dependencies
+into your tree
+to make sure that they doesn't disappear
+or change underfoot.
+
+Vendoring is not a problem Google suffers,
+at least not the way the rest of the world does.
+We copy open source libraries we want to use
+into our shared source tree,
+record what version we copied,
+and only update the copy
+when there is a need to do so.
+We have a rule
+that there can only be one version
+of a particular library in the source tree,
+and it's the job of whoever wants to upgrade that library
+to make sure it keeps working as expected
+by the Google code that depends on it.
+None of this happens often.
+This is the lazy approach to vendoring.
+
+In contrast, most projects outside Google
+take a more eager approach,
+importing and updating code
+using automated tools
+and making sure that they are
+always using the latest versions.
+
+Because Google has relatively little experience
+with this vendoring problem,
+we left it to users outside Google to develop solutions.
+Over the past five years,
+people have built a series of tools.
+The main ones in use today are
+Keith Rarick's godep,
+Owen Ou's nut,
+and the gb-vendor plugin for Dave Cheney's gb,
+
+There are two problems with the current situation.
+The first is that these tools
+are not compatible
+out of the box
+with the go command's "go get".
+The second is that the tools
+are not even compatible with each other.
+Both of these problems
+fragment the developer community by tool.
+
+Last fall, we started a public design discussion
+to try to build consensus on
+some basics about
+how these tools all operate,
+so that they can work alongside "go get"
+and each other.
+
+Our basic proposal was that all tools agree
+on the approach of rewriting import paths during vendoring,
+to fit with "go get"'s model,
+and also that all tools agree on a file format
+describing the source and version of the copied code,
+so that the different vendoring tools
+can be used together
+even by a single project.
+If you use one today,
+you should still be able to use another tomorrow.
+
+Finding common ground in this way
+was very much in the spirit of Do Less, Enable More.
+If we could build consensus
+about these basic semantic aspects,
+that would enable "go get" and all these tools to interoperate,
+and it would enable switching between tools,
+the same way that
+agreement about how Go programs
+are stored in text files
+enables the Go compiler and all text editors to interoperate.
+So we sent out our proposal for common ground.
+
+Two things happened.
+
+First, Daniel Theophanes
+started a vendor-spec project on GitHub
+with a new proposal
+and took over coordination and design
+of the spec for vendoring metadata.
+
+Second, the community spoke
+with essentially one voice
+to say that
+rewriting import paths during vendoring
+was not tenable.
+Vendoring works much more smoothly
+if code can be copied without changes.
+
+Keith Rarick posted an alternate proposal
+for a minimal change to the go command
+to support vendoring without rewriting import paths.
+Keith's proposal was configuration-free
+and fit in well with the rest of the go command's approach.
+That proposal will ship
+as an experimental feature in Go 1.5
+and likely enabled by default in Go 1.6.
+And I believe that the various vendoring tool authors
+have agreed to adopt Daniel's spec once it is finalized.
+
+The result
+is that at the next Gophercon
+we should have broad interoperability
+between vendoring tools and the go command,
+and the design to make that happen
+was done entirely by contributors
+outside the original Go team.
+
+Not only that,
+the Go team's proposal for how to do this
+was essentially completely wrong.
+The Go community told us that
+very clearly.
+We took that advice,
+and now there's a plan for vendoring support
+that I believe
+everyone involved is happy with.
+
+This is also a good example
+of our general approach to design.
+We try not to make any changes to Go
+until we feel there is broad consensus
+on a well-understood solution.
+For vendoring,
+feedback and design
+from the Go community
+was critical to reaching that point.
+
+This general trend
+toward both code and design
+coming from the broader Go community
+is important for Go.
+You, the broader Go community,
+know what is working
+and what is not
+in the environments where you use Go.
+We at Google don't.
+More and more,
+we will rely on your expertise,
+and we will try to help you develop
+designs and code
+that extend Go to be useful in more settings
+and fit well with Go's original vision.
+At the same time,
+we will continue to wait
+for broad consensus
+on well-understood solutions.
+
+This brings me to my last point.
+
+* Code of Conduct
+
+I've argued that Go must be open,
+and that Go needs your help.
+
+But in fact Go needs everyone's help.
+And everyone isn't here.
+
+Go needs ideas from as many people as possible.
+
+To make that a reality,
+the Go community needs to be
+as inclusive,
+welcoming,
+helpful,
+and respectful as possible.
+
+The Go community is large enough now that,
+instead of assuming that everyone involved
+knows what is expected,
+I and others believe that it makes sense
+to write down those expectations explicitly.
+Much like the Go spec
+sets expectations for all Go compilers,
+we can write a spec
+setting expectations for our behavior
+in online discussions
+and in offline meetings like this one.
+
+Like any good spec,
+it must be general enough
+to allow many implementations
+but specific enough
+that it can identify important problems.
+When our behavior doesn't meet the spec,
+people can point that out to us,
+and we can fix the problem.
+At the same time,
+it's important to understand that
+this kind of spec
+cannot be as precise as a language spec.
+We must start with the assumption
+that we will all be reasonable in applying it.
+
+This kind of spec
+is often referred to as
+a Code of Conduct.
+Gophercon has one,
+which we've all agreed to follow
+by being here,
+but the Go community does not.
+I and others
+believe the Go community
+needs a Code of Conduct.
+
+But what should it say?
+
+I believe
+the most important
+overall statement we can make
+is that
+if you want to use or discuss Go,
+then you are welcome here,
+in our community.
+That is the standard
+I believe we aspire to.
+
+If for no other reason
+(and, to be clear, there are excellent other reasons),
+Go needs as large a community as possible.
+To the extent that behavior
+limits the size of the community,
+it holds Go back.
+And behavior can easily
+limit the size of the community.
+
+The tech community in general
+and the Go community in particular
+is skewed toward people who communicate bluntly.
+I don't believe this is fundamental.
+I don't believe this is necessary.
+But it's especially easy to do
+in online discussions like email and IRC,
+where plain text is not supplemented
+by the other cues and signals we have
+in face-to-face interactions.
+
+For example, I have learned
+that when I am pressed for time
+I tend to write fewer words,
+with the end result that
+my emails seem not just hurried
+but blunt, impatient, even dismissive.
+That's not how I feel,
+but it's how I can come across,
+and that impression can be enough
+to make people think twice
+about using or contributing
+to Go.
+I realized I was doing this
+when some Go contributors
+sent me private email to let me know.
+Now, when I am pressed for time,
+I pay extra attention to what I'm writing,
+and I often write more than I naturally would,
+to make sure
+I'm sending the message I intend.
+
+I believe
+that correcting the parts
+of our everyday interactions,
+intended or not,
+that drive away potential users and contributors
+is one of the most important things
+we can all do
+to make sure the Go community
+continues to grow.
+A good Code of Conduct can help us do that.
+
+We have no experience writing a Code of Conduct,
+so we have been reading existing ones,
+and we will probably adopt an existing one,
+perhaps with minor adjustments.
+The one I like the most is the Django Code of Conduct,
+which originated with another project called SpeakUp!
+It is structured as an elaboration of a list of
+reminders for everyday interaction.
+
+"Be friendly and patient.
+Be welcoming.
+Be considerate.
+Be respectful.
+Be careful in the words that you choose.
+When we disagree, try to understand why."
+
+I believe this captures the tone we want to set,
+the message we want to send,
+the environment we want to create
+for new contributors.
+I certainly want to be
+friendly,
+patient,
+welcoming,
+considerate,
+and respectful.
+I won't get it exactly right all the time,
+and I would welcome a helpful note
+if I'm not living up to that.
+I believe most of us
+feel the same way.
+
+I haven't mentioned
+active exclusion based on
+or disproportionately affecting
+race, gender, disability,
+or other personal characteristics,
+and I haven't mentioned harassment.
+For me,
+it follows from what I just said
+that exclusionary behavior
+or explicit harassment
+is absolutely unacceptable,
+online and offline.
+Every Code of Conduct says this explicitly,
+and I expect that ours will too.
+But I believe the SpeakUp! reminders
+about everyday interactions
+are an equally important statement.
+I believe that
+setting a high standard
+for those everyday interactions
+makes extreme behavior
+that much clearer
+and easier to deal with.
+
+I have no doubts that
+the Go community can be
+one of the most
+friendly,
+welcoming,
+considerate,
+and
+respectful communities
+in the tech industry.
+We can make that happen,
+and it will be
+a benefit and credit to us all.
+
+Andrew Gerrand
+has been leading the effort
+to adopt an appropriate Code of Conduct
+for the Go community.
+If you have suggestions,
+or concerns,
+or experience with Codes of Conduct,
+or want to be involved,
+please find Andrew or me
+during the conference.
+If you'll still be here on Friday,
+Andrew and I are going to block off
+some time for Code of Conduct discussions
+during Hack Day.
+
+Again, we don't know
+where the next great idea will come from.
+We need all the help we can get.
+We need a large, diverse Go community.
+
+* Thank You
+
+I consider the many people
+releasing software for download using “go get,”
+sharing their insights via blog posts,
+or helping others on the mailing lists or IRC
+to be part of this broad open source effort,
+part of the Go community.
+Everyone here today is also part of that community.
+
+Thank you in advance
+to the presenters
+who over the next few days
+will take time to share their experiences
+using and extending Go.
+
+Thank you in advance
+to all of you in the audience
+for taking the time to be here,
+to ask questions,
+and to let us know
+how Go is working for you.
+When you go back home,
+please continue to share what you've learned.
+Even if you don't use Go
+for daily work,
+we'd love to see what's working for Go
+adopted in other contexts,
+just as we're always looking for good ideas
+to bring back into Go.
+
+Thank you all again
+for making the effort to be here
+and for being part of the Go community.
+
+For the next few days, please:
+tell us what we're doing right,
+tell us what we're doing wrong,
+and help us all work together
+to make Go even better.
+
+Remember to
+be friendly,
+patient,
+welcoming,
+considerate,
+and respectful.
+
+Above all, enjoy the conference.