Kategorie
Administracja publiczna Android Epidemia iOS

O tym, dlaczego aplikacja ProteGO nigdy nie zadziała zgodnie z oczekiwaniami Ministerstwa Cyfryzacji

Ministerstwo Cyfryzacji zapowiedziało dziś objęcie patronatem i późniejsze wydanie pod swym szyldem aplikacji ProteGO, która “pozwoli kontrolować i zahamować rozprzestrzenianie się koronawirusa”. Jest tylko jeden problem – taka aplikacja mobilna będzie działać dopóty, dopóki użytkownik będzie ją oglądał na ekranie. Gdy schowa telefon do kieszeni, aplikacja zaśnie – pisałem o tym w poprzedniej notce. Dziś tłumaczę, dlaczego na wielu urządzeniach z Androidem apka ma sporą szansę umrzeć we śnie.

Z telefonami iPhone i systemem iOS jest o tyle prościej, że są rozwijane przez jednego producenta – firmę Apple. Dzięki temu oprogramowanie jest dobrze zestrojone ze sprzętem a całość działa w sposób spójny i przewidywalny. Jeśli w naszych testach obserwujemy jakieś zachowanie telefonu z jabłuszkiem, to w taki sam lub zbliżony sposób zachowają się wszystkie inne telefony tej marki. Niestety, Android to zupełnie inna historia.

Inne teksty związane z epidemią koronawirusa

[13.03.2020] o projekcie „Stop the pandemic” i tym, że jego autorzy prosili o znacznie więcej danych niż powinni
[20.03.2020] w którym zaglądam do środka aplikacji „Kwarantanna Domowa” i opisuję, co znalazłem w środku
[29.03.2020] w którym opisuję dlaczego smartfony nie bardzo nadają się do śledzenia interakcji między ludźmi
[03.04.2020] w którym piszę o zapowiadanej przez Ministerstwo Cyfryzacji apce „ProteGO” i o tym, że nie zadziała ona zgodnie z oczekiwaniami
[21.04.2020] w którym piszę o protokole Contact Tracing autorstwa Apple+Google i projekcie OpenTrace
[26.04.2020] w którym opowiadam, jak można sprawdzić, co robi aplikacja mobilna i dlaczego otwarte źródła to nie wszystko
[29.04.2020] w którym mając umowę szacuję koszty napisania od zera aplikacji Kwarantanna Domowa
[09.05.2020] w którym pokazuję, jak sprawdzić zawartość komunikatów wysyłanych w eter przez ProteGO Safe
[04.06.2020] w którym opisuję kontrowersyjną architekturę aplikacji ProteGO Safe 4.1.0-rc.1

SKĄD SIĘ BIERZE ANDROID

Firma Google publikuje kod źródłowy “gołego” Androida pod licencją typu Open Source. Producenci telefonów mogą wziąć sobie to oprogramowanie by je modyfikować, ulepszać i instalować w swoich słuchawkach. Co ciekawe, część tego kodu, jądro systemu, muszą po swoich zmianach udostępniać publicznie. Z drugiej zaś strony komponenty Androida związane z usługami Google (m.in. Gmail, Maps, sklep Play) są dodatkami, za które producenci telefonów uiszczają opłaty licencyjne i dostają je w zamkniętej formie.

W naszych rozważaniach istotne jest, że zmodyfikowane oprogramowanie musi przejść zestaw automatycznych testów Google potwierdzających zgodność z wytycznymi i – gdy się to uda – tzw. obraz systemu (lub jego aktualizacja) jest gotowy do dystrybucji na urządzenia. Testy takie nie gwarantują jednak, że Android będzie działał identycznie na telefonach różnych producentów. Przykład: test może sprawdzać warunek “system zawiera przeglądarkę internetową obsługującą żądanie załadowania treści strony przy użyciu protokołu HTTPS”. Test taki nie określa, co się stanie, gdy system będzie zawierał dwie przeglądarki, nie określa też, czy któraś może lub musi być określona jako domyślna. Warunek jest określony wąsko – przeglądarka osadzona w obrazie systemu, test zaliczony. Testy niektórych mechanizmów systemowych dają producentom sporo swobody we wprowadzaniu zmian, należy do nich m.in. zarządzanie energią.

