Un desarrollador ha creado un hipervisor determinista para el kernel de Linux, diseñado para eliminar la no determinismo inherente a la concurrencia y el hardware. El proyecto surge de la frustración con las implementaciones previas, que a menudo contenían múltiples fuentes de aleatoriedad, y busca ofrecer una alternativa más robusta para tareas de fuzzing y simulación precisa.
El desafío principal radica en que, aunque los programas son máquinas de estado, la concurrencia y el hardware introducen variaciones no controladas. Por ejemplo, la adquisición de mutexes depende de la ordenación de ejecución de hilos, y las interrupciones periódicas, como las del temporizador de Linux, dependen del tiempo real, lo que impide reproducir exactamente el mismo estado final a partir del mismo estado inicial.
A diferencia de los emuladores de software, que son lentos, o de las soluciones basadas en KVM que reintroducen la no determinismo de hardware, este hipervisor utiliza una planificación cooperativa estricta. En lugar de interrupciones preemptivas basadas en temporizadores, el sistema evita interrumpir al invitado. Utiliza hiperllamadas para gestionar el cambio de contexto y sincronización, transformando las instrucciones de relajación del kernel (como cpu_relax) en puntos de rendición controlados. Esto permite que el kernel ejecute secciones atómicas deterministas, garantizando que, dado el mismo estado inicial y las mismas decisiones, el resultado final sea idéntico, sin necesidad de instrumentar el espacio de usuario.
