当前位置: 首页 > 后端技术 > PHP

之前有45亿数据被抓取,现有的Go工具链要我的使用数据,..

时间:2023-03-30 04:00:27 PHP

大家好,我是炸鱼。前两天有读者提醒关注Go大神RussCox发起的Gotoolchain中telemetry的讨论。不看也不知道,看一下就跳下。让我们今天分享一些想法和信息。为什么要收集数据RussCox(以下简称rsc)发起的背景是,Go开源项目的开发者(例如:Go核心团队)在没有遥测的情况下会遇到以下场景:他们需要依赖外部错误报告(例如:GitHubissues)来了解他们自己写的软件是如何出现意外异常的。调查用户如何使用自己编写的开源项目,是否达到预期,或创造新的用法。这么一听,好像和我们平时的认知差不多。换个角度想,Go核心开发者很头疼。认为这两种方法效果有限,达不到预期效果。错误报告的有限示例我们提交错误报告,这些错误报告通常只出现在“我们希望它能工作,但你没有”这样的场景中。就目前而言,如果一个程序在不损害正确性的情况下行为不端,用户是不可能注意到的。相反,如果实施遥测(收集数据),开发人员可以通过Go工具链收集的统计数据发现异常。(有句柄)具体情况下,rsc显示在Go1.14版本中,macOSGo发行版的构建方式发生了变化,导致需要安装Xcode才能编译任何使用net包的程序(使用cgo).这出乎他们的意料,出乎意料。但是在这个问题发生后的三年里,没有人报告过这个错误。用户只需接受这是必要的安装。直到最近,Go核心团队在排查其他问题后才发现了这个陷阱。如果有遥测来收集使用数据,则可以完全避免此问题。调查用户Go开发团队想知道“用户想用Go做什么”,或者使用这些数据来决定新旧功能版本。但是现在开源项目普遍比较难,只能出调查报告,就像我们每年填的Go开发者调查报告一样,就是这个目的。但rsc对调查报告也不满意。因为只是小样本,效果有限。此外,需要大量的用户选项和响应来获得相对准确的测量结果,这是浪费时间。针对具体情况,rsc举了一个go开源项目的例子,经常在新版本中加入开关,然后逐渐去掉。就像最近宣布Go1.21不再支持macOS1.13/1.14一样,立马收到用户反馈要求保留。如果有遥测收集使用数据,这个问题就会有具体的数据作为决策支持。就像我们平时的前端同学一样,我们会收集客户端的操作系统和版本,作为是否支持IE等的依据,你要收集什么样的数据,收集到哪里,具体是什么你应该收集吗?会收集的地方主要是Go工具链,比如:Go命令,Go编译器,Gopls等地方。收集到的数据至少会包含工具链的基本信息,例如:Go工具链版本。它基于什么操作系统和体系结构构建。主机操作系统版本(例如:Windows8)。Go工具链使用的其他工具的粗略信息,例如本机C编译器(例如:gcc2.95)。不会包含任何类型的身份信息,例如没有用户登录。没有机器ID。没有MAC地址。没有IP地址,没有IP地址前缀。没有地理位置信息。没有随机生成的假身份证。没有其他种类的标识符。收集到的数据将发布在Go网站上,并定期展示统计图表,供所有Go开发者查阅查看。社区充满争议。大多数开发人员并没有直接同意rsc这样做。主流回复分为三派。大致如下:直接拒绝,觉得这是侵犯个人隐私。建议做成可选的,比如:选择限时上报,选择上报(使用Go时弹出cookie弹窗,抛出异常时弹出弹窗)等。彻底抵制,认为Go将遵循谷歌的道路。言辞强硬,要求rsc公开道歉,称这是推下悬崖、降低信任度的选择。整体来看,参与讨论的Go开发者都非常关心“隐私”的问题。更推荐做成optional,即用户选择举报。如果以后写Go的时候弹出cookie弹窗会很“有趣”(doge。总结一下Go核心团队本身的出发点就好了,他们在维护Go开源项目的时候,经常不能获取一些关键的数据和信息,导致决策的时候很纠结,在业务应用中,比较常见的是在前端埋探针,获取你的客户信息等等,但是这个是闭源的,整体风险并没有那么大,但是对于开源项目来说,开源了,大家已经审核过了,默认直接上表这类隐私数据肯定是行不通的,争议会比较大。从结果来看,由于没有更多的新内容,所以比较情绪化,这次的讨论暂时搁置,如果以后做的话,更可能是option和inquiry。文章持续更新中。可以微信搜索【脑补炸鱼】阅读。本文已收录在GitHubgithub.com/eddycjy/blog中。学习Go语言可以看Go学习地图和路线。欢迎星星提醒。Go书系列Go语言入门系列:初探Go项目实战Go语言编程之旅:深入使用Go做项目Go语言设计哲学:理解Go的Why与设计思维Go语言进阶之旅:走得更远Go源码推荐阅读醒醒吧,以后就没有Go2了!Go1.20的那些事:PGO、编译速度、错误处理等新特性,你知道多少?向斯威夫特学习?Go考虑简单的字符串插值特性