Boîte noire et interface

Boîte noire et interface

On m’a souvent expliqué lorsque j’étais plus jeune qu’un logiciel peut être vu comme une boîte noire : on ne sait pas comment ça fonctionne à l’intérieur mais on sait ce que l’on peut en faire. Ça ne me suffisait pas, je ne comprenais pas comment les logiciels faisaient pour dialoguer ensemble. Une boîte noire, pourquoi pas, mais comment faire pour rentrer dans cette boîte noire ?

C’est ce qu’on va essayer de découvrir dans cet article : comment les logiciels sont structurés pour que les humains puissent interagir avec eux et comment ils font (les logiciels hein, pas les humains) pour se comprendre.

Les interfaces graphiques

Partons d’un exemple simple : si on prend un navigateur comme Mozilla Firefox ou Brave, on sait que l’on pourra naviguer sur internet avec, mettre des pages en favoris, bref, l’utiliser. Les logiciels graphiques disposent d’une interface utilisateur graphique ou IHM pour Interface Homme Machine (ou encore GUI pour Graphical User Interface). L’interface entre le logiciel et l’utilisateur est la fenêtre avec des boutons que vous voyez quand l’application est ouverte.

L'interface utilisateur de Firefox, le navigateur que j'utilise

Ce premier type d’interface est celui que tout le monde connaît. Du point de vue de l’interaction entre l’humain et le logiciel, deux flux d’informations sont présents :

  • L’humain informe le logiciel de l’action qu’il veut effectuer en cliquant sur des boutons ou en remplissant un champ de texte.
  • Le logiciel informe l’humain que l’action demandée a été effectuée en modifiant l’interface.
    Si on prend un exemple, vous êtes sur votre site favori et vous voulez descendre dans la page, vous utilisez soit la molette de votre souris, soit les flèches de la barre de défilement. Instantanément, le logiciel comprend votre action et en retour, il fait descendre la page.

Cette dualité est la base de toutes interfaces, même celles qui ne sont pas graphiques : lorsqu’on “parle” à l’interface, celle-ci nous répond (de préférence le plus rapidement possible) via cette même interface avec le résultat créé par le logiciel. La deuxième chose importante que l’on peut deviner ici est que toutes les actions que l’utilisateur va pouvoir faire avec le logiciel sont définies à l’avance, elles sont codées. De même, toutes les réponses apportées par le logiciel le sont. Une règle de base est que celui qui reçoit l’information définit comment on doit la lui donner, c’est à l’émetteur de se débrouiller pour formater le message correctement.

Pour l’instant, on a donc ce schéma :

Interaction entre un humain et un logiciel

Notez que le logiciel peut également avoir une action sur l’humain sous forme généralement de notifications : lorsque vous recevez un nouveau SMS, vous allez l’ouvrir.
Avant de voir comment les logiciels discutent ensemble on va faire un détour, descendre avec le lapin blanc et aller au pays des merveilles.

La première interface Homme <-> Machine, le terminal

Vous avez sans doute vu dans un film d’action un hacker fou qui rentre dans des systèmes sécurisés comme dans du beurre, le tout de sa chambre en pyjama en tapant pleine balle sur son clavier sans toucher la souris. On va se calmer tout de suite et plutôt prendre comme exemple l’excellente série Mr. Robot. Le héros Elliot est un hacker et utilise le terminal comme interface pour dialoguer avec les multiples logiciels qu’il utilise. Les créateurs de la série ont créé un jeu de piste en ligne dont on va se servir pour illustrer le fonctionnement du terminal. Allez sur whoismrrobot.com et après le chargement, cliquez sur EC_NY puis cliquez sur l’icône du terminal. Vous vous retrouverez avec une fenêtre de ce style :

“Desktop” signifie que vous êtes actuellement sur le bureau. Essayer de taper la commande “help” pour afficher l’aide. On vous dit quelles sont les commandes disponibles et on va utiliser ls, la commande pour lister les fichiers et dossiers qui existent dans le dossier dans lequel on se trouve. Sans surprise, on retrouve tous les fichiers et dossiers qui sont sur le bureau virtuel.

La commande ls

