Les composants GNU, ou pourquoi Android n'est pas une distribution GNU/Linux
Rédigé par antistress le 20 mai 2013 - 8 commentairesNote : Ce billet aborde la question sous un angle purement technique.
On peut se demander pourquoi les pilotes des appareils fonctionnant sous Android (spécialement les ordiphones et tablettes) ne marchent pas avec nos distributions GNU/Linux habituelles (ou, autrement dit, pourquoi nos distributions GNU/Linux ne peuvent pas facilement tourner sur un appareil fonctionnant sous Android), alors que les deux partagent le même noyau : Linux (d'autant que celui-ci est censé inclure la plupart des pilotes).
Pour rappel, une distribution GNU/Linux inclut généralement a minima :
- un noyau : Linux (créé en 1991),
- des composants du projet GNU (lancé en 1984) comme glibc (pour GNU C Library – la bibliothèque C GNU créée en 1987), coreutils (pour GNU Core Utilities – les outils de base GNU), Bash (pour Bourne-Again shell – le shell GNU).
S'il s'agit d'une distribution pour poste de travail (et pas seulement pour serveur), celle-ci inclura en outre :
- un serveur d'affichage : X.Org, dérivé en 2004 de XFree86 (lui-même créé en 1991) et qui devrait céder prochainement sa place au récent Wayland,
- un environnement logiciel comme GNOME (lancé 1997, basé sur la boite à outils graphiques GTK+), KDE (lancé en 1996, basé sur la boite à outils graphiques Qt) ou Xfce (lancé en 1996 et basé sur GTK+).
Android, sorti fin 2007, a pour seul point commun Linux, le noyau du système d'exploitation (rappelons à ce sujet que, depuis octobre 2011, les projets Android et Linux collaborent pour minimiser les différences entre la version utilisée par le premier et celle publiée par le second).
Android utilise en effet son propre environnement d'exécution (Dalvik), sa propre boite à outils graphiques, son propre serveur d'affichage (SurfaceFlinger) mais surtout sa propre bibliothèque C, Bionic libc, et ses propres API qui ne suivent pas nécessairement la norme POSIX (au lieu d'exploiter celles fournies par le noyau).
Les conséquences de ces choix sont que les applications conçues pour Android ne fonctionnent pas directement sur une distribution GNU/Linux mais aussi, de manière plus embêtante – et peut-être plus étonnante – que les pilotes conçus pour Android sont inutilisables en l'état par une distribution GNU/Linux.
Ces pilotes sont en effet conçus pour la bibliothèque C d'Android (Bionic libc) – qui n'est pas compatible avec la bibliothèque C du projet GNU (glibc) – ainsi que pour les API spécifiques d'Android.
Lorsque ces pilotes sont libres, il est possible d'adapter et de compiler leur code pour GNU/Linux. Hélàs c'est rarement le cas (ces pilotes tournent délibérément en espace utilisateur au lieu d'être inclus dans le noyau afin de ne pas être « contaminés » par la licence GNU GPL du noyau qui obligerait à les rendre libres).
À noter que Firefox OS, dont la sortie est prévue pour cet été, repose également sur un noyau Linux et la bibliothèque Bionic libc de manière à pouvoir utiliser directement les pilotes conçus pour Android et être ainsi, dès sa sortie, compatible avec un grande variété d'appareils.
Inversement, nos distributions GNU/Linux sont compatibles avec un nombre beaucoup plus restreint d'appareils mobiles car les fabricants ne se donnent pas la peine de réaliser des pilotes pour celles-ci.
Face à cette situation, deux solutions sont possibles : développer des pilotes (libres), notamment par rétro-ingénierie (c'est, par exemple, ce qui est en train d'être réalisé pour les GPU embarqués dans les ordiphones et tablettes) ou s'arranger pour pouvoir utiliser les pilotes fermés conçus pour Android (via la bibliothèque libre Libhybris conçue initialement pour le projet Mer – plus ici, ici et là).
Notons pour finir que, si Firefox OS fournit également son propre environnement d'exécution (Gecko), cela ne fait pas obstacle à l'utilisation des logiciels conçus pour Firefox OS sur nos distributions GNU/Linux ou n'importe quel autre système puisque cet environnement met en œuvre les technologies Web (HTML, CSS et JavaScript) que n'importe quel navigateur peut exécuter.
Exemples pratiques :
- Systèmes utilisant GNU et Linux : Debian, Ubuntu (inclus Ubuntu Touch), Fedora, Mageia, openSUSE, Red Hat... mais aussi Tizen, Mer, QtMoko, Open webOS...
- Systèmes utilisant GNU mais pas Linux : Il existe à présent des GNU/*BSD (GNU/kFreeBSD, GNU/kNetBSD), en attendant l'arlésienne GNU/Hurd (qui, en toute logique, devrait s'appeler GNU tout court).
- Systèmes utilisant Linux mais pas GNU : Android OSP (et ses dérivés : CyanogenMod, Replicant...), Firefox OS...
Lire aussi : À quand les smartphones et tablettes libres ? sur LinuxFr.org.
(billet mis à jour à partir des remarques ci-dessous de PaulK – merci à lui)