SDK et N9, pourquoi un port est impossible

Le Nokia N9, premier et dernier représentant de la gamme des téléphones MeeGo

Vous êtes nombreux à attendre le portage de Sailfish sur le N9, et depuis quelques temps, le SDK de Sailfish est sorti. Beaucoup de travail a été fait, comme un port sur une tablette ExoPC, ou Iconia, mais aucune information n’a filtré quant-à un port pour nos précieux N9, les ancêtres des futurs Jolla-phones, et vous vous demandez bien pourquoi une pareille injustice vous arrive.

Un peu de hardware

Il faut savoir que les téléphones portables de nos jours sont très différents des ordinateurs de bureau. La plupart d’entre eux embarquent une puce de type ARM pour CPU, alors que les PC ont une architecture X86.

Les puces ARM (pour Advanced RISC Machine) sont des puces assez simple, si bien qu’elles sont très peu chères. Elles possèdent une architecture de type RISC (reduced intructions set computing), qui signifie que le CPU intègre peu de fonctions. Il n’y a pas d’optimisations mathématiques en tout genre. Cette simplicité leur permette d’être facile à fabriquer, et de consommer moins d’énergie même si la performance est moindre.

Les puces X86, quant-à-elles, sont plus puissantes, et sont le summum de la recherche en informatique. Elles embarquent plusieurs types d’unités et sont capables de faire des calculs complexes de manière efficace (calcul vectoriel par exemple). Le gros représentant de cette architecture est Intel, qui équipe les PC depuis des dizaines d’années. La performance se paie évidemment, avec une consommation souvent plus élevée.

Le problème de ces deux architectures, c’est qu’ils ne «parlent pas la même langue». Et même si ils la parlaient, si j’ai un programme qui  a l’habitude de tourner sur le X86, et qui appelle ces fonctions complexes et efficaces, et que je le copie sur un ARM, qu’est-ce qui se passerait si il appelait cette fonction qui est là inexistante ? Un gros plantage.

Et c’est en fait ce qui se passe. Il n’y a aucune fonction commune entre ces deux types de processeur. Ils ne parlent pas la même langue. Il est donc impossible de faire tourner du code X86 sur ARM.

Confusion sur les termes

Et c’est malheureusement ce que la communauté N9 demande au développeurs de faire. L’image de Sailfish distribuée par Jolla est une image faite pour les ordinateurs, donc X86. En effet, pour que l’émulateur tourne mieux sur un ordinateur, il est préférable de distribuer une image correspondant au processeur la machine, sinon des performances sont gaspillées pour simuler l’architecture de l’émulateur.

Le SDK a donc été fourni avec l’image X86. C’est un changement notable par rapport à l’ère Nokia où les images étaient ARM (et où les simulateurs tournaient moins bien). La communauté, habituée à voir des images ARM, a attendu de Jolla la même chose, or, une image X86 a été fournie, inexploitable pour les développeurs.

Ce terme de SDK a été donc mal interprété. Mais il faut le rappeler que SDK signifie Software development kit, ce qui a à voir avec le développement d’applications, mais en aucun cas avec portage.

La revanche des PC

Pour un développeur, il n’y a pas de désarroi, seulement des opportunités. Le SDK avec une image X86 a probablement fait grincé des dents, mais pour des hackers comme Martin Brook, c’était une chance pour effectuer un port vers sa tablette-netbook favorite, l’ExoPC, entrainant une vague de ports sur du matériel X86 varié.

Cet effort n’est en aucun cas perdu, car elle permet aux développeurs de se familiariser avec l’architecture de Mer, de Nemo et de Sailfish. Et ces informations seront très utiles pour le futur port ARM.

En bref, il est impossible de faire un port pour le N9 en l’état actuel des choses. La sortie du téléphone Jolla devrait changer la donne, car il est très probable qu’il soit ARM, et donc que l’image ARM soit disponible. De plus, Jolla, même si il ne peut pas sortir une image officielle, a promis d’aider les développeurs indépendants pour faire le port, et il suffit de voir Nemo pour savoir que Sailfish tournera bien sur un N9.

EDIT:

PS: avec un brin d’audace

Le titre de cet article était fait exprès pour être choquant, et marquer les esprits. Il faut se rappeler du message: il est impossible de porter Sailfish OS sur le N9 en utilisant l’image du simulateur fournie dans le SDK. Mais il est tout de même possible de faire des choses rigolotes, les développeurs étant sans limites, et techniquement, la phrase précédente est même fausse.

En fait, il est possible d’écrire des émulateurs de machines, c’est-à-dire un programme qui simule ce que ferait un processeur, un GPU etc, dans un autre ordinateur. C’est ce qu’on appelle les machines virtuelles. Et il serait envisageable d’utiliser une machine virtuelle pour simuler un ordinateur X86 sur le N9. Mais on imagine les problèmes de performance qui en découleraient.

On se rappelle tous de cet exploit, qu’un développeur avait réussi à faire tourner Mac OS X sur son N900, il s’agit ici de la même procédure, mais il faut s’attendre à un temps de réaction de type démarrage en 3 jours, clic sur un menu tenu compte en 2h etc.

