En desarrollo activo

KyberOS powered by Mach X

Mach, como
alternativa a Linux.

Un solo núcleo, mantenido puro: tareas, hilos, puertos, mensajes. Encima, una personalidad UNIX/POSIX. A un lado, una personalidad Linux que habla la ABI de llamadas al sistema de Linux, para que el software de Linux corra sin modificar sobre Mach.

Los binarios nativos son Mach-O; ELF pertenece a la personalidad de compatibilidad. Piensa en WSL1 + Mach, solo que el núcleo anfitrión es Mach y el ABI anfitrión es Mach-O.

qemu-system-x86_64 · kyberos.elf
Hello, Mach!
KyberOS powered by Mach X

Visión

Un micronúcleo que sigue siendo micronúcleo.

Tomar el micronúcleo Mach y mantenerlo puro: micronúcleo, IPC, servidores en espacio de usuario. Combinarlo con una personalidad UNIX/POSIX y ofrecer compatibilidad binaria con Linux, para que el software de Linux corra sin modificaciones.

Linux creció monolítico: los controladores, los sistemas de archivos y la política de llamadas al sistema comparten un solo espacio de direcciones y una sola superficie de fallos, con decenas de millones de líneas. Mach trazó la forma opuesta. Tareas, hilos, puertos, mensajes y memoria virtual son las únicas primitivas del núcleo; los controladores, los sistemas de archivos y el propio POSIX viven en servidores de espacio de usuario, conectados por IPC.

«Mach + POSIX» por sí solo no es nuevo. GNU/Hurd lo persigue desde 1990, y XNU lo logró renunciando a la pureza, metiendo BSD dentro del núcleo. Lo nuevo es la combinación que nadie había entregado: un núcleo Mach puro construido con clang/LLVM sobre x86_64, y una personalidad con la ABI de llamadas al sistema de Linux que corre software de Linux sin modificar, mientras el ABI nativo sigue siendo Mach-O.

Por qué

¿Por qué construir otro núcleo?

Linux ganó por ser suficientemente bueno, en todas partes, de golpe. Mach perdió por llegar temprano, lento e inconcluso. Ninguno de los dos resultados es una ley de la física. KyberOS existe para descubrir cómo se ve el micronúcleo cuando alguien por fin lo termina.

Mach puro, sin híbridos

A diferencia de XNU, no hay una capa BSD dentro del núcleo. El rendimiento viene de un IPC clase L4, auxiliares estilo vDSO y caché de páginas, no de meter política en el núcleo.

Varias personalidades

Mach fue diseñado para alojar varias personalidades de SO a la vez. KyberOS incluye UNIX (primaria) y Linux (compatibilidad) como capas delgadas sobre un núcleo POSIX compartido.

Capacidades primero

Los puertos son capacidades: sin autoridad ambiental, sin nombres globales. La frontera entre personalidades funciona también como frontera de aislamiento de capacidades.

Mach-O nativo

clang + ld64.lld producen el ABI Mach-O nativo y un dyld propio se encarga del enlazado dinámico. ELF existe solo dentro de la personalidad Linux.

IPC clase L4

Las ida y vuelta de un RPC nulo ya se miden en pocos cientos de ciclos, con una ruta rápida de entrega directa en desarrollo. La velocidad es una restricción de diseño, no un añadido.

La elegancia de Apple, bien hecha

Seguimiento de versiones, una experiencia de arranque cuidada, herramientas profesionales: «KyberOS powered by Mach X» con la pureza que XNU abandonó.

El panorama

Cómo se compara.

Una tabla honesta, incluidas las filas que perdemos. KyberOS es joven; el punto de la comparación es la forma del diseño, no el marcador.

KyberOS Linux XNU GNU/Hurd seL4
Modelo de núcleomicronúcleo Mach puromonolíticohíbrido: Mach + BSD dentro del núcleomicronúcleo Mach + suite de servidoresmicronúcleo verificado
Binarios nativosMach-OELFMach-OELFninguno; es un componente
Binarios de Linuxsin modificar, vía personalidad Linux (planeado)nativosnofuentes POSIX, no ABI ELFno
Personalidades de SOvarias, simultáneasunauna (BSD)una (el Hurd)las que construyas
Controladores y sistemas de archivosservidores en espacio de usuarioen el núcleoen el núcleo (IOKit)traductores en espacio de usuariocomponentes en espacio de usuario
Modelo de seguridadcapacidades por derechos de puerto; la frontera de personalidad es la frontera de aislamientoautoridad ambiental + LSMBSD + puertos Mach + MACFpuertos y traductorescapacidades formales, con pruebas
Dónde vive la políticaservidores en espacio de usuarioel núcleoel núcleolos servidorestú decides
Madurezen desarrollo, arranca en QEMUhace funcionar al mundocada dispositivo Appleinvestigación + port a Debiandefensa, aeroespacial, embebidos

Filas que perdemos a propósito: seL4 está formalmente verificado y probado en campo; nosotros todavía no. La compatibilidad con Linux es un hito del roadmap, no algo que ya se entregue. Lo que ninguna otra fila combina: un núcleo Mach puro, un ABI nativo Mach-O y binarios de Linux corriendo como personalidad invitada.

