F-Droid 指标和干净的数据分析

F-Droid 社区一直在讨论如何测量哪些应用受欢迎。从 2012 年到 2015 年,在 fdroiddata 中维护了一些简单的下载计数。我们还根据 Debian 的“流行度测试”勾勒出了一个想法。然后我们确定了一种从我们的网络服务器收集日志的安全方法。

一个中心思想始终是,一个好的 F-Droid 测量系统永远不会包括任何个人身份信息 (PII),如电话号码、IP 地址、MAC、SSID、IMSI、IMEI、用户帐户等。此外,任何额外的数据收集都必须是选择加入的,例如,客户端软件报告的任何内容。

感谢 Guardian Project 的致力于隐私道德的测量的 Clean Insights 数据分析项目 ,我最近有一些时间致力于探索实际的测量。现在,有一些实际的数字可供人们使用!

F-Droid 网站

我们已为除 f-droid.org 之外我们的所有网络服务器添加了新的保护隐私的日志记录设置。Apache 配置 使用 “privacy+geo” 格式,并将日期/时间/时区减少为仅包含日期,删除 IP 地址、用户代理和 referer。nginx 配置 使用 “privacy+geo” 日志格式,并且也去除了 IP 地址,用户代理和 referer。主要区别在于 nginx 日志配置无法标准化日期,因此它们被完整地存储。然后,这些日志将被存储不超过两周,之后将被删除。测量进程在服务器本身上运行,然后仅将经过清理过的数据推送到私有的, 每个站点的 git 存储库。这些仅对核心贡献者可见,以防私人数据泄露。然后可以在公开之前手动删除私人数据。

更严格的 Apache 日志格式最终会出现在 f-droid.org。目前,我们仍使用保留默认 Apache 日志的现有设置。这是一个大网站而我们是一个小团队,所以我们需要对那里的变化非常保守。来自 f-droid.org 的指标目前是手动处理和审查的。f-droid.org 的公开、清理过的数据是使用与其他网站相同的严格流程生成的。

然后将所有这些数据汇总并在 https://fdroid.gitlab.io/metrics 上发布以供公众使用。目前这些只是 JSON 数据文件:index.json 列出可用的每周报告,然后每个报告以报告的第一天命名,例如 2021-02-15.json。报告周期为周一 0:00:00 至周日 23:59:59。

这些经过清理的 JSON 数据也被上传到 Clean Insights Matomo 分析实例(由 Guardian Project 运行),以试验 Matomo 对于没有 PII 的数据是否是一个有用的分析工具。尽管提交脚本仅适用于经过清理的数据,但报告会提交给 Clean Insights Matomo Proxy (CIMP),在提交给 Matomo 之前去除不必要的信息,包括 IP 地址。然后 CIMP 将清理过的数据提交给 Matomo,由 Matomo 生成数据视图。

解释数据

f-droid.org 之外的所有 Web 服务器都是一个简单的服务器设置。这意味着 Web 服务器日志将包括对网站的所有点击。对于_f-droid.org_,它更复杂。当前测量指标来自规范 Web 服务器。这意味着大多数点击都会停留在缓存服务器上,并且永远不会显示在规范 Web 服务器的日志中。缓存服务器中的日志当前未在任何位置进行处理或发布。

F-Droid 客户端

官方 F-Droid Android 客户端也可以进行指标提交。它的核心是收集前一周的信息(例如最近完成的一周),并将其放入 JSON 报告中。然后将该 JSON 提交到 https://metrics.cleaninsights.org,并尊重网络偏好,例如通过 Tor。必须先打开“专家模式”,然后打开“保留安装历史记录”,再打开“发送到 F-Droid Metrics”。“安装历史”查看器中有一个报告查看器。如果这被证明是有用的并且没有出现隐私泄露或其他道德问题,则可以对它进行扩展。尽管如此,它将始终是选择加入的。当前有一个全局开关。我们正在探索每个报告的选择加入和其他想法,以确保指标始终首先尊重用户的意愿。

作为示例,这是一个真实但相对简单的报告:

{
  "events" : [ {
    "action" : "isPrivilegedInstallerEnabled",
    "category" : "device",
    "name" : "true",
    "period_end" : 1613606400,
    "period_start" : 1613001600,
    "times" : 1
  }, {
    "action" : "Build.VERSION.SDK_INT",
    "category" : "device",
    "name" : "25",
    "period_end" : 1613606400,
    "period_start" : 1613001600,
    "times" : 1
  }, {
    "action" : "Build.SUPPORTED_ABIS",
    "category" : "device",
    "name" : "[armeabi-v7a, armeabi]",
    "period_end" : 1613606400,
    "period_start" : 1613001600,
    "times" : 1
  }, {
    "action" : "PackageInfo.firstInstall",
    "category" : "APK",
    "period_end" : 1614211200,
    "period_start" : 1613606400,
    "times" : 1
  }, {
    "action" : "PackageInfo.firstInstall",
    "category" : "APK",
    "name" : "org.fdroid.fdroid.privileged",
    "period_end" : 1614211200,
    "period_start" : 1613606400,
    "times" : 1
  }, {
    "action" : "PackageInfo.lastUpdateTime",
    "category" : "APK",
    "name" : "org.fdroid.fdroid.privileged",
    "period_end" : 1614211200,
    "period_start" : 1613606400,
    "times" : 1
  }, {
    "action" : "org.fdroid.fdroid.installer.Installer.action.INSTALL_STARTED",
    "category" : "package",
    "name" : "ryey.easer.beta",
    "period_end" : 1614211200,
    "period_start" : 1613606400,
    "times" : 1
  }, {
    "action" : "org.fdroid.fdroid.installer.Installer.action.INSTALL_COMPLETE",
    "category" : "package",
    "name" : "ryey.easer.beta",
    "period_end" : 1614211200,
    "period_start" : 1613606400,
    "times" : 1
  } ],
  "idsite" : 3,
  "lang" : "en",
  "ua" : "F-Droid 1.12-alpha1-4-gbc8ae2144-debug"
}