Krótki rys historyczny – pierwsze wersje iOS nie dawały aplikacjom żadnej szansy na wielozadaniowość. Aktywna była tylko apka obecna na ekranie, co dawało systemowi operacyjnemu komfort w zarządzaniu pamięcią operacyjną i zużyciem zasobów. Dla odmiany – pierwsze wersje Androida dawały pełną swobodę i dowolność, programiści mogli pozostawiać w tle tyle procesów, na ile mieli ochotę. W efekcie system zmagał się z zaborczymi aplikacjami konkurującymi o czas procesora i pamięć operacyjną, telefony grzały się a baterie rozładowywały w kilka godzin. Co gorsza, nie było narzędzi do diagnostyki, więc nie dało się nawet zidentyfikować programów popadających w busy-loop albo zapominających o wyłączeniu żyroskopu bądź odbiornika GPS.

Od pionierskich czasów minęło 10 lat, sporo ograniczeń iOS zostało poluzowanych zaś cała masa swobód Androida – odebrana. Szczególnie duże zmiany przyniosło wydanie Androida w wersji 9, odtąd każda aplikacja przydzielona jest do jednej z czterech kategorii, zależnie od częstotliwości używania. Rzadko włączane aplikacje poddawane są takim restrykcjom, jak opóźnienia w okresowym wznawianiu pracy lub ograniczenie liczby powiadomień push, jakie aplikacja może odebrać jednej doby.

To niestety nie koniec. Dotąd mówiłem o “gołym” Androidzie, instalowanym w telefonach Nexus i Pixel sprzedawanych przez Google (ich udział w światowym rynku jest minimalny a w Polsce większość modeli nie trafiła nawet do oficjalnej dystrybucji). Prawdziwe zło czai się w telefonach Samsunga, Huawei czy Xiaomi.

Nie zabijaj mojej aplikacji

Najpopularniejsi producenci telefonów poszli znacznie dalej, niż Google – ich warianty Androida o wiele agresywniej rozprawiają się z aplikacjami działającymi w tle. Biegasz z aplikacją Endomondo, ale zapis treningu nagle się urywa? Ktoś pisze do ciebie na Whatsappie a ty dostajesz powiadomienia z kilkugodzinnym opóźnieniem? Informacje o nowych e-mailach pojawiają się dopiero po podłączeniu telefonu do ładowania? Witaj w świecie, w którym wydajność baterii jest ważniejsza od komunikacji ze światem.

Serwis Don’t Kill My App przedstawia ranking marek najgorzej traktujących użytkowników, są to m.in.: Huawei, Samsung, OnePlus, Xiaomi czy Asus. Oto przykłady akcji, jakie podejmują niestandardowe programy do zarządzania energią:

  • pakiet PowerGenie w telefonach Huawei zabija wszystkie aplikacje działające w tle oprócz listy wyjątków zaszytej na sztywno przez producenta
  • w niektórych Samsungach po trzech dniach nieużywania aplikacja traci uprawnienia do automatycznego startu, dzięki czemu po długim weekendzie pobrana ze sklepu Play aplikacja budzika też nie zbudzi się na czas
  • gdy w telefonach OnePlus oznaczysz wybrane aplikacje jako chronione przed “optymalizacją baterii”, ustawienie to zostanie zresetowane przy każdej aktualizacji systemu

To tylko kilka z całej serii przykładów. W wielu sytuacjach powyższe ustawienia pozostają całkowicie poza kontrolą programisty. Przykład – program może sprawdzić, że działa na telefonie marki Asus ale nie dowie się, czy użytkownik przyznał mu uprawnienia do automatycznego uruchomienia po restarcie telefonu.

W efekcie niektóre błędy i problemy zgłaszane programistom przez użytkowników są nie do zidentyfikowania i nie do naprawienia – nawet wówczas, gdy programista dysponuje setką najpopularniejszych telefonów (a trzeba pamiętać, że sam tylko Samsung wydaje co roku kilkadziesiąt modeli w setkach wariantów).

Domyślne ustawienia są… domyślne

