F-Droid Metrics i Clean Insights

Społeczność F-Droid długo dyskutowała nad tym, jak mierzyć, które aplikacje są popularne. Od 2012 do 2015 prosty licznik pobrań był utrzymywany w fdroiddata. Naszkicowaliśmy również pomysł oparty na „konkursie popularności” Debiana. Następnie określiliśmy bezpieczny sposób na zbieranie logów z naszych serwerów.

Jedną z głównych idei zawsze było to, że dobry system metryk dla F-Droid nie będzie ** nigdy** zawierać żadnych informacji umożliwiających identyfikację osoby (PII), takich jak numery telefonów, adresy IP, MAC, SSID, IMSI, IMEI, konta użytkowników, itp. Ponadto na wszelkie dodatkowe gromadzenie danych musi wyrazić zgodę, na przykład na wszystko, co byłoby zgłaszane przez oprogramowanie klienckie.

Niedawno poświęciłem trochę czasu na odkrywanie rzeczywistych metryk dzięki projektowi Guardian Project Clean Insights oferującego prywatne, etyczne metryki. Teraz ludzie mogą pracować na prawdziwych liczbach!

Strony internetowe F-Droid

Dodaliśmy nowe ustawienia logowania szanujące prywatność do wszystkich naszych serwerów z wyjątkiem f-droid.org. Konfiguracje Apache używają formatu „privacy+geo”, który obcina datę/czas/strefę czasową do samej daty, usuwa adres IP, user agent i referer. Konfiguracje nginx wykorzystują format logów „privacy+geo”, który także obcina adres IP, user agent i referer. Kluczową różnicą jest to, że w konfiguracji logów nginx nie da się normalizować daty, więc jest ona przechowywana bez zmian. Logi są następnie przechowywane nie dłużej niż 2 tygodnie, a potem usuwane. Proces metryk jest uruchamiany na serwerze, po czym wypycha oczyszczone dane do prywatnych repozytoriów git dla każdej strony. Są one trzymane jako prywatne dla głównych współautorów na wypadek wycieku prywatnych danych. Następnie mogą zostać ręcznie usunięte przed opublikowaniem.

Bardziej rygorystyczny format logów Apache w końcu pojawi się na f-droid.org. Na razie trzymamy się istniejących ustawień domyślnych logów Apache. Jest to duża strona, a my jesteśmy małym zespołem, więc musimy być bardzo konserwatywni w kwestii zmian. Metryki pochodzące z f-droid.org są obecnie przetwarzane i sprawdzane ręcznie. Publiczne, oczyszczone dane dla f-droid.org są generowane przy użyciu tego samego rygorystycznego procesu co reszta stron.

Wszystkie te dane są następnie gromadzone i publikowane do użytku publicznego na stronie https://fdroid.gitlab.io/metrics. Obecnie są to tylko pliki JSON z danymi: index.json zawiera listę dostępnych raportów tygodniowych, następnie każdy raport nosi nazwę pierwszego dnia raportu, np. 2021-02-15.json. Okres raportowania to poniedziałek 0:00:00 do niedzieli 23:59:59.

Oczyszczone dane w JSON są też wysyłane do instancji analityk Clean Insights Matomo (obsługiwane przez Guardian Project) w celu sprawdzenia, czy Matomo jest przydatnym narzędziem analitycznym dla danych bez PII. Mimo że skypt zgłaszania działa tylko z oczyszczonymi danymi, raporty są wysyłane do Clean Insights Matomo Proxy (CIMP), który usuwa niepotrzebne informacje, w tym adres IP, przed wysłaniem do Matomo. CIMP następnie wysyła oczyszczone dane do Matomo, który generuje widoki do ich przeglądania.

Interpretacja danych

Dla wszystkich serwerów WWW z wyjątkiem f-droid.org są to proste konfiguracje jednego serwera. Oznacza to, że logi serwera WWW będą zawierać wszystkie wejścia na stronę internetową. Dla f-droid.org jest to bardziej skomplikowane. Bieżące metryki pochodzą z kanonicznego serwera WWW. Oznacza to, że większość trafień zatrzymuje się na serwerach buforujących i nigdy nie pojawia się w logach kanonicznego serwera WWW. Logi z serwerów pamięci podręcznej nie są obecnie nigdzie przetwarzane ani publikowane.

Klient F-Droid

Istnieje również zgłaszanie metryk dla oficjalnego klienta F-Droid na Androida. Przede wszystkim zbiera on informacje z poprzedniego tygodnia (np. z ostatniego pełnego tygodnia) i umieszcza je w raporcie w formacie JSON. Ten JSON jest następnie wysyłany do https://metrics.cleaninsights.org, respektując ustawienia sieci, takie jak wymóg Tora. Można to włączyć przez zaznaczenie „Ustawienia zaawansowane”, potem „Przechowuj historię instalacji”, a następnie „Wysyłaj dane o użytkowaniu”. W przeglądaniu historii instalacji jest przeglądarka raportów. Jeśli okażą się one przydatne, nie będzie wycieków prywatnych danych czy innych problemów etycznych, mogą zostać rozszerzone. Zawsze będzie to opcjonalne. Obecnie jest globalny przełącznik. Sprawdzamy zapisywanie wybranych raportów i inne pomysły, dzięki którym metryki będą zawsze respektować przede wszystkim wolę użytkownika.

Oto rzeczywisty, ale stosunkowo prosty raport jako przykład:

{
  "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"
}