Go 遙測(cè)將可選擇加入!Google 收集數(shù)據(jù)的黑歷史對(duì) Go 有負(fù)面影響。。。
大家好,我是煎魚。
前兩天有讀者提醒我關(guān)注 Go 大當(dāng)家 Russ Cox 發(fā)起的 Go 工具鏈中的遙測(cè)(telemetry in the Go toolchain[1])討論。不看不知道,一看下一跳。
今天來分享一些看法和信息。
為什么要收集數(shù)據(jù)
Russ Cox(下稱 rsc)發(fā)起的背景是 Go 開源項(xiàng)目的開發(fā)者(例如:Go 核心團(tuán)隊(duì))在沒有遙測(cè)的情況下,會(huì)遇到如下的場(chǎng)景:
- 需要依賴外部的錯(cuò)誤報(bào)告(例如:GitHub issues)來了解他們自己寫的軟件如何在意料之外發(fā)生異常。
- 調(diào)研用戶是如何使用自己寫的開源項(xiàng)目,是否符合預(yù)期,又或是創(chuàng)造出了新的用法。
這么一聽,好像和我們平時(shí)的認(rèn)知也差不多。換位思考一下,Go 核心開發(fā)者就比較頭疼了。認(rèn)為這兩種方式作用都很有限,達(dá)不到他們想要的效果。
因此想要抽樣收集用戶的使用數(shù)據(jù),便于 Go 團(tuán)隊(duì)更好的開發(fā)和調(diào)研。
被局限的例子
錯(cuò)誤報(bào)告
我們會(huì)提交錯(cuò)誤報(bào)告,一般只會(huì)出現(xiàn)在類似 ”我們預(yù)期這事應(yīng)該能正常跑起來,但你居然沒有跑起來“ 的場(chǎng)景下。在現(xiàn)有的情況下,如果程序在不影響正確性的情況下出現(xiàn)了錯(cuò)誤行為,用戶就不可能注意到。
反之,如果實(shí)施了遙測(cè)(收集數(shù)據(jù)),開發(fā)者就可以通過 Go 工具鏈?zhǔn)占蟻淼慕y(tǒng)計(jì)數(shù)據(jù)發(fā)現(xiàn)異常。(有抓手了)
具體案例,rsc 說明了在 Go 1.14 版本的發(fā)布中,對(duì) macOS Go 發(fā)行版的構(gòu)建方式進(jìn)行了更改,造成使用 net 包(使用 cgo )編譯任何程序都需要安裝 Xcode。
這不是他們所預(yù)期的,是意外之外的。
但在發(fā)生這問題的三年內(nèi),沒有任何人報(bào)告過這個(gè)錯(cuò)誤。用戶只是簡(jiǎn)單地接受了這是必要的安裝。
直至近期,Go 核心團(tuán)隊(duì)排查其他問題,才發(fā)現(xiàn)有這個(gè)坑。如果有遙測(cè)收集使用數(shù)據(jù),那這個(gè)問題完全可以被避免。
調(diào)查用戶
Go 開發(fā)團(tuán)隊(duì)想知道 ”用戶想用 Go 做什么“,或是想基于數(shù)據(jù)用于做一些新老功能版本的決策。
但現(xiàn)在開源項(xiàng)目普遍都很難,他們只能發(fā)調(diào)查報(bào)告,就像我們每年填的 Go 開發(fā)者調(diào)查報(bào)告,就是這個(gè)目的。
Go Developer Survey 2022 Q2 Results
但是 rsc 對(duì)調(diào)查報(bào)告也是不滿足的。因?yàn)橹皇且粋€(gè)小樣本,效果有限。且需要大量的用戶選項(xiàng)和回復(fù)才能得到相對(duì)準(zhǔn)確的測(cè)量結(jié)果,比較浪費(fèi)時(shí)間。
具體案例,rsc 舉例 go 開源項(xiàng)目,經(jīng)常會(huì)在新版本增加開關(guān),再逐步去掉的做法。像最近宣布 Go 1.21 起將不再支持 macOS1.13/1.14,馬上就收到了用戶的反饋,要求保留。
如果有遙測(cè)收集使用數(shù)據(jù),這個(gè)問題將有具體的數(shù)據(jù)作為決策支撐。就跟我們平時(shí)前端同學(xué),會(huì)收集用戶端的操作系統(tǒng)和版本作為是否支持 IE 的依據(jù)等。
想收集什么數(shù)據(jù)
說要收集,會(huì)在哪收集,具體要收集什么呢?會(huì)收集的地方主要是 Go 工具鏈,例如:Go 命令、Go 編譯器、Gopls 等地方。
收集的數(shù)據(jù),將至少包含工具鏈的基本信息,例如:
- Go 工具鏈版本。
- 是什么操作系統(tǒng)和架構(gòu)構(gòu)建的。
- 主機(jī)操作系統(tǒng)版本(例如:Windows8)。
- Go 工具鏈?zhǔn)褂玫钠渌ぞ叩拇致孕畔ⅲ绫镜?C 編譯器(例如:gcc 2.95)。
不會(huì)包含任何形式的身份信息,例如:
- 沒有用戶登錄。
- 沒有機(jī)器 ID。
- 沒有 MAC 地址。
- 沒有 IP 地址,沒有 IP 地址前綴。
- 沒有地理位置信息
- 沒有隨機(jī)生成的偽 ID,沒有其他種類的標(biāo)識(shí)符。
收集的數(shù)據(jù)會(huì)在 Go 網(wǎng)站上公布,定時(shí)展示統(tǒng)計(jì)圖表等,便于所有 Go 開發(fā)者審閱和查看。
社區(qū)爭(zhēng)議滿滿
絕大部分開發(fā)者是沒有直接同意 rsc 這么干的,主流的回復(fù)分成了三派。
大致如下:
- 直接拒絕,覺得這是在侵犯?jìng)€(gè)人隱私。
- 建議做成可選項(xiàng),例如:限時(shí)選擇上報(bào)、選擇上報(bào)(使用 Go 時(shí)彈出 Cookie 彈窗、拋出異常時(shí)彈出彈窗)等。
- 直接抵制,認(rèn)為 Go 重蹈 Google 后路。用詞強(qiáng)烈,要求 rsc 公開道歉,表示這是推下懸崖的選擇,降低了信任。
整體來看,參與討論的 Go 開發(fā)者都非常關(guān)注 ”隱私“ 的問題。更建議做成可選項(xiàng),也就是用戶選擇上報(bào)。
如果以后寫 Go 的時(shí)候彈出 Cookie 彈窗還是很 ”有趣“的吧(doge。
總結(jié)
Go 核心團(tuán)隊(duì)本身的出發(fā)點(diǎn)是好的,他們?cè)诰S護(hù) Go 開源項(xiàng)目時(shí),經(jīng)常拿不到一些關(guān)鍵數(shù)據(jù)和信息,導(dǎo)致在做決策時(shí)很糾結(jié)。
這在業(yè)務(wù)應(yīng)用中,比較常見的是在前端埋探針,獲取你的客戶端信息等。但這是閉源的,整體風(fēng)險(xiǎn)沒有那么大。
但對(duì)于開源項(xiàng)目來講,這是開源的,受到所有人的檢閱。這類隱私數(shù)據(jù)收集,在臺(tái)面上直接默認(rèn)上報(bào)肯定是不可行的,爭(zhēng)議會(huì)比較大。
從結(jié)果來看,由于沒有更多新的內(nèi)容,比較情緒化,這個(gè)討論已經(jīng)被中止。未來如果做,我猜更大概率是做成可選項(xiàng),詢問式。