memoriosa (Fase 7c) demostró que un app podía persistir su huella. Esta fase la lleva al gesto natural: un editor de texto. Tecleas, reinicias renaser, el texto sigue ahí. La huella vive en el grafo de objetos como todo lo demás. - Nuevo crate `apps/bitacora/`: lienzo 480×280, tipografía 8×8 embebida (`font8x8 = "0.3"`) escalada x2 a 16×16, render pixel a pixel desde la memoria del propio app. Buffer 512 bytes con wrap automático a 28 columnas; `Enter` salta línea, Backspace borra; al desbordar el buffer se descartan los 64 primeros para amortizar la mudanza. Cada cambio invoca `sys_estado_guardar`; al arrancar, `init` llama a `sys_estado_cargar` y reconstruye. - Mapeo de scancodes US a ASCII (letras, dígitos, puntuación básica, espacio). Sin shift ni mayúsculas — minimalismo. - `GENESIS` crece de 7 a 8 apps; `bitacora` es la PRIMERA — gana la celda maestra al arrancar y te invita a teclear. - `CELDA_TASKBAR_ANCHO` baja de 150 a 130 px para que las ocho pestañas + lanzador + reloj quepan holgadas en 1280 px. Verificado en QEMU: tras escribir "hola renaser" y reiniciar el kernel con el mismo disk.img, bitácora muestra el texto donde lo dejó. El `almacen` reporta 24 objetos en el grafo (frente a 9 antes de escribir) y `raiz presente` — cada `guardar` anexó una versión al log direccionado por contenido. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
5.4 KiB
renaser — guía operativa
renaser es un kernel asíncrono de Espacio de Direccionamiento Único
(SASOS) en Rust #![no_std], bare-metal x86_64. Rompe con POSIX: interfaz
visual nativa desde el arranque, aislamiento por software (no por MMU),
el texto como caso particular del dibujo.
Documentos hermanos: ARCHITECTURE.md (arquitectura), ROADMAP.md (fases y
plan), CHANGELOG.md (registro técnico de cambios), DIARIO.md (crónica en
lenguaje llano), README.md (presentación).
Construir y ejecutar
Desde la raíz del repositorio:
| Comando | Efecto |
|---|---|
cargo run |
compila el kernel, forja la imagen UEFI y abre QEMU |
cargo build |
compila el kernel + la imagen, sin lanzar QEMU |
cargo kernel |
alias: compila solo el kernel para x86_64-unknown-none |
Verificación headless (sin ventana): añadir
-- -display none -monitor unix:/tmp/q.sock,server,nowait y capturar con
screendump por el socket del monitor.
Reconstruir una app WASM del userspace tras tocarla. Los .wasm viven en
kernel/assets/ —de ahí los lee boot al sembrar la imagen (Fase 7b)—; el
modulo hello_wasm se copia como app.wasm, el resto conserva su nombre:
cd apps/<app> # hello_wasm, discola, glotona, cronista, memoriosa, pulso, tonada, bitacora
cargo build --target wasm32-unknown-unknown --release
cp target/wasm32-unknown-unknown/release/<app>.wasm ../../kernel/assets/<app>.wasm
# (hello_wasm es la excepcion: su destino es kernel/assets/app.wasm)
Estructura del espacio de trabajo
boot/— orquestador de anfitrión: construye la imagen de disco UEFI con la cratebootloader0.11 y lanza QEMU. Es el único miembro del workspace.kernel/— el kernel bare-metal. Está excluido del workspace y se compila solo como dependencia de artefacto deboot(targetx86_64-unknown-none). NUNCA debe ser miembro del workspace ni compilarse para el anfitrión: lo haría fallar por un_startduplicado.apps/— aplicaciones del userspace, módulos.wasm(targetwasm32-unknown-unknown). Workspaces propios, excluidos.
Módulos del kernel (kernel/src/): main, grafico, consola, compositor,
baliza, sync, gdt, interrupts, pic, drivers/, almacen,
manifiesto, memory/, async_system/, texto, wasm/. El detalle de cada
uno está en ARCHITECTURE.md.
Toolchain
Nightly, fijado en rust-toolchain.toml. Targets x86_64-unknown-none y
wasm32-unknown-unknown. Componentes rust-src y llvm-tools (los exige el
build script de la crate bootloader). Entorno verificado: Artix Linux,
QEMU 11, OVMF en /usr/share/edk2/x64/OVMF.4m.fd (sin módulo KVM → TCG).
Convenciones
- Idioma: comentarios E identificadores en español.
unsafe: confinado en células mínimas, envuelto de inmediato en una abstracción segura.#![deny(unsafe_op_in_unsafe_fn)]. Cada bloqueunsafelleva un comentarioSEGURIDAD:que justifica su corrección.- Framebuffer / MMIO: siempre
core::ptr::write_volatile; jamás asignación indexada directa (el optimizador la elidiría). no_stdestricto: solocore::*yalloc::*(heap vivo desde la Fase 3). Prohibido cualquier ruta destd::*.- Alineación: 16 bytes para estructuras genéricas; 4096 bytes (página) para buffers de memoria y regiones de asignador.
- Código densamente comentado; se cuida la coherencia de estilo entre módulos.
Estado
Fases 1 a 5, 6.0, 6.1, 6.2, la Fase 7 COMPLETA —el userspace nace del grafo de
objetos—, la Fase 8 COMPLETA —el compositor teselante e interactivo: teselado
con mirada-layout (8a), ciclado de layout (8b), foco y enrutamiento selectivo
del teclado (8c), promoción y reordenación de ventanas (8d)—, la Fase 9
COMPLETA —orden-Z y ventanas flotantes: composición con solapamiento (Alt+F)—
la Fase 10 COMPLETA —alta y baja de aplicaciones en vivo (Alt+N / Alt+Q)—,
la Fase 11 COMPLETA —el reloj del sistema como capacidad de host
(sys_tiempo_mono) + la app pulso—, la Fase 12 COMPLETA —la bocina del PC
como capacidad de host (sys_tono) + la app tonada—, la Fase 13 COMPLETA
—ratón PS/2, puntero, clic-para-enfocar y arrastre de ventanas flotantes—,
infraestructura memory::mmio (mapeador propio de regiones MMIO en la tabla
L4), la Fase 14 COMPLETA —nombres en cada ventana y barra de tareas con
clic-para-enfocar—, la Fase 15 COMPLETA —la voz del sistema: acorde al
arrancar, repique al lanzar o cerrar, bajo al desalojar, con prioridad
sobre sys_tono— la Fase 16 COMPLETA —la barra viva: botón «+»
lanzador a la izquierda y reloj mm:ss a la derecha que late cada
segundo— y la Fase 17 COMPLETA —bitacora, editor de texto que persiste
entre arranques en el grafo de objetos (tipografía 8×8 embebida)—.
Todo verificado en QEMU. Ver ROADMAP.md.
Flujo de trabajo
En cada iteración de trabajo, sin excepción:
- Actualizar
CHANGELOG.md— la entrada técnica detallada del cambio. - Actualizar
DIARIO.md— la misma jornada contada en lenguaje llano y elegante, sin carga técnica (es una crónica humana, no un registro técnico). - Verificar en QEMU si el cambio es observable (con captura de pantalla).
git commit(mensaje en español, descriptivo) ygit push origin main.
renaser vive ahora dentro del monorepo brahman; los commits van al remoto
de brahman (gitea.gioser.net/sergio/brahman). Mensajes de commit en español.
Verifica una fase en QEMU antes de darla por cerrada.