Je vais m’arrêter là, rendre son terminal à Elliot et analyser un peu ce que l’on vient de faire. Encore une fois, l’humain en tapant une commande vient de donner une action à faire au logiciel. Le logiciel a répondu en donnant la liste des fichiers présents dans le dossier dans lequel l’utilisateur se trouve.
Plus précisément, l’humain a tapé la commande ls dans le terminal, celui-ci a invoqué le logiciel ls qui s’est ouvert, a affiché le résultat (les fichiers et dossiers contenus sur le bureau) et s’est fermé tout de suite après. Le terminal est une des façons les plus simples de communiquer avec un ordinateur. Il est même possible de travailler exclusivemet avec le terminal si on n’a pas besoin de résultat graphique comme des images.
Le serveur sur lequel est hébergé ce blog par exemple n’a pas d’interface graphique, tout ce fait en ligne de commande. Pour mettre mon site en ligne, je n’ai besoin de taper qu’une seule commande dont on reparlera :

$ docker-compose up -d

“C’est bien gentil ton histoire de terminal de hacker mais à la base on devait parler d’interfaces logiciels non ?” Tout à fait Watson et on va s’y attaquer maintenant.

Les interfaces entre logiciels

Vous avez entendu parler d’API ? Eh bien c’est le sujet précis du paragraphe : les interfaces de programmation d’application ou Application Programming Interface en anglais. Ce sont les interfaces les plus intéressantes pour moi car elles permettent non seulement d’interagir avec des logiciels de façon très précise mais elles permettent en plus de mieux comprendre comment ceux-ci fonctionnent. Et vous savez comment ces interfaces fonctionnent ? Eh bien exactement comme entre les humains et les machines : via actions/réactions.
Je vous propose un petit exemple en m’appuyant sur le précédent article qui parlait des systèmes d’exploitations. On a vu qu’un OS se positionne entre le matériel et les applications. Ce qu’on peut rajouter maintenant et qu’une application interagit avec l’OS via l’API du système d’exploitation.

Un exemple ? L’application qui vous permet de parcourir les dossiers qui sont sur votre PC Windows se nomme File Explorer. Lorsque vous demandez la création d’un nouveau dossier (clic droit -> créer un dossier ou CTRL + MAJ + N), File Explorer va faire un appel à l’API de Windows (action) pour demander la création d’un nouveau dossier. Windows va demander à votre disque dur via l’interface de son driver de créer le dossier “physiquement”. Si le disque dur a assez de place, il crée le dossier, répond à l’OS que l’action s’est bien déroulée. Seulement après ça, Windows répond à File Exploreur que le dossier a été créé. File Explorer va ensuite vous afficher un nouveau dossier, le tout en quelques millisecondes. On peut résumer cette série d’actions par ce diagramme :

Création d'un dossier

Évidemment, ce que je viens de décrire est très simplifié, il y beaucoup plus d’étapes entre l’action que l’humain fait et l’écriture sur le disque dur. C’est le but de la boîte noire et de l’interface : on cache le fonctionnement du logiciel dans la boîte noire et on fait une belle interface pour qu’un autre logiciel ou un humain puisse interagir avec en connaissant :

  • le format d’appel a l’API
  • le format de retour de l’action

Le fait de faire un appel à une API et d’avoir un retour est appelé une transaction et si vous observez bien autour de vous, vous découvrirez que beaucoup de services (public ou privé) sont bâtis sur ce principe. Lorsque vous allez à la boulangerie pour acheter un éclair au chocolat, l’action est de demander un éclair et donnant de l’argent (défini à l’avance) et le retour et de recevoir un truc beaucoup trop bon.

En résumé

Deux grands types d’interface existent : les interfaces utilisateur qui peuvent être graphique ou via un terminal et les APIs. Tous les logiciels discutent entre eux via des APIs et pour communiquer, ils s’envoient des requêtes. L’émetteur fait un appel (call) à l’API du récepteur. Le récepteur traite la demande, peut-être en faisant d’autres appels à d’autres API. Lorsque le récepteur a toutes les informations nécessaires, il répond à l’émetteur. L’appel et la réponse sont appelés une transaction.

La semaine prochaine, on met tout ça en pratique en faisant des appels aux APIs que le gouvernement met à disposition et on regardera ce qu’elles nous répondent.

Windows, Linux, Android, qu'est ce que c'est ?

