Páginas

martes, 20 de diciembre de 2011

Übersecret

¿Y cual es ese nuevo proyecto en el que ando enfrascado tan secreto que a pesar de ser uno de mis proyectos "gordos" solo hay tres personas que conocen de su existencia y entre las tres apenas la entienden media? :-P Pues mi mayor sueño desde los 10 años, el cual ya intente anteriormente dos veces de forma infructuosa y como bien supuse, el desarrollo de PirannaFS me iba a dar la autoconfianza que necesitaba para desarrollarlo de forma definitiva: mi propio sistema operativo... o cuanto menos, mi propio kernel :-D

ChaOS (originariamente CaOS... cosas del marketing y la proyeccion internacional :-P ), el estado desorden primigenio que dio lugar a "el origen de todo", es un sistema operativo puramente orientado a objetos (al igual que el extinto BeOS o su sucesor Haiku) y a eventos (como los sistemas operativos en tiempo real), y diseñado por completo orientado a que sea facil de entender y de mantener. Bajo esta filosofia prescinde por completo de los IOCTLs y compañia: todo son objetos. En este aspecto es diametralmente opuesto a Plan 9, que aunque la idea de llevar Unix al extremo haciendo que "todo sean archivos" esta muy bien... realmente solo es practica para su uso desde la shell. No obstante, si se integrara con Python y potente introspeccion y sus tan extendidos "file-like objects" (acceder a cualquier objeto de forma estandar usando los metodos definidos para los archivos) se podria crear un sistema de programacion bastante versatil y poderoso (y de hecho incluso intente hacer recientemente que ChaOS estuviera escrito en Python para poder explotar esta idea), aunque claro, aqui hay un detalle importante... son objetos ;-)

Sin embargo, vamos a empezar por lo importante: el kernel. El kernel de ChaOS para aumentar su claridad, seguridad y versatilidad se divide (dividira, en realidad) en dos partes: un microkernel (Gaia, "la madre tierra") realmente minimo que corre en el anillo 0 que solo actua como envoltura del hardware para permitir un acceso mas homogeneo y controlado por parte del resto del software al estilo de los exokernels o los hipervisores (calculo que no deberia necesitar mas de 7 syscalls en total), y luego el kernel propiamente dicho (Uranus, "el padre del cielo"... e hijo y amante de Gaia :-P ) que corre puramente en espacio de usuario. Si, como un programa mas, ahi esta la gracia del asunto: al estar el kernel en espacio de usuario y no ejecutar codigo privilegiado se obtienen varias ventajas, como que el codigo privilegiado es mucho menor, es mas facil de programar y de depurar... e incluso estoy observando que no me costaria demasiado hacer que "cualquier" programa (notense las comillas, no obstante) se podria hacer que funcionara directamente sobre Gaia sin demasiado esfuerzo... o incluso hacer que Uranus corra como una aplicacion mas el cualquier otro sistema operativo o incluso propiamente dentro de ChaOS (el colmo de la recursion: un sistema operativo corriendo sobre si mismo sin maquinas virtuales. ¿Donde deja eso a jail? :-D ).

Por el momento, he conseguido que Gaia sea capaz de arrancar desde GRUB dentro de QEmu (ya es mas de lo que habia conseguido hasta ahora...) y tambien registra un pequeño driver en espacio para usuario para el PIT y estoy en proceso del driver de la tarjeta de video en lugar de acceder a ella directamente desde el modo kernel. Vale, lo reconozco, es mentira: todavia estoy ejecutandolo todo en espacio kernel, pero la paginacion me estaba dando problemas por lo que decidi adelantarme con la API, y actualmente ya estan funcionando correctamente a traves de las syscalls (de momento solo 3: in, out y register_interrupt_handler). Aparte el codigo es muy homogeneo y claro entre si, y aunque lo este haciendo en C ya que las otras veces que intente hacerlo en C++ fueron callejones sin salida, los namespaces son muy claros de seguir y no costaria demasiado hacer la conversion en el futuro. Vamos, una joyita de las que me gustan, codigo limpio y claro... :-D

Ahora que he terminado los examenes me pondre con el motor de eventos para asi poder aislar mas aun cada una de las dos partes (Gaia y Uranus) y que el driver de la VGA este completamente en el "pseudo" espacio de usuario. Despues ya continuare intentando la paginacion de memoria y la ejecucion en espacio de usuario de verdad, y luego ya creo me planteare si continuar con el desarrollo de Gaia como un cargador de kernels en espacio de usuario como habia pensado hasta ahora, o bien como libreria que añadir a aplicaciones estandar para que se ejecuten sin sistema operativo... o bien como las dos cosas :-D

P.D.: tengo que irme, el sistema de megafonia de la universidad avisa que tenemos que desalojar el edificio, dicen noseque de unos "egometros" que se han salido de su escala...

:-P