Rant : Android, c'est de la merde

  1. Liberté !
  2. Fragmentation
  3. Coût de possession
  4. Mon expérience personnelle
    1. Gestion de la batterie
    2. OS bloaté
    3. OS non remplaçable
    4. Chrome, c'est de la merde
  5. Conclusion

Allez, après le Raspberry Pi 4, après Hugo et Tailwind (que j'utilise toujours ; oui je suis moi-même un peu hypocrite sur ce coup-là), et après Javascript (contre lequel j'ai chaque jour de nouveaux griefs), aujourd'hui, je m'attaque à Android. Je vais même me risquer à faire de la propagande pour Apple, vous voilà prévenus.

Liberté !

Vous vous souvenez du temps où Android se plaçait comme une alternative Libre à iOS et Windows Phone ? Android est sorti pour offrir aux utilisateurs une option qui ne les confine ni dans l'univers d'Apple, ni dans celui de Microsoft. Manque de bol, c'est pour être confiné chez Google, mais pas seulement.

Commençons par la supposée ouverture du système. Alors, oui, les sources sont Libres, c'est ce qui permet de créer des ROMs custom. Sauf que voilà, les constructeurs de tablettes et de téléphones portables ne jouent pas toujours le jeu.

Chaque périphérique embarque du matériel fourni par des tiers (Qualcomm, Broadcom, Intel, etc.), et, parfois (souvent ?) ces tiers ne fournissent pas leur code source. Ça, si vous suivez l'actualité mobile, vous le savez sans doute déjà et vous connaissez les implications : on peut avoir du matériel qui fonctionne bien mais dont le logiciel est obsolète, ne s'installe pas sur une version moderne de l'OS, est grévé de bugs qui ne seront jamais corrigés, etc.

En plus de ça, les constructeurs s'amusent à rajouter une surcouche à un Android déjà bien bloaté de base. Certains, comme Samsung, semble assurer un support plus ou moins pérenne de cette surcouche (sans pour autant en fournir les sources). D'autres, comme Lenovo, font durer le plaisir avant de fournir les sources (notamment du bootloader par exemple, ce qui empêche artificiellement le développement de ROMs custom). Évidemment, d'autres ne fournissent rien du tout (et parfois, violent les licences libres...)

Fragmentation

Tout ça contribue à un problème bien connu mais contre lequel rien n'est fait (pas par fainéantise, mais parce que ce n'est tout simplement pas possible) : la fragmentation. Il n'y a aucune garantie qu'une tablette moderne puisse faire tourner la dernière version d'Android, parce que le constructeur de la tablette peut choisir de se focaliser sur d'autres produits. J'appelle ça de l'obsolescence programmée (pas par un calendrier mais par le bon vouloir du constructeur).

Tel que je vois les choses, il y a trois cas de figure :

  • soit on verrouille tout, matériel et logiciel, et on assure le support logiciel pendant une durée conséquente
  • soit on ne verrouille rien, et on laisse complètement la communauté se débrouiller
  • soit on verrouille l'un et pas l'autre, c'est le cas de figure actuel

Apple a choisir la première solution. Certes, on n'a pas accès au code source, mais Apple permet à des machines relativement anciennes d'installer les dernières versions de ses OS. Par exemple, le téléphone le plus ancien sur lequel on peut installer la dernière version majeure d'iOS (16, à l'heure où j'écris ces lignes) est l'iPhone 8 qui date de 2017 (et qui a donc 6 ans). La même "durée de vie logicielle" est accordée aux Mac et iPad.

En passant sur Android, Samsung promet 4 ans de support de mises à jour de sécurité : ça ne veut pas dire qu'on peut installer la dernière version d'Android sur un périphérique vieux de 4 ans. Et Samsung peut largement se le permettre : c'est juste le plus gros vendeur de smartphones devant Apple.

On en déduit deux choses :

  1. Si on veut être pérenne avec un système Android, le meilleur choix, c'est Samsung
  2. Un téléphone Apple s'amorti mieux que n'importe quel téléphone Android

Coût de possession

Allez-y, accusez-moi de prendre des raccourcis, c'est juste mathématique. Hors promotion, un iPhone 14 coûte 1019 euros, un Galaxy S22 coûte 859 euros (je crois que c'est son concurrent direct). Ramenons ce prix à un coût de possession annuel, basé sur le nombre d'années de support (je vais être gentil et partir du principe que les 4 ans de support de Samsung permettent d'installer les dernières versions d'Android, alors que ce n'est pas le cas) :

  • 1019/6 = 169 euros par an pour un iPhone 14
  • 859/4 = 215 euros pour un Galaxy S22

