¿Es una buena idea escribir un sistema operativo en un lenguaje de script? [cerrado]

8

¿Es una buena idea crear un sistema operativo que esté escrito en un lenguaje de script?

Por ejemplo, ¿qué tal crear un sistema operativo usando Python?

Amir Saniyan
fuente
Hay máquinas virtuales escritas en Javascript ...
user16764
3
Una idea tan buena como hacer un automóvil con plástico y sin metal.
Trabajo
Emacs es un buen sistema operativo, y elisp es un lenguaje de secuencias de comandos, tanto por su uso como por su alcance dinámico.
SK-logic

Respuestas:

15

No es solo una mala idea. Es casi imposible.

¿Cómo implementa IO con un lenguaje cuyas instalaciones de IO dependen completamente del sistema operativo host?

¿Cómo podría implementar una programación primitiva sin ninguna primitiva de interrupción útil?

¿Cómo podría escribir un controlador de dispositivo en un idioma que no pueda abordar un byte en particular?

Editar: - Solo para aclarar un poco. No puede escribir un sistema operativo "real" que interactúe directamente con la máquina en un lenguaje de "secuencias de comandos". Sin embargo, puede escribir una "máquina virtual" utilizable si el lenguaje de escritura es lo suficientemente flexible. Por ejemplo, las implementaciones de Donald Knuths teórico MIX (s) de la máquina y una ZX80 emulador buena suficiente para ejecutar pacman se han escrito en JavaScript.

James Anderson
fuente
2
@ClintNash realmente? JavaScript por definición vive dentro de un entorno de tiempo de ejecución que debe ejecutarse sobre un sistema operativo. Claro, es teóricamente posible precompilarlo en binario, pero esto es prácticamente inaudito. Node.js debe ejecutarse en un sistema operativo host. JavaScript no tiene acceso nativo a las construcciones necesarias para escribir un sistema operativo real. Claro, una vez que esté en un nivel de abstracción lo suficientemente alto, puede comenzar a usar scripts, pero algo debajo de esto necesita una capacidad real, desnuda para interactuar con el hardware.
bunglestink
Creo que tienes razón @bunglestink. Estaba haciendo referencia a usos de JS / OS en una capa de abstracción más alta. No estoy seguro de en qué nivel Windows 8 integra JS.
Jack Stone
1
Lisp no tiene interrupciones ni primitivas de E / S y no puede acceder a la memoria sin procesar. Está escrito dinámicamente. Y, sin embargo, el sistema operativo de las máquinas Lisp se escribió en Lisp.
nikie
1
@nikie: sí, pero no es un sistema operativo real, todavía depende del sistema operativo subyacente para todos los servicios básicos.
James Anderson
66
Las máquinas @nikie Lisp se construyeron sobre hardware especializado que básicamente implementó la máquina virtual Lisp a nivel de hardware. Entonces, sí, en algunos, ya que es posible, pero en este punto realmente está implementando su sistema operativo en la forma más primitiva posible, a nivel de microcódigo.
bunglestink
6

Antes de decidir el cómo , debe especificar qué . ¿Qué hará este nuevo sistema operativo? ¿Dónde correrá? ¿Por qué alguien se molestaría en usarlo? El siguiente paso es determinar las cualidades del sistema operativo. Velocidad, seguridad, subprocesos, gestión de memoria, multitarea, formatos de archivo, soporte de idiomas, procesadores compatibles, etc.

Al responder las preguntas anteriores y considerar las muchas cualidades de su sistema operativo, puede determinar qué herramienta utilizar para lograr sus objetivos.

Ahora, ¿realmente quieres hacer todo eso?

Supongo que Python se usó en parte para escribir partes de Linux. Consulte: ¿En qué idiomas están escritos Windows, Mac OS X y Linux?

Ninguna posibilidad
fuente
3

Sé que esta no es una respuesta adecuada, pero este proyecto demuestra un sistema operativo que funciona con un núcleo escrito en JavaScript:

https://github.com/charliesome/jsos/

Los controladores para VGA y el teclado también se escribieron en JavaScript usando interrupciones. Desarrollé una implementación de OpenGL 1.1 para mí hace un tiempo y funciona bastante bien.