Windows, Linux, Android, qu'est ce que c'est ?

Des systèmes d’exploitation pardi ! Aussi appelé OS (Operating System) dans la langue de Sheakspeare. Ce sont des logiciels qui ont été créé pour administrer le matériel qui compose un ordinateur. Mais avant de découvrir pourquoi ces systèmes d’exploitation ont été créés, on va définir en grosse maille ce qu’est un logiciel.

Logiciels, programmes ou applications ?

Vous vous souvenez des machines “reconfigurables” du 1er article ? He bien ce qui “configure” les ordinateurs, ces sont des logiciels ou des programmes. Toute machine programmable est un ordinateur,
et pour le coup un programme, c’est une suite d’instructions compréhensibles par la machine qui vont définir les actions qu’elle va devoir entreprendre.

Une application par contre est destinée à l’utilisateur final : Firefox pour naviguer sur internet ou VLC pour regarder des films sont des programmes par exemple. Windows et Linux sont des logiciels de type système d’exploitation, leur but et de gérer (d’exploiter) le matériel de l’ordinateur. Après cette définition minime, revenons aux OS.

Pourquoi ont été créés les systèmes d’exploitation ?

Et bien pour LA raison de base qui régit le monde, ou en tout cas une bonne partie : pour faire des économies.

Lorsqu’un développeur veut créer une application et que le système d’exploitation n’existe pas, alors il doit prendre en compte le matériel de tous les types d’ordinateurs sur lesquels son application va fonctionner. Il doit également tenir compte des ordinateurs qui n’ont pas encore été commercialisé et ça, à part avoir une boule de cristal, ce n’est pas possible.

De plus, soyons fou, disons qu’une équipe de développeurs crée une application qui doit tourner sur tous les ordinateurs existants. Si une autre équipe crée une autre application pour la même machine, une bonne partie de leur travail a déjà été fait. L’humain étant pas mal flemmard, lorsqu’un travail a déjà été effectué et qu’il peut le réutiliser, il le fait. En ce qui nous concerne, la prise en compte du matériel a déjà été effectuée par l’équipe 1, du coup l’équipe 2 va la réutiliser. Vous voyez ce qui vient après ?

Comment faire pour réutiliser le travail des autres ?

En créant des composants logiciels qui discutent les uns avec les autres (hein, mais de quoi il cause ?). Laissez-moi m’expliquer avec des petits schémas car ça vaut mieux qu’un long paragraphe :

Applications vs OS

Les applications 1 et 2 ont été représentées sur deux machines différentes à gauche. La machine de droite possède un système d’exploitation et des applications. Toute la gestion du matériel qui a été créée par les équipes 1 et 2 a été mise en commun dans le système d’exploitation. Les applications de la troisième machine n’ont pas connaissance du matériel qui compose la machine, elles n’interagissent pas avec lui, elles interagissent uniquement avec le système d’exploitation.

Vous remarquerez également que sur la troisième machine tournent des applicationS et ça, ce n’est pas négligeable : un des buts du système d’exploitation est de pouvoir faire fonctionner plusieurs applications en parallèle. Lorsque vous lisez ce blog sur votre smartphone, quelqu’un peut vous appeler ou vous envoyer un message : le navigateur, l’application d’appels et de messagerie tournent en parallèle.

On peut encore aller plus loin car le “matériel” décrit dans cet article est en fait un ensemble de composants électroniques : dans votre smartphone la caméra prend des photos, le micro capte le son quand vous parlez et le gyroscope permet au smartphone de savoir dans quelle position il est. Ces composants électroniques sont fabriqués par différents industriels et cela soulève une question.

Comment l’OS fait pour être compatible avec tous les composants électroniques ?

En créant une autre couche d’abstraction, d’autres composants logiciels : les drivers.

Les drivers, les conducteurs de matériels

Chaque fois qu’un industriel met sur le marché une nouvelle caméra pour smartphone par exemple, il va également créer un driver qui viendra faire l’interface entre la caméra et le système d’exploitation cible. Ce sera le seul but du driver. L’OS peut donc être installé sur n’importe quel matériel (théoriquement) tant que les drivers pour le système d’exploitation cible sont disponibles.

