SavanXP es un sistema operativo experimental para x86_64 + UEFI, con
bootloader Limine, kernel propio en C/C++ y un flujo de trabajo pensado
para desarrollarse y probarse desde Windows nativo con PowerShell.
El proyecto ya arranca a una sesion grafica funcional, dispone de un shell de
userland, un volumen persistente montado en /disk, una base POSIX minima,
apps internas, soporte para apps externas compiladas contra la SDK del repo y
un camino grafico sobre compositor propio.
Version actual: v0.2.2
Historial de cambios: CHANGELOG.md
Licencia: MIT
Estado actual del sistema:
- Kernel
x86_64con arranque UEFI via Limine. - Consola sobre framebuffer y salida serie temprana.
- Espacio de usuario con procesos
ELF64, syscalls y scheduler preemptivo. - Shell con
pipes, redirecciones y builtins basicos. - Desktop inicial con taskbar, menu Inicio y apps cliente.
- Volumen persistente
SVFS2montado en/disk. - Base POSIX y SDK v1 para compilar aplicaciones externas.
- Capa grafica 2D
sxgfxpara superficies, painter y conjuntos de rects. - Soporte inicial de red, audio, input, GPU y almacenamiento.
Herramientas necesarias en el host:
gitclang++ld.lldoclang++con soporte-fuse-ld=lldqemu-system-x86_64- Firmware OVMF accesible por una de estas vias:
- variables de entorno
OVMF_CODEyOVMF_VARS - o una instalacion de QEMU/MSYS2 en una ruta conocida
- variables de entorno
build.ps1 descarga automaticamente la rama binaria v10.x-binary de
Limine si no existe en tools/limine.
Compilar el sistema:
.\build.ps1 buildEse comando:
- compila kernel y userland interno
- genera el
initramfs - prepara la imagen EFI de arranque
- crea
build/disk.imgsi todavia no existe - sincroniza el contenido interno sobre el volumen persistente
Importante: el build normal no debe recrear build/disk.img de forma
incondicional. La imagen persistente se conserva entre builds salvo corrupcion
real o incompatibilidad de formato.
Arrancar el sistema:
.\build.ps1 runOtras variantes disponibles:
.\build.ps1 debug
.\build.ps1 smoke
.\build.ps1 cleanNotas practicas:
runinicia QEMU con sesion grafica y salida serie en la terminal.debugconserva el flujo de arranque orientado a depuracion.smokeejecuta una prueba automatizada headless y deja logs enbuild/.cleanelimina artefactos de compilacion y puede forzar la recreacion del entorno en el siguiente build.
El sistema entra a init y luego a sh como shell principal. Para ver el
estado base del sistema desde el guest:
sysinfo
df
ls /disk
Comandos utiles incluidos en el userland actual:
shsysinfodfdesktopkeytestmousetestgputestpingnetinfobeepaudiotest
Ademas, varias utilidades basicas salen del multicall busybox, por ejemplo
ls, cat, echo, mkdir, rm, mv, cp, true, false y sleep.
El flujo recomendado para probar programas propios no requiere reconstruir el
initramfs. Las apps externas se compilan contra la SDK y se instalan directo
en build/disk.img, normalmente bajo /disk/bin.
Ejemplo:
.\build.ps1 build
.\tools\build-user.ps1 -Source .\sdk\hello\main.c -Name hello
.\build.ps1 runDentro de SavanXP:
which hello
hello
Tambien existe un wrapper para compilar, instalar y arrancar el sistema en un paso:
.\tools\run-user.ps1 -Source .\sdk\errdemo\main.c -Name errdemoEjemplos incluidos:
sdk/hellosdk/errdemosdk/fsdemosdk/gfxhellosdk/doomgeneric
SavanXP usa una imagen de disco persistente en build/disk.img, montada como
/disk dentro del sistema mediante SVFS2.
Esto permite:
- conservar archivos entre reinicios
- instalar binarios externos en
/disk/bin - guardar assets y datos persistentes bajo
/disk
Ejemplo dentro del guest:
echo hola > /disk/notes.txt
sync
cat /disk/notes.txt
El flujo del repo protege esta persistencia: un .\build.ps1 build no debe
eliminar aplicaciones externas ya instaladas ni assets persistentes como los
de doomgeneric.
Directorios principales:
arch/: codigo especifico de arquitecturakernel/: kernel y subsistemas basesubsystems/posix/: capa POSIX, SDK y userland principalrootfs/: contenido delinitramfsdiskfs/: contenido inicial del volumen persistentesdk/: ejemplos, tooling y ports externostools/: scripts host-side y utilidades de desarrollovendor/: dependencias de terceros
SavanXP ya supero la etapa de arranque minimo. Hoy ofrece una base coherente para seguir evolucionando:
- kernel y userland propios
- desktop inicial usable
- camino grafico bajo compositor
- persistencia real sobre
/disk - soporte para ports y aplicaciones externas
Todavia sigue siendo un sistema experimental, con APIs y subsistemas en evolucion, pero ya apunta a ser una base de trabajo consistente y demostrable.