Un framework pour Linux

On entend souvent dire que Linux manque d'homogénéité. Je trouve cette idée tout à fait exacte. Ne vous m'éprenez pas, je suis fan, j'adore cette diversité justement. Cependant, je trouve que celle-ci est mal gérée et que diversité ne rime pas forcément avec foutoir! Il existe en effet un très grand nombre d'API dont les conventions sont toutes différentes, la documentation plus ou moins complète, etc...Je trouve pour une fois que Microsoft à parfaitement compris la chose en proposant son Framework .NET. Un ensemble parfaitement homogène et très bien documenté. Alors pourquoi pas un tel framework pour Linux? Microsoft réussit a proposer une telle chose pour un ensemble de langages puisqu'il transforme ces derniers en les rendant compatible CLR. Une adaptation de ceux-ci est donc nécessaire. Cela ne colle évidemment pas à la philosophie et à la façon de faire linuxienne. En revanche, on peut créer des bindings. Un binding est un pont entre deux langages et plus généralement entre le C et un langage de plus haut niveau. L'idée que j'expose ici est une homogénéisation de ces bindings à travers tous les langages pour fournir une API commune et facilité l'accès à une documentation. Le résultat serait un framework orienté objet utilisant des namespaces (ou une convention de nommage pour les langages non "namespacisé"). Bien-sûr on est loin du Framework .NET mais c'est un premier pas vers une façon de faire que je considère bien plus moderne.

Je considèrerais ici que toutes les librairies sont en C et que le but est de fournir une API pour des langages de plus haut niveau. Tout d'abord prenons une librairies quelconques (imaginaire). Elle contient trois fonctions: open_file, read_file et close_file. Pour atteindre notre objectif, la meilleur solution est de générer automatiquement les bindings adéquats. On va donc dans un premier temps décrire l'API que l'on veut obtenir. Cette description serait réaliser en XML. On définit alors que l'on souhaite regrouper ces trois fonctions en une classe, nommée File, ayant trois méthodes: open, read et close. Imaginons une description du genre:
<class name="File" namespace="IO">
  <method name="open">
    <binding function="open_file" />
  </method>
  <method name="read">
    <binding function="read_file" />
  </method>
  <method name="close">
    <binding function="close_file" />
  </method>
</class>
Notre description XML pourrait évidemment contenir bien plus d'informations, de la documentation par exemple... Il nous faut à présent, à partir de cette description, générer les bindings. Chaque langage souhaitant accèder au framework proposerait alors son "binding generator". Ceci serait un plugin qui s'intègrerait au sein du binding generator global. Ces plugins seraient en charge de convertir le fichier de description XML vers le code source C du binding pour son langage. Enfin, le binding generator (global) compilera ce dernier et installera le résultat. Un petit schéma pour illustrer tout ça:

[[posterous-content:nyEmkExbEyBsmajiJFvg]]

Notre classe File pourrait donc à présent être utilisé dans tous les autres langages. L'API serait toujours la même et une documentation précise pourrait être consulté sur un site unique. Ces bindings pourraient être simplement distribué à travers les gestionnaires de paquet sous forme binaire ou le binding generator pourrait être utilisé pour chaque librairie installé sur les distributions sources.

Je n'irai pas plus loin dans l'explication mais je serais en revanche ravi de le faire si l'idée intéresse quelqu'un! Je conclurai sur le fait que je trouve qu'il est vraiment temps pour Linux de mettre à jour ses méthodologies et sa plateforme de développement. Le développement y est, je trouve, plus difficile d'accès que sur Windows! C'est un comble étant donné la nature ouverte du système. Cet article sera le premier d'une série sur des idées, bonne ou mauvaise (celle-ci l'est peut-être!), à propos d'améliorations pour Linux. Le prochain devrait arriver sous peu!


comments powered by Disqus

07/04/2008