Neptune OS: una personalización WinNT del microkernel seL4
Se dio a conocer la publicación de la primera versión experimental del proyecto Neptune OS, que difiere del proyecto de la distribución de Linux basada en Debian con el mismo nombre.
Este sistema del cual hablaremos el día de hoy se caracteriza por desarrollar un complemento para el microkernel seL4 con la implementación de componentes del kernel de Windows NT, con el objetivo de brindar soporte para ejecutar aplicaciones de Windows.
Sobre Neptune OS
El proyecto implementa el «NT Executive», una de las capas del kernel de Windows NT (NTOSKRNL.EXE), responsable de proporcionar la API de llamada al sistema NT Native y la interfaz para que funcionen los controladores.
En Neptune OS, el componente NT Executive y todos los controladores no se ejecutan a nivel de kernel, sino como procesos de usuario en un entorno basado en el microkernel seL4. La interacción del componente NT Executive con los drivers se realiza a través del estándar seL4 IPC. Las llamadas al sistema proporcionadas hacen posible que la biblioteca NTDLL.DLL funcione con una implementación de la API Win32 utilizada en las aplicaciones.
NT Executive también es responsable de la interfaz del controlador del kernel de Windows (conocido como modelo de controlador de Windows), que incluye funciones como
IoConnectInterrupt
yIoCallDriver
.En Windows, estos se cargan en modo kernel y se vinculan con el
NTOSKRNL.EXE
imagen. En el sistema operativo Neptune, ejecutamos todos los controladores del kernel de Windows en modo de usuario y se comunican con el proceso NT Executive a través de las primitivas estándar seL4 IPC.
El objetivo final del proyecto Neptune OS es implementar suficiente semántica de NT para que el entorno de usuario de ReactOS se pueda portar bajo Neptune OS, así como la mayoría de los controladores del kernel de ReactOS.
En teoría, los desarrolladores menciona que deberían poder lograr la compatibilidad binaria con los ejecutables nativos de Windows siempre que la implementación ofrecida de la API nativa de NT sea lo suficientemente fiel.
También deberíamos poder lograr un alto grado de compatibilidad del código fuente con los controladores del kernel de Windows. El principal obstáculo para lograr la compatibilidad binaria de los controladores del kernel es que muchos controladores del kernel de Windows no siguen el protocolo estándar de comunicación del controlador de Windows (es decir, pasan los IRP cuando necesita llamar a otro controlador) y, en cambio, solo pasan punteros y llaman a otros controladores directamente. En Neptune OS, a menos que sea un par de controlador-minicontrolador, siempre ejecutamos «kernel».
Sobre Neptune OS 0.1.0001
El estado del proyecto en este momento es una versión preliminar, ya que hasta ahorita se ha logrado poder implementadar suficientes primitivas de NT para cargar una pila básica de controladores de teclado, que incluye el controlador de clase de teclado kbdclass.sysy el controlador de puerto PS/2 i8042prt.sys, así como un símbolo del sistema básico ntcmd.exe, tomado del proyecto ReactOS.
Casi ninguno de los comandos de shell funciona realmente, pero la pila de teclado es estable. Las compilaciones de depuración pueden ser un poco lentas, ya que se están generando demasiados registros de depuración.
Pero se menciona que estas pueden ser desactivardas en el código (se debe dirigir a private/ntos/inc). También se menciona que se incluyo un controlador «beep.sys» (que no tiene sentido, pero solo el desarrollador sabrá por qué) que hace un sonido molesto en el altavoz de la PC y que para poder escucharlo, se debera desactivar el silencio (especialmente si usa pulseaudio).
¡Todos los controladores se ejecutan en el espacio del usuario! Todo el sistema cabe en un disquete y se puede descargar desde la versión v0.1.0001. También puede construirlo usted mismo, cuyo procedimiento se describe en la siguiente sección.
Finalmente para los que estén interesados en poder conocer un poco más al respecto del proyecto, pueden consultar los detalles en el siguiente enlace.
El tamaño de la imagen de arranque es de 1,4 MB y el código se distribuye bajo la licencia GPLv3.