.. -*- mode: rst -*- .. -*- coding: utf-8 -*- ============================================ Développement d'application pour Sailfish OS ============================================ :date: 2015-12-31 :tags: Libre, Programmation :logo: /images/sailfish/sailfish.jpg :summary: Petite revue du développement et de la sécurité du système d'exploitation Sailfish, suite à la diffusion de ma première application. .. figure:: {filename}/images/sailfish/sailfish.jpg :figwidth: 150 :figclass: floatleft :alt: Logo de sailfish OS J'ai publié cette semaine ma première application pour Sailfish OS. Il s'agit du système qui tourne sur les téléphones Jolla. Ce petit jeu permet de charger des problèmes de go déjà préparés, pour ensuite les tester et rechercher la solution. La première version a été publiée sur le site openrepos.net_ la semaine dernière, pour la première version du jeu avec les fonctionnalités que je souhaitais. C'est l'occasion de faire une petite revue du développement pour Sailfish OS. .. _openrepos.net: https://openrepos.net/content/chimrod/tsumego Présentation ============ Sailfish OS est un système d'exploitation tournant sur le téléphone Jolla_. Le système est construit en utilisant Qt et Wayland pour la partie graphique. Un terminal est nativement disponible sur le téléphone, et la connexion ssh est prévue sans qu'il ne soit nécessaire d'installer quoi que ce soit. On peut donc dire qu'un bidouilleur sous linux retrouve facilement ses marques sur le téléphone et le système. .. _jolla: https://fr.wikipedia.org/wiki/Jolla L'environnement =============== L'ide ----- Les développeurs ont eut le bon gout d'utiliser des technologies existantes pour faire l'environnement de développement. On dispose donc d'un package comprenant : - Une IDE — Qt Creator - Une machine virtuelle pour faire la compilation vers ARM - Une machine virtuelle pour émuler le téléphone. Le développement se fait donc en QML, et un binding python est également disponible. .. figure:: {filename}/images/sailfish/ide.jpg :alt: Capture d'écran de l'environnement de travail Capture d'écran de l'environnement de travail Des exemples sont fournis, permettant de lancer quelques applications, principalement en QML et javascript ; la partie C++ est limitée au lancement de l'application. On peut remarquer des incohérences autorisées par l'éditeur et le compilateur dans l'agencement des composants — par exemple il est possible de mettre un composant « page » dans un autre composant « page » ce qui provoque des erreurs à l'affichage ou dans le comportement. Quand on a pris l'habitude des langages fortement typés où le compilateur bloque tout programme mal structuré, ça agace… Il s'agit d'un problème dans l'éditeur Qt Creator et non sur le système mais pour un développeur qui ne connaît pas, ce genre de problème met du temps avant d'être compris et résolu. La documentation ---------------- La documentation ne couvre que la partie composant graphique de QML. Les composants propres au système Sailfish OS sont bien décrits et l'aide est intégrée à Qt Creator sans qu'il soit nécessaire d'aller chercher sur le net (la documentation autrefois disponible en ligne a été retirée lors de la dernière diffusion de l'environnement de développement ; on trouve donc de nombreux liens qui pointent désormais inaccessibles… ) Par contre, le fonctionnement des binding python (par exemple) n'est pas couvert, et il est nécessaire de parcourir le code des autres projets pour comprendre comment utiliser telle fonctionnalité. La compilation -------------- À travers quelques clics, il est facile de changer la cible de la compilation : - Un exécutable à lancer dans l'émulateur - Un RPM à destination d'une plate-forme ARM - Un RPM pour une architecture locale Il n'y a donc aucune difficulté pour tester packager, diffuser une application. Bilan ----- Je n'ai eu aucun problème à installer et lancer l'environnement de développement. Tout fonctionne correctement dès l'installation sans rien avoir à configurer. Les technologies utilisées sont plutôt bien choisies (au moins pour quelqu'un qui a déjà son PC sous linux), et actuelles. Je pense que le pari d'avoir choisi Qt est gagnant, autant pour l'équipe de développement du système, qui dispose déjà d'un environnement bien construit que pour le développeur d'application qui trouve facilement de la documentation pour son besoin. L'émulateur tourne dans une image virtualbox. Il est possible de se connecter à la machine via ssh, ce qui permet d'accéder au système, il n'y a pas de limitation d'accès et il est possible d'être root comme sur le téléphone. Sur mon poste, l'environnement est beaucoup plus lent que le téléphone, il est parfois nécessaire d'attendre un moment avant de charger une page et qu'une animation se termine. La sécurité =========== .. figure:: {filename}/images/hacking/2294144289_a54db90ac5_q.jpg :figwidth: 150 :figclass: floatright :alt: Security `David Goehring`_ (creativecommons_) .. _David Goehring: https://www.flickr.com/photos/carbonnyc/2294144289 .. _creativecommons: https://creativecommons.org/licenses/by/2.0/ Gestion de droits ----------------- **Oups !** Contrairement à un système android, dans lequel les applications affichent les droits qu'elles requirent (avec plus ou moins de succès bien sûr), ici rien de tout ça : le développeur est maître à bord de son application, et celle-ci tourne avec les droits de l'utilisateur en disposant pleinement du système. On dispose donc d'un accès à l'ensemble des fichiers, aux connexions réseaux etc. Ça rend le développement bien sûr plus facile, mais ça signifie qu'il faut rester vigileant quand on télécharge une nouvelle application. En fait le comportement est identique à la situation que l'on peut rencontrer sur son poste d'utilisateur : l'utilisateur installe ce qu'il veut sur son ordinateur, et ce qu'il installe relève de sa responsabilité… Pour l'instant, une grosse partie de la sécurité repose sur la faible utilisation du système, mais à terme, le problème risque de prendre de plus en plus d'importance… La diffusion ------------ Il n'est pas difficile de diffuser son application une fois prête. Le site openrepos permet facilement d'ouvrir un compte et fournir un espace pour envoyer ses applications. Du côté utilisateur, il suffit d'activer le compte du développeur pour pouvoir installer l'ensemble de ses applications. Par contre, le *open* du nom indique juste que le site est ouvert à tout le monde : aucune obligation de diffuser son code source (ni même aucune garantie que le code que l'on télécharge correspond à celui affiché…). Cela veut donc dire qu'il faut être prudent lorsqu'on télécharge une application. Pour l'instant je n'ai pas entendu parler de compte diffusant des malwares (la faible part de marchés des téléphones jolla doit aider), mais c'est un gros avertissement pour l'ensemble des utilisateurs. .. admonition:: Bémol Il faut quand même avoir autorisé l'installation d'applications depuis des dépôts tiers pour pouvoir installer les applications depuis ce catalogue. (mais qui aujourd'hui n'a jamais installé une application depuis un catalogue non officiel ?) Quelles solutions ? ------------------- La sécurité est une affaire de contraintes et de confiance. Contrainte pour garantir qu'une application ne sort pas du cadre qui lui a été accordée, et confiance de l'utilisateur vers l'application qu'il utilise (ou vers la chaîne qui relie l'application au développeur). Pour l'instant aucun des deux points n'est satisfaisant. Pour autant, il n'existe pas de solution parfaite : les droits accordés aux applications android n'empêchent pas la diffusion de malwares sur le système, et les développeurs échangent avec les utilisateurs sur les `forums de maemo`_, ce qui permet de garder une proximité. .. _forums de maemo: http://talk.maemo.org/forumdisplay.php?f=52 Tout ça pour dire que cette solution n'est peut être pas viable à grande échelle, mais elle n'est pas non plus catastrophique *pour l'instant*. Pour autant je n'ai pas vu de discussions qui vont dans le sens de mettre en place davantage de contrôles sur les applications sur les catalogues d'applications.