ARQUITECTURA WSL2 Windows 10/11 Host (NT Kernel + Hyper-V) VM Ligera (Kernel Linux Real 5.15+) Ubuntu 24.04 apt, bash, git Debian 12 Node.js, Python Docker Engine Containers VS Code Remote-WSL Multiples distribuciones Linux comparten una unica VM ligera con soporte completo de kernel

Windows Subsystem for Linux 2 (WSL2) ha cambiado fundamentalmente la forma en que los desarrolladores trabajan en Windows. En lugar de hacer dual boot, ejecutar maquinas virtuales pesadas o luchar con capas de compatibilidad, ahora puedes ejecutar un entorno Linux completo de forma nativa junto a Windows con rendimiento casi nativo. Ya sea que escribas Node.js, Python, Go, Rust o cualquier otro lenguaje, WSL2 te ofrece herramientas Linux genuinas sin salir de tu escritorio Windows.

Esta guia te lleva a traves de todo lo que necesitas para configurar un entorno de desarrollo Linux de nivel profesional en Windows usando WSL2. Cubriremos la instalacion, configuracion de Ubuntu, configuracion de Windows Terminal, integracion con Docker, desarrollo remoto con VS Code, mejores practicas del sistema de archivos, redes, soporte GPU y gestion de multiples distribuciones.

Requisitos Previos

Antes de comenzar, asegurate de tener:

  • Windows 10 version 2004 (build 19041) o posterior, o Windows 11
  • Al menos 8 GB de RAM (16 GB recomendados para cargas de trabajo con Docker)
  • Virtualizacion habilitada en tu BIOS/UEFI (Intel VT-x o AMD-V)
  • Una conexion a internet para descargar distribuciones
  • PowerShell o Windows Terminal con privilegios de Administrador

Nota: Si estas ejecutando Windows 10, asegurate de que todas las actualizaciones de Windows esten instaladas. Las compilaciones mas antiguas pueden tener soporte parcial de WSL2 con errores conocidos. Windows 11 proporciona la mejor experiencia con WSL2, incluyendo soporte para systemd y renderizado nativo de aplicaciones GUI de Linux.

Que Es WSL2?

WSL2 (Windows Subsystem for Linux version 2) es una capa de compatibilidad integrada en Windows que te permite ejecutar ejecutables binarios de Linux de forma nativa. A diferencia de WSL1, que traducia las llamadas al sistema Linux en llamadas al kernel de Windows NT, WSL2 ejecuta un kernel Linux real dentro de una maquina virtual ligera Hyper-V.

Caracteristicas clave de WSL2:

  • Kernel Linux real: WSL2 incluye un kernel Linux mantenido por Microsoft (basado en el kernel 5.15+ a partir de 2025) que recibe actualizaciones regulares a traves de Windows Update.
  • Compatibilidad total con llamadas al sistema: Al ejecutar un kernel genuino, WSL2 soporta herramientas como Docker, systemd, sistemas de archivos FUSE y eBPF que WSL1 no podia manejar.
  • Ligero: La maquina virtual se inicia en aproximadamente un segundo y consume recursos minimos cuando esta inactiva.
  • Integracion estrecha con Windows: Puedes llamar ejecutables de Windows desde Linux, acceder a archivos de Windows desde Linux (y viceversa), y usar redes localhost entre ambos sistemas.
# Check your current WSL version
wsl --version

WSL1 vs WSL2

Entender las diferencias te ayuda a elegir la version correcta para tu flujo de trabajo:

CaracteristicaWSL1WSL2
ArquitecturaCapa de traduccionVM ligera con kernel real
Kernel LinuxNinguno (traduccion de syscalls)Kernel Linux completo
Rendimiento del sistema de archivos (archivos Linux)ModeradoVelocidad nativa ext4
Rendimiento del sistema de archivos (archivos Windows)Rapido (acceso NTFS directo)Mas lento (protocolo 9P)
Compatibilidad con llamadas al sistemaParcial (~70%)Completa (100%)
Soporte DockerNoSi
Soporte systemdNoSi (Windows 11)
Uso de memoriaMenorDinamico (crece/decrece)
Tiempo de arranqueInstantaneo~1 segundo
RedesComparte la pila de red de WindowsAdaptador ethernet virtual