Pour les plus anciens d’entre nous, on se rappelle de l’époque bénie des années 2000 (coucou Windows 98) ou à chaque fois que l’on achetait une nouvelle souris ou un nouveau clavier, il fallait également installer les drivers livrés avec l’appareil sous forme de petit CD. En même temps c’est normal, comment voulez-vous que l’OS (Windows) sache interagir avec le nouveau matériel (la souris) si on ne lui indique pas comment faire.

Heureusement maintenant, il existe de nouvelles méthodes de détection automatique du matériel et Windows va télécharger automatiquement les drivers. Malheureusement, Windows est connu pour ne pas être très débrouillard en matière de drivers, je vous conseille SDI drivers qui est excellent (téléchargez uniquement la version Lite) ainsi qu’un petit tuto ici pour savoir comment l’utiliser. Pensez bien à créer un point de restauration, j’ai déjà eu quelques écrans bleus avec SDI.

En résumé

Ouf, on y est arrivés. Nous avons vu qu’un système d’exploitation, qu’il soit pour smartphone, PC personnel ou même pour un microcontrôleur sert d’interface entre les applications et le matériel. Dans ce système d’exploitation, il y a des petits composants logiciels (les drivers) qui pilotent les différentes cartes électroniques qui composent l’ordinateur. Notre modèle commence à prendre forme mais il lui manque un concept primordial : les interfaces qui feront un nouvel article dès la semaine prochaine.

N’hésitez pas à réagir en commentaire, on commence tout doucement à rentrer dans le fonctionnement d’un ordinateur et la suite promet d’être mieux 😃.

Plusieurs types d'ordinateurs ?

Plusieurs types d'ordinateurs ?

Après le premier article, nous savons qu’un ordinateur est simplement une machine reconfigurable, mais cette définition est trop large. On se demande dans notre vie de tous les jours : où se trouvent les ordinateurs ?

Le plus simple et plus petit : le microcontrôleur (µC)

Microcontrôleur est un terme que l’on entend rarement et pourtant c’est l’ordinateur le plus présent dans nos vies. Tous les appareils de la maison sont supervisés par un microcontrôleur : des alarmes (intrusions ou incendies), aux ampoules intelligentes en passant par tous les appareils électroménagers. La voiture en possède des centaines, les avions des milliers. Même dans notre carte bancaire, il y a un minuscule ordinateur (la puce) dont la seule fonction est de valider le code.

Plus petit microcontrôleur de la famille Arduino

Ces ordinateurs miniatures sont généralement programmés pour réaliser une seule tâche. Ils sont très économes en énergie (une alarme anti-incendie tient plusieurs années sans changement de piles), résistants, de plus en plus puissants et connectés. En effet, il est très intéressant pour les industriels d’avoir une seule puce, que l’on peut configurer à souhait et qui peut communiquer en Bluetooth ou en Wi-Fi avec d’autres microcontrôleurs. Ils sont la base même de l’internet des objets (IoT).

Ceux de tous les jours : le smartphone et l’ordinateur personnel

Le smartphone est une autre forme d’ordinateur. Depuis les années 2010, il remplace de plus en plus l’ordinateur personnel, qui lui est présent dans nos vies depuis la fin des années 70. La différence avec le microcontrôleur ? D’un point de vue purement fonctionnel, aucun. Le smartphone et l’ordinateur personnel sont généralement plus puissants et possèdent des périphériques d’entrée, avec lesquels interagit l’utilisateur (écran, clavier, souris…). La “barrière” entre ces deux mondes, est qu’un microcontrôleur est un circuit intégré : toute l’architecture est concentrée dans une même puce. À contrario, tous les autres types d’ordinateurs sont composés de plusieurs circuits intégrés.

Les serveurs : ceux qui dirigent le monde

Et l’internet alors, comment il fait pour fonctionner ? Eh bien, sur des ordinateurs ou plus précisément sur des serveurs : ce sont de très gros ordinateurs qui sont capables de gérer un flux important de données. Des entreprises comme Amazon (USA) ou OVH (France) sont spécialisées en location de serveur. Elles possèdent des “fermes” de serveurs appelées data-center et les louent aux entreprises ou aux particuliers. Ce blog est par exemple hébergé sur une machine appartenant à OVH dans la région parisienne, sur un tout petit serveur (1 cœur et 2Go de RAM, c’est pour dire).

