You can enable/disable the ability to send Telemetry data to the Go team. Let's see why you should care.
In this video we're going to talk about a slightly non-programmatic change to Go that was introduced in Go 1.23 that caused quite a bit of controversy, maybe even more than iterators did.
One of the things that's been added in Go 1.23 is telemetry. From the release notes we can see that starting in Go 1.23 the Go tool chain can collect usage and breakage statistics to help the Go team understand how the Go tool chain is used and how well it's working. We refer to these statistics as Go telemetry. Go telemetry is an opt-in system controlled by the go telemetry command. By default the tool chain collects statistics but they don't go any further than local. To help us keep Go working well and understand Go usage please consider enabling this and by turning it on anonymous counter reports are uploaded to telemetry.go.dev weekly where they're aggregated into graphs.
Available for any of the Go contributors to download. So we can take a quick look here and you can see that anyone really can download them - there's reports here. Let's just open the latest one. It doesn't mean much to us right now but you can see how it's probably possible into some sort of useful format if you wanted to.
Let's jump back over into the release notes. When I started talking I said that these were controversial so let me show you why that was the case because in its current format it's not but I think this is a great example of the power of open source - like a really productive discussion was had around how telemetry was going to be implemented and the Go team actually changed approach based on feedback.
Here's an issue from a little while ago. It was open in February 2023 and this was effectively the Go team introducing telemetry and talking about how they wanted to do it. Initially they wanted it to be on by default. There's lots of discussion here but I'm going to jump straight to the bottom. You can see that there was a bunch of downvotes on this.
I'm just going to jump to the bottom of this page because there's a comment which summarizes the discussion really well. Lots of discussion basically came down to these few things. Pros: having telemetry enabled will enable good data which will hopefully help improve the ecosystem. The way it's been built has allowed for good anonymization. Opt-out is good because it increases the number of reports, which means that the Go team can get the best visibility into telemetry. And generally, people trust the Go authors. Go is an open source language. We can see how it's being built.
But as you can see, the list of cons is much bigger. People could submit bad and garbage data, which might actually send the team in the wrong direction. Folks are not explicitly opting in, which in some markets, for example, in the EU, people were saying whether this is compatible with GDPR. The weaker arguments are the Go ecosystem worked just fine with no telemetry and then maybe a slightly bigger one is Google doesn't have a very good track record regarding privacy issues.
So this discussion went back and forth. It actually got picked up by some quite major media outlets and the Go team have been slow and considered in implementing it. There's a privacy policy here you can read about how it's being implemented, but after reading it, seeing the data they're capturing, I feel pretty good about it.
And so I think if you feel confident doing it and it's in compliance with your company's policy I really would recommend turning it on to give the Go team the best chance as possible as making Go as great as possible. To turn it on super easy - all you have to do is run this command once you've got Go 1.23 installed and this will enable telemetry and you can turn it off at any point and as I mentioned you can head over to this page here I'll link to it below where you can download any of the telemetry reports.
I hope you found this helpful. If you do feel comfortable doing so, consider turning on GoTelemetry, it will help the Go team. I'll link to this issue where there's lots of really good and considered discussion, which has ultimately led to it being added to the language in Go 1.23. I hope this was useful. I'll see you in the next video.