En programación informática , el autohospedaje es el uso de un programa como parte de la cadena de herramientas o del sistema operativo que produce nuevas versiones de ese mismo programa; por ejemplo, un compilador que puede compilar su propio código fuente . El software autohospedado es algo habitual en ordenadores personales y sistemas más grandes. Otros programas que suelen ser autohospedados son los núcleos , los ensambladores , los intérpretes de línea de comandos y el software de control de versiones .
Un sistema operativo es autoalojado cuando la cadena de herramientas para crear el sistema operativo se ejecuta en ese mismo sistema operativo. Por ejemplo, Windows se puede crear en una computadora que ejecute Windows.
Antes de que un sistema pueda ser autoalojado, se necesita otro sistema para desarrollarlo hasta que alcance una etapa en la que sea posible el autoalojo. Cuando se desarrolla un nuevo ordenador o sistema operativo, se necesita un sistema para ejecutar el software de desarrollo, pero también es necesario el software de desarrollo utilizado para escribir y construir el sistema operativo. Esto se denomina problema de arranque o, de forma más genérica, dilema del huevo y la gallina .
Una solución a este problema es el compilador cruzado (o ensamblador cruzado cuando se trabaja con lenguaje ensamblador). Un compilador cruzado permite que el código fuente de una plataforma se compile para una máquina o sistema operativo diferente, lo que hace posible crear un sistema operativo para una máquina para la que aún no existe un compilador autoalojado. Una vez escrito, el software se puede implementar en el sistema de destino utilizando medios como una EPROM , un disquete , una memoria flash (como una unidad USB) o un dispositivo JTAG . Esto es similar al método utilizado para escribir software para consolas de juegos o para dispositivos portátiles como teléfonos celulares o tabletas, que no alojan sus propias herramientas de desarrollo.
Una vez que el sistema está lo suficientemente maduro como para compilar su propio código, la dependencia entre desarrollos termina. En este punto, se dice que un sistema operativo está alojado en el propio sistema.
El desarrollo de software mediante compiladores o intérpretes también puede ser autoalojado cuando el compilador es capaz de compilarse a sí mismo. [1]
Dado que los compiladores alojados en servidores propios sufren los mismos problemas de arranque que los sistemas operativos, un compilador para un nuevo lenguaje de programación debe escribirse en un lenguaje existente. Por lo tanto, el desarrollador puede usar algo como lenguaje ensamblador, C / C++ o incluso un lenguaje de programación como Python o Lua para crear la primera versión del compilador. Una vez que el lenguaje esté lo suficientemente maduro, el desarrollo del compilador puede pasar al lenguaje nativo del compilador, lo que permite que el compilador se cree a sí mismo.
El primer compilador autoalojado (excluyendo ensambladores) fue escrito para Lisp por Hart y Levin en el MIT en 1962. Escribieron un compilador de Lisp en Lisp, probándolo dentro de un intérprete de Lisp existente . Una vez que mejoraron el compilador hasta el punto en que podía compilar su propio código fuente, pasó a ser autoalojado. [2]
El compilador tal como existe en la cinta del compilador estándar es un programa en lenguaje máquina que se obtuvo haciendo que la definición de expresión S del compilador trabajara sobre sí misma a través del intérprete.
— Memorándum de la IA 39 [2]
Esta técnica normalmente solo es practicable cuando ya existe un intérprete para el mismo lenguaje que se va a compilar; aunque es posible, es extremadamente poco común compilar humanamente un compilador consigo mismo. [3] El concepto toma prestado directamente de y es un ejemplo de la noción más amplia de ejecutar un programa sobre sí mismo como entrada, utilizado también en varias pruebas en la informática teórica , como la prueba de que el problema de detención es indecidible.
Ken Thompson comenzó a desarrollar Unix en 1968 escribiendo y compilando programas en el GE-635 y pasándolos al PDP-7 para probarlos. Después de que se completara el núcleo Unix inicial, un intérprete de comandos , un editor, un ensamblador y algunas utilidades, el sistema operativo Unix era autoalojado: los programas se podían escribir y probar en el propio PDP-7. [4]
Douglas McIlroy escribió TMG (un compilador-compilador ) en TMG en un trozo de papel y "decidió darle su trozo de papel a su trozo de papel", haciendo el cálculo él mismo, compilando así un compilador TMG en ensamblador , que escribió y ensambló en el PDP-7 de Ken Thompson. [3]
El desarrollo del sistema GNU se basa en gran medida en GCC (la colección de compiladores GNU) y GNU Emacs (un editor popular), lo que hace posible el desarrollo autónomo, mantenido y sostenido de software libre para el Proyecto GNU .
Muchos lenguajes de programación tienen implementaciones alojadas en el propio sistema: compiladores que están dentro y para el mismo lenguaje. Un enfoque es el bootstrapping , donde una versión básica del lenguaje se implementa inicialmente utilizando otro lenguaje de alto nivel, ensamblador o incluso lenguaje de máquina ; el compilador resultante se utiliza luego para comenzar a construir versiones expandidas sucesivas de sí mismo.
Los siguientes lenguajes de programación tienen compiladores autoalojados: [ cita requerida ]
El ensamblador plano es autoalojado y se incluye el código fuente completo.