Rack (armoire) contenant des serveurs

Et pour finir, les dieux des ordinateurs : les supercalculateurs

Certaines agences gouvernementales, la NASA pour citer la plus célèbre, ont besoin d’effectuer des calculs peut communs. Le milieu scientifique, en général, se dote de monstres de puissance. Pour avoir un ordre de grandeur (si on peut se représenter de tels chiffres), le plus puissant des supercalculateurs, le Summit [en] est environ 100 millions de fois plus puissant qu’une console de 4ème génération (source [en]).

Supercalculateur du Commissariat à l'Energie Atomique, le Terra-100

Ces ordinateurs un peu spéciaux sont utilisés notamment en recherche quantique, en prévision climatique, en modélisations moléculaires et autres milieux scientifiques qui demandent des calculs très longs.

En résumé

Il existe tout un panel d’ordinateur différent. Chaque grande “famille” correspond à un besoin bien spécifique, du microcontrôleur qui a une seule fonctionnalité, aux supercalculateurs qui ont été bâtis pour la recherche scientifique. Tous ces systèmes ont un logiciel commun, le système d’exploitation (sujet du prochain article ;-).

Ordinateur, calculateur, qu'est ce que c'est ?

Ordinateur, calculateur, qu'est ce que c'est ?

Les outils qu’il nous semblent normal d’utiliser tous les jours comme les ordinateurs, smartphones et autres services dans le cloud ne sont pas présents depuis longtemps. Qu’est-ce qui a déclenché cette évolution galopante ? Comment en est-on arrivés à utiliser ces boîtes métalliques, remplies d’on ne sait quoi, sans même y penser ? Elles servent à communiquer, s’instruire et automatiser des tâches mais au fond, comment sont-elles arrivées là ?

Pourquoi les ordinateurs ?

Avant de répondre au pourquoi, on peut se demander comment ces objets ont été créés. L’humain aime bien se doter d’outils pour accélérer et automatiser les tâches répétitives qui demandent de la concentration comme le calcul par exemple. Les bouliers chinois du XIIIᵉ siècle sont un bon exemple. La révolution industrielle va amener son lot d’automatisation mécanique et l’industrialisation de l’électricité à la fin des années 1800 va encore accélérer le mouvement du progrès. Cependant, à cette époque, lorsqu’une tâche doit être automatisée, on construit une machine qui réalise uniquement cette tâche comme une calculatrice mécanique ou encore une machine à écrire.

Dans un souci d’économie et pour pallier ce problème, des scientifiques (bonjour Mr Turing) mettent en place des machines reconfigurables ou “reprogrammables”: on construit une seule machine et, en fonction de sa configuration, elle peut effectuer différentes tâches, le calculateur est né.

Un calculateur/ordinateur est donc simplement une machine suffisamment “souple” pour accepter des configurations différentes et donc effectuer des tâches différentes.

Du calculateur à l’ordinateur personnel

Ce que l’on appelle communément “calculateur” est cette machine qui prend une pièce entière et qui permettait aux scientifiques et ingénieurs d’effectuer des calculs mathématiques complexes. Les opérateurs interagissaient avec des cartes perforées (la configuration de la machine) et une fois le calcul effectué, le résultat était imprimé. Ensuite sont apparus les claviers et écrans comme moyen d’interagir avec le calculateur. Le commun des mortels et les personnes nées après les années 80 ont connu uniquement les ordinateurs personnels ou PC (Personal Computer). Les premiers ordinateurs personnels grand public comme l’Apple II sont sortis à la fin des années 70 et n’ont depuis jamais quitté nos bureaux. Ils sont le résultat de la miniaturisation des calculateurs et depuis les années 2000, ces ordinateurs deviennent portables et sont même devenu smartphones. Tous les ans, en moyenne, ils ont doublé de puissance pour le même prix :
Loi de Moor -

En résumé

Un ordinateur est une machine reconfigurable. Depuis plus de 100 ans, nos vies sont liées à ces machines extraordinairement puissantes. Il en existe plusieurs formes que j’aimerais vous présenter dans un prochain article. Nous développerons également le fonctionnement intrinsèque d’un ordinateur.

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×