Linux desde Cero
Un curso de Linux para aprender todo lo necesario para administrar sistemas Linux, perfecto para programadores y administradores...
¿Necesitas ejecutar en programas Linux desde un sistema operativo Windows? En este artículo te explicamos cómo conseguirlo y cómo es su funcionamiento.
Recuerdo la primera vez que instalé Linux en mi portátil. Por entonces un Toshiba Tecra 8200 que sin ser el último modelo era lo suficientemente potente como para trabajar durante mis viajes de trabajo además de contar con un disco duro lo suficientemente grande como para no estar cargando con diskettes todo el rato. Tenía curiosidad de ver cómo se comportaba Linux en el sistema pero no podía permítirme prescindir de Windows XP. Así, mi primera experiencia verdadera fue como la de muchos, saltando de un sistema a otro seleccionando durante el inicio qué sistema quería usar.
Esto que parecía una buena idea pronto trajo otro problema. Había muchas cosas que me gustaba hacer con Linux que no podría hacer con Windows y viceversa. Había aplicaciones muy buenas en Linux, con mucho potencial, pero que no estaban suficientemente pulidas dando una experiencia de usuario bastante pobre. Pero otras hacían tareas con un nivel de desempeño años luz de lo que podía imaginarme posible en Windows.
En esa época donde las conversaciones en foros se resumían en una lucha Windows vs Linux, el arranque dual fue la respuesta durante mucho tiempo. Con el paso de los años, casi sin darme cuenta, ya estaba usando Linux de manera intensiva y mi transición estaba ya casi completa a falta de alguna aplicación rebelde que ejecutaba virtualizada en una máquina virtual o mediante WINE.
Mi actual trabajo, sin embargo, ha supuesto una vuelta a Windows pero no quiero dejar de lado todo lo que Linux me ha estado dando en estos años. No estoy diciendo que en mi empresa me obliguen a usar Windows también en casa, para nada. Pero necesito mover parte de mi flujo de trabajo de Linux a Windows pero sin cambiar de entorno. Suena a misión imposible pero antes de que este artículo se autodestruya en 5 segundos decir que es posible gracias a WSL.
A modo introducción Windows Subsystem for Linux (WSL) es una capa de compatibilidad desarrollada por Microsoft para correr ejecutables de Linux de forma nativa en Windows 10 y Windows Server 2019.
En su estrategia Microsoft siempre ha buscado alcanzar con sus productos a todo mercado posible. En muchas ocasiones en mercados en donde ya existían soluciones bien posicionadas en las que ofrecer cierta capa de compatibilidad era la única opción posible añadiendo un subsistema que permite el desarrollo de aplicaciones Win32 operar sin estar atados a los detalles técnicos de implementación a nivel de kernel.
Así, los primeros subsistemas se implementaron como módulos de modo de usuario que emitían llamadas al sistema NT apropiadas según la API que presentaban a las aplicaciones para ese subsistema. Esto permitió inicialmente que el kernel de NT admitiera los subsistemas POSIX, OS/2 y Win32. Posteriormente POSIX fue reemplazado más tarde por el subsistema para aplicaciones basadas en UNIX (SUA) para ofrecer un nivel de compatibilidad mayor dado que por aquel entonces era difícil lograr una paridad semántica y de rendimiento en las aplicaciones desarrolladas para diferentes sistemas.
Debido a esto, el modelo de desarrollo de aplicaciones se basaba en la necesidad de compilar los programas para cada versión y eso implicaba una carga de mantenimiento mayor y difícilmente asumible.
Pero estos subsistemas abrieron camino para permitir integrar nuevos entornos de subsistemas como por ejemplo el actual subsistema de Windows para Linux.
Una manera sencilla de explicar en qué consiste WSL es definir al subsistema que permite que los binarios ELF64 nativos de Linux se ejecuten en Windows. Este subsistema se compone principalmente de:
Servicio de administrador de sesiones de modo de usuario (LXSS) que maneja el ciclo de vida de la instancia Linux. Todos los procesos de Linux iniciados por un usuario en particular van a una instancia de Linux. Esa instancia es una estructura de datos que realiza un seguimiento de todos los procesos, subprocesos y estado de tiempo de ejecución.
Controladores de proveedor Pico (lxss.sys, lxcore.sys) que emulan un kernel de Linux traduciendo llamadas al sistema de Linux.
Procesos Pico que alojan el modo de usuario Linux sin modificar (por ejemplo, /bin/bash). Los procesos y controladores de Pico proporcionan la base para el subsistema de Windows para Linux, que ejecuta binarios de Linux nativos sin modificar mediante la carga de binarios ELF ejecutables.
Dicho de otro modo, el subsistema es el encargado de hacer “la magia” entre los binarios Linux y el Kernel de Windows. Cada llamada se dirige al kernel mediante los controladores lxss.sys y lxcore.sys que traducen las llamadas al sistema Linux en API NT y emulan el kernel de Linux, cómo instalar Linux en Windows.
En la actualidad WSL2 es la nueva versión de la arquitectura en WSL. Esta versión viene con varios cambios que dictan cómo interactúan las distribuciones de Linux con Windows.
Con esta versión, obtenemos no sólo un mayor rendimiento del sistema de archivos y si no también una compatibilidad total con las llamadas al sistema. Por supuesto podemos elegir qué versión usar pero WSL2 representa un cambio importante y utiliza una nueva tecnología de virtualización además de un kernel Linux para hacerse cargo de todas las tareas clave.
Microsoft promete una experiencia de instalación fluida en un futuro cercano para WSL2 e incluso posibilidad de actualizar el kernel de Linux a través de actualizaciones de Windows. Pero por el momento, el proceso de instalación es un poco más complicado pero nada aterrador. Así que “Don’t Panic” y pongamos las manos en la masa.
Antes de continuar, si no tienes claro qué es esto de Linux, te recomiendo seguir el siguiente artículo: Qué es Linux: Todo lo que necesitas saber
En este ejemplo, instalaremos Ubuntu 20.04 en Windows 10. El proceso será el mismo para cualquier distribución disponible en la tienda de Microsoft pero primero debemos habilitar la funcionalidad del Subsistema de Windows para Linux. Para lo que abriremos PowerShell como administrador y ejecutamos el siguiente comando:
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart
En el siguiente paso, actualizaremos nuestro sistema a WSL2. Para ello, Windows 10 debe actualizarse a la versión 2004 y la tecnología de virtualización de Intel debe estar habilitada en la configuración del BIOS:
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart
Tras esto reiniciamos nuestra máquina para completar la instalación. Luego, debemos configurar WSL 2 como nuestra versión predeterminada al instalar:
wsl —set-default-version 2
Nota*: Es posible que veas este mensaje después de ejecutar ese comando “WSL2 requiere una actualización de su componente de kernel. Para obtener información, visite esta web: https://aka.ms/wsl2kernel. En tal caso debemos seguir el enlace e instalar el MSI desde esa página para instalar un kernel de Linux en la máquina para que WSL2 lo use. Una vez que tenemos el kernel instalado, ejecutaremos el comando nuevamente y debería completarse exitosamente sin mostrar ahora el mensaje.*
Ahora sí, ya deberíamos poder instalar una distribución de Linux. Abrimos la tienda de aplicaciones Microsoft y buscamos Ubuntu 20.04 LTS. El proceso llevará unos minutos y tras finalizar deberías poder encontrar la “nueva aplicación” de Ubuntu en el menú de inicio. Y ya está ¡Linux ejecutándose dentro de Windows 10! ¿Quién lo podría imaginar hace tan solo unos años?
Pero podemos ir un poco más lejos. Ya que estamos aquí, vamos a utilizar WSL2 para instalar aquello que necesitemos. Por ejemplo, podemos instalar Angular y npm o Visual Studio Code y Docker + Kubernetes para trabajar en nuestros proyectos.
En la actualidad Visual Studio es uno de los IDE más populares en la actualidad. Ahora que tenemos WSL 2 habilitado, necesitaremos instalar una extensión Remote Development para VS Code para poder trabajar en remoto. Esta extensión posibilita la conexión a través de SSH a una máquina virtual o una imagen de contenedor, trabajar con su subsistema de archivos y trabajar así en nuestros proyectos desde Windows 10 y usar el editor de código de Visual Studio.
Para instalar esta extensión solo debemos abrir VS Code y presionar la combinación de teclas Ctrl+P. Esto abrirá un lanzador rápido en donde podemos pegar el siguiente comando:
ext install ms-vscode-remote.vscode-remote-extensionpack
Con Visual Studio Code además de todo lo necesario para trabajar con nuestro proyecto, integración con Git, función de autocompletado IntelliSense, etc. El siguiente paso será instalar y configurar Docker.
La versión de Docker para Windows es bueno pero debo reconocer que no es excelente. Al final y aunque no quisiera siempre había cosas que cambiar y acababa saltando de Windows a Ubuntu cada vez que necesitaba crear una imagen de Docker. Pero con WSL 2 encontramos una solución “perfecta” para trabajar con Docker dado que resuelve muchos de los problemas de esta versión.
Para habilitarlo, navegue a la configuración de su escritorio Docker y habilite la opción Usar el motor basado en WSL 2.
Tras reiniciar nuestro entorno Docker+Kubernetes para aplicar los cambios ya podemos operar con Ubuntu en WSL2. Ejecutando los comandos docker version o kubectl version podemos ver que todo se encuentra en orden y funcionando.
Y ya lo tenemos. Ahora ya podemos comenzar a trabajar en nuestros proyectos. Aunque quizá necesitamos pelearnos todavía un poco con la shell de Linux sobretodo si no estamos acostumbrados a trabajar en este entorno. Si tienes dudas te animaría a hacer el curso de Shell en Linux primero.
La idea de este artículo es mostrar un ejemplo del potencial que WSL ofrece para usuarios y desarrolladores. Si bien el subsistema todavía mantiene una curva de adaptación un poco pronunciada, en el futuro ejecutar todo tipo de software basado en Linux será una tarea sencilla de modo que pronto no será necesario disponer de un arranque dual en nuestros equipos y la frontera entre uno y otro sistema será cada vez más difusa.
También te puede interesar
Un curso de Linux para aprender todo lo necesario para administrar sistemas Linux, perfecto para programadores y administradores...
Descubre qué es el Shell Scripting en Windows, cómo utilizarlo y todo lo necesario par comenzar a aprovechar todas las ventajas que...