Et le SDK ne se limite pas à l’image du simulateur. Même si elle est le composant le plus intéressant, il est imaginable de porter l’éditeur, QtCreator sur le N9. L’intérêt serait limité, mais il est possible, et même simple de le faire, puisque les sources sont disponibles.

Merci air_dex d’avoir souligné ces points 🙂

 

A propos de Sfiet_Konstantin

Développeur Qt, fan du N950 et du N9, et ayant un regard critique dans le monde de la mobilité et leurs interfaces graphiques, j'ai aussi été stagiaire chez Jolla durant l'été 2013.

22 Replies to “SDK et N9, pourquoi un port est impossible”

  1. Un vrai article de développeur, sans aucun doute :). TOUS les mots sont importants et si le lecteur loupe ne serait-ce qu’un seul mot, alors tout devient contradictoire et tout s’amalgamme par manque de nuance (OSpadon, son SDK et son image x86).

    Par contre le titre lui n’est pas bon. Le Sailfish SDK est théoriquement portable sur MeeGo Harmattan et le Nokia N9.

    L’image x86 de Sailfish OS fournie par Jolla n’est effet pas directement utilisable sur les machines ARM, dont le N9. C’est là le but de l’article. Par contre on peut théoriquement l’utiliser de manière indirecte. On peut très bien imaginer quelqu’un (un fou 😛 ?) qui crée un émulateur x86 pour le N9. Certains le font bien pour Windows RT, un OS que l’on trouve exclusivement sur machines ARM ( http://www.lemondeinformatique.fr/actualites/lire-un-emulateur-x86-pour-la-tablette-surface-52600.html ). À partir de ce moment là, faire tourner la fameuse image x86 sur le N9 devient une réalité. Il y aurait certes un (grave ?) problème de performances (émulation d’une architecture hardware différente, ressources hardwares limitées du N9) mais n’empêche que c’est possible dans l’absolu.

    De plus, le SDK ne se limite pas à l’image x86. Il y a aussi SailfishOS IDE qui lui est loin d’être non portable. SailfishOS IDE est basé sur Qt Creator qui est « écrit en Qt » (j’aime pas ce terme mais bref) et surtout compilable sur machines ARM (ici sur un Raspberry Pi, machine ARM : https://twitter.com/vgrade/status/260461163572236289/photo/1/large ). Partant de là on peut imaginer un port de SailfishOS IDE sur MeeGo Harmattan et donc fonctionnant sur un N9. C’est très loin d’être inconcevable. Il y a aussi le port des outils du Qt SDK (qmake, moc, bientôt qbs…), des utilitaires de packaging RPM, du compilateur pour Sailfish OS et de leurs dépendances à tous (Qt mais pas que) qui sont du même acabit.

    Ça + mon « émulateur x86 pour MeeGo » du dessus font du coup que l’intégralité du SDK est théoriquement portable sur le N9 (avec les problèmes de perfs toussa…). Et là ton titre « SDK et N9, pourquoi un port est impossible » prend sacrément du plomb dans l’aile. « Pourquoi il est impossible de porter la version de Sailfish OS fournie avec le SDK sur le N9 » aurait donc été un bien meilleur titre.

    • Hahaha, tout ce que tu dis est vrai aussi, et j’aime parfaitement l’idée de QtC tournant sur le N9, mais je vais garder le titre de l’article comme ça.

      En fait, je m’en fiche que le titre soit juste ou non, il faut uniquement que je marque les esprits en disant: SDK != port. Même si en fait, on pourrait le faire 🙂

    • @air-dex: Concernant ton « émulation x86 pour Meego » je m’excuse mais je ne suis pas d’accord. Le titre est rigoureusement exacte dans ce cas de figure
      La preuve: http://fr.wikipedia.org/wiki/Portage_informatique
      L’émulation par le biais d’une machine virtuel (VM pour les intimes) ne peut en aucun cas s’apparenter à un portage (port). En fait, tu as le N9 qui fait tourner ta VM (l’émulateur compilé pour ARM et non x86) et l’environnement dans lequel s’exécuterait (hypothétiquement) Sailfish OS serait du… x86!! Il n’y a donc pas même un soupçon de portage la dedans!

      • On chipote sur les termes, et vous avez tous les deux raison je dirai.

        Même si dans l’absolu, le « port par émulation » ne peut pas s’apparenter à un port, la notion de « port » ici c’est le fait de tourner Sailfish sur le N9, et utiliser une couche d’émulation matérielle permet de le faire (mal mais bon …)

    • Alors là, je suis particulièrement curieux. J’aimerais bien avoir un appareil de ce genre en main pour voir si ça peut marcher, et je pense que ça peut vraiment bien marcher 🙂

  2. Pour info? J’imagine que tout est possible, mais est ce que théoriquement sailfish pourrait etre flashé sur un lumia. En gros effacer toute trace de wp et installer l’ospadon? Si c’est techniquement impossible, pourquoi?

    • Impossible: le bootloader du Lumia est bloqué, si bien qu’on peut rien mettre dedans. Sinon, des gens auraient mis du Android dessus.

  3. Rétroliens : SDK Sailfish y Nokia N9 ¿Porqué no es posible portarlo al N9? | MundoMeego

  4. Rétroliens : SDK Sailfish y Nokia N9 ¿Porqué no es posible portarlo al N9? | MundoSailfish

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*