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 independiente 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 ) al implementar llamadas del 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 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 Linux completo. Como resultado, WSL 2 es compatible con más binarios de Linux que WSL 1, ya que no todas las llamadas del 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 en la consecución de compatibilidad tipo Unix en Windows comenzó con el Subsistema POSIX de Microsoft , 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 no publicado , que permitió que algunas aplicaciones de Android se ejecutaran en Windows 10 Mobile . [9] Se puso a disposición por primera vez en la compilación 14316 de Windows 10 Insider Preview . [10]
Mientras que los proyectos anteriores de Microsoft y Cygwin, de terceros, se habían centrado en crear sus propios entornos únicos similares a Unix basados en el estándar POSIX , WSL apunta a la compatibilidad nativa con Linux. En lugar de envolver funcionalidades no nativas en llamadas al sistema Win32 como lo hizo Cygwin, el diseño inicial de WSL (WSL 1) aprovechó el ejecutivo del núcleo NT para servir a los programas Linux como procesos mínimos especiales y aislados (conocidos como "picoprocesos" ) adjuntos a "picoproveedores" en modo núcleo como controladores de excepciones y llamadas al sistema dedicados distintos de los de un proceso NT tradicional, optando por reutilizar las implementaciones NT existentes siempre que fuera posible. [11]
La versión beta de WSL se introdujo en Windows 10 versión 1607 (Anniversary Update) el 2 de agosto de 2016. Solo se admitía Ubuntu (con Bash como shell predeterminado). La versión beta de WSL también se denominaba "Bash en Ubuntu en Windows" o "Bash en Windows". WSL ya no estaba en versión 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ó sus temores de que la integración de la funcionalidad de GNU en Windows solo obstaculizaría 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 UNIX en Windows anteriores, los ingenieros del kernel de Windows encontraron dificultades al intentar aumentar el rendimiento de WSL y la compatibilidad de llamadas al sistema al intentar remodelar el kernel NT existente para que reconociera y funcionara correctamente en la API de Linux . En una conferencia Microsoft Ignite en 2018, los ingenieros de Microsoft dieron una descripción general de alto nivel de una nueva tecnología de VM Hyper-V "liviana" para la contenedorización donde un kernel virtualizado podría hacer uso directo de las primitivas NT en el host. [14] En 2019, Microsoft anunció una arquitectura WSL completamente rediseñada (WSL 2) que usa esta tecnología de VM liviana que aloja imágenes de kernel Linux reales (personalizadas), afirmando una compatibilidad total con las 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 se incorporó a Windows 10 versión 1903 y 1909. [16]
La compatibilidad con GPU para que WSL 2 ejecute aprendizaje automático acelerado por GPU se introdujo en la compilación 20150 de Windows. [17] La compatibilidad con GUI para que WSL 2 ejecute aplicaciones Linux con interfaces gráficas de usuario (GUI) se introdujo en la compilación 21364 de Windows. [18] Ambos se incluyen en Windows 11.
En abril de 2021, Microsoft lanzó una compilación de prueba de Windows 10 que también incluye la capacidad de ejecutar aplicaciones de interfaz gráfica de usuario (GUI) de Linux usando WSL 2 y CBL-Mariner . [19] [18] El subsistema de Windows para GUI de Linux (WSLg) se lanzó oficialmente en la conferencia Microsoft Build 2021. Está incluido en la compilación 21364 de Windows 10 Insider o posterior. [20]
Microsoft presentó una versión de WSL en Microsoft Store el 11 de octubre de 2021 para Windows 11. [21] Alcanzó la versión 1.0.0 el 16 de noviembre de 2022 con soporte agregado 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 considera a 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), al mismo tiempo que permite a los usuarios usar 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 sobre ella, como Ubuntu , [23] [ 24] [25] [26] openSUSE , [27] SUSE Linux Enterprise Server , [28] [29] [12] Debian [30] y Kali Linux . [31] Dicho espacio de usuario podría contener un shell GNU Bash y un lenguaje de comandos, con herramientas de línea de comandos GNU nativas ( sed , awk , etc.), intérpretes de lenguaje 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 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 binarios de Linux desde el Símbolo del sistema de Windows o Windows PowerShell . [33] wsl.exe
reemplaza lxrun.exe
a que está obsoleto a partir de Windows 10 1803 y versiones posteriores. [34]
El subsistema de Windows para la GUI de Linux (WSLg) se creó con el propósito de habilitar el soporte para ejecutar aplicaciones GUI de Linux (X11 y Wayland ) en Windows en una experiencia de escritorio completamente integrada. [35] WSLg se lanzó oficialmente en la conferencia Microsoft Build 2021 y está incluido en la compilación 21364 o posterior de Windows 10 Insider. [20] Sin embargo, con la introducción de Windows 11 , WSLg finalmente se envía con una compilación de producción de Windows, brindando soporte tanto para gráficos como para audio en aplicaciones WSL. [36] FreeRDP se utiliza para codificar todas las comunicaciones que van desde el servidor de 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:
El servicio LXSS Manager es el servicio encargado de interactuar con el subsistema (a través de los drivers lxss.sys
y lxcore.sys
), y la forma en que Bash.exe (no confundir con los Shells provistos por las distribuciones Linux) lanza los procesos, así como de manejar las llamadas al sistema Linux y los bloqueos binarios durante su ejecución. [40] Todos los procesos invocados por un usuario en particular van a una llamada "Instancia Linux" (usualmente el primer proceso invocado es init ). Una vez que todas las aplicaciones están cerradas, la instancia se cierra.
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. Los servidores web, por ejemplo, pueden accederse a través de las mismas interfaces y direcciones IP configuradas en el host, y comparte las mismas restricciones en 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 lanzar una instancia con privilegios elevados para lograr que "sudo" otorgue privilegios de administrador y permita dicho acceso. [22]
WSL 1 no es capaz de ejecutar todo el software de Linux, como binarios de 32 bits, [43] [44] o aquellos que requieren servicios específicos del kernel de Linux no implementados en WSL. Debido a una falta total de Linux en WSL 1, los módulos del kernel, como los controladores de dispositivos, no se pueden ejecutar. WSL 2, sin embargo, hace uso de 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 remediar instalando PulseAudio en Windows de manera similar a X11) o aceleración de hardware (que resulta en un rendimiento gráfico deficiente). El soporte para OpenCL y CUDA tampoco se está implementando actualmente, aunque está planeado 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 benchmarks, 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 WSL 1. [7] En junio de 2020, un benchmark con 173 pruebas en WSL 2 (20H2) con un AMD Ryzen Threadripper 3970X mostró un promedio del 87% del rendimiento de Ubuntu 20.04 LTS nativo. Por el contrario, WSL 1 tuvo solo el 70% del rendimiento de Ubuntu nativo. WSL 2 mejora el rendimiento de E/S, proporcionando un nivel cercano al nativo. [51] Una comparación de 69 pruebas con un Intel Core i9-10900K en mayo de 2020 dio como resultado casi el mismo rendimiento relativo. [52] En diciembre de 2020, un benchmark con 43 pruebas en WSL 2 (20H2) con un AMD Ryzen 9 5900X mostró un promedio del 93% del rendimiento de 20.04.1 LTS nativo, en comparación con WSL 1 que solo logró el 73%. [53]
La versión 2 introduce cambios en la arquitectura. Microsoft ha optado por la virtualización a través de un subconjunto altamente optimizado de características de Hyper-V, con el fin de ejecutar el núcleo y las distribuciones (basadas en el núcleo), prometiendo un rendimiento equivalente a WSL 1. Para la compatibilidad con versiones anteriores , los desarrolladores no necesitan cambiar nada en sus distribuciones publicadas. La configuración de WSL 2 se puede ajustar mediante la configuración global de WSL , contenida en un archivo INI nombrado .wslconfig
en la carpeta User Profile . [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 el sistema de archivos del host es accesible de forma transparente 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 de 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 una versión más reciente. [62]
{{cite web}}
: CS1 maint: nombres numéricos: lista de autores ( enlace )hemos agregado 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 con WSL.