W przypadku wielu opisanych problemów serwis Don’t Kill My App dostarcza także instrukcje ich ominięcia, niekiedy zawierają one np. konieczność przejścia przez kilka niepowiązanych ze sobą ekranów ustawień, kiedy indziej użycia zaawansowanych narzędzi przeznaczonych dla programistów. Powodzenia w tłumaczeniu cioci, jak uniknąć ubijania WhatsAppa – szczególnie, gdy będziecie rozmawiać przez telefon wymagający wyklikania nowych ustawień.

Reguły występujące w “czystym” Androidzie są surowe, lecz sprawiedliwe. Jeśli aplikacja przetwarza dane w tle a jednocześnie wyświetla powiadomienie o trwającym procesie (na przykład: rejestrowanie trasy i tempa przez Endomondo), nie zostanie zabita. Producenci telefonów wprowadzają tu chaos i zniszczenie. Przez nich taka sama aplikacja działająca w tle nie może być pewna dnia ani godziny, bo gdy zasypia w kieszeni (wraz z całym urządzeniem), to w wielu przypadkach już się nie obudzi.

Dodatkowym problemem programistów niezależnych jest to, że najpopularniejsze apki (Facebook, WhatsApp, Messenger) są zazwyczaj wrzucane na listy wyjątków i zawsze będą działać jak należy – a niezależna produkcja bez miliarda użytkowników dostanie od systemu operacyjnego bęcki przy każdej okazji. “Każdemu bowiem, kto ma, będzie dodane, tak że nadmiar mieć będzie. Temu zaś, kto nie ma, zabiorą nawet to, co ma

ProteGO i patronat Ministerstwa Cyfryzacji

Na stronie Ministerstwa Cyfryzacji można przeczytać: “Rozpoczęliśmy prace nad aplikacją, która pozwoli kontrolować i zahamować rozprzestrzenianie się koronawirusa. Przygotowuje ją grupa polskich programistów. Zależy nam, aby przed jej wdrożeniem poznać zdanie innych.

Oto moje zdanie na temat aplikacji ProteGO, której zalążek kodu źródłowego można znaleźć tu: github.com/ProteGO-app

  • aplikacja nigdy nie spełni oczekiwań, bo warunkiem jej sukcesu jest instalacja na wszystkich telefonach komórkowych w Polsce, co się po prostu nie wydarzy
  • aplikacja nigdy nie zadziała jak należy, ponieważ telefony komórkowe (wszystkie, iPhone’y też) podczas stanu głębokiego uśpienia wyłączają moduł Bluetooth, co wyklucza ich wykrycie
  • aplikacja nigdy nie zadziała jak należy, bo na większości telefonów z Androidem – który ma w Polsce ponad 80% udziału rynku smartfonów – nie będzie działać w tle w sposób stabilny i niezawodny z powodów opisanych w niniejszym artykule
  • aplikacja powołuje się na przykład Singapuru i innych państw, jednak tworzy własny, unikalny protokół komunikacji, przez co jest skazana na odkrycie tych samych problemów, które inni już poznali i być może pokonali
  • aplikacja może zmniejszyć ostrożność użytkowników i prowokować do coraz bardziej ryzykownych zachowań, “bo przecież gdyby coś było nie tak to w aplikacji pojawiłby się jakiś alert”
  • w tego typu projektach odfiltrowanie złośliwego ruchu i zapobieganie fałszywym alertom jest bardzo, bardzo, BARDZO trudne zaś już pierwszy fałszywy lecz masowy alert może spowodować powszechną panikę lub (w najlepszym razie) zniszczyć zaufanie do aplikacji

Na tej samej stronie czytamy: “Wdrożenie tej aplikacji będzie miało sens tylko wtedy, gdy zyska społeczną akceptację. Dlatego zależy nam, aby prace nad nią były transparentne”. Jest to miła odmiana po aplikacji Kwarantanna Domowa (pisałem o niej tutaj i tutaj), czy jednak na pewno warto publikować zapowiedzi przed zrobieniem na szybko i brudno projektu typu Proof of Concept, sprawdzającego czy pomysł da się zrealizować od strony technicznej? Nie trzeba nawet programować – wystarczy zacząć od kilku eksperymentów z aplikacją demo biblioteki p2pkit.io oraz spostrzec, że rozwój jej i podobnych produktów nie bez powodu ustał kilka lat temu.