Arquitectura

Personalidades arriba, Mach puro debajo.

El trap del núcleo es un enrutador delgado: lee el campo de personalidad de la tarea y entrega el trap al punto de entrada de emulación de esa personalidad. El núcleo nunca interpreta un número de llamada al sistema.

Capas delgadas, núcleo compartido

El núcleo POSIX es una biblioteca enlazada en cada servidor de personalidad, no un proceso servidor compartido, así que la frontera entre personalidades sigue siendo una frontera real de aislamiento. Las capas delgadas solo manejan lo que diverge: kqueue vs epoll, clone vs rfork, sysctl vs procfs, dialectos de ptrace.

Un solo servidor grande, divisiones medidas

La idea de Mach de muchos servidores «casi nunca ocurrió»; el costo de IPC castigaba la descomposición. KyberOS arranca con un servidor por personalidad y descompone solo donde la medición lo justifica.

Cadena de herramientas

clang + LLVM es la cadena nativa: ld64.lld para Mach-O, ld.lld/GNU ld para el núcleo. LTO, PGO y CFI son de primera clase. Se construye con CMake + Ninja; nada de autotools en nuestro árbol.

Hoja de ruta

Del metal desnudo a /bin/sh y más allá.

El núcleo arranca en QEMU hoy, con gestión de memoria, tareas e IPC Mach funcionando. El desarrollo es privado por ahora; los hitos de abajo son orientativos, no promesas.

  1. M0–M2g listo

    Cimientos: arranque multiboot2 + PVH, PMM, memoria virtual en la mitad alta, heap del núcleo, vm_fault de Mach con COW en ambos lados, ring 3, syscall/sysret.

  2. M3 actual

    IPC nativo Mach: espacios, puertos, mensajes tipados, mach_msg_trap bloqueante, temporizador LAPIC y la ruta rápida de entrega directa. La puerta para el trabajo en dyld.

  3. M4

    Servidor de consola por IPC + la primera traducción de syscall de Linux: write(1) → IPC Mach → consola → serial.

  4. M5–M6

    Puesta a punto de la personalidad UNIX sobre la interfaz 4.3BSD congelada, y luego el hito del shell POSIX: /bin/sh con tuberías, fork/exec y control de trabajos.

  5. M7–M8

    La personalidad Linux sobre el mismo andamiaje, y después libc: primero musl (Mach-O estático), después glibc (dinámico).

  6. M9+

    Sandboxing por capacidades y MAC, arranque seguro/medido, SMP, controladores de hardware rump-kernel, espacios de nombres y contenedores.

Carta del núcleo

La prueba de la forma Mach.

Cada característica del núcleo debe pasar las cinco reglas, o ganarse una excepción numerada y fechada en el registro de decisiones, con una medición que la justifique.

  1. 1

    El mismo vocabulario

    Construido con tareas, hilos, puertos, mensajes, vm_map, vm_object, objetos de memoria y el planificador. Ningún tipo nuevo de objeto de núcleo.

  2. 2

    Mecanismo en el núcleo, política en los servidores

    El núcleo ofrece la capacidad; un servidor en espacio de usuario decide cómo usarla.

  3. 3

    Se alcanza por puertos

    Las funciones visibles al usuario son interfaces estilo MIG sobre puertos servidos por el núcleo. El conjunto de traps se mantiene pequeño y estable.

  4. 4

    Capacidades primero

    El acceso pasa por derechos de puerto. Nada depende de autoridad ambiental, IDs de usuario o nombres globales.

  5. 5

    El interior es libre, con límites

    Épocas, zonas por CPU, búsquedas sin bloqueo, donación de prioridad estilo turnstile: cualquier técnica moderna es válida detrás de una interfaz sin cambios y una semántica observable sin cambios.

Mach renace

La idea fue interrumpida, no derrotada.

Mach no falló por falta de mérito. Falló por llegar demasiado pronto: demasiado ambicioso, demasiado inconcluso para una industria que necesitaba el software para ayer. Así que la industria lanzó sus ideas de todas formas, dentro de núcleos que cambiaron pureza por velocidad. Cada dispositivo Apple es un Mach que se comprometió. KyberOS es el Mach que no lo hizo.

Nada de esto existiría si sus autores no lo hubieran escrito todo. Artículos, manuales, definiciones de interfaz: un diseño documentado con el cuidado suficiente para sobrevivir a su propio laboratorio. Rochester lo sembró, Pittsburgh lo construyó, Utah lo cargó, GNU lo mantuvo caliente y Apple demostró que sus ideas podían mover mil millones de dispositivos. Nosotros solo somos las siguientes manos al volante.

KyberOS no es un clon y no es nostalgia. Es el mismo proyecto, retomado: el micronúcleo que ellos esbozaron, terminado con cuarenta años de retrospectiva. Mach renace.

Una promesa, continuada

A la gente de Rochester, Pittsburgh, Utah, Grenoble y Cupertino, y a todos los que alguna vez compilaron Mach, escribieron para él o creyeron que el núcleo podía ser pequeño:

Gracias. Ahora lo llevamos nosotros.