Vous me direz, vous ne trouvez pas où un Samsung Galaxy S22 est vendu ce prix-là : c'est marqué sur la page de Samsung.

Texte alternatif non fourni

Donc soit Samsung se fout de notre gueule, soit c'est une promo applicable à tout les revendeurs au moment où j'écris ces lignes.

Pour enfoncer le clou, je dispose d'un iPad Air 2, sorti en 2014. Il fait tourner iPadOS 15 sans le moindre accro (donc l'avant-dernière version majeure d'iPadOS). Je pense ne pas trop m'avancer en prétendant qu'une tablette sous Android achetée en 2014 (donc sous Android 5) a peu de chances de faire tourner Android 12 aujourd'hui sans problèmes de performances.

Je rajouterai que j'ai fait ces calculs avec mon intention de garder un produit le plus longtemps possible. Or, le taux de renouvellement des périphériques mobiles est absurdement élevé. Je n'ai pas - encore - trouvé d'étude à ce sujet, mais la moyenne mondiale se situe entre un an et demi et deux ans. Et, d'expérience, je confirme que mon entourage non-proche renouvelle son smartphone à peu près à ce rythme. Du coup, le coût de possession explose : un Galaxy S22 remplacé au bout de deux ans aura coûté 430 euros par an (contre 170 pour un iPhone équivalent)...

Après, il faudrait s'intéresser aux motifs de remplacement : j'ai rarement vu (simplement en regardant autour d'une table de convives) des smartphones avec un écran qui ne soit pas rayé ou carrément cassé, et puis il y a les offres des opérateurs qui incitent fortement à la consommation - au renouvellement. Évidemment, le problème n'est pas spécifique à Android, je faisais juste une observation.

Mon expérience personnelle

Bon, tout ce topo, et je n'ai pas encore abordé des cas concrets qui me concernent. Je suis en train de développer une interface web pour piloter ma maison en remplacement de HomeAssistant. J'ai donc quelques prérogatives, bien que je ne pensais pas être obligé de les formuler de façon aussi formelle.

Gestion de la batterie

La tablette sera alimentée quasiment en permanence par USB. Elle siège sur mon bureau, et hors cas spécifiques où je veux pouvoir l'emmener ailleurs dans la maison, elle y reste.

Problème : Android me casse les couilles une fois par jour pour activer le mode de protection de la batterie, sans aucune possibilité de lui fermer sa gueule définitivement. Je ne veux pas activer le mode de protection de la batterie.

Petit rappel de conception électronique : un appareil fonctionnant sur batterie doit être capable de recharger la batterie lorsqu'une source d'alimentation fixe est disponible, si et seulement si la batterie n'est pas pleinement chargée. Dans le cas contraire (si la batterie est pleinement chargée et si l'appareil est branché sur le secteur), l'appareil ne doit être alimenté que par le secteur, sans passer par la batterie. Règle de préservation des accus de base. C'est pas compliqué de mettre un condensateur pour fournir l'alimentation lors du passage du secteur à la batterie...

Ben non : Android ne veut pas que je laisse ma tablette branchée en permanence, parce que le matériel n'est pas capable de faire ça tout seul. Ça ne me dérangerait pas s'il me faisait la remarque une fois, et me laissait la possibilité de ne plus me poser la question ultérieurement. Non : périodiquement, je suis obligé de fermer la notification, faute de quoi le passage en mode protection de la batterie se fait sans mon accord.

Le problème, c'est que si je le laisse faire, la consommation de la tablette triple pendant la recharge, passant de 440mA en moyenne à 1.5A, soit le maximum que mon chargeur peut fournir (c'est lui qui m'affiche en temps réel sur son écran une mesure de la consommation des huit périphériques qu'il peut recharger).

Je préfère envoyer 440mA à ma batterie que 1500, personnellement. Surtout alors que la batterie n'est pas censée se décharger puisque la tablette est branchée en permanence sur le secteur. En gros, la batterie de ma tablette doit se comporter comme un onduleur.

OS bloaté