Aha, ProteGO to także hurtownia art. BHP, marka suplementów diety, instytucja finansowa, firma z branży security, firma z branży medycznej, producent przerywaczy płomieni, zakład górniczy, parser plików robots.txt, firma ochroniarska… A to wszystko na pierwszej stronie w wyszukiwarce.

Na zakończenie – szanuję pracę teoretyków z Lozanny, którzy opracowali podstawy zdecentralizowanego systemu dbającego o ochronę prywatności a jednocześnie pozwalającego na śledzenie interakcji międzyludzkich i powiadamianie o kontaktach z osobami zarażonymi. Z pobieżnej lektury publikacji wynika, że nikt z autorów nigdy nie programował urządzeń mobilnych.

Tylko w teorii praktyka nie różni się od teorii.

Dodano 4.04.2020: po dwóch tygodniach używania aplikacji TraceTogether władze Singapuru ogłosiły zamknięcie na miesiąc szkół i zakładów pracy.

Inne teksty związane z epidemią koronawirusa

[13.03.2020] o projekcie „Stop the pandemic” i tym, że jego autorzy prosili o znacznie więcej danych niż powinni
[20.03.2020] w którym zaglądam do środka aplikacji „Kwarantanna Domowa” i opisuję, co znalazłem w środku
[29.03.2020] w którym opisuję dlaczego smartfony nie bardzo nadają się do śledzenia interakcji między ludźmi
[03.04.2020] w którym piszę o zapowiadanej przez Ministerstwo Cyfryzacji apce „ProteGO” i o tym, że nie zadziała ona zgodnie z oczekiwaniami
[21.04.2020] w którym piszę o protokole Contact Tracing autorstwa Apple+Google i projekcie OpenTrace
[26.04.2020] w którym opowiadam, jak można sprawdzić, co robi aplikacja mobilna i dlaczego otwarte źródła to nie wszystko
[29.04.2020] w którym mając umowę szacuję koszty napisania od zera aplikacji Kwarantanna Domowa
[09.05.2020] w którym pokazuję, jak sprawdzić zawartość komunikatów wysyłanych w eter przez ProteGO Safe
[04.06.2020] w którym opisuję kontrowersyjną architekturę aplikacji ProteGO Safe 4.1.0-rc.1



O autorze: zawodowy programista od 2003 roku, pasjonat bezpieczeństwa informatycznego. Rozwijał systemy finansowe dla NBP, tworzył i weryfikował zabezpieczenia bankowych aplikacji mobilnych, brał udział w pracach nad grą Angry Birds i wyszukiwarką internetową Microsoft Bing.

10 odpowiedzi na “O tym, dlaczego aplikacja ProteGO nigdy nie zadziała zgodnie z oczekiwaniami Ministerstwa Cyfryzacji”

Fajny artykuł, brakuje mi tylko zaproponowania alternatywnego podejścia. Bezpieczne wyjście z lockdownu wydaje się kluczowe dla naszej gospodarki.

Siedzenie w domu, maseczki w miejscach publicznych, czekanie na szczepionkę. Nie mam żadnych lepszych pomysłów.

„aplikacja nigdy nie zadziała jak należy, ponieważ telefony komórkowe (wszystkie, iPhone’y też) podczas stanu głębokiego uśpienia wyłączają moduł Bluetooth, co wyklucza ich wykrycie” – no nie wiem, wielu cukrzyków używa aplikacji do śledzenia glikemii i one muszą być włączone ciągle. Jakoś to działa, nie idealnie ale działa, zarówno na IOS jak i na Androidzie.

To nieprawda, że to musi być masowe, żeby zadziałało – chodzi po prostu o to, żeby jakoś dodatkowo zmniejszyć R0. I to nie wyklucza zupełnie innych działań.

Niniejszy artykuł powstał, zanim inicjatywa Apple i Google została ogłoszona światu. Polecam kolejne teksty z cyklu „koronawirusowego”.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *