Un système d'exploitation, c'est, à la louche, la grosse couche de logiciel entre le matériel et les applications. Il permet à ces applications de ne pas de soucier du matériel sous-jacent (peut importe le modèle de votre disque dur par exemple) et d'utiliser des interfaces standardisées pour dialoguer avec le matériel. Mais surtout, le système d'exploitation fournit des services utiles à un grand nombre d'applications :

  • contrôle du matériel : processeurs, disque dur, mémoire, etc. ;
  • système de fichier, pour organiser documents en fichiers et répertoires ;
  • pile réseau, pour accéder à Internet et toutes ses applications ;
  • contrôle des périphériques d'entrée/sortie : clavier, écrans, souris, cartes son, périphériques USB, etc.
  • etc.

Les systèmes d'exploitation libres (noyau Linux, noyaux *BSD) offrent peu ou prou les mêmes fonctionnalités, avec quelques avancées ici et là (par exemple un meilleur support des multi-processeurs). Mais fondamentalement, ils font tous la même chose, en s'en tenant aux principes des systèmes Unix définis dans les années 70 et en ajoutant quelques fonctionnalités liées à l'évolution du matériel, comme le branchement à chaud des périphériques.

Cependant, notre environnement informatique a évolué beaucoup ces dernières années et on peut s'interroger sur l'adéquation de nos systèmes avec ces évolutions. Ne faudrait-il pas re-penser nos systèmes d'exploitation de A à Z ?

Quelques pistes de réflexions.

La confidentialité des données sur nos machines. Pour protéger nos données d'accès indiscrets, il est nécessaire de chiffrer nos données sur nos disques durs, clés USB, mémoires flash, courriels, etc. Pour l'instant, c'est fait de manière plus ou moins ad-hoc, avec logiciels spécialisés comme GnuPG, des solutions uniques comme dans Firefox ou des couches logiciels comme encfs ou eCryptfs utilisé dans Ubuntu Jaunty pour chiffrer les répertoires personnels. Mais on devrait plutôt avoir une réflexion plus générale sur la confidentialité : comment la garantir ? Comment gérer les sauvegardes ? Comment gérer la pertes de mots de passe ? Comment les applications doivent être conçues pour garantir cette confidentialité ? Comment échanger des données de manière sûr au travers du réseau ? etc. Comme toutes les applications doivent gérer cette confidentialité, le système d'exploitation devrait avoir un rôle majeur, en fournissant des interfaces adaptées et simples d'emploi pour que le programmeur d'application offre une confidentialité satisfaisante sans être un spécialiste.

Les sauvegardes. La sauvegarde est une fonctionnalité de base en informatique : aucun système n'est fiable, aucun périphérique de stockage n'est pérenne. Qui n'a jamais perdu une version d'un document important maladroitement écrasée après une journée de travail ? Là aussi, le système d'exploitation devrait offrir un système de base rendant ces sauvegardes complètes, transparentes, efficaces et d'accès aisés. Un système de fichier récent comme ZFS va dans ce sens en offrant par exemple l'accès à différentes version d'un fichier ou d'un répertoire dans le temps.

La confidentialité des données sur le réseau. De plus en plus fréquemment, les données échangées sur Internet sont espionnées, analysées, pour des motifs « légitimes » ou délictueux. Toutes les applications communicantes doivent maintenant se prémunir contre les oreilles indiscrètes, tout en garantissant que les personnes ou serveurs à qui on envoie ou de qui on reçoit nos données sont bien les bonnes. Le système d'exploitation n'a-t-il pas son rôle à jouer ? Il pourrait centraliser les authentifications, qu'elles concernent le Web ou le courriel. Il pourrait garantir que des courriels adressés à certaines personnes soient obligatoirement chiffrés, indépendamment de l'application et d'éventuels oublis. Il pourrait chiffrer de manière opportuniste ses connexions avec d'autres ordinateurs, et ce de manière transparente pour l'utilisateur.

Le transfert des données en « zéro copie ». Lorsqu'on regarde un peu l'organisation d'un système d'exploitation, on est étonné du nombre de copies faites d'un même morceau de données. Une donnée est parfois copiée 3 à 4 fois pour passer par exemple d'un périphérique USB à une application utilisatrice, et ensuite de nouveau 2 à 3 fois pour être envoyée sur le réseau à partir de cette même application. Toutes ces recopies mémoires nuisent à la performance et consomment des ressources inutilement. Évidemment, sur nos PC sur-puissants, on ne s'en rend pas bien compte. Mais sur des plateformes légères comme les applications embarquées (PDA, netbook, lecteurs multimédias divers), le surcoût de telles recopies inutiles apparait plus clairement. C'est le système d'exploitation qui devrait fournir un système unifié d'échange de données sans recopies, à l'intérieur du système d'exploitation, entre le système et les applications et entre applications.

La gestion du multimédia. Le multimédia et les données temps réelles sont omniprésentes dans nos applications, venant de webcam, de micros, affichés dans des mini-vidéos de YouTube, etc. Le système d'exploitation devrait fournir des infrastructures qui garantissent que les médias sont correctement acheminés et synchronisés entre eux, que ce soit en local sur une machine ou entre différentes machines.

Je n'ai fait qu'esquisser quelques pistes de réflexions. Il y en a bien d'autres. Mon propos n'est pas d'être exhaustif ni exact (est-ce toujours le rôle du système d'exploitation ? Ou des bibliothèques ?) mais de titiller la réflexions de ceux qui s'intéressent à ce genre de problème. L'autre question importante, c'est comment intégrer cette réflexion dans les systèmes d'exploitation existants. Je vois mal refaire l'équivalent du noyau Linux à partir de zéro. Ou alors... ;-)