Un petit article sur un système BSD un peu particulier : iPhone OS en version 2.x pour l’instant mais cet article devrait normalement s’appliquer sans soucis sur un iPhone 3.0 d’ici quelques jours/semaines.

/!\  Cet article va à l’encontre de ce qu’Apple cherche à imposer sur son produit. /!\

Présentation de l’OS

L’iPhone OS est un dérivé de MacOS X lui même dérivé de FreeBSD. On se retrouve rapidement en terrain connu avec le firewall ipfw par exemple.  L’OS est par défaut bridé par Apple, pour en profiter, pleinement il faut effectuer un JailBreak. Cette opération ne sera pas détaillée dans cet article (Google est très locace sur le sujet). Le système de packages le plus utilisé sur les iPhone jailbreakés est Cydia (un portage iPhone d’apt). Une fois Cydia installé, il est de bon ton d’installer BSD subsystem et OpenSSH.

Une fois l’accès SSH  activé (changer le mot de passe est une très bonne idée), il est possible d’utiliser Cydia en ligne de commande :

#mise à jour de la base de packages

apt-get update

#recherche du package gcc

apt-cache search gcc

#installation du package gdb

apt-get install gdb

Les logiciels suivants seront très utiles pour la suite :

  • iphone-gcc : le compilateur gcc arm
  • com.bigboss.20toolchain : la toolchain qui contient entre autre les fichiers d’include standards
  • gdb : bien utile pour le debug
  • screen : evite de perdre les programmes en cours si le signal wifi est coupé
  • vim : pas besoin de le présenter

toto.c

Nous allons réaliser un programme le plus simple possible :

#include <stdlib.h>
#include <stdio.h>
int main (int argc, char ** argv)
{
printf("%s is working !\n",argv[0]);
return 0;
}

Pour compiler ce programme, nous allons devoir préciser à gcc l’emplacement des headers standards :

# gcc toto.c -o toto -I /private/var/include/

./toto

Killed

L’iPhone a refusé d’exécuter notre programme. En effet, l’OS vérifie que le programme a bien été signé par Apple. Heuresement pour nous, il est tout à fait possible de signer nous-même le programme avec ldid (par contre cette signature ne sera reconnue que sur les iPhone jailbreakés) :

ldid -S toto

./toto

toto is working !

Conclusion

Il est possible d’aller plus loin, un certain nombre de programmes et de librairies libres ont dors et déjà été portées sur iPhone. Il ne vous reste plus qu’à laisser s’exprimer votre créativité. Attention cependant, cette methode ne permet de réaliser que des programmes utilisables en ligne de commande, pour réaliser des interfaces graphiques iPhone, la meilleure solution reste l’utilisation de l’Objective C.

Utiliser FreeBSD en domU dans un hyperviseur Xen sera bientôt possible. Cela faisait déjà un moment qu’une page wiki avait été dédiée à ce projet et qu’une petite équipe travaillait dessus. D’après les derniers tests que j’ai pu faire, le domU FreeBSD est beaucoup plus stable, il reste encore quelques bugs et certains reglages kernel inhabituels sont encore nécessaires mais la solution est presque utilisable pour les bidouilleurs ayant un peu de temps à y consacrer. Pour ceux que ça intéresse, Adrian Chadd met à disposition différentes images kernel ici. Une mailling-list a aussi été dédiée à ce projet.

Pour continuer dans la virtualisation, la version 11 du client XenApp vient d’être ajoutée à l’arbre des ports par Thomas Abthorpe (net/citix_xenapp). Ce client permet donc d’éxecuter des applications Windows virtualisées par un serveur citrix XenApp sous FreeBSD. Attention cependant, ce port nécessite l’utilisation de la compatibilité Linux, les points tricky nécessaires à la mise en place de ce port sont disponibles sur cette page wiki.