Un kernel mínimo en Swift se ejecuta en QEMU

A minimal kernel in Swift, running in QEMU

El autor escribe un kernel básico en Embedded Swift para una máquina virtual AArch64 de QEMU. El proyecto necesita un punto de entrada en ensamblador, un script de enlazador propio y funciones como putchar y memmove, ya que no hay sistema operativo ni biblioteca estándar. El kernel imprime un mensaje por la UART PL011 y luego hace eco de caracteres mediante polling, un primer paso para entender qué exige ejecutar código sin sistema operativo.

Este es el primer punto en el que el proyecto deja de ser programación de aplicaciones ordinaria. Aquí ya no llamo a una API del sistema operativo para imprimir una cadena, sino que implemento las funciones de bajo nivel que el runtime del lenguaje necesita para existir.
  1. mike_hearn

    Apuesto a que vamos a ver mucho más de esto. Los kernels UNIX han dominado los casos de uso de la computación fuera de los escritorios durante mucho tiempo más porque convenientemente vienen con código fuente gratuito que porque sean un gran diseño. Ahora que la IA hace tan fácil experimentar, espero que veamos una nueva era de exploración en el diseño de sistemas operativos y frameworks. Ya estamos viendo el comienzo de esto con Omarchy, pero son pasos de bebé y no está enfocado en los niveles más bajos. Las marcadas diferencias entre NT, XNU, SeL4 y Linux muestran que hay mucho espacio para la diferenciación en la base, y (aparte de SeL4) todos esos siguen siendo muy similares debido a presiones comerciales.

  2. Narishma

    Más un hola mundo que un kernel.

  3. aseipp

    Embedded Swift es sinceramente muy genial. Nunca usé realmente Swift antes, pero creo que es un buen nicho ya que el desarrollo embebido podría beneficiarse de otra herramienta y el lenguaje es bastante agradable. Además, realmente no sufre la mayoría de los problemas que la gente ha mencionado históricamente con Swift (multiplataforma, compilaciones lentas), etc., ya que es tan pequeño, al menos para mí. :) Si empiezas desde cero, he descubierto que en realidad puedes escribir casi todo en Swift con bastante facilidad (vectores de reset, intrínsecos emitidos por el compilador, etc.). Pero más allá de eso, creo que la mejor característica es que la interoperabilidad con C/C++ funciona realmente bien y viene de fábrica. Hace que la adopción bidireccional sea fácil. Escribí un pequeño firmware de arranque para un simulador y, por diversión, decidí agregar firmas al proceso de arranque (mldsa44+jq255). Simplemente puedes copiar los archivos .c y .h e importarlos en un archivo modulemap y listo. Puedes obtener archivos .o simples y pasarlos al enlazador. Solo hay 4-5 funciones "freestanding" que tienes que implementar. Puedes desactivar la asignación de heap. Etc. Probablemente sería bastante genial y bastante fácil, por ejemplo, escribir controladores de Zephyr o U-Boot, etc. en Swift usando estas técnicas.

Más de este día

2026-10-08