Overv
fuente
55
En realidad, parece que el cargador de arranque y las características de bajo nivel están escritas en cy ensamblado ... Además, toda la máquina virtual js se implementa en c ...
bunglestink
En ese punto, también podría argumentar que los sistemas operativos no pueden escribirse en C, porque las partes deben escribirse en x86.
Overv
1
Buen punto, no puedo discutir con eso. Asm siempre será necesario en algún nivel; aunque, creo que la única pieza que absolutamente debe escribirse en ASM en x86 es el gestor de arranque. Después de eso, la mayoría de las implementaciones de C tienen características de ensamblaje en línea que podrían permitirle construir cualquier cosa por encima de eso. Esto contrasta con un lenguaje de secuencias de comandos que siempre debe tener una abstracción menor de un entorno de tiempo de ejecución presente, ya que nunca toca el hardware sin pasar por la abstracción de tiempo de ejecución.
bunglestink
3

No, ni siquiera es posible (exclusivamente)

¿Por qué? Considera lo siguiente:

¿Qué es un lenguaje de script?

Hagamos los siguientes dos supuestos sobre la definición de un "lenguaje de script":

  1. El lenguaje vive dentro de un entorno de tiempo de ejecución.
  2. El idioma no tiene acceso a punteros de memoria sin procesar.

¿Qué es un sistema operativo?

Supongamos que el objetivo principal de un sistema operativo se puede simplificar de la siguiente manera:

  • para proporcionar una abstracción entre los programas de usuario y el hardware que ejecutan

Según estas mismas definiciones, es lógicamente imposible que un lenguaje de script sea un sistema operativo. ¿Por qué?

  1. Un sistema operativo debe tener acceso sin ataduras a la memoria de una computadora para comunicarse con el hardware. Dado que los lenguajes de secuencias de comandos no tienen acceso a punteros de memoria sin procesar, no pueden hacer esto.
  2. Dado que un lenguaje de secuencias de comandos requiere un entorno de tiempo de ejecución, pero no pueden comunicarse directamente con el hardware, el entorno debe codificarse en otro idioma que tenga esta capacidad. En este caso (al igual que con JSOS que se mencionó en otras publicaciones), se debe usar un lenguaje de nivel inferior para interactuar con la máquina.

Es posible escribir una cantidad mínima de código en un lenguaje "en bruto" como C, pero siempre se necesitará un lenguaje compilado en bruto por definición. Una vez que esto esté en su lugar, otras partes del sistema operativo se pueden implementar en un lenguaje de script, pero un lenguaje de script nunca se podría usar solo.

bunglestink
fuente
Para ser justos, un sistema operativo típico configura un tiempo de ejecución para C y expone abstracciones básicas del hardware antes de ejecutar realmente el código C. Puede hacer lo mismo simplemente proporcionando un tiempo de ejecución de JavaScript. Este tiempo de ejecución está bastante por encima de C, pero una vez que está activo, es esencialmente un modelo de objeto componente moderno, excepto que JSON tiene más sentido que ini, y JavaScript se autodescribe por defecto, por lo que no necesita bibliotecas de tipos. JavaScript es tan autodescriptivo que puede obtener las funciones del objeto a través de toString, manipularlas y almacenarlas nuevamente en el disco. No es impensable usarlo para un núcleo.
Dmitry
0

Debo mantener que, en principio, es posible escribir un sistema operativo en python. Tendría que producir un compilador de lenguaje de Python a bajo nivel, así como agregar módulos a la biblioteca estándar que brinden acceso a las piezas de bajo nivel de su computadora. Pero si esas dos piezas estuvieran en su lugar, sería posible.

Sin embargo,

  1. Va a ser realmente difícil escribir un compilador que produzca código eficiente
  2. Python va a ser incómodo para acceder a detalles de bajo nivel
Winston Ewert
fuente
3
Además, Python en este escenario ya no calificaría como un 'lenguaje de script' por ninguna definición sensata.
tdammers
@tdammers, considero que el lenguaje de script es un concepto mal definido de todos modos.
Winston Ewert