Para la mayoria de los desarrolladores, WSL2 es la opcion correcta. El unico escenario donde WSL1 podria ser preferible es cuando necesitas acceder intensivamente a archivos almacenados en la particion NTFS de Windows, ya que WSL1 tiene un acceso mas rapido a archivos entre sistemas operativos.

Instalacion de WSL2 y Ubuntu

Microsoft ha simplificado significativamente el proceso de instalacion. En compilaciones modernas de Windows, un solo comando maneja todo:

Instalacion simplificada (recomendada)

Abre PowerShell como Administrador y ejecuta:

wsl --install

Este comando habilita las funciones de Windows requeridas (Plataforma de Maquina Virtual y Subsistema de Windows para Linux), descarga el ultimo kernel Linux de WSL2, establece WSL2 como predeterminado e instala Ubuntu.

Reinicia tu computadora cuando se te solicite:

# After restart, Ubuntu will launch automatically for first-time setup
# You will be prompted to create a UNIX username and password

Instalacion manual (compilaciones antiguas de Windows)

Si wsl --install no esta disponible, habilita las funciones manualmente:

# Enable WSL feature
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestart

# Enable Virtual Machine Platform
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestart

# Restart your computer, then set WSL2 as default
wsl --set-default-version 2

Instalar una distribucion especifica

Puedes elegir entre varias distribuciones:

# List all available distributions
wsl --list --online

# Install a specific distribution
wsl --install -d Ubuntu-24.04

# Other popular options:
# wsl --install -d Debian
# wsl --install -d openSUSE-Tumbleweed
# wsl --install -d kali-linux

Configuracion Inicial de Ubuntu

Despues de que tu distribucion Ubuntu se ejecute por primera vez y crees tu cuenta de usuario, realiza estos pasos esenciales de configuracion:

Actualizar el sistema

sudo apt update && sudo apt upgrade -y

Instalar herramientas esenciales de desarrollo

sudo apt install -y build-essential git curl wget unzip zip \
  software-properties-common apt-transport-https \
  ca-certificates gnupg lsb-release

Configurar Git

git config --global user.name "Your Name"
git config --global user.email "your.email@example.com"
git config --global init.defaultBranch main
git config --global core.autocrlf input

Importante: Configurar core.autocrlf como input asegura que Git convierta los finales de linea de estilo Windows (CRLF) a estilo Unix (LF) al hacer commit pero deje los finales LF intactos al hacer checkout. Esto previene problemas de finales de linea al compartir codigo entre herramientas de Windows y Linux.

Generar claves SSH

ssh-keygen -t ed25519 -C "your.email@example.com"
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/id_ed25519

# Display the public key to add to GitHub/GitLab
cat ~/.ssh/id_ed25519.pub

Configurar un prompt de shell mejorado (opcional)

Muchos desarrolladores prefieren Zsh con Oh My Zsh para una experiencia de terminal mas productiva:

sudo apt install -y zsh
sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"

Configuracion de Windows Terminal

Windows Terminal es la aplicacion de terminal recomendada para WSL2. Soporta multiples pestanas, paneles divididos, renderizado de texto acelerado por GPU y personalizacion profunda.

Instalacion

Instala Windows Terminal desde la Microsoft Store o mediante winget:

winget install --id Microsoft.WindowsTerminal -e

Configurar Ubuntu como el perfil predeterminado

Abre la configuracion de Windows Terminal (Ctrl+,) y establece tu perfil de Ubuntu como predeterminado. En el archivo settings.json, tambien puedes personalizar la apariencia:

{
  "defaultProfile": "{YOUR-UBUNTU-GUID}",
  "profiles": {
    "list": [
      {
        "name": "Ubuntu",
        "source": "Windows.Terminal.Wsl",
        "startingDirectory": "//wsl$/Ubuntu/home/yourusername",
        "fontFace": "CascadiaCode NF",
        "fontSize": 11,
        "colorScheme": "One Half Dark",
        "cursorShape": "filledBox"
      }
    ]
  }
}

Atajos de teclado utiles

AtajoAccion
Ctrl+Shift+TNueva pestana
Ctrl+Shift+DDuplicar panel
Alt+Shift+DDividir panel
Ctrl+TabCambiar pestanas
Ctrl+Shift+WCerrar panel

Mejores Practicas del Sistema de Archivos

Entender el rendimiento del sistema de archivos en WSL2 es critico para un flujo de trabajo productivo. Esta es una de las fuentes mas comunes de confusion y frustracion para nuevos usuarios de WSL2.

La regla de oro

Almacena los archivos de tu proyecto dentro del sistema de archivos Linux, no en la unidad de Windows.

# FAST: Files in your Linux home directory
# Path: ~/projects/my-app
# Actual location: ext4 file system inside WSL2 VM
cd ~/projects/my-app
time git status  # ~0.1 seconds

# SLOW: Files on the Windows drive accessed from WSL2
# Path: /mnt/c/Users/yourname/projects/my-app
# Crosses the 9P protocol bridge on every file operation
cd /mnt/c/Users/yourname/projects/my-app
time git status  # ~2-5 seconds (10-50x slower)

Por que existe la diferencia de rendimiento

WSL2 se ejecuta dentro de una VM ligera con su propio sistema de archivos ext4. Acceder a archivos en la particion NTFS de Windows requiere cruzar el limite de la VM usando el protocolo 9P, lo que agrega latencia a cada operacion de archivo. Para una carpeta node_modules con miles de archivos pequenos, esta sobrecarga se vuelve dramatica.

Acceder a archivos entre los dos sistemas

Aunque deberias almacenar proyectos en el lado Linux, puedes acceder a archivos desde ambos sistemas:

# From WSL2, access Windows files
ls /mnt/c/Users/yourname/Documents

# From Windows Explorer, access Linux files
# Type this in the Explorer address bar:
# \\wsl$\Ubuntu\home\yourusername\projects
# From PowerShell, access Linux files
explorer.exe \\wsl$\Ubuntu\home\yourusername

Estructura de directorios recomendada

mkdir -p ~/projects ~/tools ~/scripts
# Keep all development work under ~/projects
# Keep downloaded tools under ~/tools
# Keep automation scripts under ~/scripts

Integracion de Docker Desktop con WSL2

Docker Desktop para Windows usa WSL2 como su backend, proporcionando rendimiento nativo de contenedores Linux sin la sobrecarga de una VM Hyper-V tradicional.

Instalacion

  1. Descarga e instala Docker Desktop para Windows.
  2. Durante la instalacion, asegurate de que “Use WSL 2 instead of Hyper-V” este seleccionado.
  3. Despues de la instalacion, abre la configuracion de Docker Desktop y navega a Resources > WSL Integration.
  4. Habilita la integracion con tu distribucion Ubuntu.

Verificar la instalacion

Desde tu terminal Ubuntu en WSL2:

docker --version
docker compose version
docker run hello-world

Gestion de recursos

Docker Desktop con WSL2 puede consumir memoria significativa. Configura limites en ~/.wslconfig en el lado de Windows:

# Create/edit C:\Users\yourname\.wslconfig
[wsl2]
memory=8GB
processors=4
swap=2GB

Despues de modificar .wslconfig, reinicia WSL2:

wsl --shutdown

Ejecutar contenedores

Como Docker se ejecuta dentro de la VM de WSL2, obtienes rendimiento completo de contenedores Linux:

