关于Django是否要加入用户追踪功能的讨论

Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。

  近年来,在免费的软件项目和用户中,隐私问题逐渐成为了一个热点。随着更多的软件开发扎根于网络,监督和追踪用户的情况也日益严重。一些软件可能使用广告作为一种收入的来源,但这样也会产生监视用户的副作用。Django社区最近发起了一个有趣的提议:在这个流行的Python网络构架中加入用户追踪功能——实际上就是追踪一些软件的开发者。


追踪功能将吸引资金

  这场争论中有一点让人眼前一亮:加入这个功能初衷是考虑到Django软件组织(DSF)的资金问题。有建议称“单纯的依靠志愿者们的免费劳动是低效的,不公平的也是有风险的”,同时声称“吸引资金对Django的未来发展至关重要”。事实上,DSF近来雇佣了一位工程师来监督Django的发展,这使得Django可以及时更新版本并减少bug。目前多方面的资金支持着Django开发主要的新功能,但是未来如果没有关于用户使用的更多坚实数据,Django将会越来越难吸引到赞助商。

  新功能尝试将Google分析(GA)加入到Django中,以统计有多少“独特开发者”以及他们工作环境下的数据。仿照Python提升建议(PEP),Django提示建议(DSP)中的这条建议(DSP8)将通过pull request的方式来实现。(译者注:pull request特指在github上的一种修改别人代码的建议方式)DSP8也长期收到了Django的开发者Jacob Kaplan-Moss的支持。

  这条建议基本的主张为:如果我们有更多清晰明了的Django用户数据,那么我们会更容易找到投资机构。这个提议根本上是想在Django中加入一些代码,当“开发者”的命令被运行的时候,特定的数据会被上传。这个数据上传系统是可以“选择性退出”的,而且第一次使用时会提醒开发者。但这个系统默认情况下是开启,除非被手动关闭。同时提议还认为,如果做成一个系统是“默认关闭的”将会严重的影响计数效果以至于“实际上可能还不如一个DSF正在做的社区调查报告有效”。


信息收集

  上传的部分信息是经过特殊设计的,它仅仅会在开发者的环境中运行而不会在产品中运行。截止写这篇文章时,确认有的信息包括:

 • 一个事件目录(开发者命令:startproject, startapp, runserver)

 • 关于Django, Python 以及操作系统版本认证的HTTP用户代理字符串

 • 一个具体用户的独特认证(第一次运行产生的UUID)

  在这个建议中提到了GA aip 标注的应用,根据GA的文档,它可以使发送者的IP地址匿名。但现在google是如何完成这个操作的尚不得知,而且,考虑到这是一个Google专有的平台,这个说法(IP是否匿名)也无从考证。虽然有人认为这意味着“不仅他人看不到你的实际IP,GA也不会储存它”。但这并不是实际上google所为,GA实际上储存IP地址,而且在GA的文档中也只提到了地址是匿名的,但并没有说明是如何匿名的。

  GA像是一场关于隐私的交易,因为“google的追踪记录表明了他们并不像DSF一样重视隐私”。然而如果选择部署自己的分析软件则会使得Django的可持续性的问题变得更糟。根据原先提议,Google并不能追踪Django用户...Google唯一能做的就是对于匿名IP地址这件事撒谎,并且尝试将匹配用户和对应的IP。

  事实是,我们实际上并不知道Google“匿名化”数据背后的秘密。Django团队成员Jannis Leidel评论说“Google曾经屈服于美国秘密法院并且被要求在严密监视下与美国情报部门合作”。这使得即使是Google这样的公司都很难保障其用户的匿名性。Leidel还提到,美国的法律框架可能并不适用于世界上的其他地方,“比如实行默认开启在严密的德国(甚至扩展到整个欧洲)隐私法里是绝对不合法的”。

  不仅如此,原提议还声明说“如果我们发现google在这一点上存在欺骗行为,我们将会立即停止使用”,但现在我们仍不清楚如果软件已经被安装,具体将如何停止它。也有人关心这个措施可能导致Django的正常功能被屏蔽,特别是在那些Google被屏蔽的国家(如中国)。最后,还有人担心这些信息可能会导致安全问题,因为这会非法暴露用户正在使用的Django的版本号。


其他项目

  Django当然不是第一个想要通过分析数据来获取更多其用户信息的项目。这个建议很大程度上是受到一个类似的名为OS X Homebrew package manager的系统的启发,这个系统就建立了自己的“默认开启”系统。

  其他的项目直接将GA嵌入到他们的网页中。这表面上看起来是基于Oscar Django的电子商务解决方案的选项,但是DSF却认为这样不太有用,因为它会不仅仅可能会误计Django管理员,而且在计数开发人员时也较为乏力。 Wagtail,一个基于Django的内容管理系统,也被错误地认定为直接使用了GA。虽然这个功能是默认开启的,但实际上它只是通过引用来源网址的信息来进行版本更新检查进而识别已安装的域。Wagtail实际上并没有使用GA,因为该项目只需要很少的数据,它担心用户会对此的反应过激。

  JavaScript包管理器NPM也考虑了类似的扩展。 NPM的联合创始人劳里•沃斯(Laurie Voss)说,他决定完全避免回传原址(译者注:即将开发者的信息传回到服务器上),因为“用户绝对会讨厌这样”。 由于NPM用户会不断地下载包以重构应用程序,因此它具有更加完整的使用数据,这些数据通过公共API进行聚合和提供。 NPM用户似乎认为这是一种“合理的功能/隐私交易”。沃斯还说:一些NPM包的确会回传原址,但他们从用户处得到的反馈是“褒贬不一”的。 

  Read the Docs的联合创始人Eric Holscher提出了一个不同的想法:该项目正在考虑使用Sentry进行集中式报告。有趣的是考虑到Sentry是完全开源的, 即使它是商业服务(与闭源的Google Analytics相反),它也可能验证任何匿名声明。


