Registro de cambios visibles por version para SavanXP.
Notas de corte:
v0.1.0se reconstruyo de forma retroactiva desde el historial hastad822857.v0.1.1cubre los cambios posteriores av0.1.0, incluyendo el trabajo actual ya integrado en el arbol pero todavia no etiquetado en git.
- Politica y trazabilidad explicita para adopcion de componentes inspirados en
SerenityOS, con documentacion nueva en
docs/THIRD_PARTY_ADOPTION.mdydocs/THIRD_PARTY_PROVENANCE.md. - Capa grafica 2D reutilizable
sxgfxen el SDK POSIX v1, consx_bitmap,sx_painter, alpha blending, clipping ysx_rect_setpara manejar damage multiple desde userland. - Fachada
displayinspirada enDisplayConnectorsobre el backendvirtio-gpu, con propiedades de conector, import/release de surfaces, batching de presents, timeline y eventos waitables exportables a userland. - Contrato grafico
SAVANXP_GPU_CLIENT_SURFACE_VERSION_3para apps cliente, basado ensection_create/map_viewmas batches de dirty rects y eventossubmit/retire/shutdownen lugar del pipe legacy de presents. - ABI publica nueva y ampliada en
/dev/gpu0para seguimiento explicito de presents, batching y capacidades del conector, incluyendo timeline, waits/events y consultas de propiedades/scanouts sin ownership del display. - Compositor de escritorio multi-window real, con overlays simultaneos, z-order simple, ventana activa, arrastre desde la titlebar y boton de cierre en la esquina superior derecha.
- Pipeline de assets bitmap propio para el desktop, con iconos PNG embebidos y arte generado dentro del repo para taskbar, menu Inicio, titlebars y franja lateral, eliminando la dependencia de assets de SerenityOS.
- Estadisticas ampliadas de
virtio-gpucon latencia end-to-end por frame, incluyendo muestras acumuladas y peor caso observado.
- El progreso en background de
virtio-gpudeja de depender del subsistema de input y pasa a bombearse desde un servicio de dispositivos del kernel invocado en timer y waits bloqueantes. - El
desktopdeja atras el modelo de un solo cliente fullscreen y pasa a un compositor por surfaces con invalidacion por multiples rectangulos, composicion por clipping y presents batched hacia el scanout principal. - El loop principal del
desktopse desacopla en layout/render/menu/session, manteniendo el binario unico pero separando mejor la responsabilidad del compositor, el shell de fondo y las ventanas overlay. shellapp,doomgenericy las demas apps cliente migran al canal async de surfaces version 3; el terminal fuerza redraw completo cuando el scroll mueve el historial para evitar artefactos visuales en la ventana.- La sincronizacion compositor-GPU pasa a usar timeline explicita y retiro del frame anterior antes de reciclar el backbuffer visible, reduciendo tearing logico y mejorando el pacing del desktop.
- El menu Inicio y la taskbar reciben varias pasadas de pulido visual y de comportamiento: layout mas limpio, sidebar bitmap, textos que caben mejor, hover estable y mejor feedback del cliente activo.
- Las ventanas overlay ya pueden moverse dentro del area util del desktop y cerrarse directamente desde su titlebar con una cruz clasica estilo shell.
- El arte embebido del desktop pasa a generarse desde assets propios del repo, sustituyendo las referencias temporales usadas durante el prototipado inspirado en SerenityOS.
gputest --smokeahora valida tambien la timeline de presents y el pacing explicito del driver, no solo stats/stages internos.- El flujo de
build/disk.imgpersistente se vuelve a validar despues de cada tanda grande de cambios condoomgenericcomo prueba real de no regresion.
- Arbol nuevo
subsystems/consubsystems/posixcomo primer subsistema explicito del SO, separandokernel,userlandysdkbajo un mismo ownership.
- La entrada y el dispatcher POSIX de syscalls pasan a vivir bajo
subsystems/posix/kernel, mientraskernel/conserva el scheduler, procesos base, VM, VFS, drivers y demas mecanismos genericos. - El SDK canonico v1 pasa a
subsystems/posix/sdk/v1; el build principal,tools/build-user.ps1y la extension de VS Code consumen ahora esa ruta como referencia publica del subsistema POSIX. - El userland interno se mueve a
subsystems/posix/userlandy compila contra el runtime canonico compartido del SDK, eliminando duplicados internos y dejandosdk/top-level como raiz de ejemplos y ports. - La definicion publica del ABI visible queda unificada en
subsystems/posix/sdk/v1/include/savanxp/syscall.h, sin copia paralela eninclude/shared. - El sistema pasa a reportarse como
v0.2.2en kernel, shell,uname,sysinfoy componentes que consumen la version compartida. - La migracion vuelve a validar el flujo de imagen persistente:
.\sdk\doomgeneric\build.ps1y.\build.ps1 buildsiguen conservandodoomgenericydoom1.wadenbuild/disk.imgsin recreacion normal de la imagen.
- ABI publica nueva en
/dev/gpu0para diagnostico y control 2D extendido:GPU_IOC_GET_STATS,GPU_IOC_GET_SCANOUTS,GPU_IOC_REFRESH_SCANOUTS,GPU_IOC_SET_CURSORyGPU_IOC_MOVE_CURSOR. - Estadisticas ampliadas de
virtio-gpupara presents, stages, waits, timeouts, completions, IRQs, recovery y operaciones de cursor. - Enumeracion de scanouts y refresh basico de display info/hotplug en el
backend
virtio-gpu, manteniendodesktopsingle-display por defecto. - Soporte inicial de cursor plane por hardware en
virtio-gpu, con fallback transparente al cursor software deldesktopcuando el backend no lo expone o falla. - Coverage automatizado adicional en
gputest --smokepara validar progreso del driver viaGPU_IOC_GET_STATSy enumeracion de scanouts.
- El sistema pasa a reportarse como
v0.2.1en kernel, shell,uname,sysinfoy componentes que consumen la version compartida. - El modelo grafico normal queda definitivamente desktop-first: la taskbar
permanece visible, las apps cliente renderizan sobre un work area estable y
el
desktoppasa a ser el dueño normal del scanout. shellapp,gfxdemo,keytest,mousetestydoomgenericquedan alineados al camino cliente del compositor en vez del fullscreen directo legacy sobre/dev/gpu0.- La taskbar y el menu Inicio reciben una pasada de pulido visual y de comportamiento para encajar mejor con el nuevo contrato desktop-first.
- El backend
virtio-gpudeja de depender de reentradas oportunistas del caller para progresar: el scheduler interno ahora coalescea presents por recurso, reduceSET_SCANOUTredundantes y avanza trabajo en segundo plano con apoyo de IRQ cuando la linea PCI esta disponible. virtio-gpuagrega recovery deliberado y modo degradado predecible frente a timeouts del device, intentando restaurar el scanout primario y la consola sin exigir reinicio inmediato del SO.- El build principal y la tooling asociada dejan mas explicito que
build/disk.imges persistente por defecto: se valida consistencia deSVFS2, se evita recrear la imagen salvo corrupcion real y se conservadoomgenericjunto condoom1.wadcomo regresion practica de persistencia. - Los perfiles de QEMU usados por
run,smokey las utilidades graficas se alinean mejor con el hardware virtual real del stack actual (virtio-gpu+virtio-tablet+desktop). doomgenericpasa a vivir definitivamente como cliente del compositor y queda orientado a validacion manual dentro de la sesion grafica normal, en vez de depender de una smoke host-side propia.
- Sesion
desktop-firstcon compositordesktop, shell fullscreenshellapp, surfaces de cliente compartidas porSectionObjecty lanzamiento de apps graficas viafd 3..6. - ABI publica extendida en
/dev/gpu0conGPU_IOC_SET_MODE,GPU_IOC_IMPORT_SECTION,GPU_IOC_RELEASE_SURFACE,GPU_IOC_PRESENT_SURFACE_REGIONyGPU_IOC_WAIT_IDLE. - ABI publica nueva para audio con
SAVANXP_IOCTL_GROUP_AUDIO,AUDIO_IOC_GET_INFOystruct savanxp_audio_info. - Driver
virtio-soundplayback-only sobrevirtio_pci, exponiendo/dev/audio0con formato fijoS16LE stereo 48 kHz. - Utilidad nueva
audiotesty coverage automatizado en.\build.ps1 smokepara validar/dev/audio0. - Object manager minimo con handles kernel genéricos para I/O, eventos, timers y sections.
- Syscalls nuevas
EVENT_*,WAIT_ONE,WAIT_MANY,TIMER_*,SECTION_CREATE,MAP_VIEWyUNMAP_VIEW, con wrappers actualizados en userland y SDK v1. - Soporte inicial de
Section/Viewanónimo en el kernel, incluyendo memoria compartida entre procesos, herenciasharedvsprivateal hacerfork()y tests nuevoseventtest,timertest,sectiontestymmaptest. - Capa POSIX nueva para
mmap/munmapanónimo ensubsystems/posix/sdk/v1, más header estándarsys/mman.h.
- El sistema pasa a reportarse como
v0.2.0en kernel, shell,uname,sysinfoy componentes que consumen la version compartida. - El arranque normal pasa a supervisar
desktopdesdeinit;/SMOKEsigue evitando el desktop y mantiene la smoke automatizada headless. gfx_openy el runtime grafico pasan a ser compositor-first, con fallback directo sobre/dev/gpu0; el nodo legacy/dev/fb0deja de exponerse en el sistema actual.- El build principal ahora instala el multicall BusyBox portado en
/biny/disk/binparals,cat,echo,mkdir,rm,mv,cpyps. virtio-gpupasa a presentar sobre un set interno de tres superficies y el camino legacyFB_IOC_*sale de la ABI vigente.- Los perfiles
runysmokede QEMU agreganvirtio-sound-pcicon unaudiodevseparado del camino depcspeaker. sleep_ms()ahora corre sobre timers waitables del kernel en vez de un camino especial separado, yfork()preserva views anónimas compartidas o privadas segun el tipo de mapping.- El menu Inicio deja de ofrecer
Exit Desktop, yshellapppuede cerrarse conexitpara volver al desktop y reabrirse despues desdeMenu -> Shell. - El compositor desktop reduce algo de trabajo redundante en el camino de presentacion y corrige mejor el enrutado/polling de input para clientes fullscreen.
- Syscalls y wrappers POSIX nuevos para
fork,kill,raise,poll,selectyfcntl(F_GETFL/F_SETFL)con soporte deO_NONBLOCK. - Runner automatizado
.\build.ps1 smoke, que recompila, instala en/disk/bin, arranca QEMU headless y validafork, señales basicas, polling y persistencia real sobreSVFS2. - Userland multicall
busyboxpara empezar el reemplazo de utilidades comodin, incluyendoecho,cat,ls,mkdir,rm,mv,cp,true,falseysleep.
- El sistema pasa a reportarse como
v0.1.4en kernel, shell,uname,sysinfoy componentes que consumen la version compartida. - El timer base del sistema pasa a calibrarse con objetivo de
200 Hzen vez de100 Hz, mejorando un poco la respuesta percibida del mouse y el redondeo practico desleep_ms()para loops graficos e input. - Los techos internos suben para procesos, descriptores, pipes, sockets, VFS
y
SVFS2, dejando mas margen para ports y userland real. SVFS2ya puede montar/disken modo degradado de solo lectura si la recuperacion no deja al volumen seguro paraRW, evitando que quede directamente offline frente a fallos recuperables.- El build principal instala tambien los binarios internos en
/disk/bin, de modo que la shell y la smoke automatizada ejercitan la misma copia persistente del userland.
- Base compartida
virtio_pcipara driversvirtiomodernos sobre PCI/MMIO, reutilizada porvirtio-inputy preparada para colas sincronas por polling. - Driver nuevo
virtio-gpu2D para QEMU, con soporte MVP deGET_DISPLAY_INFO,RESOURCE_CREATE_2D,RESOURCE_ATTACH_BACKING,SET_SCANOUT,TRANSFER_TO_HOST_2DyRESOURCE_FLUSH. - Nodo nuevo
/dev/gpu0con ABI publicaGPU_IOC_GET_INFO,GPU_IOC_ACQUIRE,GPU_IOC_RELEASE,GPU_IOC_PRESENTyGPU_IOC_PRESENT_REGION. - Utilidad nueva
gputestpara validar el camino directo de presentacion sobre/dev/gpu0. - Calibracion del timer
local APIC/x2APICcontraRTC/CMOSdurante el boot para queuptime_msysleep_msqueden mejor alineados con tiempo real en QEMU.
/dev/fb0conserva compatibilidad con las apps fullscreen existentes, pero ahora puede presentar sobrevirtio-gpucuando el backend queda disponible.- El perfil de QEMU en
build.ps1 runahora agregavirtio-vgaconxres=1280,yres=800, ylimine.confpide1280x800x32para que el framebuffer de boot y el backend grafico queden alineados durante el handoff. - La consola y la UI fullscreen pueden seguir visibles sobre el recurso
primario de
virtio-gpu, incluyendo el retorno desde sesiones graficas exclusivas y el redraw limpio de toda la shell sin dejar residuos en los margenes. virtio-gpuahora intenta conservar el modo grande del framebuffer de boot antes de caer al scanout nativo reportado por el dispositivo, evitando que el sistema vuelva a640x480al finalizar el arranque cuando el modo mayor es aceptado.virtio-inputpaso a usar la geometria efectiva del framebuffer activo para normalizar el tablet absoluto, corrigiendo la desincronizacion del mouse con el host despues del cambio avirtio-gpu.- El heap del kernel dejo de ser lineal-only y ahora recicla bloques
liberados, hace
split/coalescey puede devolver arenas completas al allocador fisico cuando quedan vacias. - El runtime POSIX de
subsystems/posix/sdk/v1reemplazo su allocator tipo arena/bump por un heap fijo reciclable, de modo quemalloc,free,callocyreallocya reutilizan memoria en apps externas. sdk/doomgenericya no corre acelerado por un reloj base incorrecto; el tiempo del juego vuelve a apoyarse sobre un backend de tiempo mas cercano al real, dejando el tuning de rendimiento restante del lado del port.
- Este MVP de
virtio-gpumejora de forma visible la GUI fullscreen en QEMU, pero la subida de pixeles sigue siendo sincronica, con copia por CPU y sinmmap, page flipping ni doble buffer real. - Portar apps a
/dev/gpu0reduce capas y deja mejor encaminada la evolucion, pero la mejora grande en suavidad queda para una etapa posterior con buffers compartidos y presentacion menos bloqueante. - El rendimiento final de ports externos grandes como
sdk/doomgenerictodavia depende mucho del costo de escalado y del tamano del frame una vez que el sistema ya corre a resoluciones mas altas.
- Soporte basico de mouse
PS/2sobre el puerto auxiliar del controladori8042, con IRQ12, paquetes estandar de 3 bytes y degradacion segura a teclado-only si el mouse no inicializa. - Nodo nuevo
/dev/mouse0con eventos dedicados de mouse para apps graficas, sin romper la semantica previa de/dev/input0. - ABI compartida extendida con
struct savanxp_mouse_event, flags publicos de botones y helpers nuevosmouse_open/mouse_poll_eventen la libc/runtime. - Nuevo shell grafico fullscreen
desktop, inspirado en el lenguaje visual de Windows 2000, con taskbar, boton Inicio, reloj y cursor. - Nueva utilidad
mousetestpara validar/dev/mouse0, movimiento relativo y botones desde userland.
- La capa fullscreen del kernel ahora registra
/dev/mouse0junto con/dev/fb0y/dev/input0, y limpia colas de teclado/mouse al adquirir o liberar la sesion grafica exclusiva. - Bajo QEMU, el escritorio y
mousetestahora priorizan un backend absolutovirtio-tablet-pcicuando esta disponible, mientras/dev/mouse0conserva la ABI de deltas para no romper apps ya compiladas. - El kernel ahora reserva una ventana MMIO propia para drivers PCI modernos y la usa para mapear BARs de memoria de forma segura durante el boot.
- En entornos QEMU con
virtio-tablet-pci, el stackPS/2deja de inicializar el mouse auxiliar y queda teclado-only; el mousePS/2se conserva como fallback cuandovirtio-inputno esta disponible. - Se agrego lectura de
RTC/CMOSen el kernel y un helper publico aditivo para consultar hora real desde userland; el reloj del escritorio ya no depende solo deuptime. - La shell builtin ahora publica
desktopymousetestdentro del help interactivo. - La documentacion principal y la referencia del SDK v1 reflejan el nuevo
input de mouse, el escritorio inicial y el salto a
v0.1.2.
v0.1.2expone solo movimiento relativo y botones basicos en la ABI publica; internamente puede usar puntero absoluto bajo QEMU, pero no hay rueda, ventanas reales, compositor ni input raw para juegos.gfx_poll_eventsigue siendo teclado-only en esta etapa; el mouse entra por/dev/mouse0.
SVFS2como nueva version del filesystem persistente de/disk, consuperblockprimario/secundario, journal fijo de metadatos, bitmap de bloques, bitmap de inodos y tabla de inodos con extents.- Syscall nueva
syncy comando userlandsyncpara forzar checkpoint explicito del estado persistente. - Red minima sobre
rtl8139+QEMU user-net, conARP,IPv4,ICMPecho request/reply, sockets UDP IPv4 basicos y cliente TCP minimo. - ABI publica extendida para dispositivos y
ioctl, con nodos/dev/fb0,/dev/input0,/dev/net0y/dev/pcspk. - GUI fullscreen inicial con primitivas
gfx_*, demo internagfxdemoy ejemplo externosdk/gfxhello. - Sonido minimo por
PC speakercon comandobeep. - Primer port externo grande en
sdk/doomgeneric, usado como hito practico de apps externas graficas sobre el ABI del sistema. - Capa POSIX/libc inicial para SDK v1 con headers estandar publicos:
unistd.h,fcntl.h,stdio.h,stdlib.h,string.h,dirent.h,sys/stat.h,sys/socket.h,netinet/in.h,arpa/inet.h,time.hy asociados. - Runtime nuevo
subsystems/posix/sdk/v1/runtime/posix.cpara apps externas, constdiobasico,DIR*, heap simple tipo arena, conversiones, helpers de string, tiempo y sockets cliente. - Syscalls/base ABI nuevas para
getpid,stat,fstat,chdirygetcwd. - Smoke test externo
sdk/posixsmoke, compilado solo contra headers estandar. - Utilidad
keytestpara inspeccionar eventos de teclado sobre/dev/input0en fullscreen y validarkey down/up,keycodeyascii. FB_IOC_PRESENT_REGIONcomo extension de la ABI grafica para presentar solo una region del framebuffer desde userland.
- La capa VFS ahora centraliza la normalizacion de paths y amplio la capacidad
de rutas internas a
256bytes, de modo queprocess,cwdy operaciones de filesystem comparten una sola resolucion canonica. - El tooling host sobre
build/disk.img(build.ps1,tools/build-user.ps1ytools/UserAppCommon.ps1) dejo de escribirSVFS1y paso a crear e instalar directamente sobre imagenesSVFS2. - Las rutas persistentes de
/diskdejaron de depender de nombres-path como identidad on-disk y pasaron a montarse desde inodos estables cacheados en memoria del kernel. - El kernel ahora resuelve paths relativos contra un
cwdpor proceso, de modo queopen,exec,spawny operaciones de filesystem comparten directorio actual. - El stack de teclado
PS/2se reforzo con init del controlador mas robusta, decodificacion desacoplada deTTY/UI, mejor soporte deAltGr, locks y teclas especiales. sdk/doomgenericdejo de depender de su set privado de headers estandar y paso a consumir la capa publica del SDK, reduciendosavanxp_compat.ca glue especifico del port.- Las primitivas
gfx_*del runtime compartido se optimizaron para trabajar con spans/rectangulos contiguos y reducir el costo de dibujo por frame. gfxdemo,sdk/gfxhelloykeytestdejaron de refrescar la pantalla completa en cada iteracion y ahora usan regiones sucias o redraw bajo demanda para mejorar fluidez en fullscreen.- El backend de
sdk/doomgenericreemplazo el escalado basado en divisiones por pixel por una expansion por filas cacheadas, bajando el costo de CPU por frame durante el render fullscreen. - La documentacion principal y la referencia del SDK se actualizaron para reflejar la superficie POSIX/libc disponible y sus limites practicos.
- La validacion reciente del salto a
SVFS2cubre compilacion completa y verificacion host-side del flujobuild-user, pero todavia no incluye smoke tests de reboot/replay dentro de QEMU. - Si la recuperacion del journal o del metadata base falla al montar, el volumen queda offline; aun no existe un modo degradado de solo lectura.
free()todavia no recicla memoria; el allocator userland sigue siendo de tipo arena/bump.DIR->d_typese completa porstat()best-effort en userland.setsockopt/getsockoptcubren solo flags y timeouts basicos del cliente.- Segun el host y la captura de teclado de QEMU,
ImpPntpuede no entrar al guest como tecla dedicada y requerirAlt+ImpPntpara pruebas manuales. - La validacion reciente de
v0.1.1es host-side; el smoke POSIX nuevo aun no fue corrido dentro de QEMU en esta tanda.
Primera version publicada del experimento.
- Bootstrap del kernel sobre
x86_64 + UEFI + Limine, con recepcion debootloader info,framebuffer,memory map,HHDMeinitramfs. - Consola de texto sobre framebuffer con scroll, cursor y salida serie
temprana por
COM1/debugcon. - GDT/IDT con segmentos de usuario,
TSS, excepciones basicas y puerta de syscall porint 0x80. - Allocador fisico temprano, heap del kernel y VMM minimo para espacios de usuario.
- Driver de teclado
PS/2,TTYcanonica y shell interactiva inicial. VFSminima montandoinitramfscpio newc, con archivos dinamicos en memoria y volumen persistenteSVFSmontado en/disk.- Loader
ELF64estatico para procesos simples enring 3. - Scheduler round-robin preemptivo con bloqueo por
wait,readysleep. - Shell con
pipes, redireccion (|,<,>,>>,2>,2>>,2>&1), parser de comillas simples/dobles y builtinsexec,whichymkdir. - Handles refcounted con
dup,dup2,waitpid(-1)y procesos zombie/reap. - Reclaim de paginas en
exit/exec, destruccion deVmSpacey liberacion de stacks de kernel al reapear procesos. SVFScon subdirectorios persistentes simples bajo/disk,mkdir,rmdirde directorios vacios,truncateexplicito yrenamepersistente.- SDK v1 minima en
C, concrt0,libc, linker script, headerssavanxp/*, tooling host para instalar apps externas enbuild/disk.imgy ejemplos base (sdk/hello,sdk/errdemo,sdk/fsdemo,sdk/pathops,sdk/procpeek,sdk/spawnwait,sdk/statusdemo,sdk/multifile,sdk/template). - Userland inicial con
init,sh,echo,uname,ls,cat,sleep,ticker,demo,true,false,ps,fdtest,waittest,pipestress,spawnloop,badptr,rm,rmdir,truncate,seektest,truncatetestyerrtest.
- Se consolidaron procesos, pipes y persistencia para que
/diskquede operativo como flujo principal de trabajo entre reinicios. - La superficie de syscalls y la
libcminima se ampliaron con operaciones de filesystem y proceso necesarias para shell, pipes y apps externas. - La documentacion del repo y del SDK v1 se congelo para dejar una base publica util a partir de la primera version numerada.