Bon, de base, Android est bloaté par Google jusqu'à la moelle, c'est connu. Lenovo en a rajouté une couche. Des notifications partout, tout le temps, pour "terminer la configuration de ma tablette". C'est truffé de dark-patterns pour me faire culpabiliser de ne pas avoir créé un compte Google, créé un compte Lenovo, et lier les deux. C'est intrusif, omniprésent, impossible à évacuer.

Sur un tout autre sujet, je suis consterné par l'ergonomie du système. Subjectivement, c'est moche. J'en peux plus du material-design que tout le monde a adopté partout. C'est insupportable de laideur. Et c'est pas les quelques options de "personnalisation" qui sauvent ça.

Subjectivement, encore une fois, le système Apple est beau, propre, et cohérent de base. Il n'a pas "besoin" d'être personnalisé...

Il y a du Google partout, tout le temps. Je ne leur en veux pas vraiment, c'est leur produit, et il y a Apple partout dans iPadOS. Mais j'ai cet affreux sentiment que je ne peux rien faire sans que Google soit au courant. Il faut dire qu'ils se traînent une sale réputation, surtout chez moi, et qui n'est pas usurpée. Je n'ai confiance en rien.

C'est des conneries du genre me laisser choisir le serveur NTP local plutôt que prendre ça comme prétexte pour pinguer les serveurs de Google, passer par des serveurs DNS tiers que je ne connais pas sans me laisser la possibilité de les choisir, ou de désactiver DoH (ce qui permet à Google et aux tiers d'outrepasser mon blocage DNS réseau en me faisant croire que c'est pour ma sécurité alors que c'est pour leur data).

Et quand on examine ce qui circule rien qu'en requêtes DNS dès que la machine est connectée au Wifi (même pas encore à Internet), il y a de quoi devenir parano.

Il y a littéralement des dizaines d'applications installées, non-désinstallables, et je ne sais pas à quoi elles servent. C'est simple, j'ai l'impression d'être sous Windows...

OS non remplaçable

J'ai vraiment fait une connerie en achetant une tablette Lenovo. Du moins, j'aurai dû mieux me renseigner sur les possibilités d'installer autre chose qu'Android. Je partais naïvement du principe que puisqu'Android, c'est (plus ou moins) libre, je n'aurai aucun mal à installer Linux. Après tout, même ma vieille Asus T100TA pouvait faire tourner NixOS, mais à la différence de la Lenovo, l'Asus faisait tourner Windows à la base...

Il y a bien Ubuntu Touch, mais il faut downgrader Android à la version 9 pour pouvoir l'installer. Sauf que c'est absurdement compliqué (il faut installer des tas d'outils, démarrer dans un mode spécial, flasher des trucs, risquer de bricker la tablette, bref, c'est la merde). Et c'est encore plus la merde quand on part de macOS. N'ayant pas de machine sous Windows et n'ayant pas envie de bloater mes Linux avec des merdes pour Android, je considère que l'OS de la Lenovo M10 n'est pas remplaçable.

D'ailleurs, je suis bloqué sur Android 10. J'ai acheté la tablette en janvier 2022. Je ne ferai plus jamais ça.

Pourtant, au niveau du matériel, la tablette fonctionne pas trop mal. C'est pas un iPad c'est certain, mais pour l'usage auquel je la destine (tablette domotique), elle fait le job. Pourtant, après à peine un an, je vais la remplacer à cause des défauts d'Android.

Chrome, c'est de la merde

En tout cas, sur Android. Je n'ai jamais utilisé Chrome en dehors de cette tablette. Mon navigateur, c'est Safari sur périphériques Apple, et Firefox (devenu un moindre mal avec le temps, d'ailleurs... on en reparlera peut-être un jour) partout ailleurs. Sur Android, je me suis dit que j'allais quand même tenter l'expérience. Au final, ce n'est pas le bon navigateur pour faire ce que je veux.

Trois exemples concrets dans le cadre du développement de mon interface web pour la domotique :

  • pas de plein-écran
  • certaines fonctions ou méthodes nécessitent une action utilisateur
  • javascript est mis en pause quand ça lui chante

Impossible d'avoir une page web en plein-écran avec Chrome sur Android. C'est tellement basique que j'ai eu beaucoup de mal à admettre cette vérité. Même l'astuce consistant à placer un raccourci sur l'écran d'accueil ne fonctionne pas. Je suis obligé de passer par du javascript pour ça, ce qui m'amène au deuxième exemple.

Chrome ne permet pas l'exécution de certaines méthodes ou fonctions javascript, sans une action initiale de l'utilisateur. Autrement dit, pour avoir ma page en plein écran, je dois cliquer sur un élément HTML qui déclenche la demande de plein-écran au navigateur. C'est dans la spec, donc ce n'est pas spécifique à Chrome ; par contre, Firefox peut démarrer d'office en plein-écran, lui...

Autre problème du même genre : je veux avoir des notifications vocales via mon application. Je veux lui faire dire certaines phrases à la réception d'un message MQTT particulier. Chrome le supporte bien, mais il faut que j'appuie sur un élément HTML pour ça. Ça rend la synthèse vocale de notifications temps-réel parfaitement inenvisageable... Un problème qui n'existe pas avec Safari sous iPadOS (ni sur macOS d'ailleurs).

