Propósito: Este documento preserva la evolución de NeoDOS desde su inicio, complementando al CHANGELOG. Mientras que el CHANGELOG registra cambios por versión, esta historia narra el crecimiento arquitectónico del proyecto: hitos, decisiones de diseño, refactorizaciones y cambios de filosofía.
No se registran correcciones menores ni parches.
Fecha: 4 de mayo de 2026
Lugar: 🌱 Girona
NeoDOS nace como un sistema operativo minimalista para x86-64 escrito en Rust,
heredero conceptual de MS-DOS pero con una arquitectura completamente moderna.
El primer commit (94300ca) incluye un bootloader UEFI, un kernel con GDT/IDT/PIC,
driver ATA PIO, teclado PS/2, consola VGA, un sistema de archivos propio con
superbloque e inodos, FAT32, y un shell en Ring 0 con comandos básicos (DIR, TYPE,
CD, DATE, TIME, HELP, CLS, ECHO, MEM, VOL, VER).
La versión inicial es v0.5, denominada "The Rusty DOS Revival".
Impacto: Sienta las bases de todo el sistema: el boot flow UEFI→bootloader→kernel, la tabla de particiones GPT, el sistema de archivos NeoDOS, y el shell como interfaz principal.
Tras los primeros commits, el kernel adquiere forma rápidamente:
- Shell con 18 comandos integrados (DIR, TYPE, CD, MD, RD, COPY, DEL, REN, DATE, TIME, CLS, ECHO, MEM, VOL, VER, HELP, PROMPT, SET).
- Sistema de archivos NeoDOS con inodos de 256 bytes y bloques de 4 KB.
- Controladores ATA, teclado PS/2, y RTC.
- Primeros tests con
SELFTESTcommand. - Soporte para dos layouts de teclado (Español y US) intercambiables en caliente.
Impacto: Demuestra que un SO funcional puede construirse desde cero en Rust con una base de código manejable.
Primera versión con soporte real de procesos en Ring 3:
RUNno bloqueante — ejecuta procesos en segundo plano.- Slots de usuario por proceso (
user_slot). KILLcommand para terminar procesos.- Mecanismo de syscall via
INT 0x80.
Impacto: Transición de un entorno DOS monoproceso a un sistema multitarea.
- Soporte ACPI para apagado del sistema.
- Script
create_gpt_image.pypara generar una imagen de disco unificada con GPT. - Primeros tests de syscalls.
- Documentación
AGENTS.mdcomo contexto para asistentes de IA.
v0.10.0 (11 mayo): Arquitectura de drivers modulares. Primer paso hacia un modelo de drivers aislados.
v0.10.1–v0.10.2 (11 mayo): Variable de entorno SYSTEMDRIVE, versionado
bootloader–kernel.
14 de mayo: Soporte USB HID para teclado. Refactorización del driver AHCI con buffers por puerto y soporte ATAPI para CD/DVD.
15–16 de mayo: Refactorización importante del VFS con integración mejorada,
sbrk/sys_brk para gestión de heap, y comandos DEL/REN/RD.
17 de mayo: Mitigación del error intermitente #GP en syscall iretq mediante
context switch solo desde idle. Refactorización de drivers de FS para soportar
dispositivos de bloque (ISO9660).
18 de mayo: Abstracción Platform para desacoplar el kernel de la arquitectura.
Per-process kernel stacks para seguridad en syscalls. Infraestructura de tests de
stress y regression runner.
19 de mayo — v0.11+v0.12: Eliminación de todos los unwrap() del kernel
(13 calls reemplazados por expect o pattern matching). BlockDeviceManager
unificado para abstraer dispositivos de bloque.
19 de mayo — HAL v0 (ABI v0.2): Nacimiento de la Hardware Abstraction Layer.
14 primitivas de hardware (interrupciones, I/O, memoria, temporización) concentran
todo el asm!() del kernel. Eliminación del sistema de módulos NDM (legacy).
Impacto: HAL sienta las bases para la portabilidad. La eliminación de unwrap mejora drásticamente la robustez.
StorageManagerunificado para inicialización ATA/AHCI.- Suite de validación de metadatos NeoFS (36 tests, 10 categorías).
- Visualización de permisos RWXSD en DIR.
- Historial de comandos con flechas ↑/↓ (32 entradas).
- Sistema HELP mejorado con ayuda por comando.
- 120 tests en total.
Decisión de diseño: Los permisos NeoFS se representan como bits en el campo
mode del inodo (bits 0–4: R/W/X/S/D), coexistiendo con MODE_DIR/MODE_FILE.
NEM driver suite + NDREG CLI: Framework completo para drivers NEM (NeoDOS
Module) con formato binario propio, tabla de exportación, y utilidad NDREG
para inspección de drivers.
Device Model + HAL Binding Layer v0.3: Abstracción para vincular drivers con dispositivos hardware.
Event Bus v1: Sistema de enrutamiento de eventos con cola lock-free SPSC de 64 slots. 11 tipos de eventos. 9 tests. Transforma IRQs en eventos normalizados.
ELF64 loader: Soporte para binarios ELF64 además del formato plano .nxe.
7 tests de validación.
Estabilización del ABI de syscalls (S1): SyscallNum enum, SyscallError
enum con 16 códigos, macros de error.
Impacto: Los tres pilares del modelo de drivers NeoDOS —formato NEM, Event Bus y certificación— se establecen esta semana.
- Driver NVMe para almacenamiento sobre PCI Express.
- sys_mmap/sys_munmap (A4): Mapeo perezoso de archivos en memoria con demand paging. Región dedicada de 32 MB.
- IPC/Pipes (S2): Sistema de tuberías con 16 buffers de 4 KB,
sys_pipe,sys_dup2, bloqueo en lectura. - FSCK (S5): Utilidad de verificación de integridad del sistema de archivos con modo reparación.
- Process exit cleanup (S7): Liberación completa de recursos al salir (kernel stack, slots, tabla de archivos).
Impacto: El sistema adquiere capacidades de memoria virtual, comunicación entre procesos y recuperación de fallos.
24 de mayo: NEM v3 — formato binario definitivo para drivers con header de 80 bytes, 4 secciones (text, rodata, data, bss), tabla de reubicaciones, tabla de símbolos, y negociación ABI (min/target/max). Driver PS/2 teclado migrado a NEM standalone. Consolidación de layouts de teclado en un driver generado.
25 de mayo: libneodos — biblioteca estándar para procesos Ring 3 en Rust.
Wrappers seguros para syscalls (exit, write, read, open, brk, mmap,
etc.), módulos IO/FS/Mem, macros print!/println!. Los binarios de usuario
se convierten en proyectos Cargo individuales.
26 de mayo:
- Slab allocator (A3): 9 clases de tamaño (8–2048 bytes), O(1) alloc/free
mediante free list. Reemplaza al
linked_list_allocatorcomo#[global_allocator]. - Migración RTC a NEM v3: Primer driver de sistema migrado a NEM standalone.
- ABI negotiation (W1): Formalización del contrato entre kernel y drivers NEM.
- Driver dependency resolver (W4): Grafo de dependencias con topological sort y detección de ciclos.
Decisión de diseño: Se elimina el Device Model v0.3 y el sistema TSR, reemplazados completamente por el modelo NEM v3 + Event Bus + HAL ABI.
X2. Unified Handle Table: Reemplaza FdEntry/FdTable por un sistema de
handles unificado que abstrae archivos, pipes, dispositivos y eventos.
sys_open retorna un fd (handle index) en lugar de un (drive<<32)|inode.
KOBJ v1 (Kernel Object Manager): Sistema unificado de objetos del kernel con 9 tipos, reference counting, y registro automático de recursos. Precursor directo del Object Manager (Ob).
Impacto: Unificación de recursos del kernel bajo una sola abstracción, simplificando la gestión de ciclo de vida.
- A5 Global Page Cache: Caché LRU de 512 páginas de 4 KB (2 MB) para E/S de archivos.
- ACPI NEM poweroff driver: Driver standalone para apagado vía ACPI S5.
- PCI NEM driver: Driver standalone que escanea el bus PCI y ofrece servicio Event Bus a otros drivers.
- A10 PCIe: Enumeración completa de buses PCI Express mediante bridge traversal.
- Fix del bug de caracteres duplicados en PS/2.
v0.22.0 ATA NEM standalone: Migración del driver ATA completo a NEM standalone
con soporte DMA. El kernel conserva solo un BootAta PIO stub para early-boot.
A2 Priority Scheduler: Sistema de 4 niveles de prioridad (HIGH, ABOVE_NORMAL, NORMAL, IDLE) con time-slicing dinámico (400/200/100/50 ticks), preemption desde Ring 3, y aging para evitar starvation. Comando PRI, columna en PS.
Impacto: El scheduler deja de ser round-robin puro y adquiere capacidades de planificación por prioridad con envejecimiento.
- Bugfix crítico: Corrupción de registros callee-saved en user-mode + race condition en sys_exit.
- X5 Deferred work queues: Sistema de bottom-half con dos prioridades.
- AHCI NEM standalone: Migración del driver AHCI a NEM v3.
- Boot Benchmark: Sistema de profiling de boot con precisión sub-milisegundo.
Identifica que
hlt_once()en AHCI alargaba el boot a ~15s → reducido a ~76ms. - V1 Global Page Cache (avanzado): Reescritura con hash map O(1) + LRU doubly-linked list. Reducción de memoria: 512 KB vs 2 MB anteriores.
- Event Bus v2: Colas por prioridad (alta+normal), filtros estrictos, backpressure.
libneodos DLL system: libneodos.nxl como biblioteca compartida cargada en
dirección fija 0x1e000000. 8 slots de 256 KB. Tabla de exportación AbiTable.
sys_loadlib (RAX=21) para cargar NXLs adicionales.
Impacto: Permite compartir código entre procesos Ring 3 sin vinculación estática, allanando el camino para una biblioteca del sistema.
X3 Capability System: Control de acceso granular para drivers NEM.
64-bit bitmap por driver, 11 flags, defaults por categoría (BOOT=all,
SYSTEM=8 flags, DEMAND=3 flags). Verificación en cada hst_* call.
X4 Driver Isolation Layer: Aislamiento de memoria para drivers NEM en
16×1 MB slots @ 0x30000000. Validación de punteros, modo sandbox.
Multi-DLL system: Soporte para múltiples NXLs simultáneos con LOADLIB
command y libmath.nxl.
Hot reload system: Descarga y recarga de drivers NEM en caliente.
Impacto: El modelo de drivers alcanza su madurez: formato, capacidades, aislamiento y recarga en caliente.
C3 HPET/APIC timers: Sistema de temporización a 1 KHz reemplazando el PIT de 18.2 Hz. Calibración HPET → APIC timer.
A0 Memory Architecture Rewrite: Buddy allocator con 11 niveles de orden (4 KB → 4 MB), layout de memoria dinámico desde el mapa UEFI, sin límite fijo de RAM. Manejo de handles ilimitado.
Impacto: El sistema de memoria se vuelve escalable y preciso.
- A1.5 EPROCESS/KTHREAD split: Separación de proceso y thread (modelo NT).
- A4.2 SSDT: Syscall dispatch table con 256 slots O(1).
- A1.1/A1.2 Per-CPU + SMP: Estructuras de datos por CPU, arranque SMP (INIT-SIPI-SIPI), colas de ejecución por CPU.
- A1.3/A1.4 Per-CPU slab + IPI: Slab allocator local a cada CPU con hot cache vía GS-segment. Infraestructura de IPI con TLB shootdown.
- Renombrado:
.bin→.nxe,.dll→.nxl. Todos los binarios y módulos renombrados. - A2.4 IRQL framework: Prioridad de interrupciones al estilo NT (PASSIVE_LEVEL, APC_LEVEL, DISPATCH_LEVEL, DIRQL).
- A4.3 ELF address space validation: Validación de segmentos ELF contra límites de usuario.
- A2.5 DPC engine: Deferred Procedure Calls por CPU.
Impacto: NeoDOS se convierte en un sistema SMP con planificación por CPU, threads, y modelo de interrupciones NT-like.
v0.32.0 (11 junio): Crash dump framework, cpuinfo.nxe, sys_getcpuinfo.
HAL v0.4 raw/safe split (11 junio): Todo el asm!() confinado a hal/raw/.
55 calls asm, cero fuera. Capa hal/safe/ con tipos seguros (Msr trait) y
hal/x64/ con superficie ABI extern "C" de 26 primitivas.
A4.5 APC engine (12 junio): Per-thread kernel/user APC queues, alertable wait, IRP→APC completion. Máx 64 APCs por cola.
v0.35.0 NeoInit (PID 1) (13 junio): Primer proceso del sistema, lanza neoshell.
sys_spawn con save/restore, sys_poweroff, comando POWEROFF.
Impacto: HAL alcanza su forma definitiva. NeoInit establece el modelo de inicio del sistema.
v0.37.0 (15 junio): neoshell migra a Ring 3. El shell abandona el kernel y se ejecuta como un proceso de usuario. Nuevas syscalls A4.6. BOOT.CFG pasa a ser configurable.
v0.38.0 (15–16 junio):
HELP.NXEcomo binario Ring 3 que escaneaC:\BIN.- Reestructuración del sistema de archivos NeoDOS.
sys_get_version,sys_get_datetime,DATETIME.NXE,VER.NXE.- Global object namespace system + VFS partition management.
Impacto: Decisión arquitectónica fundamental: el kernel deja de ejecutar comandos de shell. Todo comando interactivo es un binario .NXE en Ring 3.
v0.38.2 (20 junio): CD, ECHO, MEM, VOL migrados a Ring 3. Nacen
sys_get_meminfo, sys_chdir_parent.
v0.39.0 (20 junio): NT5 Object Namespace. Sistema de nombres jerárquico
con \Device, \DosDevices, \Global, \Driver, etc. Mount points integrados.
KOBJ.NXE como binario Ring 3.
v0.39.1–v0.39.2 (21 junio): TREE, TYPE, LOAD, TEST migrados a Ring 3.
Terminal ANSI con glifos de box-drawing. Soporte O_CREAT para archivos.
v0.39.5–v0.39.11 (21 junio): Migración acelerada de comandos: HELP, DRIVES, SET, EXIT, PS, KILL, PRI, KEYB, CALL — todos a Ring 3. NeoDOS LSP (Language Server Protocol) para asistencia a IA.
Impacto: Migración masiva de funcionalidad del kernel al espacio de usuario, reduciendo la superficie del kernel.
Implementación del modelo de seguridad NT:
- SID (Security Identifier): Formato
S-R-I-S*. - Token: Identidad + grupos + privilegios.
- ACL/ACE: Listas de control de acceso con entradas deny/allow.
- SeAccessCheck: Algoritmo NT-compatible (deny primero, luego allow, admin bypass).
- 23 tests de seguridad.
Impacto: Base del modelo de seguridad que persiste hasta hoy.
A3.3 Watchdog subsystem + A3.4 SEH/exception dispatcher: Manejo estructurado de excepciones y watchdog del sistema.
OB-001/002/003 — Object Manager base: ObObject, ObObjectTable, ObType,
reference counting. Primer paso hacia la unificación de objetos.
v0.41 — Slab<T>: Contenedor de capacidad variable que combina array fijo (para el caso común) con Vec dinámico (para overflow). Scheduler usa Vec en lugar de array fijo. Pipes con buffers dinámicos.
Impacto: Se eliminan los límites fijos en los subsistemas críticos.
v0.42.0 — Unified Wait Engine (KWait): Abstracción única para toda espera
bloqueante con 7 variantes de WaitReason (PipeRead, IrpComplete, ThreadJoin,
ChildExit, Event, Timer, Alertable). Reemplaza mecanismos ad-hoc.
ABI freeze: Event types 0–15 congelados. Capability bits 1–2048 congelados. IOAPIC API congelada. Validación al boot.
HandleEntry full Ob: Todos los tipos de handle se registran como objetos Ob
con close() cleanup.
Impacto: El kernel congela sus primeras interfaces. KWait unifica todo el modelo de espera del sistema.
v0.44 (23 junio): ASLR v1 (Address Space Layout Randomization): offset aleatorio en la base de carga ELF (PIE). Slot aleatorio para binarios.
v0.44.1: Ob API en libneodos. Migración de PS, KOBJ, PRI, KILL al Object
Manager. sys_ob_wait (RAX=65) integración con KWait.
OB-015/018/020/025/030/031/041/046: Namespace Ob completo. Migración de todos los binarios de usuario a ObOpen. Eliminación de syscalls legacy (48,51,52).
v0.44.3 (26 junio): Input Subsystem Redesign + Virtual Terminals.
Sistema de terminales virtuales con VtManager, \Device\Vt0..\Vt3.
console.nxl como biblioteca compartida. neoshell refactorizado.
v0.44.4 (26 junio): Corrección de 3 bugs SMP-unsafe (WAIT_PID static mut,
ISOLATED_REGIONS static mut, NXL_REGISTRY static mut → AtomicU32/Mutex).
26 de junio — ABI v7 cleanup: ObInfoClass/ObSetInfoClass completados.
Thread Object (OBF-03..06b). neotop.nxe. libmath modularizado.
Impacto: Ob se convierte en la abstracción central del sistema. Todas las
syscalls nuevas deben ser sys_ob_*.
v0.46 — Fase 2 Objectification: Timer, Semaphore y Section Objects. 6 syscalls legacy eliminadas del SSDT.
v0.46.2 — AHCI NCQ + NeoMem v0.1: Comandos nativos AHCI (Native Command
Queuing). driver_loader eliminado del kernel (LOADNEM/UNLOADNEM pasan a Ring 3).
syscall cleanup.
v0.46.7: Auditoría de estabilidad. 7 bugs corregidos: handle leaks, fd leaks, slab double-free, rdtsc workaround para QEMU TCG.
v0.46.8: Bugfix OB-046 (process lifecycle — cleanup_terminated_process no destruye hijo prematuro).
v0.47.0 — Networking: Pila TCP/IP completa en el kernel:
- Driver e1000 NEM para NIC Intel.
- Capas: Ethernet, ARP (64 entradas, timeout 300s), IPv4, ICMP, UDP, TCP (3-way handshake, sliding window 16 KB, FIN/RST).
\Device\Tcpy\Device\Udpcomo objetos de dispositivo en el namespace NT.- Soporte TAP networking con fallback SLiRP.
- VirtualBox bridged networking.
- 17 tests de red.
Impacto: NeoDOS sale al mundo. Adquiere capacidades de red completas.
USR-001 SAM database: Base de datos de cuentas de usuario con 64 entradas de prueba, formato de serialización, y soporte de grupo Administradores.
USR-002 Token NT extendido: Token con grupos, privilegios, session_id.
B2.1 Registry hive (Cm): Sistema de registro tipo Windows Registry con celdas (cells), hive en memoria, y 10 syscalls (RAX 67–76) para creación, lectura, escritura y enumeración de claves y valores. 8 tests.
VFS-1.1 MountManager unificado: API única mount()/unmount() que
sincroniza Vfs.drives + Ob MountPoint + DosDevices.
Decisión de diseño: El Registry sigue el modelo NT Cm (Configuration Manager)
con hives cell-based, paths separados por \, y 6 tipos de valor (SZ, DWORD,
BINARY, MULTI_SZ, EXPAND_SZ, QWORD).
NeoKBD (Keyboard Manager): Nuevo subsistema de kernel src/kbd/ que reemplaza
la lógica de traducción de scancodes del driver PS/2. Proporciona:
ObType::KeyboardDevice = 22en\Device\Keyboard.- 3 nuevos
ObInfoClass(35=KeyboardInfo, 36=KeyboardCaps, 37=KeyboardLayouts). - 5 nuevos
ObSetInfoClass(43=KeyboardSetLayout, 44=KeyboardSetRepeatDelay, 45=KeyboardSetRepeatRate, 46=KeyboardSetLeds, 47=KeyboardSetModifier). - Carga dinámica de layouts
.kbddesdeC:\System\Keyboard\. - Motor de composición de teclas muertas con tablas de compose.
- Hotkey dispatch (Ctrl+Alt+Del → poweroff, Alt+F1-F8 → VT switch) — reemplaza
checks hardcodeados en
idt.rs. - 5 nuevos eventos Event Bus:
EVENT_KEYDOWN=27,EVENT_KEYUP=28,EVENT_KEY_CHAR=29,EVENT_KBD_MODIFIER=30,EVENT_KBD_REPEAT=31. - Registry-backed config: Layout, RepeatDelay, RepeatRate, NumLockOnBoot,
CapsLockOnBoot en
\Registry\Machine\System\Keyboard. libneodos/src/keyboard.rs: API user-level para control de teclado.
ACPI Power Management (src/power/acpi.rs): Implementación completa de:
- RSDP discovery (EBDA, BIOS areas, bootloader pointer).
- RSDT/XSDT parsing → FADT extraction.
- S5 sleep (soft-off) via PM1a/b control registers.
- Reset register support (IO/MMIO).
- Integración en HAL:
poweroff()intenta ACPI S5 primero, luego QEMU debug ports, luego PS/2.reboot()intenta ACPI reset register, luego 0xCF9, luego PS/2. - 7 tests de ACPI power management.
ps2kbd NEM driver simplificado: Eliminada la lógica de traducción de layouts (~150 líneas), ahora emite scancodes raw. NeoKBD hace la traducción.
kbdcompile (tools/kbdcompile/): Herramienta que convierte layouts .klc
(Microsoft KLC format) a .kbd binario. Compila US y Spanish.
neokey (userbin/neokey/): Nueva utilidad Ring 3 que reemplaza a keyb.nxe.
Comandos: NEOKEY show, NEOKEY layout <name>, NEOKEY layouts,
NEOKEY repeat <cps>, NEOKEY delay <ms>, NEOKEY leds.
A5.2 VirtIO Block driver: Primer driver VirtIO para dispositivos de bloque. Detección PCI legacy I/O y modern MMIO. Virtqueue split vring de 256 entradas. Prioridad de almacenamiento: NVMe > VirtIO > AHCI > ATA.
B2.7 Registry disk persistence: El hive se persiste en disco en
C:\System\Config\SAM y C:\System\Config\SYSTEM. Carga al boot, salvado
periódico.
NET-1.5–1.15 (5 julio): Networking userland completa:
libneodoswrappers SOCKET.net.nxlbiblioteca de red para usuario.netcfg.nxeservicio de red con DHCP/APIPA.ipconfig.nxeherramienta de información de red.- Registro de configuración de red en Registry.
B4.10 NeoInit registry-driven: NeoInit lee su configuración del Registry (DefaultShell, AutoStartServices, EnableVT, WaitForNetwork).
Auditoría arquitectónica (AUDIT-1..10): Corrección de 10 inconsistencias entre código y documentación. Sincronización de enums libneodos-kernel.
NeoDOS nace como un "DOS moderno" con sabor a retro. Shell en Ring 0, comandos tipo DOS (DIR, COPY, DEL, REN), sistema de archivos propio, pantalla negra con letras verdes. La prioridad es tener algo funcionando.
El sistema adquiere capacidades de sistema operativo moderno: procesos en Ring 3, syscalls, gestión de memoria dinámica. La arquitectura de drivers comienza a tomar forma con el primer intento (NDM) que luego se descarta.
NEM v3, Event Bus, HAL, certificación, capacidades, aislamiento. El modelo de drivers se estabiliza y se convierte en la seña de identidad de NeoDOS. Decisión clave: los drivers no son kernel ni user-mode, son un tercer espacio.
Migración masiva a Ring 3. SMP, IRQL, SSDT, Security Reference Monitor, Ob. NeoDOS abandona su herencia DOS y adopta una arquitectura NT-like con Object Manager como abstracción central. El shell se convierte en un proceso de usuario más.
Networking TCP/IP, Registry persistente, VirtIO, SAM. El sistema se expande horizontalmente añadiendo subsistemas completos mientras mantiene la coherencia arquitectónica alrededor del Object Manager.
| Decisión | Fecha | Contexto |
|---|---|---|
| Rust como único lenguaje | May 2026 | Todo el código, incluyendo drivers, en Rust. Sin C. |
| INT 0x80 para syscalls | May 2026 | Elección deliberada sobre syscall/sysret por simplicidad del trampoline. |
| HAL raw/safe split | Jun 2026 | Todo asm!() confinado a hal/raw/. Capa segura encima. |
| Procesos estilo NT (no fork) | May 2026 | Procesos creados por sys_spawn. Threads por sys_thread_create. Sin fork. |
| Object Manager como abstracción central | Jun 2026 | Todo recurso del sistema es un objeto Ob. |
| NEM como tercer espacio | May 2026 | Drivers no son kernel ni user-mode. Pipeline de certificación de 7 estados. |
| Driver isolation (X4) | Jun 2026 | Aislamiento de memoria a 1 MB slots. Validación de punteros en cada hst_*. |
| Shell en Ring 3 | Jun 2026 | El kernel no ejecuta comandos. Todos los comandos son .NXE. |
| Migration Ob de syscalls legacy | Jun 2026 | Todas las syscalls nuevas (RAX ≥ 60) deben ser sys_ob_*. |
| Registry persistente cell-based | Jun 2026 | Modelo NT Cm con hives en disco. |
| ABI freeze progresivo | Jun 2026 | Interfaces se congelan por versión: eventos, capacidades, IOAPIC en v0.42. |
| Fecha | Hito | Versión |
|---|---|---|
| 2026-05-04 | Primer commit: bootloader + kernel | v0.5 |
| 2026-05-06 | "The Rusty DOS Revival" | v0.6 |
| 2026-05-09 | Tests, FAT32, RTC, layouts teclado | v0.7 |
| 2026-05-10 | Multitarea: RUN no bloqueante, KILL | v0.8 |
| 2026-05-11 | ACPI, syscall tests, AGENTS.md | v0.9 |
| 2026-05-11 | Drivers modulares | v0.10.0 |
| 2026-05-19 | HAL v0, eliminar unwrap() | v0.11+v0.12 |
| 2026-05-20 | StorageManager, 120 tests | v0.15 |
| 2026-05-21 | NEM suite, Event Bus v1, ELF64 | v0.14-v0.16 |
| 2026-05-23 | NVMe, mmap, pipes, FSCK | v0.16 |
| 2026-05-24 | NEM v3, PS/2 standalone | v0.16 |
| 2026-05-25 | libneodos, slab allocator | v0.16 |
| 2026-05-27 | Handle table, KOBJ v1 | v0.17 |
| 2026-05-28 | Page cache, PCI NEM, ACPI | v0.18-v0.21 |
| 2026-05-29 | ATA NEM, priority scheduler | v0.22-v0.23 |
| 2026-06-04 | Page cache advanced, DLL system | v0.24 |
| 2026-06-05 | Capabilities, isolation, hot reload | v0.24 |
| 2026-06-06 | HPET/APIC, buddy allocator rewrite | A0, C3 |
| 2026-06-07 | MCP server, EPROCESS/KTHREAD | A1.5 |
| 2026-06-08 | SSDT, SMP | A4.2, A1.1 |
| 2026-06-10 | IRQL, DPC engine | A2.4, A2.5 |
| 2026-06-11 | HAL v0.4 raw/safe, crash dump | v0.32 |
| 2026-06-12 | APC engine | A4.5 |
| 2026-06-13 | NeoInit (PID 1) | v0.35 |
| 2026-06-15 | neoshell a Ring 3 | v0.37 |
| 2026-06-20 | NT5 Object Namespace | v0.39 |
| 2026-06-21 | NT6 Security (SID, Token, ACL) | v0.39 |
| 2026-06-22 | Object Manager, Slab<T>, KWait | v0.40-v0.42 |
| 2026-06-23 | ASLR v1, Ob migration | v0.44 |
| 2026-06-26 | Virtual terminals, console.nxl | v0.44.3 |
| 2026-06-27 | Timer/Semaphore/Section objects | v0.46 |
| 2026-06-28 | TCP/IP networking | v0.47 |
| 2026-06-30 | SAM, Registry hive (Cm) | v0.48 |
| 2026-07-01 | VirtIO Block, DHCP, networking stack | v0.48 |
| 2026-07-04 | Registry disk persistence | v0.48.7 |
| 2026-07-05 | Networking userland, auditorías | v0.48.8 |
| 2026-07-12 | NeoKBD + ACPI Power Management | v0.49.2 |
| 2026-07-13 | NXE/NXP Ecosystem, i18n NLTv2 | v0.50.0 |
| 2026-07-15 | sys_ob_snapshot, dead code cleanup, roadmap reorganizado | v0.50.1 |
| Componente | Fecha | Descripción |
|---|---|---|
| Bootloader UEFI | May 4 | neodos-bootloader/ — Carga kernel.elf y NeoDOS FS |
| Kernel base | May 4 | GDT, IDT, PIC, serial, paging, ATA, keyboard, VGA |
| NeoDOS FS | May 4 | Sistema de archivos propio con inodos y bloques |
| Shell (Ring 0) | May 4 | Comandos DOS-like, migrado a Ring 3 en v0.37 |
| ACPI | May 11 | Soporte para apagado del sistema |
| HAL | May 19 | src/hal/ — Hardware Abstraction Layer |
| BlockDeviceManager | May 19 | Abstracción de dispositivos de bloque |
| NEM v3 | May 24 | Formato de drivers NeoDOS Module v3 |
| Event Bus | May 21 | Sistema de enrutamiento de eventos |
| ELF64 loader | May 21 | Carga de binarios ELF64 |
| libneodos | May 25 | Biblioteca estándar para Ring 3 |
| Slab allocator | May 26 | src/slab.rs — 9 clases de tamaño |
| KOBJ | May 27 | Kernel Object Manager (precursor de Ob) |
| Handle table | May 27 | Unified Handle Table |
| Page cache | May 28 | src/buffer/page_cache.rs |
| Priority scheduler | May 29 | 4 niveles, aging, preemption |
| NXL/DLL system | Jun 4 | Shared libraries |
| Capabilities | Jun 5 | X3 Capability System |
| Driver isolation | Jun 5 | X4 Isolation Layer |
| SMP | Jun 8 | Per-CPU, IPI, TLB shootdown |
| IRQL | Jun 10 | Interrupt Request Level framework |
| DPC engine | Jun 10 | Deferred Procedure Calls |
| APC engine | Jun 12 | Asynchronous Procedure Calls |
| NeoInit | Jun 13 | PID 1, proceso de inicio |
| Virtual terminals | Jun 26 | \Device\Vt0..3 |
| console.nxl | Jun 26 | Biblioteca de terminal compartida |
| Object Manager (Ob) | Jun 22 | src/object/ — Abstracción central |
| KWait | Jun 22 | Unified Wait Engine |
| ASLR | Jun 23 | Address Space Layout Randomization |
| Security RM | Jun 21 | SID, Token, ACL, SeAccessCheck |
| Networking | Jun 28 | TCP/IP, e1000, DHCP |
| Registry (Cm) | Jun 30 | src/cm/ — Cell-based hives |
| SAM | Jun 30 | Security Account Manager |
| VirtIO Block | Jul 3 | src/drivers/virtio_blk.rs |
| net.nxl | Jul 5 | Biblioteca de red para Ring 3 |
| NeoKBD | Jul 12 | src/kbd/ — Keyboard Manager con layouts dinámicos |
| ACPI Power | Jul 12 | src/power/acpi.rs — ACPI S5, reset register, FADT |
| kbdcompile | Jul 12 | tools/kbdcompile/ — Layout .klc → .kbd compiler |
| neokey | Jul 12 | userbin/neokey/ — Keyboard management CLI |
| nxeinfo | Jul 13 | NeoTools — Inspector de ejecutables NXE |
| nxpkg | Jul 13 | NeoTools — Creador/gestor de paquetes NXP |
| nxdump | Jul 13 | NeoTools — Volcado técnico ELF/NXE/NEM |
| libneodos res API | Jul 13 | libneodos/src/res.rs — Recurso de aplicaciones |
| nltc | Jul 13 | tools/nltc/ — Compilador NLT (TOML → NLTv2 binario) |
| neolocale | Jul 13 | userbin/neolocale/ — Locale manager CLI |
| nxres | Jul 13 | userbin/nxres/ — Resource explorer |
| nxlocale | Jul 13 | userbin/nxlocale/ — Locale manager |
| nxverify | Jul 13 | userbin/nxverify/ — Integrity verifier |
| sys_ob_snapshot | Jul 15 | syscall/ob.rs — NeoFS snapshot syscall (RAX=48) |
| ROADMAP.md | Jul 15 | Roadmap oficial reorganizado por fases (raíz del proyecto) |
Todo el desarrollo hasta la fecha se ha realizado íntegramente en Girona. Aquí nació NeoDOS el 4 de mayo de 2026 y aquí continúa su evolución.
Futura ubicación del desarrollo principal si el proyecto se traslada. No marcar como completada hasta que ocurra el traslado.
| Fecha | Commits | Tests | Líneas kernel | Versión |
|---|---|---|---|---|
| 2026-05-04 | 1 | 0 | ~2.000 | v0.5 |
| 2026-05-09 | ~15 | ~10 | ~5.000 | v0.7 |
| 2026-05-19 | ~40 | ~45 | ~10.000 | v0.12 |
| 2026-05-21 | ~50 | ~150 | ~15.000 | v0.16 |
| 2026-06-06 | ~100 | ~260 | ~25.000 | v0.24 |
| 2026-06-22 | ~180 | ~400 | ~35.000 | v0.42 |
| 2026-07-05 | ~280 | ~646 | ~45.580 | v0.48.8 |
| 2026-07-12 | ~310 | ~662 | ~47.200 | v0.49.2 |
| 2026-07-15 | ~350 | ~670 | ~46.500 | v0.50.1 |
Este documento debe actualizarse cuando ocurra un cambio arquitectónico importante. No registrar pequeños cambios o correcciones menores.
Criterios para añadir un hito:
- Nuevo subsistema o componente importante.
- Refactorización que afecte a múltiples módulos.
- Cambio en la filosofía de diseño.
- Migración de funcionalidad entre capas (Ring 0 ↔ Ring 3).
- Congelación o descongelación de interfaces ABI/API.
- Hito de versión con impacto arquitectónico.