Volver a noticias

jueves, 8 de octubre de 2026, 4:27 p. m.

SavanXP v0.4.0 - La revolución de ld.so

SavanXP 0.4.0

SavanXP es un sistema operativo experimental para x86_64 + UEFI. Arranca con el gestor Limine, con kernel propio en C/C++, sesion grafica propia y un volumen persistente montado en /disk. Se construye y se prueba desde Linux con Bash y CMake. Licencia MIT.

Lo que ya hace el sistema:

  • Kernel de 64 bits, procesos ELF64, planificador con desalojo y llamadas propias.
  • Sesion grafica con gestor de ventanas (windowd), fondo, Program Manager, barra de tareas y menu Inicio como clientes.
  • Apps incluidas: Files, Notepad, Shell, Add/Remove Programs, System Properties, Task Manager, Calculator, Minesweeper, Gears.
  • Base POSIX minima y SDK v1 para compilar aplicaciones externas contra el repo.
  • Volumen SxFS persistente, red, audio, entrada, GPU y almacenamiento basicos.

Que trae la 0.4.0 (2026-10-08)

Es la version donde el sistema deja de llevar una copia de cada libreria en cada binario y pasa a cargar librerias compartidas de verdad.

Cargador y librerias compartidas

  • ldso mapea DT_NEEDED desde /lib, con un solo sesgo de carga por libreria, simbolos resueltos en toda la cadena y el ejecutable dentro del ambito de simbolos.
  • Cadena real en /disk/lib: libmath.so.0.4, libsxgfx.so.0.4, libgfx2d.so.0.4, libsxgui.so.0.4, libsxmidi.so.0.4 y libffmpeg.so.0.4.
  • El caso dificil fue FFmpeg como una sola libreria: 6,8 MB, 2334 simbolos y 9228 reubicaciones. El Media Player paso de 7 MB enlazado en estatico a 344 KB con un DT_NEEDED.
  • Un programa con una dependencia ausente arranca igual y dice cual falta (ldso_missing()), en vez de morir en un salto PLT.

Musica y audio

  • Doom tiene musica: cada MUS se convierte a MIDI y libsxmidi lo sintetiza en ejecucion. Con GENMIDI del WAD usa voces FM de dos operadores; sin el, el render es identico al anterior.
  • Celeste Classic reproduce sus cinco loops OGG a traves de libffmpeg.
  • /bin/audiod mezcla dos programas a la vez, con volumen maestro, volumen por aplicacion y ventana emergente con deslizadores en la barra de tareas.

Escritorio

  • Menu Inicio recortado: boton Start, lista plana de programas, pie con Shut Down y Restart con confirmacion en dos pasos.
  • Titulos con RetroSans, rampas de acento propias y barras de titulo de 20 px.
  • Cerrar una ventana en plena carga ya no congela el escritorio.

Sistema y formato

  • SxFS formato v2: 4096 inodos, techo de 1 GiB, volumen persistente de 1 GiB y LiveCD de 256 MiB. build/disk.img llega a QEMU como disco, no como modulo.
  • SMP en fases 0-3: todos los nucleos corren procesos de usuario bajo un bloqueo grande del kernel. TCP con reintentos, reensamblado y ECONNRESET / ETIMEDOUT en vez de un EOF limpio.
  • Virtio cubierto donde importa: virtio-blk, virtio-net, teclado y captura de audio. --accel kvm disponible; los smokes siguen en TCG.

Verificacion

  • Los escenarios visuales ya no comprueban "algo se movio": afirman los glifos en pantalla desde las tablas de fuentes compiladas.
  • doom-music-smoke falla si el WAV capturado sale en silencio y falla si el audio sobrevive al cierre. sxgui-smoke, calc-smoke, mines-smoke, taskmgr-smoke, tcp-smoke y verify_doom_persistence.sh cubren el resto.

Probarla

./build.sh build
./build.sh run
./build.sh smoke smoke

Puertos versionados aparte: ./ports/doomgeneric/build.sh, ./ports/ffmpeg/build.sh y ./ports/ccleste/build.sh.