# Run an Nginx container
docker run -d -p 8080:80 --name webserver nginx

# Access it from both WSL2 and Windows browser at http://localhost:8080

# Run a development database
docker run -d -p 5432:5432 \
  -e POSTGRES_PASSWORD=devpassword \
  --name devdb postgres:16

# Use Docker Compose for multi-container setups
docker compose up -d

Para una guia completa de instalacion de Docker en Ubuntu, consulta nuestro articulo sobre Como Instalar Docker en Ubuntu.

Extension VS Code Remote - WSL

La extension Remote - WSL de Visual Studio Code te permite usar VS Code en Windows mientras ejecutas todas las herramientas, terminales y extensiones dentro de WSL2. Esta es la forma recomendada de editar codigo almacenado en el sistema de archivos Linux.

Configuracion

  1. Instala Visual Studio Code en Windows (no dentro de WSL2).
  2. Instala la extension WSL (identificador: ms-vscode-remote.remote-wsl).
  3. Abre una terminal WSL2 y navega a tu directorio de proyecto.
  4. Ejecuta VS Code desde la terminal:
cd ~/projects/my-app
code .

VS Code instalara su componente servidor dentro de WSL2 automaticamente y se conectara a el. Veras “WSL: Ubuntu” en la esquina inferior izquierda de VS Code, confirmando que estas ejecutando en modo remoto.

Beneficios clave

  • Las extensiones se ejecutan dentro de WSL2: Los servidores de lenguaje, linters, depuradores y formateadores se ejecutan en el entorno Linux, eliminando problemas de compatibilidad entre sistemas operativos.
  • La terminal es un shell Linux real: La terminal integrada es tu bash/zsh de WSL2, no PowerShell.
  • La observacion de archivos funciona nativamente: El hot-reload para frameworks como React, Vue y Next.js funciona sin configuracion adicional porque el observador de archivos opera en el sistema de archivos Linux.
  • La integracion Git usa Git de Linux: VS Code usa el binario Git dentro de WSL2, evitando problemas de finales de linea y rutas.

Extensiones recomendadas para desarrollo en WSL2

Instala estas extensiones dentro del entorno WSL2 (apareceran bajo “WSL: Ubuntu - Installed”):

# From inside WSL2 terminal
code --install-extension dbaeumer.vscode-eslint
code --install-extension esbenp.prettier-vscode
code --install-extension ms-python.python
code --install-extension golang.go
code --install-extension bradlc.vscode-tailwindcss

Redes Entre Windows y WSL2

Las redes de WSL2 han evolucionado significativamente. En compilaciones modernas de Windows 11 con WSL2 2.0+, las redes usan modo espejo por defecto, lo que simplifica la mayoria de los escenarios de conectividad.

Acceder a servicios de WSL2 desde Windows

Por defecto, los servicios ejecutandose dentro de WSL2 son accesibles desde Windows via localhost:

# Start a development server in WSL2
python3 -m http.server 3000

# Access it from Windows browser: http://localhost:3000

Acceder a servicios de Windows desde WSL2

Puedes alcanzar los servicios de Windows desde WSL2 usando localhost tambien (modo espejo en Windows 11), o usar la IP del host Windows:

# Find the Windows host IP (useful for older builds)
cat /etc/resolv.conf | grep nameserver
# Output example: nameserver 172.28.80.1

# Or use the hostname
ping "$(hostname).local"

Configurar redes en modo espejo (Windows 11)

Agrega a tu archivo .wslconfig en Windows:

# C:\Users\yourname\.wslconfig
[wsl2]
networkingMode=mirrored
dnsTunneling=true
autoProxy=true

Redireccion de puertos para acceso externo

Si necesitas que dispositivos externos accedan a servicios ejecutandose en WSL2:

# Forward port 3000 from Windows to WSL2 (run as Administrator)
netsh interface portproxy add v4tov4 listenport=3000 listenaddress=0.0.0.0 connectport=3000 connectaddress=localhost

