Autohébergement (informatique)

L'auto-hébergement désigne l'utilisation d'un programme informatique, partie d'une chaîne d'outils ou d'un système d'exploitation pour produire de nouvelles versions dudit programme.

L'Autohébergement désigne l'utilisation d'un programme informatique, partie d'une chaîne d'outils ou d'un système d'exploitation pour produire de nouvelles versions dudit programme. Par exemple, un compilateur qui peut compiler son propre code source. Le logiciel auto-hébergé est commun sur les ordinateurs personnels et les systèmes plus larges.

D'autres programmes qui sont typiquement auto-hébergés sont les noyaux, les assembleurs et les shells.

Si un système est si neuf qu'aucun logiciel n'a été écrit pour lui, alors on développe le logiciel sur un autre système auto-hébergé et placé dans une mémoire informatique que le nouveau système peut lire.

Le développement continue de cette manière jusqu'à ce que le nouveau système puisse héberger son propre développement. Par exemple, le développement du système d'exploitation Linux a été initialement hébergé sur le système d'exploitation Minix. Écrire de nouveaux outils de développement logiciel sans partir d'un système existant ne se fait plus aujourd'hui.

Plusieurs langages de programmation sont auto-hébergés, dans le sens qu'un compilateur pour ce langage, écrit dans le même langage, est disponible. Pour un nouveau système, le premier compilateur d'un nouveau langage de programmation doit être écrit dans un autre langage (dans de rares cas, le langage machine). Les langages auto-hébergés incluent le Lisp, Forth, C, Pascal, Modula-2, Oberon, Smalltalk, Crystal, OCaml, ooc[1] et FreeBASIC.

La confiance aveugle en des outils de programmation auto-hébergés est un risque de sécurité comme démontré par le hack de Thompson.

Histoire modifier

Le premier compilateur auto-hébergé (si l'on exclut les assembleurs) a été écrit pour le Lisp par Hart et Levin au Massachusetts Institute of Technology (MIT) en 1962[2].

Puisque les interpréteurs Lisp, mais non les compilateurs, existaient auparavant, ils utilisaient une méthode originale pour compiler leur compilateur. Le compilateur, comme tout programme Lisp, pouvait être exécuté dans un interpréteur.

Donc, il pouvait simplement exécuter le compilateur dans l'interpréteur lui donnant ensuite, son propre code source à compiler.

Le compilateur tel qu'il existe sur la bande du compilateur standard est un programme en langage machine qui était obtenu en faisant que la définition du compilateur sous forme de S-expression travaille sur lui-même à travers l'interpréteur (AI Memo 39)[3].

Cette technique est aussi possible quand un interpréteur existe déjà pour le même langage qui est compilé.

Cela provient directement de la notion de tourner un programme avec lui-même comme entrée, ce qui est aussi utilisé dans des preuves variées en informatique théorique telles que celles de l'indécidabilité du problème de l'arrêt.

Notes et références modifier

Voir aussi modifier

Articles connexes modifier

Liens externes modifier