Debian的回应

  由于Django和Debian是一起发布的,一些人关注Debian对这个提议的反应。事实上,另一位开发者说,“主要发行人在这个建议上的态度决定了公众对Debian的接受度”。

  Debian当前的Django维护者RaphaëlHertzog从一开始就明确指出,这样的系统将“可能在Debian中被默认禁用”。 有两个关于Debian邮件列表的简短讨论,其中总体的共识似乎是任何默认开启的功能在Debian都是不受欢迎的,特别是如果它的回传目标是谷歌服务器。

  我已经做了一些研究,仔细找出什么是可以接受的Debian社区的回传地址系统。我的研究发现了包意外地连接到网络的十个不同的错误报告,其中大部分和数据收集并没有直接联系,更常见的新版本检查。我发现在大多数情况默认启动功能被禁用。在版本检查的情况下,似乎Debian禁用该功能是正确的,因为包不能自己升级:该任务是委派给包管理器的。此前曾被报告过的一个问题是臭名昭著的“OK Google”语音激活二进制Blob争议,但从那以后就被修复了(虽然其他问题仍然在Chromium)。

  我还发现,在Debian中没有关于跟踪软件的明确对策。在Debian似乎有一个强烈的共识,任何跟踪是不可接受的。例如,这是一个由Ian Jackson(一位长期以来的Debian开发人员)起草(但从未正式采纳)的规则文件摘录:Debian软件不应该通过网络进行通信,除非是在必要时执行其功能[...] 或有用户的明确许可的其他目的。

  换句话说,在目前的默认关闭状态下,Jackson解释说,“当我们最初编写规则文件的核心时,例如DFSG [Debian软件指南],SC [社会契约]等,没有人会认为这种行为是可以接受的”,这解释了为什么至今没有在Debian项目中这种政策被明确的采纳。

  Debian开发者Bas Wijnen很好地解释了当时的默认开启系统的问题(或者是带有提示的默认关闭功能):“就像它不得不为您安装的每个软件包都通过认证一样。Debian的一个好处是用户不需要担心这样的事情:Debian确保所有通过认证的都是好的。”

  有人可能认为Debian有自己的跟踪系统。例如,默认情况下,Debian将通过APT更新系统“回传地址”(虽然它只报告请求的包)。但是,目前默认情况下这种系统并不会自动执行(虽然计划很快就会这样做)。此外,Debian成员不认为APT是一种跟踪,因为它需要连接到网络以完成其主要功能。由于有多个分布式镜像(用户在安装时可以选择),监视和跟踪的风险也大大降低。

  使用Debian的popcon系统可以得到更好的并行效果,它实际上在追踪Debian的安装列表,包括软件包列表。但是正如Barry Warsaw在讨论中指出的,“popcon是'默认关闭',[...]绝大多数人在Debian中赞成这样,而反对”默认开启“。需要注意的是,popcon在默认关闭时,如果用户点击安装,则默认为“yes”。 [更新:正如评论中指出的,popcon实际上默认在Debian中为“no”。]目前有大约20万份信息上传,它们根据每天上传的机器特有标识符进行跟踪。 Ubuntu也使用popcon软件,每天上传数量大约280万次,而Canonical估计Ubuntu有4000万桌面用户。这意味着实际安装数量级远比popcon报告的要多。

  除了规则文件的原因以外,Warsaw解释说,“Debian在处理隐私问题上十分的认真,我们想要保持下去(这个态度)”。


下一步

  在Django项目中显然存在着如何处理这个问题的分歧。 看起来地址回传系统可能最终会作为代理系统而实施,另一个Django开发商Aymeric Augustin说:“这将允许我们剥离IP地址,从而避免依赖Google匿名化,或者是我们自己去匿名化”。Augustin还指出,该功能不会“在Django停止支持Python 2之前实施”,(估计在2020年左右)。目前还不清楚多久才能落实改变,收集信息,最后到可以用于刺激投资的程度。

  一种可能的情况是系统会明确的提示用户正在使用默认开启功能,而不是只是弹出警告或隐私协议却并没有明确提示。 另一个Django贡献者Shai Berger说,“在社区调查中并没有得到这些数字(独特开发者的数量)。” Berger还说:“我们相信社区会主动恢复原先的情况,而不要等到了迫不得已才这么做。我不相信通过艰难的推进默认开启系统会使统计的数量会增加。对于那些可能认为报告是偷偷的加在他们身上的人,或者甚至是那些感觉自己是被强行拉入参与,而不是选择性参与的人,很可能会让他们产生厌恶的情绪。”

  其他可能的情况还包括由Donald Stufft提出的在pip或PyPI中收集数据。Leidel还提出,系统可以要求在几次调用命令之后才默认开启。

  令人鼓舞的是,Django社区不会过激的讨论这些问题,他们会十分理性的对待Django项目。每个自由软件项目都可能面临资金和持续性问题, Django似乎试图以一种透明的方式解决这个问题。该项目愿意与社区的所有领域,从高层领导到下游分销商,包括个人开发商共同合作。即使不是为了吸引资金或跟踪用户,至少这种做法也应该作为一种有效地讨论问题的模式, 

  每个人似乎都同意不应当监视用户,而是改进软件。正如Debian开发人员Lars Wirzenius所言:“如果自由软件项目必须靠妥协隐私权获得资金,这是非常可悲的。希望,Django将能够在不违背其原则的情况下获得更多资金。”


英文原文:https://lwn.net/SubscriberLink/707443/5710ef3733710462/
译者:forbidden
 

2月15日11:00到13:00网站停机维护,13:00前恢复