Logiciels
En quoi un logiciel web est-il différent d'un site web ?
Initialement, un logiciel est une suite d'instructions informatiques consécutives traduites
dans le langage natif du système d'exploitation (on dit "compilé") sur lequel il va
fonctionner pour se présenter au final sous la forme d'un simple fichier dit "exécutable".
Présenté comme cela, on est très loin d'un site web constitué de
multiples fichiers de script qui se complètent, rédigés dans différents langages
non compilés (qui restent
donc lisibles par l'être humain) interprétés de façon plus ou moins homogène et constante
par des logiciels plus ou moins fiables (navigateurs ou assimilés) et qui importent eux-mêmes
des fichiers tiers (autres scripts, images, vidéos...) ! Mais peu à peu, les logiciels et
le monde du web ont évolué, tant et si bien qu'ils finissent par se ressembler, malgré des
divergences fondamentales.
Du côté des logiciels, on a commencé à comprendre qu'au final, il était possible de
constituer une application d'éléments fixes et d'éléments modifiables. Le problème était
qu'une fois compilé (traduit en langage binaire), il n'y a plus que des '0' et des '1'.
Pour effectuer des modifications, il faut obligatoirement repartir du code source et
RE-compiler.
Pourtant, en imaginant un logiciel multi-langues, il est pratique d'avoir des fichiers
contenant tous les textes affichés qui soient séparés, non compilés. De cette façon, il
devient simple de traduire un logiciel, sans faire appel aux développeurs. De la même
façon, si les éléments de l'interface graphique sont séparés, il est également possible de
les modifier, de les améliorer ou les rendre plus ergonomiques, sans rien recompiler. Sur
ce point, là où le monde du web marque un point, c'est que le logiciel d'affichage, le
navigateur, peut adapter la présentation à la taille du contenu.
C'est même aujourd'hui une de ses prérogatives initiales (aspect 'responsive').
En allant plus loin, imaginons que même le code compilé soit séparé
en petits morceaux, chacun ayant en charge une des fonctions du logiciel par
exemple, et que ces petits morceaux soient pris en charge au lancement du logiciel. Dans
ce cas, il pourrait n'exister qu'un seul morceau de code initial
basique, qui n'aurait pour tâche que de charger les autres (on appelle cela un
'kernel'), et des morceaux séparés qui déclarent les actions qu'ils peuvent réaliser et
les fonctions qu'ils mettent à disposition des autres morceaux (on appelle cela les 'API'
- Application Programming Interface).
L'avantage est évident. Des graphistes s'occupent de l'interface, des rédacteurs et des
traducteurs s'occupent des textes (menus, dialogues et autres...) et des développeurs
plus ou moins séparés ou indépendants s'occupent chacun d'une partie du code : la partie
dédiée à un type de calcul, celle dédiée à l'impression, celle dédiée à l'enregistrement,
celle dédiée à l'exportation en PDF, etc.
Partant de là, il devient possible et simple de faire évoluer
n'importe qu'elle partie du logiciel séparément, d'ajouter des fonctionnalités,
simplement en remplaçant ou en ajoutant une parties des éléments que l'on appelle des
ressources. En fait, c'est comme cela que fonctionne le web, lorsque c'est bien fait. Il
suffit de remplacer une image dans un dossier et l'affichage change. On modifie une ligne
de code dans un script et le logiciel change, pour des millions d'utilisateurs,
immédiatement. Il n'y a rien à re-compiler, rien à ré-installer.
Dans un logiciel, certaines ressources sont compilées, comme le code, d'autres non, comme
les textes et les images. C'est MacOS qui a lancé cette méthode de travail en intégrant des
ressources aux logiciels. Elles étaient modifiables séparément depuis un utilitaire nommé
"Resedit". Depuis, beaucoup de logiciels ont adoptés cette méthode et chacun à nommé les
ressources de code à sa guise, que ce soit 'plug-ins', 'add-ons', 'add-ins', 'greffons' ou
autre.
Par contre, cela pose quand même des problèmes, notamment de sécurité. Même si un logiciel
se présente sous la forme d'un fichier unique, pour simplifier l'interface, en réalité,
c'est un dossier qu'il est possible d'ouvrir (sur MacOS à l'aide d'un clic droit), pour
accéder à son contenu et le modifier. Ce à quoi on aura directement accès ne sera pas
fondamental. On pourra remplacer les textes des menus par d'autres mots de son choix, ou
l'écran d'ouverture (splash screen) par la photo de son chien. Non seulement le code
sensible reste compilé, mais il peut également vérifier que certaines images font bien la
taille prévue, ont bien un pixel de telle couleur à tel endroit, juste par sécurité.
De toute façon, les hackers compétents savent depuis longtemps "décompiler" un logiciel
(on dit "désassembler", ou transformer en langage "d'assemblage") pour le modifier. Les '0'
et les '1' du fichier final peuvent être lus et transformés dans un langage que
l'on appelle "assembleur" et qui les affiche sous forme de "mnémoniques" (des mots en clair
qui remplacent les chiffres). L'assembleur est sans limite quant aux modifications et aux
possibilités car il s'adresse directement au processeur et peut court-circuiter le système
d'exploitation. C'est comme cela que l'on "crack" un code ou crée un virus. C'est très
puissant mais ne laisse place à aucune marge d'erreur.
A noter que lorsqu'on "compile" le code, on le transforme en langage "machine" compréhensible
par le processeur de la machine hôte. Ce n'est pas par sécurité,
mais parce que c'est nettement plus rapide a exécuter. Donc, le code d'un logiciel
s'exécute plus rapidement que celui d'un site web, mais il ne fonctionne que sur un seul
type de plateforme à la fois.
En conclusion, les logiciels d'aujourd'hui sont des "dossiers" remplis de "ressources" de
différents types, qui fonctionnent et communiquent entre elles. Mais une des sécurités de
l'ensemble est que l'intégralité de l'application (ou logiciel, ou software, c'est la même
choses) réside sur l'ordinateur de celui qui l'a installé, et nulle part ailleurs. De plus,
pour l'installer, il faut en avoir le droit (saisir un code administrateur). Et pour
utiliser le même logiciel sur plusieurs ordinateurs, il faut généralement plusieurs
licences (donc payer plusieurs fois).
Et internet ?
En fait, aujourd'hui, c'est presque la même chose. Mais internet s'est construit dans
l'autre sens. Au lieu d'avoir un logiciel spécifique compilé que l'on a payé et autorisé
à s'installer quelque part, on partage tout depuis un serveur. Un logiciel gratuit
(aujourd'hui, ça n'a pas toujours été le cas) le navigateur fait office d'interface
graphique. L'ossature générale se trouve obligatoirement dans un fichier en langage HTML.
A la racine du serveur, ce fichier s'appelle 'index.htm', 'index.html' ou 'index.php'. En
fait, il pourrait prendre d'autre nom, c'est paramétrable. Lorsque vous saisissez
'mon_super_site.com', en fait vous saisissez 'mon_super_site.com/index.htm'. C'est le
navigateur qui complètera sans rien dire ni rien afficher. Pourquoi '.htm' ou '.html' ?
Parce qu'il existe des systèmes serveurs qui n'autorisent que 3 lettres d'extension aux
fichiers. Donc, '.htm' sera reconnu partout, et '.html' presque partout.
L'apparence graphique du logiciel sera gérée par le navigateur en langage css. Les actions
sur le navigateurs se feront au travers du langage JavaScript, à l'exception des liens
(et encore). Les actions sur le serveur par des scripts CGI (comme ceux écrits en
langage PhP). La connexion et la communication entre les deux étant assurée par
l'extension Ajax du langage JavaScript. Quant aux données, elles seront stockées dans des
logiciels de base de donnée (SGDB) dédiés. Donc, on se retrouve avec un kernel qui est
un fichier '.htm', et des fichiers séparés, chargés à la volée, qu'ils contiennent des
images, des vidéos, du code ou autre.
Alors demain, qui aura l'avantage ?
Internet évidemment.
Parce que c'est multiplateforme. Programmé une fois, diffusé n'importe où, sur n'importe
quel ordinateur muni d'un navigateur ou équivalent.
Quelle sont les limites actuelle d'internet dans le domaine des logiciels ?
Un peu la sécurité. N'importe qui peut se connecter à un
site, à moins d'avoir mis en place des moyens pour l'en empêcher (des confirmations web,
sms, ou bientôt, l'adresse IP-v6 de la machine, la reconnaissance faciale, vocale,
palmaire...). Sur votre PC, il faut vous voler votre ordinateur et connaître votre code
pour y accéder. Mais la sécurité va continuer à progresser.
Un peu la vitesse. Le fait que le code soit interprété et
non compilé, ralenti son exécution. Il est difficilement envisageable, même aujourd'hui,
d'avoir la même efficacité pour un logiciel de création 3D ou vidéo, donc gourmand en
activité processeur, à partir d'un site web plutôt que sur un logiciel, ne serait-ce que
parce que le processeur d'un téléphone grand public et celui d'une station de travail
professionnelle dédiée ne seront sans doute jamais aussi efficace l'un et l'autre.
Un peu la compatibilité. L'interface est limitée par les
possibilités du navigateur, sa compatibilité avec les dernières normes et son efficacité.
Mais cela s'est grandement normalisé.
Un peu le réseau. Le réseau est fondamental, car sans réseau,
plus de logiciel, mais la tendance tend à contourner cela en intégrant du code à
l'intérieur du navigateur pour pouvoir fonctionner sans réseau. De plus, la vitesse des
réseaux et leur disponibilité ne cesse de s'accroître.
Un peu les possibilités. Les navigateurs web ne donnent pas
accès à toutes les ressources de l'ordinateur hôte, pour des raisons de sécurité. Mais
cela change néanmoins. Un site peut désormais, après accord de l'utilisateur, accéder à
son micro, sa caméra, sa géolocalisation... Bientôt, le carnet d'adresse ou les fichiers.
Quand au fait qu'il faille un navigateur, l'interface des systèmes d'exploitation est
aujourd'hui en fait un navigateur web particulier, qui peut afficher un site web
comme un logiciel à part entière à partir de certaines de ses informations (cela s'appelle
"Application Manifest").
Il faut surtout ajouter à tout cela le fait que les normes du web évoluent très vite, les
interfaces changent et s'améliorent, par le fait de l'expérience de milliards
d'utilisateurs de par le monde.
Les nouvelles possibilités sont intégrées au langage de présentation
"css" qui dépasse très largement et avec succès ce pour quoi il a été conçu initialement.
En résumé, un développeur d'application web n'a qu'à attendre qu'une nouvelle possibilité
apparaisse pour l'intégrer, c'est tout.
Au niveau du code, il est possible de le répartir sur plusieurs serveurs, pour que si l'un
ne répond pas assez rapidement, la requête bascule automatiquement sur un autre (c'est
pour cela que "google" répond si vite).
Avantage également pour le web, les données sont stockées dans des logiciels de gestion de
bases de données spécifiquement adaptés et optimisés pour ce travail, au travers de langages
très rapides et performants (comme le "SQL"). Dans un logiciel "standard" compilé, c'est au
développeur de gérer cela.
Autre avantage pour le web, on peut accéder à son logiciel de n'importe où dans le monde,
et depuis n'importe quel ordinateur. On ne peut accéder au logiciel de son ordinateur
personnel que depuis chez soi.
Les "ressources" de codes stockées sur les serveurs peuvent être protégées, c'est à dire
accessibles uniquement après saisie d'un code. Donc, c'est relativement sécurisé.
Et surtout, il est possible de faire évoluer un logiciel web sans rien installer chez
l'utilisateur. Il suffit de modifier le code hébergé. Il est même simple de
laisser tourner plusieurs versions simultanées pour les comparer ou les tester.
Alors que manque-t-il encore vraiment au web ?
Vitesse de transmission réseau encore plus rapide, navigateurs encore plus performants,
outils d'interface standardisés (bien que l'on puisse déjà les créer), sécurisation
maximale (on s'en approche, mais la sécurité totale n'existera jamais).
Il reste toutefois une particularité au monde du web. Pour mener à bien un projet seul,
l'apprentissage est très long car cela implique la maîtrise et le mélange adéquat entre
de multiples technologies sans cesse en évolution : HTML, CSS, JavaScript, Ajax, PhP, mySQL.
Toutes ces technologie s'imbriquent et se complètent, elles possèdent toutes leurs
avantages et leurs limites. Le succès du logiciel est de savoir les utiliser à bon escient.
Lorsque plusieurs technologies permettent de faire la même choses, il faut opter pour la
plus performante OU la plus évolutive et flexible par rapport
au projet final. Ce n'est pas simple à déterminer.
Si l'avantage est au web, la compétence nécessaire du développeur s'est grandement
complexifiée. On peut parfois alors se demander si il ne faut pas
s'adresser à de grosses structures plutôt qu'à des indépendants. En fait, c'est une
fausse bonne idée. Il semble évident qu'une personne seule peut vous rendre dépendante
d'elle où concevoir un lourd projet qu'elle sera seule à pouvoir gérer, avec les risques
que cela implique. Inversement, c'est souvent le contraire qui se produit. Une structure
plus importante conçoit des outils qui lui appartiennent et sur lesquels reposent le site.
Si vous êtes propriétaire du site, vous ne l'êtes pas des ressources
de code tiers utilisées sous sa licence. Alors qu'un indépendant va utiliser des
librairies de codes libres de droit, souvent plus performantes, car utilisées et améliorées
par des milliers d'autres développeurs et très documentées de ce fait. Transférer un site
d'une grosse structure sous-traitante à une autre peut s'avérer très difficile, voire
impossible. D'un indépendant à un autre, c'est nettement plus simple. Il suffit d'exiger
l'intégralité des codes sources et la capacité de ré-installation. Bien entendu, en cas de
défaillance du prestataire, il faudra en trouver un autre ayant les mêmes compétences, mais
ne rêvez pas, les grosses structures s'appuient généralement sur des
indépendants. De cette façon, quand elles n'ont pas de contrats, elles n'ont pas de
charges... Et quand elles en ont un, elles mettent les indépendants en concurrence. Une
fois choisi, elles lui font simplement établir des cartes de visite et une adresse e-mail
à leur enseigne.
Un autre aspect à prendre en considération !
Un logiciel n'est pas qu'un site, et inversement. Un site est d'abord conçu pour
communiquer, pour informer, éventuellement pour vendre, discuter, afficher des promotions
ou envoyer du courier. Un logiciel est un programme utilitaire, notamment dans la mesure
où il concerne la vie d'une entreprise spécifique.
Un site-logiciel web dédié peut permettre de gérer ses approvisionnements, ses achats, ses ventes,
ses devis, ses factures... et également son site ! On parle alors d'ERP ou au minimum de WebApp. Le
logiciel web peut interagir avec le site de communication. Il peut paramétrer l'affichage
de celui-ci, la mise en avant de produit ou d'informations. On parle alors de back-office,
ou console de gestion web. Mais il peut aussi afficher et gérer des stocks, envoyer des
e-mails de confirmations de vente, de proposition, de commande, générer des factures en
PDF voire même, des bulletins de paie. Dans ce cas, c'est un ERP (Entreprise Ressource
Planning). Mais tout cela est nettement plus complexe et dépasse le cadre de la conception
graphique d'un site standard.
Un exemple simple : si vous disposez d'un produit à vendre en un seul exemplaire et que
deux clients simultanément le consultent sur votre site de vente, si l'un d'eux le commande,
il est logique que l'autre soit informé qu'il n'est subitement plus disponible. Cela peut même être
un argument de vente que de savoir que d'autres personnes simultanément consultent le
même produit. C'est parfaitement réalisable, mais un site classique n'est pas pensé pour cela.
Il faut un développeur spécialisé.
Si votre site gère des factures en ligne, il faut qu'il leur attribue un numéro.
Légalement, ce numéro doit être conçu de telle sorte qu'il ne puisse être possible d'en
intercaler d'autres plus tard. Dans ce cas, il faut que votre site soit informé du dernier
numéro en cours de votre logiciel de gestion et puisse communiquer avec lui pour insérer ses
propres factures dans votre système.
Plus complexe encore, si votre base de données décrit un produit et que celui-ci est
référencé par un identifiant, les factures et bordereaux de livraison ne vont mémoriser
que cet identifiant. Lorsque vous les afficherez, ils iront récupérer les informations
stockées correspondantes. Mais que se passe-t-il si le produit change ? Brusquement,
l'affichage du bordereau de livraison ou de la facture change, ce qui n'est pas acceptable.
Les bordereaux de livraison signés et les factures émises doivent être figées.
Le logiciel doit donc prendre en charge une méthode de duplication des enregistrements des
produits si ceux-ci sont référencés par une facture ou un bordereau. Ceci non plus n'est
pas du ressort d'un créateur de site web.
Il est même possible d'aller beaucoup plus loin. On peut utiliser un mini-ordinateur dédié
pour qu'il affiche en plein écran sur un écran tactile une interface graphique web constituée
de simple boutons de choix. L'utilisateur ne peut alors plus sortir de cette interface. Il
est possible d'en masquer la souris et de faire en sorte que le site agisse directement
sur le système d'exploitation qui l'héberge. Ainsi, on transforme un mini-PC en console
domotique ou logiciel de gestion, de l'automate à la machine
à café. Le tout peut rester accessible de l'extérieur et informer de toute panne éventuelle.
Il n'y a pratiquement aujourd'hui plus aucune limite en terme de logiciel à ce qu'un site
web hébergé peut permettre de faire. Le tableau de bord de votre voiture peut parfaitement
n'être plus qu'un site web spécifique. Votre réfrigérateur peut posséder une tablette
graphique incorporée qui vous informe des dates de péremption de son contenu, voire même
vous envoyer un e-mail d'alerte. Il est possible de coupler un lecteur de codes barre ou
QRCode à un mini-PC et de le relier à une base de données...
En résumé, le logiciel est devenu Web-App, c'est-à-dire une application web, incontournable et
qui a de longs et beaux jours devant elle. Quant aux développeurs, c'est un peu comme les
ressources de code, soit on trouve celui qui sait tout faire ('full-stack'), soit celui
qui ne gère que le côté client ('front-end'), soit celui qui ne gère que l'aspect serveur
('back-end'), mais en tout cas, ce sont des éléments qui s'imbriquent et évoluent à leur
rythme.