# Remove the forwarding rule when no longer needed
netsh interface portproxy delete v4tov4 listenport=3000 listenaddress=0.0.0.0

# List all forwarding rules
netsh interface portproxy show v4tov4

Soporte GPU y CUDA

WSL2 soporta passthrough de GPU, permitiendote ejecutar cargas de trabajo CUDA, frameworks de aprendizaje automatico e incluso aplicaciones graficas de Linux directamente.

Requisitos previos

  • Una GPU NVIDIA con un controlador reciente de Windows (Game Ready o Studio driver 470.76+)
  • Windows 11 o Windows 10 build 21H2+

Verificar acceso a la GPU

# Check if the GPU is visible
nvidia-smi

# You should see your GPU model, driver version, and CUDA version

Instalar CUDA Toolkit dentro de WSL2

# Do NOT install a Linux NVIDIA driver inside WSL2 -- use the Windows driver
# Only install the CUDA toolkit

wget https://developer.download.nvidia.com/compute/cuda/repos/wsl-ubuntu/x86_64/cuda-keyring_1.1-1_all.deb
sudo dpkg -i cuda-keyring_1.1-1_all.deb
sudo apt update
sudo apt install -y cuda-toolkit

Probar con PyTorch

pip install torch torchvision
python3 -c "import torch; print(f'CUDA available: {torch.cuda.is_available()}'); print(f'Device: {torch.cuda.get_device_name(0)}')"

Importante: Nunca instales un controlador de pantalla NVIDIA de Linux dentro de WSL2. El controlador GPU de Windows maneja el passthrough de GPU. Instalar un controlador de Linux causara conflictos.

Gestion de Multiples Distribuciones

WSL2 te permite ejecutar multiples distribuciones Linux simultaneamente, lo cual es util para probar en diferentes entornos o aislar cargas de trabajo.

Instalar distribuciones adicionales

# List available distributions
wsl --list --online

# Install additional distributions
wsl --install -d Debian
wsl --install -d Ubuntu-22.04

Cambiar entre distribuciones

# List installed distributions and their status
wsl --list --verbose

# Launch a specific distribution
wsl -d Debian

# Set a default distribution
wsl --set-default Ubuntu-24.04

Exportar e importar distribuciones

Esto es util para crear respaldos o compartir entornos preconfigurados con tu equipo:

# Export a distribution to a tar file
wsl --export Ubuntu-24.04 D:\backups\ubuntu-24.04-backup.tar

# Import a distribution from a tar file
wsl --import MyCustomUbuntu D:\wsl\MyCustomUbuntu D:\backups\ubuntu-24.04-backup.tar

# Launch the imported distribution
wsl -d MyCustomUbuntu

Eliminar una distribucion

# Unregister and delete a distribution (WARNING: destroys all data)
wsl --unregister Debian

Referencia de Comandos WSL

Aqui tienes una tabla de referencia completa de los comandos WSL mas importantes:

ComandoDescripcion
wsl --installInstalar WSL con la distribucion Ubuntu predeterminada
wsl --install -d <distro>Instalar una distribucion especifica
wsl --list --onlineListar todas las distribuciones disponibles
wsl --list --verboseListar distribuciones instaladas con version y estado
wsl --set-default-version 2Establecer WSL2 como predeterminado para nuevas instalaciones
wsl --set-default <distro>Establecer la distribucion predeterminada
wsl --set-version <distro> 2Convertir una distribucion WSL1 a WSL2
wsl --shutdownApagar todas las distribuciones en ejecucion y la VM
wsl --terminate <distro>Terminar una distribucion especifica
wsl --export <distro> <file>Exportar una distribucion a un archivo tar
wsl --import <name> <path> <file>Importar una distribucion desde un archivo tar
wsl --unregister <distro>Eliminar una distribucion y borrar todos sus datos
wsl --updateActualizar el kernel Linux de WSL2
wsl --versionMostrar version de WSL, version del kernel y version de WSLg
wsl --statusMostrar configuracion de WSL y distribucion predeterminada
wsl -d <distro> -u rootEjecutar una distribucion como usuario root
wsl hostname -IMostrar la direccion IP de la VM de WSL2

