Replicant Logo« Android représente une étape majeure vers un téléphone portable libre qui soit contrôlé par l’utilisateur, mais il y a encore beaucoup de chemin à parcourir. Les hackers travaillent sur Replicant, mais c’est un gros travail de rendre un nouveau modèle compatible, et il reste encore le problème du micrologiciel. Même si les téléphones Android d’aujourd’hui sont considérablement moins mauvais que les smartphones d’Apple ou de Windows, on ne peut pas dire qu’ils respectent vos libertés. »

Ainsi se termine l’article de Richard Stallman consacré à Android et la liberté des utilisateurs. On y évoque donc le projet Replicant qui vise à produire un dérivé entièrement libre du système d’exploitation de Google.

Or il se trouve que nous avons la chance d’avoir l’un des développeurs du projet parmi les membres traducteurs de Framalang. Il eut été alors dommage de ne pas en profiter pour en savoir plus et comprendre la difficulté qu’il y a à tenter de libérer totalement un téléphone portable.

On notera que ce développeur est encore lycéen, ce qui fournit au passage un excellent témoignage d’une jeunesse qui, ayant découvert le logiciel libre, n’a plus forcément envie de passer tout son temps sur Facebook :-)

Le projet Replicant, présenté par le développeur PaulK

Présentation de PaulK, un des deux développeurs du projet Replicant

Je m’appelle Paul et me présente souvent sous le pseudo « PaulK ». Je suis actuellement lycéen (en filière scientifique) et utilise du logiciel libre depuis 2008.

J’ai commencé avec l’utilisation de Ubuntu 8.04, en dual boot avec Windows à l’époque. En décembre 2009, j’ai décidé de passer sur Fedora, qui respectait mieux ma vision de l’informatique libre (en mettant en avant la liberté et non le seul caractère « Open Source »). Déjà à l’époque, j’étais un fervent lecteur du framablog et enthousiaste des projets de Framasoft. J’ai progressivement commencé à appendre la programmation (en C) et me suis finalement débarrassé de mes partitions Windows. J’ai aussi commencé à contribuer à certains projets proches du monde du logiciel libre, comme OpenStreetMap.

