Un sistema operativo de 64 bits escrito desde cero en Rust.
Kernel hรญbrido ยท Multitarea apropiativa ยท Shim de drivers Linux ยท Audio HD ยท Red TCP/IP
๐ค Nota sobre el desarrollo: MesaOS es un experimento de arquitectura de sistemas diseรฑado y dirigido por crackanimador (estudiante de ESO).
Todo el cรณdigo fuente ha sido generado mediante modelos de Lenguaje (IA) siguiendo mis especificaciones, mientras que el diseรฑo de la arquitectura, la depuraciรณn de errores, las pruebas en hardware real y la integraciรณn del sistema son 100% trabajo humano.
MesaOS es un sistema operativo x86_64 escrito 100% desde cero en Rust. No es un Linux desde arriba ni un BSD modificado โ es un kernel original con arquitectura hรญbrida que combina la seguridad de Rust con la compatibilidad de Linux vรญa un shim de mรกs de 400 sรญmbolos del kernel exportados.
- Shim de drivers Linux reales: exporta
kmalloc,printk,pci_*,dma_*y 400+ sรญmbolos para cargar controladores de Linux sin modificar - Audio WAV streaming por HDA con resampleo en tiempo real y chunks de 512KB
- Stack de red completo (ARP/IPv4/ICMP/DHCP/DNS/Ethernet) sobre virtio-net y RTL8139
- Initrd permanente: los archivos inyectados en la ISO sobreviven al reinicio โ persistencia sin disco
- Shell interactivo con 82 comandos, pipes, redirecciรณn, historial, autocompletado y editor de texto
- Compatibilidad binaria parcial con Linux: syscalls Linux,
/proc,/sys, epoll, signalfd, eventfd, timerfd
| Caracterรญstica | Descripciรณn |
|---|---|
| Kernel hรญbrido | Monolรญtico con espacio de usuario en Ring 3 |
| Multitarea apropiativa | Round-robin con 5 estados, sleep queue, zombies |
| Syscalls nativas | SYSCALL/SYSRET con validaciรณn SMAP/SMEP software |
| Linux compat | ~350 syscalls reconocidas, 60+ implementadas |
| Shim de drivers | 400+ sรญmbolos del kernel Linux exportados |
| ACPI | RSDP, MADT, AML interpreter vรญa crate aml |
| Multiprocesamiento | Detecciรณn SMP (pendiente scheduler multicore) |
| Seguridad | ASLR, stack canary, rate-limiting, password hashing |
| Driver | Descripciรณn | Estado |
|---|---|---|
| HDA Audio | 48kHz/16-bit/estรฉreo, CORB/RIRB, DMA streaming, codec routing | โ |
| Virtio-Net | MMIO, colas Rx/Tx, para QEMU | โ |
| RTL8139 | Ethernet 10/100, PIO, IRQ | โ |
| PS/2 Keyboard | Scan codes, layouts ES/US | โ |
| RTC (CMOS) | Reloj en tiempo real, timezone | โ |
| Baterรญa | ACPI _BST/_BIF + EC fallback, cycle count, SOH |
โ |
| PC Speaker | Tonos, beep, TTS experimental | โ |
| Framebuffer | Consola, Rose Pine, renderizado HTML | โ |
| UEFI NVRAM | Read/write/list variables runtime services | โ |
| NVMe | Cรณdigo completo (desactivado por seguridad) | โธ๏ธ |
| xHCI (USB 3.0) | Init y port scanning (drivers en construccion, pero la base ya hecha) | โ |
| ATA/IDE | Cรณdigo completo (desactivado por seguridad) | โธ๏ธ |
| Protocolo | Estado |
|---|---|
| Ethernet โ Frame parsing/creation | โ |
| ARP โ Cachรฉ, requests, replies | โ |
| IPv4 โ Enrutamiento, fragmentaciรณn | โ |
| ICMP โ Echo (ping) | โ |
| TCP โ Parseo de headers | ๐ง |
| UDP | ๐ง |
| DHCP โ Cliente | โ |
| DNS โ Resoluciรณn | โ |
| RNDIS โ USB tethering (Por ahora, solo iniciacion NCP) | ๐ง |
| Componente | Estado |
|---|---|
| VFS abstracto con File/Directory/Symlink/Device | โ |
| RamFS โ รrbol en memoria | โ |
| Initrd โ Archivos embebidos en ISO (persistente) | โ |
| Particiones โ MBR/GPT parseadas | โ |
write/read/mkdir/rmdir/rename/chown/link/symlink |
โ |
| Caracterรญstica | Estado |
|---|---|
| WAV PCM 8/16/24/32 bits, mono/estรฉreo | โ |
| Resampleo lineal por chunks (evita OOM) | โ |
| Streaming DMA con chunks de 512KB (~2.7s) | โ |
| MP3 โ Metadatos (duraciรณn, bitrate, sample rate) | โ |
Comandos: play, audio-info, audio-list |
โ |
| Comando | Funciรณn |
|---|---|
play f.wav |
Reproduce audio WAV |
hda test / hda vol 80 |
Test / volumen HDA |
battery-report |
Reporte completo de baterรญa |
nano |
Editor de texto |
neofetch |
Informaciรณn del sistema |
ping 10.0.2.2 |
ICMP echo |
dhcp |
Configuraciรณn de red |
bios-analyze |
Escaneo de BIOS |
nvram list/read/write/del |
Gestiรณn UEFI NVRAM |
su, passwd, useradd, userdel |
Multiusuario |
exec f.elf |
Ejecutar ELF en Ring 3 |
ps, kill, top |
Gestiรณn de procesos |
| ` | , >, >>` |
Inspirado en upower -i de Linux. Dos fuentes de datos en cascada:
- ACPI AML (preferido): evalรบa
_BST/_BIF/_BTP - EC directo (fallback): registros estรกndar 0xD0/0xD8
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MESA OS - B A T T E R Y R E P O R T โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
state discharging
percentage 72%
energy-full-design 45000 mWh
energy-now 30600 mWh
time-to-empty 2:27:33
capacity (SOH) 94%
cycle-count 124
source AML (ACPI _BST/_BIF)
battery-report # Reporte completo
battery-report -w # Modo monitor (refresca cada 2s)
battery-report -b # Brief (una lรญnea)
battery-report -v # Verbose (OEM info, warnings)Los archivos que inyectes en la ISO se quedan para siempre. No se pierden al reiniciar porque van embebidos en el kernel dentro de la ISO.
# Inyectar archivos y reconstruir en un solo paso
./tools/inject_build.sh mis_datos/
# O por separado
./tools/inject_to_iso.sh archivo.wav config.conf
./build.sh build
# Restaurar ISO limpia (sin archivos)
./build.sh restoreLos archivos aparecen en
/inyect/dentro del OS.
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ RING 3 (USUARIO) โ
โ Procesos ELF ยท Shell ยท Pipes ยท Syscalls Linux/MesaOS โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ RING 0 (KERNEL) โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ Scheduler โ โ Memoria โ โ Linux Shim โ โ
โ โ Round-Robin โ โ PMM/VMM โ โ 400+ sรญmbolos โ โ
โ โ Sleep Queue โ โ Heap/HHDM โ โ workqueues โ โ
โ โ Zombies โ โ Paginaciรณn โ โ timers โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ Drivers โ โ Red โ โ Filesystem โ โ
โ โ HDA Audio โ โ ARP/IPv4 โ โ VFS ยท RamFS โ โ
โ โ RTL8139 โ โ ICMP/DHCP โ โ Initrd ยท MBR โ โ
โ โ Virtio-Net โ โ DNS/TCP โ โ GPT โ โ
โ โ xHCI/NVMe โ โ Ethernet โ โ โ โ
โ โ Keyboard โ โ โ โ โ โ
โ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโ โ
โ โ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ โ x86_64: GDT ยท IDT ยท APIC/PIC ยท SYSCALL/SYSRET ยท TSSโโ
โ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
rustup toolchain install nightly
rustup default nightly
sudo apt install xorriso qemu-system-x86_64 git make gccchmod +x build.sh
./build.sh build # Compilar kernel + ISO./build.sh run # Virtio-net (recomendado)
./build.sh run-nvme # Con NVMe simulado
./build.sh run-usb # Con xHCI USB
./build.sh run-wifi # Con display grรกficoNO_INJECT=1 ./build.sh build # Compilar sin inyecciรณn
ARCH=aarch64 ./build.sh build # ARM64 (experimental)- v0.1 โ Kernel base, memoria, scheduler, shell bรกsico
- v0.2 โ HDA Audio, WAV streaming, red (ARP/IP/DHCP)
- v0.3 โ Initrd persistente, battery report, UEFI NVRAM
- v0.4 โ Linux shim, 350 syscalls, Ring 3, ELF loader, editor nano
- [/] v0.5 โ xHCI funcional (control transfers reales), USB storage
- v0.6 โ TCP state machine (conexiones reales)
- v0.7 โ SMP (scheduler multicore)
- v0.8 โ Servidor web HTTP embebido
- v0.9 โ Decodificador MP3 (Huffman + MDCT)
- v1.0 โ WiFi RTL8822CE
| Plataforma | Funciona |
|---|---|
| QEMU (KVM/TCG) | โ Completo |
| HP 15s-eq2xxx | โ Audio, baterรญa, red, NVMe |
| UEFI (Limine) | โ |
| BIOS (GRUB) | โ |
El workspace independiente de experiments/ incluye un reloj analรณgico ASCII
escrito en Rust no_std. Se carga como un ELF aislado en Ring 3, sin acceso
directo al framebuffer ni privilegios de kernel. Syscalls pequeรฑos y de alcance
limitado proporcionan la hora RTC, el borrado/color de la consola y una seรฑal
Ctrl+C enclavada. El shell del kernel espera mientras un hijo de exec estรก en
primer plano, evitando carreras de teclado/pantalla; Ctrl+C termina xclock y
restaura el prompt.
El lanzador QEMU seguro usa intencionalmente una sola CPU virtual porque el scheduler SMP de MesaOS todavรญa no es fiable con el shell del kernel y cargas Ring 3 concurrentes.
Consulta experiments/cmd/xclock/README.md
para compilarlo, instalarlo y ejecutarlo.
El driver NVMe sobrescribe el Sector 0 (tabla de particiones) durante la inicializaciรณn.
No ejecutes en hardware con datos importantes si llega a descomentar el driver NVMe. Usa QEMU o un disco de pruebas.
Ademas, La version de Qemu puede tener errores por culpa del SMP, pero en si todas las funciones van como deben ir.
Crackanimad0r / Crackanimador โฉ๏ธ
Hecho con โ, ๐ฆ y mucha paciencia.
