¡Grandes noticias para la comunidad de desarrolladores! Hoy marca el lanzamiento oficial de Ubuntu 26.04 LTS, conocido como «Resolute Raccoon». Este lanzamiento es un hito importante, y felicitamos a Canonical por su continuo trabajo. Como es tradición, cada nueva versión LTS de Ubuntu llega con la última versión LTS de .NET integrada, facilitando enormemente el desarrollo y la ejecución de aplicaciones. En esta ocasión, Ubuntu 26.04 incluye .NET 10, una excelente noticia para quienes buscan aprovechar las características más recientes de la plataforma. Si necesitas versiones anteriores, .NET 8 y .NET 9 pueden instalarse fácilmente a través de un PPA/feed separado, con instrucciones detalladas proporcionadas para cada escenario. La estrecha colaboración entre Canonical y Microsoft asegura que .NET funcione de manera óptima en Ubuntu, consolidándola como una de las cadenas de herramientas oficialmente compatibles.
La instalación de .NET 10 en Ubuntu 26.04 es un proceso sencillo. Basta con abrir una terminal y ejecutar:
sudo apt update
sudo apt install dotnet-sdk-10.0
Una vez instalado, estarás listo para comenzar a desarrollar.
Para aquellos que trabajan con contenedores, las imágenes de contenedor de Ubuntu 26.04 para .NET 10 y versiones superiores ya están disponibles, lanzadas a principios de este mes. Estas imágenes utilizan la etiqueta resolute, lo que permite una transición fluida desde versiones anteriores como noble simplemente actualizando las etiquetas de tus contenedores.
Las notas de lanzamiento de Ubuntu 26.04 detallan una serie de cambios significativos. Entre los más relevantes para los desarrolladores de .NET se encuentran la inclusión del núcleo Linux 7.0, la incorporación de criptografía post-cuántica y la eliminación de cgroup v1 (relacionado con contenedores). Es importante destacar que .NET 10 ya ha añadido soporte para criptografía post-cuántica, y la compatibilidad con cgroup v2 se implementó hace años en .NET, por lo que la eliminación de cgroup v1 no debería representar un problema para la mayoría de las aplicaciones existentes. El equipo de desarrollo ha estado trabajando arduamente en esta transición desde principios de 2025, realizando pruebas exhaustivas con Debian 13 y Ubuntu 24.10 en su integración continua (CI), y con 26.04 desde finales de 2025. De hecho, cada «pull request» en el repositorio dotnet/runtime se valida en Ubuntu 26.04, lo que demuestra un profundo compromiso con la compatibilidad.
Demostración de instalación y ejecución de .NET 10 en un contenedor
Para ilustrar la facilidad de uso, podemos instalar .NET 10 dentro de una imagen de contenedor ubuntu:resolute:
$ docker run --rm -it ubuntu:resolute
$ apt update
$ apt install -y dotnet-sdk-10.0
$ dotnet --version
10.0.105
Y para ejecutar un sencillo programa en C#:
$ dotnet run - << 'EOF'
using System.Runtime.InteropServices;
Console.WriteLine($"Hello {RuntimeInformation.OSDescription} from .NET {RuntimeInformation.FrameworkDescription}");
EOF
Hello Ubuntu Resolute Raccoon (development branch) from .NET .NET 10.0.5
Este ejemplo, aunque simple, muestra la agilidad del ecosistema .NET en entornos de contenedor, ideal para pruebas rápidas y desarrollo.
Contenedores y .NET 10
Las nuevas imágenes resolute mantienen la consistencia con las anteriores imágenes noble, ofreciendo las mismas opciones, como los eficientes contenedores Chiseled de .NET. Es fundamental recordar que los contenedores utilizan el kernel del host. Así, un contenedor 26.04 ejecutándose en un host 24.04, por ejemplo, hará uso del kernel Linux 6.x del host.
Se ha demostrado la migración y ejecución de una aplicación de ejemplo aspnetapp con los siguientes pasos clave:
- Actualizar la referencia de la imagen de
noblearesoluteen elDockerfile.chiseled(usandosed -i "s/noble/resolute/g" Dockerfile.chiseled). - Construir la imagen y ejecutar la aplicación con límites de recursos para optimizar su desempeño:
docker build --pull -t aspnetapp -f Dockerfile.chiseled .
docker run --rm -it -p 8000:8080 -m 50mb --cpus .5 aspnetapp
Esto resalta la flexibilidad y eficiencia de las aplicaciones .NET en entornos contenerizados modernos.
Native AOT (Ahead-of-Time) en .NET 10
Native AOT (NAOT) se presenta como una opción excepcional para aplicaciones que requieren un inicio rápido y un binario nativo autocontenido. El paquete dotnet-sdk-aot-10.0 proporciona lo necesario para empezar. Para utilizar NAOT, además del SDK AOT, es necesario instalar clang (ya que .NET emplea LLD para el enlazado):
apt install -y dotnet-sdk-aot-10.0 clang
Al publicar una aplicación «Hello World» con NAOT, el resultado es un binario de aproximadamente 1.4 MB, junto con un archivo .dbg de símbolos nativos. Lo más impresionante es el rendimiento de inicio:
$ time ./artifacts/app/app
Hello Ubuntu Resolute Raccoon (development branch) from .NET .NET 10.0.5
real 0m0.003s
user 0m0.001s
sys 0m0.001s
¡Un tiempo de inicio de solo 3 milisegundos! Esto demuestra el potencial de NAOT para mejorar significativamente la velocidad de arranque de las aplicaciones, lo cual es crítico para microservicios y funciones «serverless».
NAOT también es altamente efectivo para servicios web. Un ejemplo con releasesapi muestra un servicio web autocontenido de 13 MB, incluyendo metadatos y código generados por System.Text.Json basado en «source generation». La ejecución y consulta de este servicio revela información de soporte para las versiones de .NET de forma clara y concisa:
$ curl -s http://localhost:5000/releases | jq '[.versions[] | select(.supported == true) | {version, supportEndsInDays}]'
[
{
"version": "10.0",
"supportEndsInDays": 942
},
{
"version": "9.0",
"supportEndsInDays": 207
},
{
"version": "8.0",
"supportEndsInDays": 207
}
]
La herramienta jq es una excelente utilidad para trabajar con JSON, similar a LINQ, permitiendo filtrar y transformar datos JSON de manera eficiente desde la línea de comandos.
Instalación de .NET 8 y 9 mediante PPA
Canonical distingue entre soporte y disponibilidad. .NET 8 y .NET 9 se ofrecen a través del feed PPA dotnet-backports. Estas versiones, aunque a veces más antiguas o más nuevas que la incluida en la distribución principal, vienen con un «soporte de mejor esfuerzo». Se anticipa que .NET 11 también se añadirá a este PPA en su lanzamiento general.
Para configurar el feed, primero se necesita el paquete software-properties-common (usualmente preinstalado en versiones de escritorio de Ubuntu):
apt install -y software-properties-common
Luego, se añade el repositorio PPA:
$ add-apt-repository ppa:dotnet/backports
Este comando muestra una descripción detallada del repositorio, incluyendo las versiones de .NET disponibles para diversas versiones de Ubuntu y sus fechas de fin de soporte. Por ejemplo, para Ubuntu 26.04 LTS (Resolute Raccoon), ofrece .NET 8.0 y .NET 9.0 con fechas de fin de vida específicas. Se incluye una declaración sobre el soporte de «mejor esfuerzo» por parte de Canonical, alineado con la vida útil del proyecto upstream o el período de soporte de la versión de Ubuntu.
Una vez registrado el feed, se pueden listar los paquetes dotnet y aspnetcore disponibles, incluyendo las versiones 8.0 y 9.0, además de la versión 10.0 oficial. Esto proporciona a los desarrolladores la flexibilidad de instalar múltiples versiones de .NET según sus requisitos de proyecto, asegurando compatibilidad con diversas bases de código.
En resumen, el lanzamiento de Ubuntu 26.04 LTS reafirma el compromiso de la plataforma con la comunidad .NET. Gracias a un arduo trabajo de preparación y pruebas, el soporte para .NET 10 está plenamente integrado desde el primer día, ofreciendo una experiencia de desarrollo robusta y eficiente. La disponibilidad de herramientas avanzadas como Native AOT y la flexibilidad para instalar versiones anteriores a través de PPAs, hacen de Ubuntu 26.04 una excelente elección para cualquier desarrollador .NET que busque rendimiento y estabilidad. ¡Disfruta de la nueva era de desarrollo .NET en Ubuntu!
