Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 1 | # Contributors Summit |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 2 | 3 Aug 2017 |
| 3 | Tags: community |
Russ Cox | faf1e2d | 2020-03-14 09:44:01 -0400 | [diff] [blame] | 4 | Summary: Reporting from the Go Contributor Summit at GopherCon 2017. |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 5 | |
| 6 | Sam Whited |
| 7 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 8 | ## Introduction |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 9 | |
| 10 | The day before GopherCon, a group of Go team members and contributors gathered |
| 11 | in Denver to discuss and plan for the future of the Go project. |
| 12 | This was the first ever event of its kind, a major milestone for the Go project. |
| 13 | The event comprised a morning session revolving around focused discussions on a |
| 14 | theme, and an afternoon session made up of round table discussions in small |
| 15 | break-out groups. |
| 16 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 17 | ### Compiler and runtime |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 18 | |
| 19 | The compiler and runtime session started out with a discussion about refactoring |
| 20 | `gc` and related tools into importable packages. |
| 21 | This would reduce overhead in the core tools and in IDEs which could embed the |
| 22 | compiler themselves to do quick syntax checking. |
| 23 | Code could also be compiled entirely in memory, which is useful in environments |
| 24 | that don't provide a filesystem, or to run tests continually while you develop |
| 25 | to get a live report of breakages. |
| 26 | More discussion about whether or not to pursue this line of work will most |
| 27 | likely be brought up on the mailing lists in the future. |
| 28 | |
| 29 | There was also a great deal of discussion around bridging the gap between |
| 30 | optimized assembly code and Go. |
| 31 | Most crypto code in Go is written in assembly for performance reasons; this |
| 32 | makes it hard to debug, maintain, and read. |
| 33 | Furthermore, once you've ventured into writing assembly, you often can't call |
| 34 | back into Go, limiting code reuse. |
| 35 | A rewrite in Go would make maintenance easier. |
| 36 | Adding processor intrinsics and better support for 128-bit math would improve |
| 37 | Go's crypto performance. |
| 38 | It was proposed that the new `math/bits` package coming in 1.9 could be expanded |
| 39 | for this purpose. |
| 40 | |
| 41 | Not being all that familiar with the development of the compiler and runtime, |
| 42 | this for me was one of the more interesting sessions of the day. |
| 43 | I learned a lot about the current state of the world, the problems, and where |
| 44 | people want to go from here. |
| 45 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 46 | ### Dependency management |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 47 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 48 | After a quick update from the [dep](https://github.com/golang/dep) team on the |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 49 | status of the project, the dependency management session gravitated towards how |
| 50 | the Go world will work once dep (or something dep-like) becomes the primary |
| 51 | means of package management. |
| 52 | Work to make Go easier to get started with and make dep easier to use has |
| 53 | already started. |
| 54 | In Go 1.8, a default value for `GOPATH` was introduced, meaning users will only |
| 55 | have to add Go's bin directory to their `$PATH` before they can get started |
| 56 | with dep. |
| 57 | |
| 58 | Another future usability improvement that dep might enable, is allowing Go to |
| 59 | work from any directory (not just a workspace in the GOPATH), so that people can |
| 60 | use the directory structures and workflows they're used to using with other |
| 61 | languages. |
| 62 | It may also be possible to make `go install` easier in the future by guiding |
| 63 | users through the process of adding the bin directory to their path, or even |
| 64 | automating the process. |
| 65 | There are many good options for making the Go tooling easier to use, and |
| 66 | discussion will likely continue on the mailing lists. |
| 67 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 68 | ### The standard library |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 69 | |
| 70 | The discussions we had around the future of the Go language are mostly covered |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 71 | in Russ Cox's blog post: [Toward Go 2](https://blog.golang.org//toward-go2), so |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 72 | let's move on to the standard library session. |
| 73 | |
| 74 | As a contributor to the standard library and subrepos, this session was |
| 75 | particularly interesting to me. |
| 76 | What goes in the standard library and subrepos, and how much it can change, is a |
| 77 | topic that isn't well defined. |
| 78 | It can be hard on the Go team to maintain a huge number of packages when they |
| 79 | may or may not have anyone with specific expertise in the subject matter. |
| 80 | To make critical fixes to packages in the standard library, one must wait 6 |
| 81 | months for a new version of Go to ship (or a point release has to be shipped in |
| 82 | the case of security issues, which drains team resources). |
| 83 | Better dependency management may facilitate the migration of some packages out |
| 84 | of the standard library and into their own projects with their own release |
| 85 | schedules. |
| 86 | |
| 87 | There was also some discussion about things that are difficult to achieve with |
| 88 | the interfaces in the standard library. |
| 89 | For instance, it would be nice if `io.Reader` accepted a context so that |
| 90 | blocking read operations could be canceled. |
| 91 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 92 | More [experience reports](https://golang.org/wiki/experiencereports) are |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 93 | necessary before we can determine what will change in the standard library. |
| 94 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 95 | ### Tooling and editors |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 96 | |
| 97 | A language server for editors to use was a hot topic in the tooling session, |
| 98 | with a number of people advocating for IDE and tool developers to adopt a common |
| 99 | "Go Language Server" to index and display information about code and packages. |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 100 | Microsoft's [Language Server Protocol](https://www.github.com/Microsoft/language-server-protocol) |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 101 | was suggested as a good starting point because of its wide support in editors |
| 102 | and IDEs. |
| 103 | |
| 104 | Jaana Burcu Dogan also discussed her work on distributed tracing and how |
| 105 | information about runtime events could be made easier to acquire and attached to |
| 106 | traces. |
| 107 | Having a standard "counter" API to report statistics was proposed, but specific |
| 108 | experience reports from the community will be required before such an API can be |
| 109 | designed. |
| 110 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 111 | ### The contributor experience |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 112 | |
| 113 | The final session of the day was on the contributor experience. |
| 114 | The first discussion was all about how the current Gerrit workflow could be made |
| 115 | easier for new contributors which has already resulted in improvements to the |
| 116 | documentation for several repos, and influenced the new contributors workshop a |
| 117 | few days later! |
| 118 | |
| 119 | Making it easier to find tasks to work on, empowering users to perform gardening |
| 120 | tasks on the issue tracker, and making it easier to find reviewers were also |
| 121 | considered. |
| 122 | Hopefully we'll see improvements to these and many more areas of the |
| 123 | contribution process in the coming weeks and months! |
| 124 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 125 | ### Breakout sessions |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 126 | |
| 127 | In the afternoon, participants broke out into smaller groups to have more |
| 128 | in-depth discussions about some of the topics from the morning session. |
| 129 | These discussions had more specific goals. |
| 130 | For example, one group worked on identifying the useful parts of an experience |
| 131 | report and a list of existing literature documenting Go user experiences, |
| 132 | resulting in the experience report |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 133 | [wiki page](https://golang.org/wiki/experiencereports). |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 134 | |
| 135 | Another group considered the future of errors in Go. |
| 136 | Many Go users are initially confused by, or don't understand the fact that |
| 137 | `error` is an interface, and it can be difficult to attach more information to |
| 138 | errors without masking sentinel errors such as `io.EOF`. |
| 139 | The breakout session discussed specific ways it might be possible to fix some of |
| 140 | these issues in upcoming Go releases, but also ways error handling could be |
| 141 | improved in Go 2. |
| 142 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 143 | ## Community |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 144 | |
| 145 | Outside of the technical discussions, the summit also provided an opportunity |
| 146 | for a group of people from all over the world who often talk and work together |
| 147 | to meet in person, in many cases for the first time. |
| 148 | There is no substitute for a little face-to-face time to build a sense of mutual |
| 149 | respect and comradeship, which is critical when a diverse group with different |
| 150 | backgrounds and ideas needs to come together to work in a single community. |
| 151 | During the breaks, Go team members dispersed themselves among the contributors |
| 152 | for discussions both about Go and a little general socialization, which really |
| 153 | helped to put faces to the names that review our code every day. |
| 154 | |
Russ Cox | af5018f | 2020-03-09 23:54:35 -0400 | [diff] [blame] | 155 | As Russ discussed in [Toward Go 2](https://blog.golang.org//toward-go2), |
Steve Francia | 8d86d8a | 2017-07-19 14:16:17 -0500 | [diff] [blame] | 156 | communicating effectively requires knowing your audience. |
| 157 | Having a broad sample of Go contributors in a room together helped us all to |
| 158 | understand the Go audience better and start many productive discussions about |
| 159 | the future of Go. |
| 160 | Going forward, we hope to do more frequent events like this to facilitate |
| 161 | discourse and a sense of community. |
| 162 | |
| 163 | .image contributors-summit/IMG_20170712_145844.jpg |
| 164 | .image contributors-summit/IMG_20170712_145854.jpg |
| 165 | .image contributors-summit/IMG_20170712_145905.jpg |
| 166 | .image contributors-summit/IMG_20170712_145911.jpg |
| 167 | .image contributors-summit/IMG_20170712_145950.jpg |
| 168 | |
| 169 | Photos by Steve Francia |