L'idée me tarraude depuis longtemps (l'unité de base, c'est l'année…), mais elle me paraît assez novatrice pour que peu n'aient eu le cran d'essayer de la lancer.
Posons la problématique :
Actuellement, il y a des tonnes de frameworks pour ceci et pour cela, on ne peut pas dire que quelquechose n'est pas possible sur le net (à part commander sa cafetière (et encore, il y a des cafetières usb
De même, niveau performances, avec les machines modernes, c'est un critère qui est de moins en moins prépondérant dans le développement web. Et de toute facon, il est toujours possible d'optimiser.
Parallèlement à cela, on voit se multiplier les incompatibités, tel framework étant incompatible avec tel autre, telle base de donnée ne supportant pas le standard SQL, ...
Ainsi que des incompatibilités entre son CMS et son forum, ou son blog, son chat, …
Et pour ma part, concernant les forums que je connais très bien, j'ai le sentiment qu'ils manquent de modularité, car oui, c'est bien gentil, phpBB a des modules, qu'on peut installer sans trop de problèmes (attention, après 3 mods, c'est mort) avec EasyMod par exemple, mais lorsque vous installez un logiciel sur votre ordinateur, on vous demande d'aller modifier le kernel.dll ou bien le schost.dll ?
Quant aux CMS, la modularité est un peu plus présente, mais ce n'est pas encore cela, par exemple, Joomla qui a un certain modèle de templates, mais je pense que ce n'est pas à l'équipe de Joomla de décider ce que l'on veut comme moteur de templates.
Le problème n'est donc l'occurence n'est plus technique, mais complètement architectural et conceptuel. L'idée qui m'est venue était alors de concevoir un noyau qui serait à la base de nombreux projets. Le noyau permettrait de la même manière qu'un noyau d'OS d'allier modularité à compatibilité, mais aussi transparence, et éventuellement sécurité. Ce sont les maîtres mots de mon idée.
Niveau modularité, le système pourrait faire fonctionner avec le strict nécessaire, et ne charger que ce dont l'application aurait besoin.
Niveau compatibilité, tous les modules seraient basés sur un système commun, et donc par exemple, on pourrait intégrer un chat dans un forum, sans avoir à modifier une ligne de code.
Niveau transparence, c'est un des points le plus important, il est absolument indispensable que la sortie puisse se faire indifféremment de ce qu'elle va devenir, c'est à dire pouvoir envoyer la sortie aussi bien vers un mail, que vers un module ajax, ou encore un fichier. De même, permettre tout aussi bien l'utilisation de smarty que de phpLib, ou une syntaxe type php pour les templates. Ainsi que permettre l'utilisation de n'importe quelle base de données avec un vrai mécanisme de transparence, car en l'occurence PDO c'est bien joli, mais on ne peut pas envoyer la requète sans faire attention à ce qui va la lire et l'exécuter.
Enfin, cette voie ouvrirait le chemin à d'autres perspectives comme la notion de dépendances entre les modules, d'événements provoqués par les modules, ainsi que la possiblité d'intégrer au noyau des fonctions de débuggage et de contrôle.
J'ai fait de très nombreux jets de cette idée, toujours plus aboutis, le dernier consistait en un noyau regroupant le strict minimum, et avec des modules noyaux intégrés à celui ci permettant d'activer ou de désactiver certains fonctionnalités comme la gestion des tableaux multiglobaux (en gros, celui là vidait le contenu des tableaux), des événements (exécution de tel module ou telle fonction, …), dépendances, gestion des erreurs, débuggage (tracage complet de toutes l'exécution), autorisations (intermodulaires), avec une sorte de shell dont je n'ai jamais réussi à faire une version satisfaisante.
Le principal travail pour cette architecture là étant de définir ce qui doit être mis dans les modules du noyau, c'est à dire qu'est ce qui ne peut être gérer que par ca, ou bien qui est vraiment trop critique pour ne pas être intégré au noyau, de quoi le noyau a besoin et qu'il serait dommageable de charger plus tard. L'idée étant aussi de permettre à n'importe qui d'utiliser le noyau sans base de données, ou bien pouvoir l'utiliser pour autre chose que pour renvoyer du texte au navigateur.
Et la transparence est aussi un challenge architectural, car il faut trouver la manière de regroupper les modules ou les fonctions qui font la même chose, sans pour autant les brider…
Voilà pour mon idée, qu'en pensez vous ?
Pour ma part, je pense que le web gagnerait beaucoup à se rationnaliser de cette manière, les outils regrouppant les frameworks (comme ce qu'à fait Zend) ne seraient plus forcément utiles, et le développement serait simplifié…