El objetivo principal de Mimiker es ofrecer un sistema operativo mínimo de UNIX, es decir, el núcleo y un conjunto de programas de espacio de usuario.
El diseño del kernel está fuertemente inspirado en los sistemas FreeBSD y NetBSD con algunas ideas tomadas de Linux, Plan9 y otros OSS. Pasamos mucho tiempo leyendo el código fuente de los sistemas operativos de código abierto. Elegimos cuidadosamente sus mejores decisiones de diseño, ideas, algoritmos, API, prácticas, etc., las destilen al mínimo y reimplomelas o adaptarlas a la base de código Mimiker. Esperamos no repetir sus errores y alejarnos de las soluciones heredadas y no perfectas.
El proyecto Mimiker se reúne como personas mental que valoran el minimalismo, la simplicidad y la legibilidad del código. Nos esforzamos por la complejidad de soluciones más baja posible. Nos encanta tirar un código que no sea terriblemente útil o maneja casos de borde raros. Conocemos el valor de la depugabilidad y no dudamos en pasar tiempo escribiendo herramientas que ayudan a mejorarlo.
Aunque los programas del espacio de usuario son parte del proyecto Mimiker, simplemente se han portado desde NetBSD o Project Suckless. Nos centramos en el desarrollo del núcleo, ya que lo encontramos más interesante. No queremos invertir demasiado tiempo en los controladores de dispositivos, por lo que mantenemos una lista de plataformas de destino pequeñas.
Si desea participar en el proyecto, lea nuestro wiki para obtener más información.
Mimiker es un sistema operativo en tiempo real. El núcleo es preemplable y nuestros mutexes apoyan la herencia prioritaria. Minimizamos el trabajo realizado en el contexto de interrupción al delegarlo para interrumpir los hilos en lugar de ejecutarlo usando interrupciones suaves.
Mimiker se ejecuta en arquitecturas MIPS (32 bits), AARCH64 y RISC-V (tanto de 32 bits y 64 bits) bajo control QEMU y RENODE.
Mimiker tiene un buen conjunto de herramientas de depuración: scripts gdb escritos en Python, desinfectante de direcciones de kernel, validador de dependencia de bloqueos, desinfectante de concurrencia de kernel. ¡Incluso tenemos apoyo para perfilar el núcleo usando gprof ! Utilizamos Clang para compilar nuestra base de código, por lo tanto, podemos emplear algoritmos sofisticados de análisis dinámico y estático para ayudar a la confiabilidad del código.
Se proporciona un conjunto común de primitivas de sincronización, es decir, bloqueos giratorios, mutexes y variables condicionales, todas con semántica simple. No tenemos múltiples primitivas que hagan cosas similares, pero un poco diferente, lo cual es común para los núcleos FreeBSD o Linux.
La memoria del núcleo de Mimiker está cableada (es decir, no ajustable), por lo que no tiene que preocuparse por elegir los bloqueos correctos al acceder a la memoria del núcleo, a diferencia de FreeBSD. Tenemos un asignador de memoria de amigos para memoria física, asignador de espacio de dirección virtual y asignador de losas basado en revistas y papel VMEM. Nuestros asignadores de memoria son simples pero eficientes.
La infraestructura de controladores de Mimiker resume el concepto de registro de hardware e interrumpe de manera similar al NewBus de FreeBSD. Se toma especial cuidado para hacer que los conductores sean portátiles. Tenemos rutinas enumeradoras que autodetectan dispositivos conectados a buses PCI y USB. Utilizamos el árbol de dispositivos planos para impulsar la configuración del núcleo durante la fase de inicio.
El sistema de archivos virtuales y la gestión del espacio de direcciones virtuales del usuario se basan libremente en ideas de FreeBSD. Necesitan una cantidad sustancial de trabajo para ser tan maduros como en los kernels FreeBSD o Linux.
Tenemos más de ochenta Syscalls que nos permiten ejecutar varias herramientas de código abierto, incluidos Korn Shell de NetBSD, editor de Atto Emacs, Lua Interpreter y muchas más. Incluso tenemos un juego:
Mimiker apoya:
Nos gustaría apoyar:
Hay mucho trabajo por hacer. ¡Consulte nuestra hoja de ruta!