La autosuficiencia ( del inglés self-hosting ) en el desarrollo de software es el uso de un programa para crear nuevas versiones del mismo programa. El término se aplica con mayor frecuencia a los compiladores que pueden compilar su propio código fuente . Además, los programas autónomos suelen incluir núcleos de sistema operativo , intérpretes de línea de comandos y sistemas de control de versiones.
El primer compilador autónomo fue escrito para el lenguaje de programación Lisp por Hart y Levin en el MIT en 1962. Escribieron un compilador para el código fuente de Lisp en Lisp y lo probaron dentro de un intérprete que ya existía en ese momento . Con el tiempo, el compilador se volvió autosuficiente y pudo compilar su propio código fuente.
Cuando Ken Thompson comenzó a desarrollar Unix en 1968, estaba escribiendo y compilando programas en el GE-635 y ejecutándolos en el PDP-7 . Una vez que la primera versión del kernel de Unix, el intérprete de comandos , el editor, el ensamblador y algunas otras utilidades estuvieron en funcionamiento, el sistema operativo Unix pasó a ser autónomo: se podían escribir y probar nuevos programas en el propio PDP-7 sin la uso de dispositivos de terceros. [una]
Douglas McIlroy escribió un TMG ( Compiler Compiler ) con TMG en una hoja de papel, lo convirtió manualmente a código de máquina y transfirió ese código de máquina al PDP-7 de Ken Thompson. [2]
El desarrollo del sistema GNU se basa en gran medida en el uso de GCC (compilador GNU C) y GNU Emacs (un popular editor de texto), que permite desarrollar software libre dentro del proyecto GNU sin dependencias externas de otros, potencialmente no libres. software.
Muchos lenguajes de programación tienen implementaciones autónomas: los compiladores de estos lenguajes están escritos en los propios lenguajes. En algunos de estos casos, la implementación original se desarrolló utilizando otro lenguaje de programación, lenguaje ensamblador o incluso código de máquina .