Un núcleo no es código de libretro: casi siempre es un emulador que ya existía
RetroArch descarga los núcleos, así que parecen suyos. Pero libretro es sólo una API en C con licencia MIT, y detrás de casi cada núcleo hay un emulador con veinte años de historia y autores con nombre.
libretro es una API en C que define cómo un programa —casi siempre un emulador— se empaqueta como biblioteca cargable, y un núcleo (core) es ese programa ya portado a esa API. La documentación oficial lo define así: un núcleo es «un programa portado a la API libretro para que puedan ejecutarlo los frontends de libretro». El emulador no cambia de dueño al portarse. Cambia de envoltorio.
Primer error: llamarle «núcleo de RetroArch»
RetroArch no es libretro. Es el frontend de referencia, y los dos proyectos ni siquiera comparten licencia: la API es MIT y RetroArch es GPLv3. Cualquier programa que implemente la API puede cargar un núcleo. Kodi lo hace con su complemento oficial game.libretro, que traduce las llamadas entre la API de libretro y la de juegos de Kodi; ahí no hay RetroArch por ninguna parte.
La confusión se propagó por una razón práctica: RetroArch es la cara visible. Descarga los núcleos, los actualiza y sale en las capturas. Eso lo vuelve el distribuidor, no el autor.
Segundo error: creer que el núcleo lo escribió libretro
Casi ninguno. Snes9x guarda en su propio repositorio sus interfaces de GTK, Qt, Windows y macOS junto al directorio libretro: el núcleo es una salida más del mismo emulador. Genesis Plus GX, de Eke-Eke, declara estar basado en «Genesis Plus 1.2a de Charles MacDonald». mGBA, de Vicki Pfau, mantiene su núcleo dentro de su árbol de fuentes. Y Beetle PSX se define a sí mismo como «un port/fork del módulo PSX de Mednafen a la API libretro».
Decir «el núcleo de Snes9x de RetroArch» borra dos proyectos en cinco palabras.
La fecha, y lo que libretro no inventó
El 3 de abril de 2012, Hans-Kristian «Themaister» Arntzen subió a SSNES un commit que añadía libretro.h y borraba libsnes.hpp. Ahí nace la API, y nace generalizando: libsnes era «el núcleo de emulación de bsnes en forma de biblioteca», atado al Super Nintendo. Dieciocho días después, el 21 de abril, SSNES pasó a llamarse RetroArch. La API cambió de nombre antes que el programa.
Lo que no inventó fue el complemento. Los emuladores de Nintendo 64 llevaban desde 2000 compartiendo DLLs de vídeo, audio y mando bajo las especificaciones de zilmar. La diferencia está en la dirección: allí el complemento era una pieza dentro de un emulador; en libretro el emulador entero es la pieza y lo genérico es el envoltorio. Por eso un núcleo hereda gratis lo que traiga el frontend —el save state, el rebobinado, los shaders— y arrastra igual sus requisitos de siempre: el archivo BIOS, el volcado de la ROM o el ISO.
El detalle que explica la longevidad del arreglo: RETRO_API_VERSION vale 1 en aquel archivo de 2012 y sigue valiendo 1 hoy. Un núcleo compilado hace años todavía carga. Esa quietud es el aporte real de libretro — la distribución, no la emulación.
[ Fuentes ]
- Libretro overview — definiciones oficiales de API, núcleo y frontend; RetroArch como «reference frontend» y la diferencia de licencias (API MIT / RetroArch GPLv3) · Libretro (documentación oficial)
- «Work on new libretro API» — el commit de Themaister que añade libretro.h (207 líneas) y elimina libsnes.hpp (247) · GitHub / libretro/RetroArch · 2012-04-03
- «SSNES => RetroArch» — el commit del cambio de nombre del frontend · GitHub / libretro/RetroArch · 2012-04-21
- Anuncio de SSNES por su autor: «I've made a really slim interface for libsnes, which is the bsnes emulation core in library form» · Arch Linux Forums / Hans-Kristian «Themaister» Arntzen · 2010-05-29
- Especificaciones originales de plugins de zilmar para emuladores de Nintendo 64 (Gfx #1.2 y Audio #1.1, octubre de 2000; Controller #1.0, diciembre de 2000; Gfx #1.3 y RSP #1.1, agosto de 2001) · GitHub / cxd4/rcp64
- game.libretro — el complemento oficial que carga núcleos libretro dentro de Kodi traduciendo las llamadas a la Game API de Kodi · GitHub / kodi-game
- Genesis Plus GX — «The source code, initially based on Genesis Plus 1.2a by Charles MacDonald» · GitHub / ekeeke
- Beetle PSX — «Beetle PSX is a port/fork of Mednafen's PSX module to the libretro API» · GitHub / libretro
Lo que importó de verdad
Un correo por semana con las 5 noticias que mueven la industria y el mejor video vertical. Nada de refritos de notas de prensa.
[ Síguenos donde leas ]
Sin algoritmo que decida por ti: el correo y el RSS llegan enteros. En las redes publicamos los cortes.