1# renaser — guía operativa
2
3**renaser** es un kernel asíncrono de *Espacio de Direccionamiento Único*
4(SASOS) en Rust `#![no_std]`, bare-metal x86_64. Rompe con POSIX: interfaz
5visual nativa desde el arranque, aislamiento **por software** (no por MMU),
6el texto como caso particular del dibujo.
7
8Documentos hermanos: `ARCHITECTURE.md` (arquitectura), `ROADMAP.md` (fases y
9plan), `CHANGELOG.md` (registro técnico de cambios), `DIARIO.md` (crónica en
10lenguaje llano), `README.md` (presentación).
11
12## Construir y ejecutar
13
14Desde la raíz del repositorio:
15
16| Comando | Efecto |
17|---|---|
18| `cargo run` | compila el kernel, forja la imagen UEFI y abre QEMU |
19| `cargo build` | compila el kernel + la imagen, sin lanzar QEMU |
20| `cargo kernel` | alias: compila solo el kernel para `x86_64-unknown-none` |
21
22Verificación headless (sin ventana): añadir
23`-- -display none -monitor unix:/tmp/q.sock,server,nowait` y capturar con
24`screendump` por el socket del monitor.
25
26Reconstruir una app WASM del userspace tras tocarla. Los `.wasm` viven en
27`kernel/assets/` —de ahí los lee `boot` al sembrar la imagen (Fase 7b)—; el
28modulo `hello_wasm` se copia como `app.wasm`, el resto conserva su nombre:
29
30```sh
31cd apps/<app> # hello_wasm, discola, glotona, cronista, memoriosa, pulso, tonada
32cargo build --target wasm32-unknown-unknown --release
33cp target/wasm32-unknown-unknown/release/<app>.wasm ../../kernel/assets/<app>.wasm
34# (hello_wasm es la excepcion: su destino es kernel/assets/app.wasm)
35```
36
37## Estructura del espacio de trabajo
38
39- `boot/` — orquestador de **anfitrión**: construye la imagen de disco UEFI con
40 la crate `bootloader` 0.11 y lanza QEMU. Es el **único miembro** del workspace.
41- `kernel/` — el kernel **bare-metal**. Está **excluido** del workspace y se
42 compila solo como dependencia de artefacto de `boot` (target
43 `x86_64-unknown-none`). NUNCA debe ser miembro del workspace ni compilarse
44 para el anfitrión: lo haría fallar por un `_start` duplicado.
45- `apps/` — aplicaciones del userspace, módulos `.wasm`
46 (target `wasm32-unknown-unknown`). Workspaces propios, excluidos.
47
48Módulos del kernel (`kernel/src/`): `main`, `grafico`, `consola`, `compositor`,
49`baliza`, `sync`, `gdt`, `interrupts`, `pic`, `drivers/`, `almacen`,
50`manifiesto`, `memory/`, `async_system/`, `texto`, `wasm/`. El detalle de cada
51uno está en `ARCHITECTURE.md`.
52
53## Toolchain
54
55Nightly, fijado en `rust-toolchain.toml`. Targets `x86_64-unknown-none` y
56`wasm32-unknown-unknown`. Componentes `rust-src` y `llvm-tools` (los exige el
57build script de la crate `bootloader`). Entorno verificado: Artix Linux,
58QEMU 11, OVMF en `/usr/share/edk2/x64/OVMF.4m.fd` (sin módulo KVM → TCG).
59
60## Convenciones
61
62- **Idioma:** comentarios E identificadores en español.
63- **`unsafe`:** confinado en células mínimas, envuelto de inmediato en una
64 abstracción segura. `#![deny(unsafe_op_in_unsafe_fn)]`. Cada bloque `unsafe`
65 lleva un comentario `SEGURIDAD:` que justifica su corrección.
66- **Framebuffer / MMIO:** siempre `core::ptr::write_volatile`; jamás asignación
67 indexada directa (el optimizador la elidiría).
68- **`no_std` estricto:** solo `core::*` y `alloc::*` (heap vivo desde la Fase 3).
69 Prohibido cualquier ruta de `std::*`.
70- **Alineación:** 16 bytes para estructuras genéricas; 4096 bytes (página) para
71 buffers de memoria y regiones de asignador.
72- Código densamente comentado; se cuida la coherencia de estilo entre módulos.
73
74## Estado
75
76Fases 1 a 5, 6.0, 6.1, 6.2, la Fase 7 COMPLETA —el userspace nace del grafo de
77objetos—, la Fase 8 COMPLETA —el compositor teselante e interactivo: teselado
78con `mirada-layout` (8a), ciclado de layout (8b), foco y enrutamiento selectivo
79del teclado (8c), promoción y reordenación de ventanas (8d)—, la Fase 9
80COMPLETA —orden-Z y ventanas flotantes: composición con solapamiento (`Alt+F`)—
81la Fase 10 COMPLETA —alta y baja de aplicaciones en vivo (`Alt+N` / `Alt+Q`)—,
82la Fase 11 COMPLETA —el reloj del sistema como capacidad de host
83(`sys_tiempo_mono`) + la app `pulso`—, la Fase 12 COMPLETA —la bocina del PC
84como capacidad de host (`sys_tono`) + la app `tonada`—, la Fase 13 COMPLETA
85—ratón PS/2, puntero, clic-para-enfocar y arrastre de ventanas flotantes—,
86infraestructura `memory::mmio` (mapeador propio de regiones MMIO en la tabla
87L4) y la Fase 14 COMPLETA —nombres en cada ventana y barra de tareas con
88clic-para-enfocar—. Todo verificado en QEMU. Ver `ROADMAP.md`.
89
90## Flujo de trabajo
91
92En **cada iteración** de trabajo, sin excepción:
93
941. Actualizar `CHANGELOG.md` — la entrada técnica detallada del cambio.
952. Actualizar `DIARIO.md` — la misma jornada contada en lenguaje llano y
96 elegante, sin carga técnica (es una crónica humana, no un registro técnico).
973. Verificar en QEMU si el cambio es observable (con captura de pantalla).
984. `git commit` (mensaje en español, descriptivo) y `git push origin main`.
99
100renaser vive ahora dentro del monorepo **brahman**; los commits van al remoto
101de brahman (`gitea.gioser.net/sergio/brahman`). Mensajes de commit en español.
102Verifica una fase en QEMU antes de darla por cerrada.
CLAUDE.md
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
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 crate bootloader 0.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 de boot (target
x86_64-unknown-none). NUNCA debe ser miembro del workspace ni compilarse
para el anfitrión: lo haría fallar por un _start duplicado.
apps/ — aplicaciones del userspace, módulos .wasm
(target wasm32-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 bloque unsafe
lleva un comentario SEGURIDAD: que justifica su corrección.
- Framebuffer / MMIO: siempre
core::ptr::write_volatile; jamás asignación
indexada directa (el optimizador la elidiría).
no_std estricto: solo core::* y alloc::* (heap vivo desde la Fase 3).
Prohibido cualquier ruta de std::*.
- 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) y la Fase 14 COMPLETA —nombres en cada ventana y barra de tareas con
clic-para-enfocar—. 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) y git 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.