Début 2010, j’ai commencé à m’intéresser aux différentes solutions des plus libres dans le domaine de la téléphonie mobile. Je suis finalement tombé sur le site web du projet Replicant et suis allé jeter un œil sur le canal irc du projet (#replicant sur irc.freenode.net) : j’y ai trouvé le développeur principal du projet, qui, connaissant très bien la question m’a exposé les différentes solutions existantes. J’ai opté pour le Neo FreeRunner, le téléphone « le plus libre » (100% de logiciel libre tournant sur le CPU) avec à la fois une communauté francophone et internationale dédiée au projet. Je l’ai utilisé comme téléphone principal mais l’ai endommagé (avec mon fer à souder) par mégarde , après de nombreux mois d’utilisation. Pour trouver un successeur, je suis revenu sur le salon IRC du projet Replicant pour finalement choisir un HTC Dream, sur lequel j’ai installé Replicant. J’ai ensuite commencé à vouloir aider au développement du projet, après avoir compilé mes premières images du système.

En effet, depuis que j’ai commencé à utiliser GNU/Linux, mon intérêt pour la programmation n’a cessé de croitre et j’ai finalement manipulé un certain nombre de languages : C, Perl, Javascript, Lua… Contribuer au projet Replicant m’a, entre autres, permis d’apprendre les bases de Git, de comprendre et modifier des drivers du noyau, de mettre en application très concrète mes connaissances en C…

Depuis plusieurs mois, je concentre mon attention sur le support du Nexus S, le dernier téléphone de Google/Samsung.

Présentation du projet Replicant

Le projet Replicant vise à produire un dérivé entièrement libre d’Android, le système d’exploitation destiné au matériel embarqué (et originellement aux téléphones) produit par l’« Android Open Source Project » (désigné par AOSP) , dirigé par l’« Open Handset Alliance », qui est menée par Google. La version d’Android telle que produite par l’AOSP contient du code provenant de divers horizons et distribué sous diverses licences : du code sous GNU GPL, du code sous BSD et par exemple pour ce qui a été écrit par l’AOSP, du code sous licence Apache 2. A l’exception de quelques micro-logiciels (firmwares), le code d’Android tel que fourni par l’AOSP est libre.

On peut donc télécharger ce code source, éventuellement retirer ces firmwares et le compiler afin d’obtenir un système totalement libre. Le problème principal ici est qu’une telle version d’Android serait absolument inutilisables sur un téléphone. Seul l’émulateur Android (celui présent dans le « SDK ») fonctionnerait sans poser de soucis.

En effet, la grande majorité des téléphones fonctionnant sous Android nécessitent, à un moment ou à un autre, des librairies, programmes ou firmwares non-libres. La quasi-totalité de ces composants non-libres touchent directement à la communication avec le matériel : du traitement des données en provenance des accéléromètres jusqu’au composant en charge de dialoguer avec le modem (ce qui gère toutes les fonctions liées à la téléphonie, à l’envoi des messages, à la connexion 3G, etc).

Le projet Replicant a donc deux objectifs :

  • fournir un système basé sur Android entièrement libre
  • écrire des remplacements aux composants non-libres afin de pouvoir utiliser le téléphone avec Replicant « pour de vrai ».

Chaque appareil ayant ses particularités, son propre matériel, il faut un noyau particulier par appareil, une image du système avec les librairies et les configurations adaptées par appareil, ce qui demande de faire le travail séparément pour chaque appareil : il n’y a pas de remplacement miracle qui marcherait avec tous les appareils Android d’un coup lorsqu’il s’agit de fonctions bas-niveau touchant au matériel. Ceci rend donc le travail très long et demande aussi au développeur de posséder chaque téléphone sur lequel il travaille.

L’état actuel du projet

Pour l’instant, le nombre de téléphones supportés par le projet Replicant est relativement réduit : en effet, seuls deux développeurs font partie du projet, mêmes si des aides extérieures sont souvent là pour participer au développement. A l’heure actuelle (fin 2011), les modèle suivants sont utilisables : HTC Dream, HTC Magic, Google Nexus One (nécessite des firmwares non-libres pour que l’audio fonctionne) et le Google Nexus S n’est pas encore prêt dans le sens où les fonctions liées à la téléphonie n’ont pas encore été libérées (mais le travail est en cours).

La liste plus détaillée des fonctionnalités présentes avec Replicant pour chaque téléphone est disponible sur cette page.

De plus, le projet dispose d’un site web, où sont postées les dernières nouvelles du projet, d’une liste de diffusion et d’un canal IRC.

Petit historique du projet

Replicant n’est pas un projet très ancien : démarré à l’été 2010 afin de rassembler plusieurs initiatives isolées visant à produire une version entièrement libre dérivée d’Android pour le premier « Google phone », le HTC Dream, le projet a vite abouti à l’écriture de code pour remplacer les parties non-libres : le premier composant non-libre à avoir été remplacé a permis à l’audio de fonctionner sans composants non-libres. L’idée de créer un dépôt libre d’applications, s’accompagnant d’un logiciel client pour Android (et donc Replicant) a également été envisagé assez rapidement, mais cette première tentative n’a pas abouti. Plus tard, le projet Fdroid viendra combler ce manque, fournissant un dépôt d’applications libres faisant directement office de remplacement à l’« Android market ». La partie gérant la communication avec le modem (dite « RIL ») a ensuite été remplacée par du code libre, rendant ainsi le téléphone utilisable. Une librairie pour le GPS a aussi été adaptée à partir de code libre destiné à un autre téléphone. L’horizon du projet s’est également élargie avec le début du port de Replicant sur le Nexus One, qui a d’ailleurs été offert au développeur principal par Google, preuve de leur intérêt ou curiosité pour le projet Replicant. Maintenant, c’est le Google Nexus S qui est en train d’être porté sur Replicant (mais aussi sur GNU/Linux, au sein du projet SHR).

Le problème des firmwares malveillants, ou le problème principal auquel Replicant ne peut pas apporter de solutions

Si nous nous efforçons de produire des remplacements libres pour la plupart des composants non-libres présents les version d’Android distribuées avec les téléphones, il y a certains composants qu’il nous est (pour l’instant) impossible de remplacer. C’est en effet particulièrement le cas de certains firmwares, tels que le logiciel (non-libre) qui est exécuté sur le modem. Aucun des développeurs du projet n’a les compétences techniques pour réaliser une alternative libre à ce composant et de toute façon, il ne serait pas légal d’exécuter un tel logiciel sur les réseaux des opérateurs. En effet, ceux-ci ne seraient pas certifiés. Le seul projet de remplacement libre du logiciel contenu dans le modem se nomme OsmocomBB et devrait fonctionner sur un nombre très réduit de téléphones, incluant le Neo FreeRunner (qui n’a par défaut pas de logiciel libre sur le modem mais bien un logiciel propriétaire). Pour plus de détails, reportez-vous à la page présentant les aspects légaux du projet.

Si le logiciel exécuté sur le modem est forcément non-libre, alors tout ce qui est connecté directement au modem est nécessairement compromis : si le GPS est attaché au modem et non au processeur principal, le GPS est contrôlé par un logiciel non-libre qui, s’il gère par exemple également la connexion de données (3G), ce qui est le cas pour un modem, pourra éventuellement recevoir ou envoyer des informations obtenues du GPS, telles que la position très précise de l’utilisateur, à tout moment et sans aucun contrôle possible de la part de l’utilisateur. Ainsi, si le matériel est fait d’une telle sorte, utiliser Replicant sur le processeur n’aidera pas à solutionner ce genre de problème.

Un des freins majeurs au développement de Replicant : l’incapacité d’installer une image non-officielle d’Android sur beaucoup de téléphones

En effet, un nombre très important (pour ne pas dire la majorité) des téléphones Android n’offrent aucun moyen à l’utilisateur d’installer un système non-officiel sur son téléphone. Comme s’il était interdit et impossible de changer le système d’exploitation de son ordinateur. Toutefois, sur certains téléphones, il est possible, d’une manière ou d’une autre, de permettre à l’utilisateur de replacer son système actuel par une autre version, pas nécessairement officielle, d’Android. Cette pratique s’appelle le « rooting » du téléphone. Il s’agit généralement d’exploiter une faille de sécurité présente sur le système Android afin d’obtenir les droits root et ainsi de pouvoir écrire un petit logiciel qui permettra par la suite de remplacer le système d’exploitation du téléphone. D’autres méthodes de « rooting » du téléphone consistent à modifier le chargeur de démarrage (dit « bootloader ») du téléphone afin que celui-ci propose l’installation de nouvelles images (il s’agit des fichiers contenant le système Android, le noyau, etc). Alors que la première technique est souvent sans danger, même si elle va dans la plupart des cas rompre la garantie, la seconde technique peut rendre le téléphone inutilisable : si le chargeur de démarrage est altéré au point de ne plus pouvoir fonctionner, le téléphone ne démarrera plus. Ceci n’est, dans la plupart des cas, pas irréversible mais demandera un matériel adapté et une connaissance spécifique pour remettre le téléphone en état.

Toutefois, la plupart des constructeurs réalisent maintenant qu’il est dans leur intérêt de proposer des chargeurs de démarrage permettant d’installer d’autres systèmes d’exploitation, et encouragent parfois le développement de tels systèmes. Le projet CyanongeMod[1], dérivé d’Android et sur lequel Replicant se base en est un bon exemple : plusieurs constructeurs tels que Samsung ou Sony Ericsson sont en effet très favorables au développement de CyanogenMod pour leurs téléphones (même s’il ne s’agit pas encore de vendre des téléphones avec CyanogenMod pré-installé).

De plus, les « Google phones », le T-Mobile G1, le Nexus One et le Nexus S sont eux-aussi munis d’un chargeur de démarrage permettant l’installation de systèmes non-officiels.

Notes

[1] CyanogenMod est un fork d’Android : des modifications sont apportées aux sources d’Android telles que mises à disposition par l’AOSP ainsi que le support pour tous les téléphones qui ne sont pas des « Google phones » (le code de l’AOSP ne couvre que les Google phones). Replicant est lui-même un fork de CyanogenMod et profite ainsi des améliorations apportées par ce projet.