Ayer Microsoft nos sorprendía con la noticia de que pronto todos podremos ejecutar una consola bash de Linux de forma nativa en Windows 10. La característica, que estará disponible para Windows Insiders en próximas compilaciones de Windows 10, se podrá activar entonces para que esos miembros de esa comunidad pueda evaluarla. En verano esa opción se extenderá a todos los públicos con la llegada de la actualización "Anniversary".
¿Cómo funciona esta característica? Como Microsoft señalaba en la presentación, no se utilizan máquinas virtuales para esta opción, y tampoco contenedores. Microsoft llevaba tiempo preparando este movimiento, y su alianza con Canonical ha hecho que podamos acceder a una singular forma de ejecutar tanto bash como otros binarios de Ubuntu de forma directa y nativa. La clave: el llamado Windows Subsystem for Linux (WSL).
Esto es un Linux nativo sobre Windows, sin más
Lo explicaba, entre otros, Dustin Kirkland, uno de los responsables de Canonical, en su blog. Allí confirmaba que ni la virtualización ni los contenedores tenían nada que ver con esta implementación, y que tampoco tenía mucho que ver con Cygwin, la que hasta ahora era una de las formas más populares para poder hacer algo similar a lo que ahora se ha logrado en Windows 10.
Como indicaba Kirkland, Cygwin hace uso de binarios recompilados de Linux para adaptarlos y convertirlos en binarios de Windows. Como explican en su FAQ, el pilar fundamental de este desarrollo es "la librería que proporciona las llamadas a sistema POSIX y el entorno que estos programas esperan".
En realidad esto se parece más a un emulador, como confirmaba Kirkland, que explicaba que lo que se hace aquí es "realizar una traducción en tiempo real de llamadas al sistema de Linux en llamadas al sistema del sistema operativo Windows". Es, nos decía, algo que podría considerarse como lo inverso de lo que hace wine, un proyecto que precisamente permite que se puedan ejecutar binarios de Windows en sistemas Linux.
El trabajo realizado en Project Astoria no fue baldío
En Ars Technica iban un poco más allá a la hora de explicar los orígenes de esta tecnología, que tiene un antecesor interesante: Project Astoria. La tecnología que iba a permitir trasladar aplicaciones de Android a Windows 10 quedó abandonada por dificultades técnicas -aunque ellos lo enfocaron de otro modo- pero parte del trabajo que se estaba realizando para ese proyecto ha servido para dar vida a ese soporte de la consola bash en Linux.
what the hell ? Windows 10 14251 has lxcore.sys and lxss.sys ? aren't they part of Project Astoria ? and for Mobile only ?
— WalkingCat (@h0x0d) January 28, 2016
Cuando Microsoft comenzó a trabajar en ese proyecto desarrolló varios componentes para el kernel de Windows. Lo hizo con lxcore.sys o lxss.sys, por ejemplo, dos -cuando se descubrieron, misteriosos- componentes que permitían dar soporte a la mayoría de APIs del núcleo Linux. Cuidado, porque como destacaban en Ars Technica se trata de componentes que no cuentan con licencia GPL (no son Open Source) y de hecho no contienen código de Linux: "en lugar de eso, implementan la API del núcleo Linux usando la API nativa Windows NT que proporciona el kernel Windows". Y eso es lo que han acabado bautizando como el citado Windows Subsystem for Linux.
Ahí reside esa diferencia con alternativas como Cygwin, ya que ese mecanismo de traducción y ejecución de llamadas al sistema hace que uno pueda, en efecto, trabajar con aplicaciones y binarios ELF de Linux de forma nativa e idéntica a la que haríamos en un sistema Ubuntu "convencional". Canonical ha proporcionado una imagen del sistema (por ahora es Ubuntu 14.04 LTS, pero pronto liberarán la imagen con Ubuntu 16.04 LTS) que contiene entre otras cosas versiones Ubuntu de varias de las herramientas de línea de comandos que encontramos habitualmente en una distribución Linux.
Muchas ventajas, pero también algunas limitaciones
Este subsistema permite lograr un rendimiento realmente notable para esa ejecución de aplicaciones Linux dentro de Windows 10. Como indicaba Kirkland, benchmarks como sysbench indican que el rendimiento en este modo de ejecución es "prácticamente equivalente" al que obtendríamos con una instalación nativa de Windows en cuanto a rendimiento de CPU, de memoria y de sistemas de entrada/salida.
Este desarrollador nos hablaba de ventajas como la de poder acceder directamente a todas las unidades de nuestro sistema Windows 10 de forma directa: cada una de ellas está montada en el tradicional directorio (/mnt/c, /mnt/d, etc, pero lo inverso también es cierto, podemos montar todo el sistema de ficheros de Ubuntu desde el explorador de archivos de Windows 10)). El acceso a otras utilidades como ssh y el mencionado soporte de apt-get (maravilloso, de verdad) abre posibilidades realmente interesantes para cualquier desarrollador Linux.
Eso, no obstante, no esconde las limitaciones de esta implementación. Para empezar, hay que tener en cuenta que esto es algo que está en pleno desarrollo y que por tanto hará que aparezcan fallos de cuando en cuando. Habrá aplicaciones y herramientas que no funcionen como deben, y Kirkland ponía como ejemplos a las conocidas y geniales byobu, screen y tmux para gestión de sesiones de consola.
Incluso los propios responsables de Microsoft también advertían al indicar que no todos los scripts bash y herramientas disponibles funcionarán. También señalaban algo importante: esto es un conjunto de herramientas para desarrolladores "para ayudarles a escribir y desarrollar tu código para todos los escenarios y plataformas".
Esto no es una plataforma servidora en la que hospedar sitios web, ejecutar infraestructura de servidor, etc. Para ese tipo de escenarios recomendaban usar las soluciones de Ubuntu en sus servicios en la nube (Azure). Y por último también indicaban que las herramientas de Linux como bash no podrán interactuar con las herramientas y aplicaciones de Windows. "No podrás ejecutar el bloc de notas desde bash, ni podrás ejecutar Ruby en bash desde Powershell", aclaraban.
En esta sesión en vídeo del Build 2016 precisamente daban detalles importantes sobre el funcionamiento de este sistema, como ese soporte de binarios ELF del que hablábamos y que demuestra que estamos ejecutando las mismas herramientas que ejecutaríamos en un sistema Ubuntu instalad de forma nativa:
¿Veremos soporte de otras distribuciones, o incluso acceso a un entorno gráfico?
Muchos usuarios de Linux seguramente estarán preguntándose si este tipo de característica podrá ir más allá en el futuro y dar soporte a opciones interesantes. Por ejemplo, a otras distribuciones Linux, algo que en principio parece factible dada la forma de trabajar de ese subsistema de Linux que traduce llamadas al sistema.
La propia descripción de Kirkland de cómo preparó la imagen de Ubuntu para que los usuarios de Windows 10 pudieran utilizarla en este sistema operativo desde luego apunta a que muchos otros podrían hacer lo propio. Aquí, eso sí, probablemente sea necesario llegar a acuerdos con Microsoft para que la empresa de Redmond distribuya también esas imágenes para que usuarios que no estén a gusto con Ubuntu y sus herramientas o su gestor de paquetes puedan hacer lo propio con otras distribuciones con otras herramietnas y otros gestores de paquetes.
Otra de las preguntas probablemente frecuentes es la que afecta a las aplicaciones gráficas. ¿Podremos contar con una sesión gráfica o con la ejecución de programas con su interfaz gráfica de usuario (GUI)? Eso parece menos probable según un usuario que hablaba sobre ello en Reddit y que indicaba que no hay planes para ofrecer esa opción: "esto está realmente orientado a desarrolladores, no se supone que funcione como una máquina virtual o un sustituto de Cygwin".
Lástima: parece que no será posible (o al menos, fácil) poder ejecutar aplicaciones en entornos como GNOME o KDE. Eso ya hubiera sido la puntilla, pero desde luego lo logrado por Microsoft es desde luego interesante e impensable hace pocos años, ¿no creéis?
En Xataka | Build 2016: todas las novedades de Microsoft