Et évidemment, à ma connaissance, il n'existe pas de réglage permettant d'outrepasser ces comportements.

Enfin, et c'est le problème le plus gênant en ce qui me concerne : Chrome décide, au bout d'un certain temps (environ 5 heures je dirai, j'ai pas chronométré), de désactiver l'exécution de javascript. Vu que ma tablette (mon application web) m'affiche l'heure, notamment, ainsi que plein de graphiques et des notifications en temps réel sur l'état de mon réseau, c'est très pénible, surtout que je n'ai pas les yeux rivés sur la tablette en permanence.

On pourrait accuser mon application, mon javascript d'être mal conçu, d'occuper trop de mémoire et de ne pas la libérer (en gros provoquer des fuites), mais non : j'avais le même problème avec HomeAssistant, dont je n'utilisais pas l'application native parce qu'elle me flinguait la batterie. Dès que je touche l'écran, la page se met à jour (elle ne se recharge pas : c'est juste l'exécution de javascript qui reprend normalement).

Et évidemment, à ma connaissance, il n'existe pas de réglage permettant d'outrepasser ces comportements.

Je ne suis pas libre sous Android, je suis contraint, voire (et je n'ai pas peur du mot), violé, parce que l'écosystème Google me force à avoir des comportements qui ne sont pas naturels et dont je ne veux pas, sans m'offrir la possibilité de modifier ces comportements. Je suis soumis à Google. Je n'ai jamais eu ce sentiment chez Apple, qui me laisse faire ce que je veux de mes systèmes.

Conclusion

Android présume en permanence que je ne sais pas me servir de mon périphérique. Du coup, je comprends que pour "le commun des mortels", c'est un choix rassurant. Mais je ne supporte pas qu'on me tienne la bite pour pisser. Si je veux que mon périphérique fonctionne d'une certaine façon, c'est mon choix (...), c'est ma responsabilité de flinguer l'écran ou la batterie plus vite que prévu, ou d'exécuter un code que Google juge dangereux.

Qu'il m'informe, c'est une (relativement bonne) chose, mais je ne tolère pas que le système entrave mon choix.

Je suis content d'avoir toujours évité cet écosystème, et d'avoir toujours milité contre son adoption. Et mon expérience personnelle m'encourage à continuer. Je ne recommanderai jamais le moindre périphérique Android de ma vie.

Je critique âprement l'hypocrisie de tous ceux qui oeuvrent soi-disant pour la liberté sur les périphériques mobiles en promouvant un système aussi dangereux pour la liberté du choix individuel. On ne peut pas accuser Apple de tous les maux en brandissant l'argument d'Android. Et je me réjouis que ce soit de moins en moins le cas.

Par extension, je déplore tous ces constructeurs qui ont pris le système de base (certes, provenant de Google, mais sous licence GPL et Apache) et ont rajouté des surcouches propriétaires. Je déplore également les choix matériels faits par ces constructeurs, dont les fabricants ne fournissent pas toujours le code source, ce qui réduit mécaniquement la durée de vie des périphériques.

Enfin, je suis consterné par l'impact écologique de tout cela. Alors que je peux toujours utiliser confortablement mon iPad Air 2 de 2014, je vais devoir remplacer ma tablette Android après un an seulement. Outre le coût écologique global, il y a aussi le coût économique individuel : aux 197 euros payés initialement il y a un an, je vais devoir ajouter le coût de son remplacement. Même un iPad d'occasion aurait été plus économique en l'espace de deux ans. Et il ne m'aurait pas pris la tête avec des conneries...