Le projet "J'ai l'inux" vise à proposer une distribution Linux capable de 
filter les contenus notamment pornographiques, pour une utilisation à l'école.

Pour filtrer les contenus, il est nécessaire d'intervenir à l'intérieur du 
système pour intercepter les contenus à filtrer (on ne peut pas intervenir au 
niveau des trames réseau car à ce niveau les contenus ne sont pas 
interpétables).

J'ai pensé à utiliser des machines virtuelles pour déléguer à chaque machine 
virtuelle une portion spécifique du système à assurer.

Cette idée est née d'un poisson d'avril (April's fool joke) qui annonçait le 
projet Canterbury, visant à réunir le meilleur de 5 distributions Linux dans 
une nouvelle distribution. En tant que chrétien, je suis très sensible aux 
poissons d'avril qui ont pour objectif de se moquer des chrétiens. J'ai donc 
choisi ces 5 distributions et j'ai fait un prototype de test 64 bits:
- Archlinux pour l'interface homme-machine et la virtualisation
- Gentoo pour la compilation
- Grml pour les entrées-sorties
- Open-Suse pour les applications
- Debian pour les applications 32 bits et la modélisation

L'idée sous-jacente à ce projet, c'est un module noyau à développer qui 
permettra de router les appels système vers chaque distribution en fonction du 
type d'appel système et du rôle de chaque distribution dans le système.

Le pattern MVCA (Modèle= données, Vue=ihm, Controleur=noyau, 
Action=application) est utilisé entre Archlinux, Grml et OpenSuse.

Le filtrage de contenu s'effectue entre les applications et les vues grâce au 
module noyau qui intercepte les données à filtrer et les dirige vers un 
filtreur hors noyau. Le filtreur applique des outils sur les données pour 
décider si elles seront autorisées ou non.

Pour développer le filtreur, un nouveau langage, Pmal, est à créer. On a besoin 
d'un nouveau langage qui doit être capable de faire évoluer ses programmes sans 
avoir à les interrompre. Ce langage sera basé sur du typage fort, pour assurer 
la sécurité du système. J'ai imaginé un langage de glue pour faire ça.

Il s'agit d'un langage qui fait un usage important de la réflexivité: il 
connait ses constituants et peut agir dessus.
Il est basé sur le principe des conteneurs légers: les classes composantes sont 
assemblées par inversion de controle. Chaque composante ne connait pas avec 
quel composant il sera relié dans les conteneurs légers.

Exemple: un objet A est relié à un objet de type D sur lequel il invoque une 
méthode b pour imprimer. A ne sait pas de quelle classe est l'objet de typez D. 
De D, 2 classes héritent: B et C, pour 2 imprimantes différentes. Chaque classe 
B et C possède un objet Méthode implémentant la méthode b. Cet objet Méthode 
porte des attributs "tags" qui le décrivent.
Par exemple B a un tag "600dpi" et C a un tag "300dpi".
Lorsque A demande a exécuter b, b est intercepté par le conteneur léger qui va 
filter les candidats possibles en fonction des tags. Finalement, le conteneur 
léger choisira B pour optimiser la qualité d'impression, sans que A se soit 
jamais douté de rien.
On pourra aussi avoir un objet proxy qui intercepte les requêtes b et les 
envoie de manière asynchrone.
Ou encore, un compteur d'appels de méthode incrémental pour détecter les 
boucles infinies et les résoudre en analysant le code invoqué et en proposant 
une approximation si elles tendent vers une limite.
Par exemple on pourra résoudre le paradoxe de Zénon:
Achille et la tortue font une course : Achille va 2 fois plus vite que la 
tortue. Chaque fois que Achille parcours la distance qui le sépare de la 
tortue, celle-ci parcours la moitié de cette distance. Ainsi une nouvelle 
distance plus petite les sépare...
La récursion est infinie. Si on compte les appels récursifs avec une 
interruption par exemple au bout de 10 itérations, en analysant le code on peut 
déduire que la limite tend vers 0 et retourner cette réponse comme 
approximation et mettre fin à la boucle. Si il n'y a pas de limite on 
interrompra aussi la boucle pour éviter un engorgement système.

Avec le niveau d'abstraction où une méthode est un objet on pour attacher cette 
méthode à un seul objet sans l'attacher à tous les objets de sa classe, à des 
fins de tests. Une fois testée, cette méthode pourra être généralisée à toute 
la classe. A ce moment, la méthode sera interceptée par un proxy, puis mise en 
place, puis activée en débloquant le proxy, permettant ainsi une évolution du 
code et des classes du programme sans interruption.

De plus, bien que fortement typé, ce langage pourra être exécuté par du 
javascript, du fait de son niveau d'abstraction : les objets, les classes, les 
attributs et les méthodes sont tous des objets manipulables.

Actuellement, je dispose d'un prototype faisant fonctionner les 5 distributions 
ensemble. J'ai presque terminé le compilateur pour les méthodes du langage en 
Java 1.5.

Il faut développer l'ensemble du langage Pmal, le module du noyau pour router 
les appels système et aussi un gestionnaire de paquets pour l'ensemble du 
système avec les 5 distributions.

Il s'agit d'un travail énorme, mais le proverbe dit: "La foi déplace des 
montagnes".

Contactez-moi si vous désirez participer: chris21.r...@free.fr subject "J'ai 
l'inux".

--
Lisez la FAQ de la liste avant de poser une question :
http://wiki.debian.org/fr/FrenchLists

Pour vous DESABONNER, envoyez un message avec comme objet "unsubscribe"
vers debian-user-french-requ...@lists.debian.org
En cas de soucis, contactez EN ANGLAIS listmas...@lists.debian.org
Archive: 
http://lists.debian.org/1208357056.27105891.1380222552869.javamail.r...@spooler6-g27.priv.proxad.net

Répondre à