Solucion de Problemas

WSL2 no inicia con un error de virtualizacion

Si ves un error como “Please enable the Virtual Machine Platform Windows feature”, verifica que la virtualizacion este habilitada en tu BIOS/UEFI:

# Check if virtualization is enabled
systeminfo | findstr /i "Hyper-V"

# Re-enable the required features
dism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all
dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all

WSL2 usa demasiada memoria

Por defecto, WSL2 puede consumir hasta el 50% de tu memoria total del sistema. Crea o edita C:\Users\yourname\.wslconfig:

[wsl2]
memory=4GB
swap=2GB

Luego reinicia WSL2:

wsl --shutdown

La resolucion DNS falla dentro de WSL2

Si ping google.com falla pero ping 8.8.8.8 funciona, el DNS es el problema:

# Temporary fix: manually set DNS
sudo rm /etc/resolv.conf
sudo bash -c 'echo "nameserver 8.8.8.8" > /etc/resolv.conf'
sudo bash -c 'echo "nameserver 8.8.4.4" >> /etc/resolv.conf'

# Prevent WSL from overwriting resolv.conf
sudo bash -c 'echo "[network]" > /etc/wsl.conf'
sudo bash -c 'echo "generateResolvConf = false" >> /etc/wsl.conf'

Luego reinicia WSL2 con wsl --shutdown desde PowerShell.

Desfase del reloj entre Windows y WSL2

Despues de un ciclo de suspension/hibernacion de Windows, el reloj de WSL2 puede desviarse:

# Check the clock
date

# Sync the clock manually
sudo hwclock -s

# Or on newer builds
sudo ntpdate time.windows.com

Los permisos de archivos son incorrectos en unidades montadas de Windows

# Add to /etc/wsl.conf inside your distribution
[automount]
enabled = true
options = "metadata,umask=22,fmask=11"
mountFsTab = false

Error “Cannot connect to Docker daemon”

# Verify Docker Desktop is running on Windows
# Then check the WSL2 integration setting in Docker Desktop:
# Settings > Resources > WSL Integration > Enable for your distro

# Restart WSL2
wsl --shutdown

# Verify Docker works
docker ps

Resumen

WSL2 transforma Windows en una plataforma de desarrollo de primera clase para flujos de trabajo basados en Linux. Con un kernel Linux real, rendimiento nativo del sistema de archivos, integracion con Docker y conectividad fluida con VS Code, puedes disfrutar lo mejor de ambos sistemas operativos sin compromisos.

Para aprovechar al maximo tu entorno WSL2:

  1. Siempre almacena los archivos del proyecto en el sistema de archivos Linux para un rendimiento optimo.
  2. Usa Windows Terminal con perfiles personalizados para cada distribucion.
  3. Aprovecha VS Code Remote - WSL para mantener tu experiencia de edicion en Windows mientras ejecutas todo en Linux.
  4. Configura .wslconfig para gestionar la asignacion de memoria y procesadores para tus cargas de trabajo.
  5. Usa Docker Desktop con el backend WSL2 para cargas de trabajo con contenedores — consulta nuestra guia completa de instalacion de Docker para mas detalles.
  6. Automatiza tus flujos de trabajo con pipelines CI/CD una vez que tu entorno de desarrollo este listo. Consulta nuestra guia sobre Primeros Pasos con GitHub Actions para CI/CD para llevar tus proyectos al siguiente nivel.

Con WSL2 correctamente configurado, tienes un entorno de desarrollo Linux potente, flexible y de alto rendimiento ejecutandose directamente en tu maquina Windows.