URL: https://linuxfr.org/news/punix-le-bapteme-du-feu Title: Punix, le baptême du feu Authors: Thomas Debesse baud123, Xavier Teyssier, patrick_g, Benoît Sibaud et claudex Date: 2012年03月18日T16:53:45+01:00 License: CC By-SA Tags: calculatrice, unix, ti, ordinosaure, troll, kernel et dmca Score: 85 Punix (Punny Unix) est un système d'exploitation développé par Christopher Williams pour les calculatrices Texas Instruments à base de Motorola M68000. Le projet avance lentement mais sûrement, et le 7 mars dernier, Christopher a passé une étape importante : l'installation et l'exécution de Punix sur une machine réelle, sa TI 92 Plus. Punix est un projet intéressant pour ceux qui souhaitent étudier le fonctionnement d'un système d'exploitation POSIX, mais qui ont peur de se perdre dans les sources d'un poids lourd du libre comme Linux. Ce projet intéressera aussi ceux qui aiment programmer en [assembleur](http://fr.wikipedia.org/wiki/Assembleur) au plus près de leur matériel et sans [MMU](http://fr.wikipedia.org/wiki/Unit%C3%A9_de_gestion_m%C3%A9moire), ceux qui aiment les architectures simples, et tout hacker qui aime dépasser les limites d'un système, juste parce que c'est possible ! Le test de Punix sur une vraie machine est l'occasion de présenter l'architecture matérielle visée, le système d'exploitation en lui-même et les outils pour développer. Au menu : des forks, des trolls et des vaporwares, mais surtout beaucoup de logiciel libre, énormément de passion, et un n-ième clone d'Unix. Punix ? A (free) operating system (just a hobby, won't be big and professional like gnu)[*](http://groups.google.com/group/comp.os.minix/msg/b813d52cbc5a044b). ---- [Punix OS: First time real calc!](http://punix-os.blogspot.fr/2012/03/first-time-real-calc.html) [L'annonce sur Ti-Fr](http://www.ti-fr.com/?co=1&n=296) [L'annonce sur TI-Planet](http://tiplanet.org/forum/viewtopic.php?t=8881&p=121592) [Le projet sur SourceForge](http://sourceforge.net/projects/punix/) ---- # L'architecture # Punny Unix est développé pour les calculatrices à base de [Motorola 68000](http://fr.wikipedia.org/wiki/Motorola 68000 "Définition Wikipédia"), un microprocesseur CISC 16/32bit. La première calculatrice Texas Instruments à exploiter ce processeur fut la [TI-92](http://fr.wikipedia.org/wiki/TI-92 "Définition Wikipédia"), sortie en 1995. Depuis, sont sortis plusieurs variantes du modèle, la [TI-92 Plus](http://fr.wikipedia.org/wiki/TI-92 Plus "Définition Wikipédia"), la [TI-89](http://fr.wikipedia.org/wiki/TI-89 "Définition Wikipédia"), la [TI Voyage 200](http://fr.wikipedia.org/wiki/TI Voyage 200 "Définition Wikipédia") et la [TI 89 Titanium](http://fr.wikipedia.org/wiki/TI-89_Titanium "Définition Wikipédia"). La TI 92 originelle ne possédant pas de mémoire flash et ne pouvant être mise à jour, elle n'est donc pas concernée par Punix. La TI89 et la TI92+ partagent la même architecture matérielle, mais possèdent un clavier et un écran différent. Cette architecture fut révisée quatre fois et ces révisions sont communément nommées HW1, HW2, HW3 et HW4. Processeur : m68k 12 Mhz (92+, 89, 89T, V200) ou 16 MHz (89T HW4) Ram : 256ko Flash : 2mo (92+, 89) ou 4 Mo (V200, 89T) Écran : LCD 240x128 (92+, V200) ou 160x100 (89, 89T) Connectivité : 1 Port I/O sur Jack stéréo 2.5mm (la 89T possède aussi un port [USB On-The-Go](http://fr.wikipedia.org/wiki/USB On-The-Go "Définition Wikipédia")) Christopher développe pour la TI92+ (qu'il possède) et depuis la beta 4 pour la TI89 HW2 (le modèle le plus proche de sa TI 92+). Pour le moment, il ne se préoccupe pas de la TI 89 Titanium, et ne s'est pas prononcé à propos de la Voyage 200. Les HW1 ne sont pas supportées. Le système d'exploitation préinstallé sur ces machines est [AMS](http://fr.wikipedia.org/wiki/Advanced_mathematics_software) (Advanced Mathematics Software) et parfois appelé TIOS, édité par Texas Instruments et dont la dernière version (la 3.10) est sortie en 2005. Une copie d'écran d'AMS :  ([origine](http://www.ticalc.org/images/news/2006-05-03-hw4.gif)) Punix est donc un système d'exploitation de remplacement. # Le système d'exploitation # Le projet est assez ancien, Christopher [reconnaît posséder des sources datant de 2004](http://www.cemetech.net/forum/viewtopic.php?p=174463#174463), et on trouve ce qui semble être une [première publication en 2005](http://www.ticalc.org/archives/files/fileinfo/366/36671.html). Punix est donc un système d'exploitation alternatif à AMS programmé en C et en assembleur. Comme son nom le laisse entendre, il vise à être un clone d'Unix. Le noyau de Punix est un noyau monolitique standard, similaire aux BSD et à ses clones. Christopher déclare utiliser du code de 2.11BSD, 4.4BSD-Lite, V6/V7 UNIX, Linux, UZIX, et Minix (dans cet ordre en quantité de code), et organise ses sources à la BSD. Comme fonctionnalité notable on peut citer : - Du multitâches préemptif ; - L'ordonnanceur qui va avec ; - Un terminal virtuel dans la console (60x20 pour la TI 92+, 40x16 pour la TI 89). Copies d'écrans de TI 92 Plus et de 89 :   - La connectivité avec une autre calculatrice ou un ordinateur par le port I/O. - La possibilité de jouer du son sur le port I/O. - Un émulateur du FPU M68881. - 4 niveaux de gris (noir, gris foncé, gris clair, blanc) ce qui permet un anticrénelage sur les polices. Exemple d'anticrénelage :  On peut exécuter un petit nombre d'utilitaires unix (simplifiés) comme ``sh``, ``top``, ``cat``, ``true``, ``false``, ``clear``, ``uname``, ``env``, ``id`` et ``date`` et jouer du son (pour tester, exécuter ``tests`` depuis le shell et tapper ``Control+D`` jusqu'au test de /dev/audio). Les processus peuvent engendrer de nouveaux processus en utilisant les appels systèmes vfork() et execve(). Le système de fichier est la fonctionalité majeure qui reste incomplète, à cause de ce manque, execve() comprend quelques noms de commandes codées en dur (comme sh ou top). Le développement du système de fichier devrait enlever cet obstacle. Une copie d'écran du shell : [copie d'écran de Punix montrant quelques commandes dans un terminal](http://sourceforge.net/projects/punix/screenshots/297653) L'ordonnanceur préemptif utilise les valeur de ``nice`` et l'historique de l'usage du processeur pour calculer la priorité d'un processus. Depuis la bêta 4, punix permet d'utiliser un terminal distant depuis une autre calculatrice grâce au programme ``uterm``. # L'émulation de FPU # Le processeur utilisé dans ces calculatrices, le 68000, ne contient pas d'[Unité de calcul en virgule flottante](http://fr.wikipedia.org/wiki/Unité de calcul en virgule flottante "Définition Wikipédia") ou FPU. Seulement les derniers processeurs de cette famille en possèdent (68020, 68040, 68060). Toutefois le 68000 permet d'emuler une FPU de manière logicielle (par l'exception appellée ``F-Line`` ou ``Line 1111 emulator``). Le [68881](http://fr.wikipedia.org/wiki/Motorola_68881) et le 68882 sont les FPU de prédilection pour le 68020, et c'est pourquoi Christopher a choisi de l'émuler. Cette FPU supporte plusieurs formats de nombres entiers et en virgule flottante au standard [IEEE 754](http://fr.wikipedia.org/wiki/IEEE 754 "Définition Wikipédia"). Les registres internes ont une [précision étendue](http://en.wikipedia.org/wiki/Extended_precision) de 80 bits mais sont stockés sur 96bits. L'émulateur de Christopher prend donc en charge ces mêmes formats. À titre de comparaison, le système AMS de TI utilise un format en virgule flottante appelé [SMAP II BCD](http://www.ocf.berkeley.edu/~pad/tigcc/doc/html/timath_bcd.html) sur 80 bits, qui est moins précis et plus lent que la précision étendue. Christopher a décidé de gérer aussi ce format. Le développeur précise que son émulateur ne devrait pas arrondir correctement les précisions étendues car ce format utilise 64 bits pour la fraction, et l'arrondi requiert un ou deux bits supplémentaires de précision pour fonctionner. Les précisions simples et doubles devraient être arrondies correctement. # Le baptême du feu # Après beaucoup d'hésitation, Christopher a donc installé et démarré Punix sur sa TI 92 Plus le 7 mars 2012. La photo du test :  Ce test s'est révélé globalement satisfaisant : ça marche ! Mais plusieurs bugs inattendus se sont tout de même révélés : * L'exception d'erreur d'adressage ne fonctionne pas alors que ça fonctionnait sur émulateur ; * La combinaison de touche Ctrl+On ou Alt+On ne marche pas comme espéré, l'écran se retrouve avec une ligne horizontale à une place aléatoire, probablement un registre au fonctionnement différent en vrai que sur l'émulateur, l'écran ne s'éteint pas. [Ce bug est désormais corrigé](http://www.omnimaga.org/index.php?topic=6795.msg236131#msg236131) ; * Enfin, et probablement le plus gênant, les timers sont plus lents ce qui pénalise fortement la vitesse d'exécution et [rend le pilote audio inutilisable](http://www.omnimaga.org/index.php?topic=6795.msg235918#msg235918) (le son est joué à 5461Hz au lieu de 8192Hz). Ce bug est aussi corrigé, il a donc publié une [vidéo de sa calculatrice jouant un morceau de musique](http://www.youtube.com/watch?v=ksoavrKHIRc). # Les améliorations futures # Certaines améliorations sont plus probables que d'autres... en vrac : * Terminer le système de fichier ; * Compléter l'émulateur de FPU ; * Porter Punix sur la TI 89 Titanium (la TI89 n'est plus vendue, les testeurs potentiels ont certainement une TI89 Titanium), mais le portage est complexifié par une organisation mémoire différente. Il serait très intéressant de gérer l'USB de la Titanium ; * Pouvoir brancher un clavier sur un port PS/2 (cela nécessiterai un adaptateur matériel) ; * Faire de la [synthèse de voix](http://punix-os.blogspot.fr/2012/03/first-time-real-calc.html?showComment=1331772527849#c571834147097810312) ; * Construire un environnement de développement (pour la compilation croisée, ainsi que divers outils), les outils actuels étant surtout pensés pour AMS ; * Porter des bibliothèques, outils et applications pour Punix. [Christopher avait déjà essayé de compiler BusyBox](http://www.omnimaga.org/index.php?topic=6795.msg125642#msg125642), mais il faudrait désactiver beaucoup de choses pour que ça tienne dans la mémoire de la calculatrice ! Et bien sûr, il faudrait porter des jeux. # Les outils de développements # * [TIGCC](http://tigcc.ticalc.org/) est un environnement de développement comprenant un ensemble de patch pour [GCC](http://gcc.gnu.org/) et une librairie (AMS n'est pas vraiment compatible POSIX) permettant de compiler du C pour les calculatrices TI 68k. * [GCC4TI](http://trac.godzil.net/gcc4ti/) : suites à diverses mésententes, des développeurs ont quitté le projet TIGCC et l'ont [forké en 2009](http://www.yaronet.com/posts.php?sl=&s=117939) pour donner naissance au projet GCC4TI... Pour compiler Punix, Christopher conseille d'utiliser GCC4TI car il y aurait des bugs non corrigés dans TIGCC qui rendent Punix inutilisable. * [GNU AS](http://fr.wikipedia.org/wiki/GNU_Assembler) est l'assembleur recommandé, mais certains programmeurs talentueux restent attachés à A68k. * [A68k](http://debrouxl.github.com/gcc4ti/a68k.html) est l'assembleur historique, c'est une maintenance de l'assembleur Amiga de Charlie Gibbs. A68k n'est pas un logiciel libre, mais un graticiel, comme l'indique la licence « _This program is Freely Distributable, as opposed to Public Domain. Permission is given to freely distribute this program provided no fee is charged, and this documentation file is included with the program._ » A68k fait partie de ces très anciens logiciels qui ne peuvent pas être reconnus comme logiciel libre à cause de certaines clauses incompatibles : À titre de comparaison, la première version d'A68k date de 1987, et la [GPL](http://fr.wikipedia.org/wiki/Licence_publique_g%C3%A9n%C3%A9rale_GNU) date de 1989... Cela rappellera à certains le cas de [Pov-Ray](http://fr.wikipedia.org/wiki/POV-Ray#Statut) (dans un tout autre domaine). Le choix d'A68k date de [Fargo](http://fr.wikipedia.org/wiki/Fargo_\(patch\)) pour les TI 92, en 1996. * [TiEmu](http://lpg.ticalc.org/prj_tiemu/) est un émulateur de calculatrice TI 68k, il contient un débogueur. Il en existe un fork, nommé [Emu-TIGCC](https://www.calcforge.org/trac/emu-tigcc/) maintenu par le développeur de TIGCC. Il faut aussi noter le vénérable [VTI](http://en.wikipedia.org/wiki/Virtual_TI), abandonné, propriétaire, uniquement pour windows, déconseillé mais encore utilisé. TiEmu est distribué sous license GPL. # Développer et tester Punix # Pour tester Punix, il suffit de charger une image précompilée (fichier avec extension .tib) dans TiEmu. Pour compiler Punix, il faut [GCC4TI](http://trac.godzil.net/gcc4ti/). Il n'est plus nécessaire de télécharger manuellement la bibliothèque [flashos.a](http://members.chello.at/gerhard.kofler/kevin/ti89prog/flashosa.zip) puisqu'elle est désormais fournie avec GCC4TI. La dernière archive (la bêta 4) a un an, pour lire les source les plus récentes, il faut les récupérer depuis le dépôt subversion : http://punix.svn.sourceforge.net/punix/ Pour compiler la bêta 4, il faut [télécharger l'archive](http://sourceforge.net/projects/punix/files/betas/) sur la page du projet sur sourceforge, la désarchiver et exécuter la commande make dans le dossier src/sys/sys. Si votre environnement de compilation n'est pas un BSD, mais GNU/Linux, vous aurez probablement à modifier la variable ``MAKE`` en ``make`` au lieu de ``gmake`` dans le ``Makefile``. Les sources compilent par défaut pour la TI 92+, pour compiler pour la TI89, il suffit de modifier la variable ``CALC`` en ``TI89`` au lieu de ``TI92P`` dans ce même ``Makefile``. # Installer un système d'exploitation non officiel sur sa calculatrice # Les mises à jour du système d'exploitation sont signées par Texas Instruments, et la calculatrice n'accepte que des versions signées. Les clés sont des clés [RSA](http://fr.wikipedia.org/wiki/Rivest_Shamir_Adleman)-512, [elles ont été factorisées](http://www.ticalc.org/archives/news/articles/14/145/145273.html) à l'aide d'un projet de calcul distribué basé sur [BOINC](http://fr.wikipedia.org/wiki/Berkeley_Open_Infrastructure_for_Network_Computing), le [RSA Lattice Siever](http://distributedcomputing.info/ap-crypto.html#rsalattice). Texas Instruments avait [réagi](http://www.ticalc.org/archives/news/articles/14/145/145316.html) en envoyant des avis [DMCA](http://fr.wikipedia.org/wiki/Digital_Millennium_Copyright_Act), ce qui avait eu pour effet (classique) de multiplier les [sources de téléchargement](http://wikileaks.org/wiki/Suppressed_Texas_Instruments_cryptographic_signing_keys,_28_Aug_2009). L'[EFF prit l'affaire en main](https://www.eff.org/deeplinks/2009/09/ti-leave-those-kids-alone) et mit fin à la [controverse](http://en.wikipedia.org/wiki/Texas_Instruments_signing_key_controversy). Avec ces clés [que l'on trouve facilement sur le net](http://db48x.net/TI-keys/keys.shtml), on peut donc signer soi-même son propre système d'exploitation (ou un [système d'exploitation modifié](http://www.ticalc.org/archives/files/fileinfo/431/43198.html)) avec [RabbitSign](http://manpages.ubuntu.com/manpages/lucid/man1/rabbitsign.1.html). Il reste déconseillé d'installer Punix sur une vraie calculatrice, pour le moment. # Les autres projets # Les développeurs sur TI 68k n'ont jamais été satisfaits des possibilités de programmation de ces machines. À coté d'AMS, il est courant d'installer un kernel tierce-partie qui contourne des limitations d’exécutions et rend plus aisée la programmation, le standard de fait est [PreOS](http://www.yaronet.com/t3/?id=11), publié sous GPL, il est fourni habituellement avec un ensemble de bibliothèques, stdlib (sous un panachage de diverses licenses). PreOS est très utilisé. Parmi ces kernels, on peut citer le projet [Prosit](http://www.ticalc.org/archives/files/fileinfo/105/10511.html) qui voulait proposer le multitâche et une interface graphique pour AMS. Prosit n'a jamais été terminé. Copie d'écran de Prosit :  ([origine](http://www.ticalc.org/archives/files/ss/479/47948.gif)) Au sujet des systèmes d'exploitation complets remplaçant AMS, il y avait eu le projet [LiteOS](https://sourceforge.net/projects/liteos/) (ne pas confondre avec un autre [LiteOS](http://en.wikipedia.org/wiki/LiteOS)) qui n'a jamais abouti non plus. Il y a eu sur la LKML une [discussion](http://lkml.indiana.edu/hypermail/linux/kernel/0005.2/0169.html) et quelques [messages](http://lkml.indiana.edu/hypermail/linux/kernel/0003.0/0894.html) à propos d'un éventuel port de Linux sur TI 68k qui ne semble pas avoir dépassé le stade de discussion. Le premier système d'exploitation alternatif complet à atteindre la maturité est [PedroM](http://www.yaronet.com/t3/?id=19), développé principalement par le développeur de PreOS, Patrick Pélissier. Programmé en C et en assembleur, il propose une compatibilité avec AMS et inclut PreOS. Le projet PedroM revendique faire tourner 97% des programmes prévus pour AMS. La dernière version propose un système de calcul formel basé sur [GMP](http://gmplib.org/) et [MPFR](http://www.mpfr.org/). PedroM est distribué sous license GPL. Quelques copies d'écran de PedroM montrant l'utilitaire de calcul ``zs``.  ([origine](http://www.mirari.fr/WUep))  ([origine](http://www.yaronet.com/~technic/archives/OS/Alpha/screenshot010.png))  ([origine](http://www.yaronet.com/~technic/archives/OS/Alpha/screenshot005.png)) Punix partage du code avec PedroM, mais PedroM n'est pas multitâche et vise une compatibilité avec AMS tandis que Punix vise une compatibilité [POSIX](http://fr.wikipedia.org/wiki/POSIX), les programmes pour AMS ou PedroM ne tourneront pas sur Punix, et inversement. Pour ceux qui désirent écrire leur propre système d'exploitation, il existe une base toute prête, proposée par le développeur de Punix : [ScratchOS](http://www.cemetech.net/programs/index.php?mode=file&id=682). Le système est amorçable, à vous d'écrire la suite ! # Suivre l'information autour de Punix # Si vous voulez en savoir plus et vous tenir au courant des dernières avancées de Punix, en plus de son [blog](http://punix-os.blogspot.fr/), Christopher commente habituellement son travail sur les forums d'[Omnimaga](http://www.omnimaga.org/index.php?topic=6795.0) et de [Cemetech](http://www.cemetech.net/forum/viewtopic.php?t=5886) et répond rapidement aux questions.