El Subsistema de Windows para Linux ( WSL ) es una característica de Microsoft Windows que permite a los desarrolladores ejecutar un entorno Linux sin la necesidad de una máquina virtual separada o arranque dual . Hay dos versiones de WSL: WSL 1 y WSL 2. WSL no está disponible para todos los usuarios de Windows 10 de forma predeterminada. Se puede instalar uniéndose al programa Windows Insider o manualmente a través de Microsoft Store o Winget . [3]
WSL 1 se lanzó por primera vez el 2 de agosto de 2016 y actuó como una capa de compatibilidad para ejecutar ejecutables binarios de Linux (en formato ELF ) mediante la implementación de llamadas al sistema Linux en el kernel de Windows . [4] Está disponible en Windows 10 , Windows 10 LTSB/LTSC, Windows 11 , [5] Windows Server 2016 , Windows Server 2019 y Windows Server 2022 .
En mayo de 2019, se anunció WSL 2, [6] introduciendo cambios importantes como un kernel de Linux real , [7] a través de un subconjunto de características de Hyper-V . WSL 2 se diferencia de WSL 1 en que WSL 2 se ejecuta dentro de una máquina virtual administrada que implementa el kernel de Linux completo. Como resultado, WSL 2 es compatible con más archivos binarios de Linux que WSL 1, ya que no todas las llamadas al sistema se implementaron en WSL 1. Desde junio de 2019, WSL 2 está disponible para los clientes de Windows 10 a través del programa Windows Insider , incluida la edición Home. [8]
La primera incursión de Microsoft para lograr una compatibilidad similar a Unix en Windows comenzó con el subsistema Microsoft POSIX , reemplazado por los servicios de Windows para UNIX a través de MKS / Interix , que finalmente quedó obsoleto con el lanzamiento de Windows 8.1 . La tecnología detrás del Subsistema de Windows para Linux se originó en el Proyecto Astoria inédito , que permitió que algunas aplicaciones de Android se ejecutaran en Windows 10 Mobile . [9] Estuvo disponible por primera vez en Windows 10 Insider Preview compilación 14316. [10]
Mientras que los proyectos anteriores de Microsoft y Cygwin de terceros se habían centrado en crear sus propios entornos únicos tipo Unix basados en el estándar POSIX , WSL apunta a la compatibilidad nativa con Linux. En lugar de incluir funciones no nativas en llamadas al sistema Win32 como lo hizo Cygwin, el diseño inicial de WSL (WSL 1) aprovechó el ejecutivo del kernel NT para servir programas de Linux como procesos mínimos especiales y aislados (conocidos como "procesos pico" ) adjuntos al modo kernel . pico proveedores" como controladores de excepciones y llamadas al sistema dedicados distintos de los de un proceso NT estándar, optando por reutilizar implementaciones NT existentes siempre que sea posible. [11]
WSL beta se introdujo en Windows 10 versión 1607 (Actualización de aniversario) el 2 de agosto de 2016. Solo se admitía Ubuntu (con Bash como shell predeterminado). WSL beta también se llamó "Bash en Ubuntu en Windows" o "Bash en Windows". WSL ya no era beta en Windows 10 versión 1709 (Fall Creators Update), lanzada el 17 de octubre de 2017. Se podían instalar varias distribuciones de Linux y estaban disponibles para su instalación en la Tienda Windows . [12]
En 2017, Richard Stallman expresó su temor de que la integración de la funcionalidad de Linux en Windows solo obstaculice el desarrollo de software libre , y calificó esfuerzos como WSL como "un paso atrás en la campaña por la libertad". [13]
Aunque WSL (a través de este diseño inicial) era mucho más rápido y posiblemente mucho más popular que los proyectos anteriores de UNIX en Windows, los ingenieros del kernel de Windows encontraron dificultades al intentar aumentar el rendimiento de WSL y la compatibilidad con las llamadas al sistema al intentar remodelar el kernel NT existente para reconocer y operar correctamente en la API de Linux . En una conferencia de Microsoft Ignite en 2018, los ingenieros de Microsoft ofrecieron una descripción general de alto nivel de una nueva tecnología "ligera" de VM Hyper-V para la contenedorización donde un kernel virtualizado podría hacer uso directo de primitivas NT en el host. [14] En 2019, Microsoft anunció una arquitectura WSL completamente rediseñada (WSL 2) que utiliza esta tecnología de VM liviana que aloja imágenes reales (personalizadas) del kernel de Linux, alegando compatibilidad total con llamadas al sistema. [7] Microsoft anunció WSL 2 el 6 de mayo de 2019, [6] y se envió con Windows 10 versión 2004. [15] También fue compatible con Windows 10 versión 1903 y 1909. [16]
La compatibilidad con GPU para WSL 2 para ejecutar aprendizaje automático acelerado por GPU se introdujo en la compilación 20150 de Windows. [17] La compatibilidad con GUI para WSL 2 para ejecutar aplicaciones Linux con interfaces gráficas de usuario (GUI) se introdujo en la compilación 21364 de Windows. [18] Ambos se envían en Windows 11.
En abril de 2021, Microsoft lanzó una versión de prueba de Windows 10 que también incluye la capacidad de ejecutar aplicaciones de interfaz gráfica de usuario (GUI) de Linux utilizando WSL 2 y CBL-Mariner . [19] [18] La GUI del subsistema de Windows para Linux (WSLg) se lanzó oficialmente en la conferencia Microsoft Build 2021 . Está incluido en Windows 10 Insider build 21364 o posterior. [20]
Microsoft presentó una versión de WSL en Microsoft Store el 11 de octubre de 2021 para Windows 11. [21] Llegó a la versión 1.0.0 el 16 de noviembre de 2022 con soporte adicional para Windows 10.
WSL está disponible en Windows Server 2019 y en versiones de Windows 10 a partir de la versión 1607, aunque solo en versiones de 64 bits .
Microsoft concibe WSL como "principalmente una herramienta para desarrolladores, especialmente desarrolladores web y aquellos que trabajan en o con proyectos de código abierto". [22] En septiembre de 2018, Microsoft dijo que "WSL requiere menos recursos (CPU, memoria y almacenamiento) que una máquina virtual completa" (que antes de WSL era la forma más directa de ejecutar software Linux en un entorno Windows), mientras que También permite a los usuarios utilizar aplicaciones de Windows y herramientas de Linux en el mismo conjunto de archivos. [22]
La primera versión de WSL proporciona una interfaz de kernel compatible con Linux desarrollada por Microsoft, que no contiene código de kernel de Linux , que luego puede ejecutar el espacio de usuario de una distribución de Linux encima, como Ubuntu , [23] [24] [25 ] [26] openSUSE , [27] SUSE Linux Enterprise Server , [28] [29] [12] Debian [30] y Kali Linux . [31] Un espacio de usuario de este tipo podría contener un shell GNU Bash y un lenguaje de comandos, con herramientas nativas de línea de comandos GNU ( sed , awk , etc.), intérpretes de lenguajes de programación ( Ruby , Python , etc.) e incluso aplicaciones gráficas. (usando un servidor X11 en el lado del host). [22]
La arquitectura fue rediseñada en WSL 2, [6] con un kernel de Linux ejecutándose en un entorno de máquina virtual liviano .
El wsl.exe
comando se utiliza para administrar distribuciones en el subsistema de Windows para Linux en la línea de comandos . Puede enumerar las distribuciones disponibles, establecer una distribución predeterminada y desinstalar distribuciones. [32] El comando también se puede utilizar para ejecutar archivos binarios de Linux desde el símbolo del sistema de Windows o Windows PowerShell . [33] wsl.exe
reemplaza lxrun.exe
el que está en desuso a partir de Windows 10 1803 y posteriores. [34]
El subsistema de Windows para Linux GUI (WSLg) está creado con el propósito de permitir la compatibilidad con la ejecución de aplicaciones GUI de Linux (X11 y Wayland ) en Windows en una experiencia de escritorio totalmente integrada. [35] WSLg se lanzó oficialmente en la conferencia Microsoft Build 2021 y se incluye en Windows 10 Insider build 21364 o posterior. [20] Sin embargo, con la introducción de Windows 11 , WSLg finalmente se envía con una versión de producción de Windows, brindando soporte para gráficos y audio en aplicaciones WSL. [36] FreeRDP se utiliza para codificar todas las comunicaciones que van desde el servidor del Protocolo de escritorio remoto (RDP) (en Weston) al cliente RDP ( msrdc en Windows [37] ) de acuerdo con las especificaciones del protocolo RDP. [38]
Los requisitos previos para ejecutar WSLg incluyen:
LXSS Manager Service es el servicio encargado de interactuar con el subsistema (a través de los controladores lxss.sys
y lxcore.sys
), y la forma en que Bash.exe (no confundir con los Shells proporcionados por las distribuciones de Linux) lanza los procesos de Linux, así como también maneja las llamadas del sistema Linux y los bloqueos binarios durante su ejecución. [40] Todos los procesos de Linux invocados por un usuario en particular van a una "Instancia de Linux" (generalmente el primer proceso invocado es init ). Una vez cerradas todas las aplicaciones, se cierra la instancia.
El diseño de WSL 1 no presenta emulación/virtualización de hardware (a diferencia de otros proyectos como coLinux) y hace uso directo del sistema de archivos del host (a través de VolFS
y DrvFS
) [41] y algunas partes del hardware, como la red, lo que garantiza la interoperabilidad. Se puede acceder a los servidores web, por ejemplo, a través de las mismas interfaces y direcciones IP configuradas en el host, y comparten las mismas restricciones sobre el uso de puertos que requieren permisos administrativos o puertos ya ocupados por otras aplicaciones. [42] Hay ciertas ubicaciones (como carpetas del sistema) y configuraciones cuyo acceso/modificación está restringido, incluso cuando se ejecuta como root, con sudo desde el shell. Se debe iniciar una instancia con privilegios elevados para que "sudo" otorgue privilegios de root reales y permita dicho acceso. [22]
WSL 1 no es capaz de ejecutar todo el software de Linux, como los binarios de 32 bits, [43] [44] o aquellos que requieren servicios específicos del kernel de Linux no implementados en WSL. Debido a la falta de un kernel de Linux "real" en WSL 1, los módulos del kernel, como los controladores de dispositivos, no se pueden ejecutar. WSL 2, sin embargo, utiliza instancias de kernel de Linux virtualizadas en vivo. Es posible ejecutar algunas aplicaciones gráficas (GUI) (como Mozilla Firefox ) instalando un servidor X11 dentro del entorno Windows (host) (como VcXsrv o Xming ), [45] aunque no sin salvedades, como la falta de soporte de audio (aunque esto se puede solucionar instalando PulseAudio en Windows de manera similar a X11) o aceleración de hardware (lo que resulta en un rendimiento gráfico deficiente). Actualmente tampoco se está implementando soporte para OpenCL y CUDA , aunque está previsto para futuras versiones. [46] [47] Microsoft afirmó que WSL fue diseñado para el desarrollo de aplicaciones, y no para computadoras de escritorio o servidores de producción , recomendando el uso de máquinas virtuales ( Hyper-V ), Kubernetes y Azure para esos fines. [22]
En los puntos de referencia, el rendimiento de WSL 1 suele estar cerca del Linux nativo Ubuntu, Debian, Intel Clear Linux u otras distribuciones de Linux. En algunas pruebas, la E/S es un cuello de botella para WSL. [48] [49] [50] Microsoft afirma que el backend rediseñado de WSL 2 ofrece veinte veces más velocidad en ciertas operaciones en comparación con el de WSL 1. [7] En junio de 2020, un punto de referencia con 173 pruebas con un AMD Threadripper 3970x muestra un buen rendimiento con WSL 2 (20H2) con un 87% del rendimiento del Ubuntu 20.04.0 LTS nativo. Esta es una mejora con respecto a WSL 1, que tiene sólo el 70% del rendimiento del Ubuntu nativo en esta comparación. WSL 2 mejora el rendimiento de E/S, proporcionando un nivel casi nativo. [51] Una comparación de 69 pruebas con Intel i9 10900K en mayo de 2020 muestra casi el mismo rendimiento relativo. [52] En diciembre de 2020, un benchmark con 43 pruebas con un AMD Ryzen 5900X muestra un buen rendimiento con WSL 2 (20H2) con un 93% del rendimiento del 20.04.1 LTS nativo. Esta es una mejora con respecto a WSL 1, que solo tiene un 73% en esta comparación. [53]
La versión 2 introduce cambios en la arquitectura y el cronograma de programación. Microsoft ha optado por la virtualización a través de un subconjunto altamente optimizado de características de Hyper-V, para poder ejecutar el kernel y las distribuciones (basadas en el kernel), prometiendo un rendimiento equivalente a WSL 1. Para compatibilidad con versiones anteriores , los desarrolladores no necesitan cambiar nada en sus distribuciones publicadas. La configuración de WSL 2 se puede modificar mediante la configuración global de WSL , contenida en un archivo INI denominado .wslconfig
en la carpeta Perfil de usuario . [54] [55]
La instalación de la distribución reside dentro de un sistema de archivos con formato ext4 dentro de un disco virtual , y se puede acceder de forma transparente al sistema de archivos host a través del protocolo 9P , [56] de manera similar a otras tecnologías de máquinas virtuales como QEMU . [57] Para los usuarios, Microsoft prometió hasta 20 veces el rendimiento de lectura/escritura de WSL 1. [6] Desde Windows se proporciona un redirector de red IFS para el acceso a archivos invitados de Linux utilizando el prefijo de ruta UNC de .\\wsl$
WSL 2 requiere Windows 11, [58] o Windows 10 versión 1903 o superior, con compilación 18362 o superior, para sistemas x64, y versión 2004 o superior, con compilación 19041 o superior, para sistemas ARM64. [3]
WSL 2 en Windows 11 conserva el 95% del rendimiento del Ubuntu 20.04 LTS nativo. [59]
WSL 1 no admite conexiones IPv6, mientras que WSL 2 sí. [60] [61] La compatibilidad con IPv6 en WSL 2 requiere Windows 11 o posterior. [62]
{{cite web}}
: Mantenimiento CS1: nombres numéricos: lista de autores ( enlace )En esta nueva actualización, agregamos la capacidad de comenzar a usar opciones de configuración global para WSL. Estas opciones están dirigidas a usuarios avanzados que desean personalizar aún más su experiencia WSL.