Micropython : un micro-OS !

Intro

Micropython, en pratique, s'avère en fait être beaucoup plus qu'un langage : par bien des aspects, il a les caractéristiques d'un micro-OS !

On entend ici "OS" pour "Opérating System", à savoir système d'exploitation.

Alors évidemment, on est loin, très très loin d'un OS complet tel qu'un système Windows, Mac Os X ou Linux, mais, de part le caractère interprété, on a des caractéristiques que n'ont pas d'autres langages et qui fournissent des fonctions équivalentes à celles dont on dispose dans un terminal système type shell sur un système Gnu/Linux. Et c'est en ce sens que l'on peut parle de "micro-OS", un OS miniature.

Il est intéressant de s'attarder sur cet aspect des choses, car il est finalement assez peu mis en avant d'une part, et d'autre part, il émerge sous la forme "d'une prise de consience à l'usage" qui est progressive et n'a rien d'immédiat au départ.

L'objet de ce post est donc de préciser et d'objectiver les raisons ce point de vue d'une part et d'autre part d'aider les uns et les autres à prendre conscience de cette qualité unique et très réelle de micropython.

Note

Pour être tout à fait clair, on parle ici de fonctionnalité "système", à savoir réseau, fichiers texte, etc. mais pas de fonctionnalités dîtes "multimédia" telles que audio, vidéo... Mais ce n'est peut-être et probablement qu'une question de temps, car les plateformes évoluent et le langage CPython dispose déjà de nombreux outils audio/vidéo, etc. Donc, il sera très naturellement possible un jour peut-être pas si lointain (j'écris en 2021) de disposer de ces fonctions sur plateforme à micro-contrôleur.

"Ils ont dit..." : lu sur le web

Réaliser que micropython agit comme un "microOS", c'est à la base une réflexion / une prise de conscience personnelle, qui émerge à l'usage : face à telle ou telle possibilité offerte par micropython que l'on découvre au détour d'un besoin, c'est une réaction du genre "oh mais la vache... je peux faire çà ! Mais normalement, il me faudrait un système installé pour pouvoir le faire... " Mais non, c'est possible directement en micropython ! Mais je ne suis pas le seul à le penser et voici quelques citations glanées en ce sens en ligne :

"MicroPython fonctionne sans système d'exploitation sur la carte et vous offre essentiellement un système d'exploitation Python. " https://www.vs-elec.fr/fr/cartes-classiques/9452-micropython-board-esp8266-d1r2-uno-r3-format-wi-fi-6970622937517.html

"In the microcontroller world, however, MicroPython is the operating system. " https://realpython.com/micropython/

"MicroPython can seamlessly integrate with circuits, buttons, sensors, LCD displays, and various other electronics. Not only that, but MicroPython requires far fewer resources and doesn’t have to rely on an operating system because MicroPython itself acts as the OS for the Pyboard or any other microcontroller." https://www.electronicdesign.com/technologies/embedded-revolution/article/21131360/an-introduction-to-micropython-and-microcontrollers

Réflexions spontanées

Plusieurs arguments spontanés sont en faveur de cette notion de micro-OS :

  • micropython est installable sur des plateformes différentes et va fournir un mode de fonctionnement équivalent quelque soit la plateforme, à quelques adaptations matérielles près, mais globalement, on a une sorte couche d'abstraction vis à vis du matériel utilisé. Cette asbtraction gagnerait probablement encore à être améliorée pour la partie "hardware" pure, mais des efforts sont faits en ce sens, notamment via le module machine désormais commun à plusieurs plateformes.

  • si on considère les fonctions de gestion de fichiers, du réseau, du temps voire de la date et de l'heure comme étant des fonctions système, alors micropython fournit de telles fonctionnalités nativement, notamment sur les plateformes avec wifi intégré telles que les ESP 8266 et 32.

  • micropython permet l'installation de modules directement sur la carte Micropython depuis le code à l'aide d'un installateur intégré, le module upip. D'autre part, micropython fournit l'équivalent de modules CPython qui permettent de télécharger des fichiers depuis internet, notamment le module urequests qui permet de télécharger un fichier sur la carte à partir d'une url.

  • l'utilisation de l'interpréteur permet de gérer les fichiers présents sur la carte, de les ouvrir, de les effacer, de les renommer, etc, comme on le ferait en ligne de commande.

  • la présence de l'interpréteur enfin, fournit nativement toute une série de fonctions mathématiques notamment, d'interprétation des chaînes comme objet du langage, etc.. qui sont immédiatement disponibles sans avoir à les implémenter dans un code.

La sensation d'usage est donc une sensation "OS-like"... comme dans le shell d'un système Snu/Linux, de façon simplifiée certes, mais du même ordre d'un point de vue fonctionnel.

Analyse plus objective

Si l'on essaie d'objectiver les choses, voici la liste des fonctions et services qu'un "OS" assure :

Functions 

* Security
* Control over system performance
* Job accounting
* Error detecting aids
* Coordination between other software and users
* Memory Management
* Processor Management 
* Device Management
* File Management

Services

* Program Execution
* Handling Input/Output Operations
* Manipulation of File System
* Error Detection and Handling
* Resource Allocation
* Accounting
* Information and Resource Protection
https://www.geeksforgeeks.org/functions-of-operating-system/

Et bien, on voit clairement ici qu'une partie significative d'entre-eux sont assurés par Python en général et micropython en particulier (NC pour non concerné) :

Functions

  • Security : micropython fourni librairie SSL notamment
  • Control over system performance : NC
  • Job accounting : non concerné - système sans utilisateur ou mono-utilisateur
  • Error detecting aids : l'interpréteur fournit l'information des messages d'erreur et le langage fournit la gestion des erreurs avec try... except...
  • Coordination between other software and users : NC
  • Memory Management : partiellement oui
  • Processor Management : partiellement oui
  • Device Management : oui par l'installation de librairies dédiées possibles
  • File Management : oui, par les fonctions natives micropython et les modules os, sys notamment.

Services

  • Program Execution : micropython assure le boot, l'import des fichiers appelés par un code, etc.
  • Handling Input/Output Operations : micropython assure la gestion des GPIO, des communications sérielles, etc.
  • Manipulation of File System : micropython permet la création de répertoire, de fichiers, la copie, l'effacement, etc.
  • Error Detection and Handling : l'interpréteur fournit l'information des messages d'erreur et le langage fournit la gestion des erreurs avec try... except...
  • Resource Allocation : partiellement oui
  • Accounting : non concerné - système sans utilisateur ou mono-utilisateur
  • Information and Resource Protection : librairies de cryptographies fournies

Conclusion

Comme on peut le voir, même si les fonctions et services fournis sont plus simples et de plus bas niveau que sur un "vrai" OS, micropython a clairement les caractéristiques essentielles d'un "OS", ici de bas niveau et dans le contexte précis du microcontrôleur, mais l'essentiel y est !

En fait, micropython a un côté "magique" de ce point de vue car on parle ici de cartes avec des ressources matérielles absolument minimales, de très bas niveau matériel, ce qui en fait également tout l'intérêt, et micropython vient fournir les fonctions "système" fondamentale dont on a besoin.

De ce point de vue, micropython n'est pas un simple "langage de plus", c'est une véritable rupture, un véritable saut qualitatif des possibilités offertes à l'usager pour gérer la plateforme micro-contrôleur. Noter que cette caractéristique lui vient clairement de son caractère interprété... et que tous les langages qui ne le sont pas ne peuvent, de fait, pas avoir les mêmes possibilités. Sinon, çà se saurait et çà serait déjà fait !

Compléments

Liste des modules fournissant des fonctions de type "micro-OS" en langage Micro-Python :

Gestion de paquets

Temps :

Chemins et fichiers