\documentclass{article}
\usepackage[utf8]{inputenc}
\usepackage[T1]{fontenc}
\usepackage{amsmath,amsfonts,amssymb}
\usepackage[francais]{babel}
\usepackage{times}
\usepackage{xspace}
\usepackage{makeidx}
\usepackage{graphicx}
\usepackage{ifpdf}
\usepackage{a4wide}
\ifpdf
 \usepackage[colorlinks,pdftex]{hyperref}
\else
 \usepackage[ps2pdf,breaklinks=true,colorlinks=true,linkcolor=red,citecolor=green]{hyperref}
\fi
\newenvironment{preuve}{{\bf Preuve~:}}{}

%\newcommand{\bs}{\symbol{92}}
\newtheorem{prop}{Proposition}[section]
\newtheorem{thm}[prop]{Th\'{e}or\`{e}me}
\newtheorem{lem}[prop]{Lemme}
\newtheorem{coro}[prop]{Corollaire}


%\theoremstyle{definition}

\newtheorem{defn}[prop]{D\'{e}finition}
\newtheorem{ex}[prop]{Exemple}
\newtheorem{exs}[prop]{Exemples}
\newtheorem{exe}[prop]{Exercice}
\newtheorem{rem}[prop]{Remarque}
\newtheorem{rems}[prop]{Remarques}
\newcommand{\trick}{\begin{flushleft}
\medskip
\end{flushleft}}
\makeindex

% \renewcommand{\cuttingunit}{subsection} (add HEVEA after % for hacha)
%\input{giacfr.tex}
\ifhevea
\(
\newcommand{\ds}{\displaystyle}
\)
\else
\newcommand{\ds}{\displaystyle}
\fi

%HEVEA\renewcommand{\footertext}{}
\begin{document}
\title{Upsilon, l'environnement Numworks sur calculatrice Casio}
\author{Bernard.Parisse@univ-grenoble-alpes.fr}
\date{Mai 2023}
%\begin{giacjshere}

\maketitle
\tableofcontents

\begin{abstract}
  Upsilon est une évolution de la dernière version redistribuable de l'OS
  des calculatrices Numworks. Il vient récemment d'être porté
  sur les calculatrices Casio Graph 90. Dans ce document,
  je présente rapidement l'utilisation de l'environnement Numworks
  sur les Casio, puis un petit
  historique de son développement. Je conclus sur
  les potentialités d'un tel développement si
  les décideurs en tenaient compte.
\end{abstract}

\section{Portage sur Casio}
Début mai 2023, ``Heath'' a annoncé sur le forum anglophone cemetech le portage
sur les Casio FXCG50 et Graph 90 d'Upsilon, ce qui permet d'utiliser
l'environnement Numworks de 2021 sur une calculatrice Casio. Ce portage
fait suite \`a un 
\ahref{https://github.com/UpsilonNumworks/Upsilon/pull/131}{prototype de portage pour TI Nspire} par Kerry Shen en janvier 2023.

L'installation est extrêmement simple, on récupère
\ahref{https://www-fourier.univ-grenoble-alpes.fr/\home{parisse}/casio/upsilon.g3a}{upsilon.g3a}
puis on branche la Casio Graph 90 sur l'ordinateur,
on tape F1 pour faire reconnaitre
la calculatrice comme une clef USB par l'ordinateur, on copie le fichier
\verb|upsilon.g3a| sur la clef, et voilà. Ensuite il suffit de se déplacer
dans le \verb|MENU| principal Casio jusqu'à voir Upsilon puis on le lance
avec \verb|EXE| et on se retrouve comme sur une Numworks de mi-2021,
avec quelques ajouts dont notamment la réactivation de
certaines fonctionnalités de calcul symbolique (développement, dérivée)
et un module Python de calcul scientifique.
Pour plus d'informations sur l'environnement Numworks, on pourra
consulter le \ahref{https://www.numworks.com/fr/ressources/manuel/}{manuel}
de l'OS Epsilon de Numworks (attention, il y a quelques différences
suite aux évolutions récentes d'Epsilon) et le site
d'\ahref{https://getupsilon.web.app/}{Upsilon}.
La touche \verb|OPTN| remplace la touche Toolbox de Numworks,
la touche \verb|MENU| remplace la touche Home. Pour
quitter l'environnement Numworks et revenir dans l'environnement Casio,
il faut effectuer un appui long sur la touche \verb|MENU| ou taper
sur la touche \verb|DEL| depuis le menu principal Numworks.\\
\includegraphics[width=10cm]{upsilon_menu}\\
Voici par exemple l'éditeur Python~:\\
\includegraphics[width=10cm]{upsilon_py}\\


J'ai fait quelques modification au menu principal de l'environnement
Numworks pour pouvoir échanger des données entre les deux environnements.
En tapant sur la touche $\rightarrow$ (au-dessus de la touche \verb|AC/ON|)
puis un numéro de sauvegarde de 1 à 9, on peut sauvegarder l'état
actuel de la Numworks. En tapant sur la
touche \verb|VARS| on peut échanger des scripts Python entre
les deux environnements ou restaurer une sauvegarde de la calculatrice.\\
\includegraphics[width=10cm]{upsilon_var}\\
On peut modifier la sélection ci-dessus en rouge avec les touches du
curseur, si on tape sur EXE ou sur la touche $\rightarrow$,
on copie le fichier sélectionné d'un
environnement à l'autre (pour un script Python recopié vers Upsilon,
l'appui sur EXE au lieu de $\rightarrow$ indique à Upsilon que
le script doit être automatiquement exécuté
quand on ouvre la console d'exécution).
Lorsqu'un répertoire est sélectionné
dans l'environnement Casio, EXE permet d'entrer dans ce répertoire
(\verb|parent_dir| permet de remonter dans l'arborescence
et l'appui sur la touche de division permet de remonter directement
au niveau racine).
L'appui sur la touche OPTN permet d'afficher la liste de tous
les fichiers/enregistrements au lieu de n'afficher que
les scripts Python (sur Casio, les fichiers trop gros
ne sont pas affichés).
Une fois les échanges entre environnements effectués, on peut taper
sur EXIT pour quitter.

Un des avantages de l'utilisation de l'environnement Numworks dans la Casio,
c'est qu'il permet de sauvegarder des scripts dans la flash de la
calculatrice (plus de risque de les perdre en cas de reset),
scripts que l'on peut ensuite échanger en local avec un PC,
ce qui n'est pas possible avec l'OS de Numworks
(à ce jour, le constructeur propose uniquement la sauvegarde
sur ses propres serveurs, ce qui nécessite une connexion cable
PC-calculatrice et une connexion Internet, sans parler de la
dépendance au constructeur).

Notez qu'on peut accéder aux scripts Python de l'environnement Casio
avec la commande \verb|import|, sans avoir besoin de les recopier
dans l'environnement Numworks. Ceci permet de disposer de toute
la mémoire flash de stockage de Casio de 16M, soit 256 fois plus que
les 64K de stockage de l'environnement Numworks (sur
les 32M de flash de la Casio,
16M sont réservés à l'OS et 16M aux données et programmes
utilisateur, par comparaison la Numworks n'a que 8M de flash et
l'OS Epsilon de Numworks n'offre pas de solution de stockage
de données utilisateur en flash), .
On dispose aussi sur la Casio de {\bf 46 fois plus
de mémoire} de travail que sur une Numworks pour programmer en Python.
Du point de vue matériel, la Casio dispose de 8M de RAM contre
256K sur les Numworks N0110
(les nouvelles N0120 ont 564K de mémoire mais pour l'instant seuls 256K
sont utilisés), Python dispose de 2.9M de mémoire de travail
sur les Casio et de 64K sur une Numworks.

Un autre petit avantage de la Casio
Graph 90, elle dispose d'une résolution d'écran
un peu supérieure (+15\%: 224x396 contre 240x320).
Et on bénéficie de tout l'environnement Casio (dont
tableur, géométrie, application 3d, et tous les addins développés
par la communauté, par exemple $\chi$CAS).

\section{Un peu d'histoire}
\subsection{Numworks, Epsilon et Upsilon.}
Numworks est apparu sur le marché fin aout 2017 et a conquis en
quelques années un tiers environ du marché des calculatrices
graphiques en France. Une de leurs spécificités sur laquelle
Numworks a pas mal communiqué, c'est que le logiciel de leur
calculatrice était open-source, c'est très certainement un des
arguments clefs qui leur a permis de se faire connaitre au début.
Pour être précis, en 2017, la licence d'Epsilon était assez
restrictive, car elle ne permettait pas la redistribution. La communauté
s'en est plaint, et a été entendue en {\bf mai 2018}, la licence
est devenue plus souple, {\bf permettant les modifications et la
redistribution à des fins non commerciales}. La communauté
a alors pu développer des évolutions d'Epsilon, dont les plus connues
sont principalement Omega, et dans une moindre mesure Upsilon et Khi.
Ces trois firmwares alternatifs ont en commun de
pouvoir exécuter des applications tierces, dont mon système
de calcul formel $\chi$CAS (sur les modèles N0110
commercialisés à partir de l'été 2019).

Malheureusement, {\bf en 2020/2021}, Numworks a considéré que l'ouverture
des sources ayant permis ces projets
était contraire à ses intérêts économiques pour développer
son activité à l'étranger (Portugal, Pays-Bas, Etats-Unis), en raison
du risque de fraude au mode examen et des examens où le calcul formel
est interdit. Foulant le pied à ``ses convictions'',
Numworks a pris un virage sécuritaire à 180 degrés, {\bf ils ont changé
la licence d'Epsilon qui n'offre plus aucune liberté de
modification/redistribution}, et surtout ils ont développé un logiciel
permettant de verrouiller les calculatrices (Numworks est le seul
à pouvoir effectuer des modifications et mises à jours de l'OS).
Ce verrouillage a été appliqué perfidement à des dizaines de milliers
de calculatrices au cours des mises à jours conseillées par Numworks
depuis la rentrée 2021, Numworks n'a jamais averti les utilisateurs
qu'ils allaient perdre la possibilité d'utiliser les logiciels développés par
la communauté (calcul formel, tableur, graphes/géométrie 3d, ...)
ainsi que les fonctionnalités de calcul symbolique qu'ils avaient
eux-mêmes développées (ces fonctionnalités sont réactivées dans Upsilon).
Au printemps 2022, une faille dans le verrouillage
a permis à quelques utilisateurs de déverrouiller leurs calculatrices,
mais la faille a été bien vite corrigée, et depuis il n'existe
aucun moyen de déverrouiller une Numworks sans ouvrir la calculatrice.

Ce virage sécuritaire a provoqué l'arrêt du développement d'Omega,
le ``fork'' le plus actif d'Epsilon. Upsilon est né de la volonté de poursuivre
malgré tout un firmware alternatif, avec des nouvelles fonctionnalités
dont l'intégration d'un module Python de calcul scientifique (ulab)
et d'une liseuse de documents compatible avec \LaTeX. Khi
est un fork que j'ai optimisé pour l'utilisation de $\chi$CAS.
Aucun de ces deux forks ne peut intégrer les améliorations d'Epsilon
versions 16 et au-delà.

En guise de compensation, Numworks a ajouté la possibilité d'installer
des programmes développés par des tiers, mais dans des conditions
tellement restrictives que pratiquement personne ne propose
de tels programmes. En effet, non seulement ces programmes sont
inaccessibles en mode examen (alors qu'avant le verrouillage on
pouvait utiliser un firmware tiers avec $\chi$CAS en mode examen),
mais ils sont inactivés au moindre crash ou reset, rendant
tout développement très fastidieux et toute utilisation aléatoire.
Les fonctionnalités
proposées par le kit de développement sont minimalistes
en comparaison de Casio.
Mais surtout pour installer une application tierce
il faut passer par le site de Numworks, qui peut donc décider de les censurer
à sa guise. Le minimum que la communauté attendait pour une calculatrice
présentée comme open-source, c'est un environnement de développement
au niveau de celui proposé par Casio!

\subsection{Le développement natif chez les autres constructeurs}
Casio est à ce jour parmi les constructeurs celui qui est le plus ouvert
aux développements tiers sur le milieu de gamme graphique. La possibilité
d'ajouter des programmes (``addins'') au menu principal
est prévue dans l'OS et Casio
a publié dans les années 2010 un kit de développement logiciel
(fonctionnant sous Windows),
qui a lui-même donné naissance à plusieurs kits utilisant le compilateur
libre gcc. Le plus récent,
\ahref{https://gitea.planet-casio.com/Lephenixnoir/gint}{gint},
est activement maintenu par ``Lephenixnoir'', c'est avec ce kit
que Upsilon a été porté sur les Casio.

TI a toujours lutté le développement tiers sur les TI Nspire (il n'existe
pas pour le moment de version
\ahref{https://ndless.me/}{ndless}
compatible avec les versions à jour de l'OS
des Nspire CX et CX2) et a fermé
la porte de l'assembleur sur les TI83/84,
il existe un contournement,
\ahref{https://yvantt.github.io/arTIfiCE/}{artifice},
pour le moment TI ferme les yeux.

HP n'a publié aucune information permmettant de faire du développement
natif sur les HP Prime, ce qui était possible auparavant
sur les HP48, 49 et 50. Il existe par contre un projet d'OS alternatif
\ahref{https://github.com/ExistOS-Team/ExistOS-For-HP39GII/blob/main/README_en.md}{ExistOS} pour les HP39gii, et rien n'empêche matériellement d'avoir
la même chose pour les HP Prime G1.

\section{Conclusion.}
Pouvoir utiliser l'environnement Numworks sur une calculatrice Casio
Graph 90 est une prouesse technique qui pourrait faciliter la vie
des enseignants et élèves, en permettant l'intégration aisée
d'un parc hétérogène de calculatrices Numworks/Graph 90.
L'environnement Numworks est \`egalement porté sur
les calculatrices 
\ahref{https://www-fourier.univ-grenoble-alpes.fr/\home{parisse}/ti/upsilonbw.tns}{TI Nspire} compatibles avec ndless
(version optimisée pour les
\ahref{https://www-fourier.univ-grenoble-alpes.fr/\home{parisse}/ti/upsilon.tns}{CX et CX2}).
On pourrait imaginer avoir la même chose sur d'autres calculatrices
suffisamment puissantes, il existe d'ailleurs
un \ahref{https://github.com/boricj/epsilon/tree/hp_prime}{firmware prototype}
basé sur Epsilon pour HP Prime par Jean-Baptiste Boric.
Malheureusement, il y a un obstacle institutionnel
\`a la diffusion d'un environnemet unique pour plusieurs
calculatrices~: c'est le mode examen, lorsqu'il est activ\'e,
l'environnement Numworks n'est plus
accessible sur les Casio. 
Une raison de plus de supprimer ce mode
examen inégalitaire (cf. \ahref{https://www-fourier.univ-grenoble-alpes.fr/\home{parisse}/irem/exammode.html}{mon article} à ce sujet).

Cela favoriserait une saine concurrence entre constructeurs,
il n'est pas normal que Numworks continue à vendre des dizaines
de milliers de calculatrices bridées en mémoire (des calculatrices
Alzheimer en quelque sorte) au niveau des années 1990 après avoir
longuement moqué leurs concurrents sur le thème des calculatrices
qui n'ont pas évolué depuis 30 ans.

Inversement, la possibilité de tester l'environnement Numworks sur
Casio et TI Nspire
pourrait permettre à Numworks de se faire connaitre à l'étranger
là où TI et Casio sont plus connus et inciter Casio et TI
à améliorer leurs propres applications. J'envisage aussi à moyen
terme d'ajouter la possibilité d'utiliser le noyau de calcul
formel de Xcas directement depuis l'application Calculs d'Upsilon.

\section{Références}
Le code source du projet
\ahref{https://github.com/UpsilonNumworks/Upsilon}{Upsilon Numworks}.
et \ahref{https://www-fourier.univ-grenoble-alpes.fr/\home{parisse}/casio/upsilon_changes.tgz}{mes modifications}.

Les discussions sur le développement sont
sur \ahref{https://tiplanet.org/forum/viewtopic.php?f=51&t=26197}{ce fil sur tiplanet} et
\ahref{https://www.cemetech.net/forum/viewtopic.php?t=19114}{ce fil en anglais sur cemetech}


\end{document}
% aufildesmaths@apmep.fr 
