Me divorcié de Google, parte 2: Una fuerza imparable se topa con un objeto inamovible
En la entrega anterior saqué del celular todo lo que se dejaba sacar, y un poco más. Quedaron las piezas inamovibles, las que son necesarias porque yo las necesito y las que el sistema no suelta. Lo que me lleva a cómo terminó la entrega anterior: ¿cuánto de Google hay que dejar volver para que el mapa aparezca en la pantalla del auto?
Antes de responderla había que decidir qué hacer con todo lo que se quedaba: Si no se puede sacar, se neutraliza. Si no se puede neutralizar, se mitiga. Y así.
Optimizando
La regla que utilizo como eje transversal de todo este proceso la escribí por instinto: toda aplicación que intencionalmente no funcionase libremente, debe permanecer tan inerte como sea posible. Sin actividad, sin ubicación y sin acceso a redes en segundo plano. Dicho en criollo: sólo funciona si la abro manualmente.
Las excepciones eran tan obvias que ni las había mencionado: el teléfono, los mensajes, el reloj (una alarma que no suena no es una alarma), los teclados y la radio FM (yo no soy anticuado, ¡la industria está equivocada!).
Android ofrece varios puntos de control para esto, y ninguno alcanza solo. Uno le prohíbe a la aplicación trabajar cuando no está en pantalla. Otro la manda al olvido: Android ordena las aplicaciones según cuánto se usan, y a las del último escalón casi no las deja despertarse. Otro más le corta los datos móviles cuando nadie le habló. Para el Wi-Fi, en cambio, no hay vuelta sin root (…paciencia con este sketch).
# "Sólo funciona con la aplicación abierta"
adb shell cmd appops set --user 0 com.ejemplo.app RUN_ANY_IN_BACKGROUND ignore
# Vuelta a la normalidad
adb shell cmd appops set --user 0 com.ejemplo.app RUN_ANY_IN_BACKGROUND allow
Más de noventa aplicaciones pasaron por ese tratamiento, cada una con su antes, su después y su forma de deshacerse anotados en un registro.
El detalle técnico de cada palanca que se toque va a vivir, como el resto, en el repositorio público.
Lo que no puede dormir
El primer efecto colateral llegó con el chip. Reinicié el celular, no lo desbloqueé y me hice llamar: Vibró, no mostró nada, y la llamada terminó como perdida.
La aplicación de teléfono libre que había elegido no está preparada para funcionar antes del primer desbloqueo (después de un reinicio, y hasta que uno pone el PIN, Android sólo deja trabajar a las aplicaciones que lo declaran explícitamente). En ese caso el sistema recurre al teléfono de fábrica, que era el de Google, que ya no estaba.
Lo traje de vuelta, sólo como respaldo y con todas las restricciones. Siguió sin funcionar.
El culpable era la exigencia de la optimización: Para Android, la pantalla de una llamada entrante es algo que tiene que aparecer adelante de todo por su cuenta, y una aplicación que sólo funciona abierta no puede hacerlo. Saqué la restricción y… siguió sin funcionar. Resulta ser, que hay que permitir deliberadamente la aplicación. Ahí, la llamada apareció. (Por eso el bloque de arriba dice allow y no default.)
Así que, regla nueva y concesión: lo que tiene que aparecer por su cuenta, como una llamada o una alarma, no se optimiza.
Once días después, el teléfono de Google terminó siendo el principal, sin acceso a internet y con los permisos suficientes. La alternativa libre funcionaba, pero incómoda. El software libre a veces viene con un precio que no figura en la etiqueta, y en general lo pago con gusto; salvo cuando se mete con lo que necesito.
Daños colaterales
Al sacar Peek, la función de Motorola que muestra las notificaciones con la pantalla apagada, dejó de andar el doble toque para encender la pantalla: Era Peek el que dejaba a la pantalla táctil escuchando mientras el celular dormía. Tuvo que volver. Ey, ¡ya dije que no era anticuado!
Saqué el servicio de impresión (¿quién imprime desde el celular? spoiler: yo, pero todavía no lo sabía) y la pantalla de Configuración empezó a colgarse al entrar en las preferencias de conexión del Bluetooth: Esa pantalla pregunta, cada vez que se abre, si hay trabajos de impresión pendientes, y nadie le contestaba. Volvió también. Y ese mismo día me di cuenta de que sí quería imprimir.
Pequeño rant: ¿A qué mando medio de Google se le ocurrió que consultar trabajos pendientes de impresión era una excelente idea? En fin.
Seguimos.
Durmiendo con el enemigo
Después llegó el lote que en mis notas figura, sin eufemismos, como “hostil” (no me tiembla el pulso para conceptualizarlas): aplicaciones de delivery, bancos y billeteras virtuales, streaming, servicios públicos, trámites, compras, domótica. No las quiero. En algunos casos, las necesito. Pero no me voy a dormir sin forzarlas a dormir cuando no las estoy mirando.
Tratamiento máximo: nada en segundo plano, red sólo cuando las uso, permisos que se revocan solos si pasan un tiempo sin uso, y congeladas (detenidas hasta que las abro; ni siquiera arrancan cuando se enciende el celular). Treinta y cuatro aplicaciones recibieron ese trato. WhatsApp entró con un pedido explícito: restringirlo como si fuera un arma de destrucción masiva. Sincroniza cuando lo abro, y punto. Puedo vivir con eso.
Para mantenerlas congeladas volví a un viejo amigo sacado de F-Droid, SuperFreezZ, que hace lo mismo que hacía hace años: vuelve a detener lo que abrí y dejé de usar.
Pequeña aclaración: Históricamente, aplicaciones como “SuperFreezZ”, que entran dentro de la categoría de los “ahorradores de batería”, dividieron a la comunidad en la percepción de su efecto: Ahorran batería mientras la aplicación está “dormida”, pero cuando la aplicación necesita despertarse por cualquier motivo, consume mucha más batería al arrancar de cero. O eso era lo que se decía entonces.
En este caso, mi uso es deliberado y planificado con un propósito claro: La aplicación debe dormir para no transmitir telemetría, no para ahorrar batería. Eso es un lindo “efecto colateral”. Sin embargo, dado mi patrón de comportamiento con el teléfono, mantener subyugadas con SuperFreezZ las aplicaciones que sean no me genera este efecto “rebote” con la batería del que se hablaba entonces, dado que no utilizo esas aplicaciones frecuentemente. Están ahí sólo porque, de vez en cuando, son útiles.
Y como Android “reoptimiza” según sus propias reglas (usar una aplicación la sube de categoría, y algún interruptor de Configuración deshace una restricción sin avisar), un script de mantenimiento en la computadora vuelve a aplicar lo que dice el registro. El celular se encapricha sobre cómo está; el registro, ordena sobre cómo debería estar.
Nueva concesión: una isla de Google
Y entonces llegó el auto.
Android Auto necesita Google Play Services. Google Maps también. Waze, instalado desde Aurora, funcionaba solo y de maravillas, pero en el auto vive adentro de Android Auto. Mi resumen de ese momento, textual: “creo que estoy al horno”.
La alternativa libre, microG (una reimplementación abierta de esos servicios), no soporta Android Auto y, además, necesita root.
Así que negocié. Me rendí en querer un celular sin Google para obtener un celular con mapa en el auto.
Volvieron cuatro piezas: Google Play Services (el sistema nervioso del sistema), su compañero inseparable (Google Services Framework), Android Auto y Google Maps. Sin cuenta de usuario: eso no se negocia.
A Play Services le saqué dieciséis permisos: contactos, mensajes, registro de llamadas, cámara, almacenamiento, y siguen las firmas. Le dejé lo que el auto necesita: ubicación y micrófono. Y alguno que Android no deja quitar. La ubicación por red quedó apagada de hecho, porque sin cuenta y sin consentimiento Google no la ofrece: El celular se sigue ubicando sólo por GPS.
La isla creció de a poco, y casi siempre por el mismo motivo:
- La voz de Google. Android Auto se negó a arrancar sin el motor de voz de Google. No sirve otro: lo busca por nombre.
- La aplicación de Google. Para hablarle al auto hacía falta la aplicación de Google. No una cuenta, como se suponía al principio: la aplicación. Volvió sin un solo permiso salvo el micrófono.
(El día que exista un reemplazo libre de Android Auto, me voy a olvidar tanto de él que no voy a recordar ni cómo volver a hacer este proceso.)
Con la isla armada y todo lo demás a dieta, una noche entera con la pantalla apagada (lo que Android llama Doze: la siesta del celular) costaba 0,65% de batería por hora. Con una batería que ya perdió un cuarto de su capacidad. Bastante decente.
Dirigiendo el tránsito
Quedaba el Wi-Fi, y para el Wi-Fi no hay palanca para tocar sin rootear. Lo único que queda es la VPN.
Me pongo técnico por un momento, respiren hondo:
Una VPN es, en principio, un túnel. Lo que sale de un dispositivo viaja todo revuelto hasta otro punto antes de llegar a otra red. Esa es la definición de diccionario, con un par de licencias creativas.
Android le permite a una aplicación gestionar ese túnel, y desde ahí dicha aplicación ve pasar el tráfico de todas las demás. Si en vez de mandarlo lejos lo manipula en el propio celular, se convierte en un firewall (también llamado cortafuegos) que decide, aplicación por aplicación, quién sale, quién no, y qué destinos están aprobados.
Sin root, hay un solo lugar para una VPN. Y aún así, se gana una funcionalidad extraordinaria para controlar la salida a internet.
¡Pueden respirar de vuelta!
El imperio contraataca
Primero fue NetGuard: todo bloqueado por defecto, y una lista de aplicaciones autorizadas a salir. Encima, una lista negra de unos 88.000 nombres de sitios web de publicidad y rastreo.
Al activar el filtro, se cayó todo. Esta vez el celular no se defendió solo: Tuvo cómplices. En orden de aparición:
- la opción “bloquear conexiones sin VPN”, que le hacía creer a NetGuard que no había red;
- IPv6, que mi Wi-Fi no tiene (por decisión propia) y NetGuard ofrecía igual;
- mi propia red, que no deja salir consultas de DNS (la guía telefónica de internet: traduce nombres en direcciones IP) hacia servidores de afuera. Detalle que configuré yo, hace bastante tiempo, y había olvidado. Ya hablaremos de eso;
- un navegador con “DNS seguro” activado y sin ningún servidor configurado.
Me preocupan más el spyware y el adware que adónde van mis consultas de DNS. Si las resuelve mi router, que ya bloquea publicidad, y pasan por el filtro del celular, estoy bien.
Tres días después, NetGuard se fue. Quería un túnel (sí, otro más) para llegar a la red de mi casa cuando estoy afuera, y Android tiene un solo lugar para una VPN. RethinkDNS junta todo en ese único lugar: el firewall, el bloqueo de dominios (esta vez, con subdominios incluidos) y el túnel. Sin root.
Las reglas de NetGuard pasaron a Rethink con un script, aplicación por aplicación. Rethink, además, bloquea por defecto toda aplicación nueva, cosa que descubrí cuando Spotify me dijo que no tenía internet. Quedó así: Cada aplicación nueva arranca sin red hasta que la habilito.
Y lo que no se puede contener, se vigila. El registro de Rethink muestra con quién habla cada aplicación. Play Services, adentro del filtro, habla con los servidores de notificaciones de Google y con alguno de telemetría; los de medición publicitaria quedan bloqueados por las listas.
¿Sirve de algo mirar? Sirve para saber. ¿Alcanza? No.
Lo que no se puede filtrar
- Antes del primer desbloqueo. Rethink, como el teléfono libre de antes, no arranca hasta que pongo el PIN. Lo que sale antes, sale directo.
- Android Auto. Si detecta que su tráfico pasa por una VPN, directamente se niega a arrancar. Quedó afuera del filtro. Del auto me ocupo en la próxima entrega.
- Lo que las aplicaciones se pasan entre ellas. Una aplicación sin internet puede entregarle datos a otra que sí tiene, y eso no hay firewall que lo vea. Con Play Services en el celular, ese camino existe. Lo acepté.
El firewall decide quién sale; no decide quién habla con quién.
Lo que no volvió
La tienda de software de Google no volvió. Algunas aplicaciones la extrañan: piden un control de integridad solicitado por el fabricante para asegurarse de que la aplicación no fue manipulada (Play Integrity, en la jerga), y sin la tienda, ese control no tiene a quién preguntarle.
Esa factura llega más adelante.
El mapa
Con la isla en su lugar, el mapa apareció en la pantalla del auto. Waze guió, Maps cargó el tránsito.
Tres de cada cuatro veces, con suerte.
La cuarta es la vencida. ¿O me doy por vencido?
Continuará.
Loading