Volver al blog

Rust Ahora Es Permanente en el Linux Kernel: El Fin del Experimento y el Comienzo de Una Nueva Era

Hola HaWkers, una decisión histórica fue tomada en el Kernel Maintainer Summit de 2025 en Tokio: el uso de Rust en el Linux Kernel no es más experimental. Rust ahora es un lenguaje oficialmente soportado y permanente en el proyecto más importante del software de código abierto.

Este cambio tiene implicaciones profundas para seguridad, desarrollo de drivers y el futuro de la programación de sistemas.

El Anuncio Oficial

Miguel Ojeda, líder del proyecto Rust for Linux, confirmó la decisión:

"El experimento terminó. Rust vino para quedarse."

Esta declaración marca el fin de años de debates y pruebas de concepto. Rust pasó de "vamos a ver si funciona" para "este es uno de nuestros lenguajes oficiales".

Qué Esto Significa en la Práctica

Antes (experimental):

  • Rust era opcional y deshabilitado por defecto
  • Pocos drivers usaban Rust
  • Soporte limitado de arquitecturas
  • Incertidumbre sobre el futuro

Ahora (permanente):

  • Rust es una opción oficial para nuevos drivers
  • Subsistemas pueden exigir Rust
  • Inversión de largo plazo garantizada
  • Ecosistema de herramientas dedicado

Por Qué Rust en el Kernel Es Importante

El Problema de los Bugs de Memoria

Estudios muestran que la mayoría de las vulnerabilidades en sistemas operativos son causadas por problemas de memoria:

Estadísticas de bugs en Linux:

  • 65-70% de las vulnerabilidades son relacionadas a memoria
  • Buffer overflows, use-after-free, double-free
  • Bugs que C permite pero Rust previene por diseño

Tipos de bugs que Rust elimina:

  • Buffer overflow
  • Use after free
  • Double free
  • Data races
  • Null pointer dereference

Rust Previene Por Diseño

// Ejemplo de cómo Rust previene bugs comunes

// En C, esto compila pero causa use-after-free:
// char* ptr = malloc(100);
// free(ptr);
// strcpy(ptr, "datos"); // ¡BUG! Memoria ya liberada

// En Rust, esto NO COMPILA:
fn ejemplo_seguro() {
    let datos = String::from("test");
    let referencia = &datos;

    drop(datos); // Intenta liberar 'datos'

    // ERROR DE COMPILACIÓN: 'datos' fue movido/liberado
    // pero 'referencia' aún existe
    // println!("{}", referencia); // ¡No compila!
}

// La versión correcta en Rust:
fn ejemplo_correcto() {
    let datos = String::from("test");
    println!("{}", datos);
    // 'datos' es automáticamente liberado aquí
    // de forma segura
}

El compilador Rust garantiza que esos errores sean detectados en tiempo de compilación, no en producción.

Resultados Prácticos en el Kernel

Drivers Rust en Producción

Greg Kroah-Hartman, uno de los principales mantenedores del kernel, reportó resultados positivos:

Observaciones:

  • Drivers en Rust están probando ser más seguros
  • Problemas de interacción Rust/C fueron menores que esperado
  • Desarrolladores están adaptándose bien

El Subsistema DRM

Dave Airlie, mantenedor del DRM (Direct Rendering Manager - sistema de gráficos), hizo un anuncio significativo:

"El proyecto DRM está a cerca de un año de exigir Rust y prohibir C para nuevos drivers."

Esto significa que en 2026-2027, nuevos drivers de GPU para Linux pueden ser obligatoriamente en Rust.

Drivers Ya Existentes en Rust

Drivers en desarrollo/producción:

  • Apple M1/M2 GPU (Asahi Linux)
  • Algunos drivers de red
  • Drivers de bloque experimentales
  • Bindings para subsistemas

Cómo Escribir un Driver en Rust

Estructura Básica

// Ejemplo simplificado de módulo kernel en Rust

use kernel::prelude::*;
use kernel::miscdev::Registration;

module! {
    type: MiDriver,
    name: "mi_driver",
    author: "Desarrollador",
    description: "Ejemplo de driver en Rust",
    license: "GPL",
}

struct MiDriver {
    _registration: Pin<Box<Registration<Self>>>,
}

impl kernel::Module for MiDriver {
    fn init(_name: &'static CStr, _module: &'static ThisModule) -> Result<Self> {
        pr_info!("¡Driver Rust inicializado!\n");

        let registration = Registration::new_pinned(
            c_str!("mi_dispositivo"),
            (),
        )?;

        Ok(MiDriver {
            _registration: registration,
        })
    }
}

impl Drop for MiDriver {
    fn drop(&mut self) {
        pr_info!("¡Driver Rust finalizado!\n");
    }
}

Interoperabilidad con C

// Llamando funciones C existentes del kernel

use kernel::bindings;

fn usar_funcion_c() -> Result {
    // Wrapper seguro alrededor de función C
    // Rust garantiza que llamamos correctamente

    // SAFETY: documentamos por qué esto es seguro
    unsafe {
        bindings::alguna_funcion_c_del_kernel();
    }

    Ok(())
}

Desafíos y Próximos Pasos

Desafíos Restantes

Toolchain:

  • Rust necesita ser instalado para compilar kernel
  • Versión específica del compilador necesaria
  • No todas las arquitecturas soportadas aún

Aprendizaje:

  • Desarrolladores C necesitan aprender Rust
  • Nuevos patrones de código
  • Diferentes prácticas de debugging

Arquitecturas Soportadas

Totalmente soportadas:

  • x86_64
  • ARM64
  • LoongArch
  • RISC-V (en progreso)

En desarrollo:

  • ARM 32-bit
  • PowerPC
  • MIPS

Roadmap del Proyecto

2025-2026:

  • Más drivers de producción en Rust
  • Mejor documentación
  • Más bindings para subsistemas

2026-2027:

  • DRM posiblemente exigiendo Rust
  • Nuevos subsistemas eligiendo Rust
  • Rust como default para algunos tipos de drivers

Impacto en la Industria

Empresas Invirtiendo en Rust

Quién está contribuyendo:

  • Google (Android, Chrome OS)
  • Microsoft (drivers Windows)
  • Samsung (dispositivos móviles)
  • Arm (drivers de SoC)
  • Red Hat (infraestructura enterprise)

Demanda por Desarrolladores

La adopción de Rust en el kernel aumenta la demanda por profesionales:

Habilidades valorizadas:

  • Rust + conocimiento de kernel
  • Interoperabilidad Rust/C
  • Desarrollo de drivers
  • Seguridad de sistemas

Rangos salariales (USA):

  • Kernel Developer (Rust): $180k - $300k
  • Systems Engineer (Rust): $150k - $250k
  • Driver Developer (Rust): $140k - $220k

Cómo Comenzar con Rust en el Kernel

Pre-requisitos

# 1. Instalar Rust
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# 2. Añadir componentes necesarios
rustup component add rust-src
rustup component add llvm-tools-preview

# 3. Clonar el kernel
git clone https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git

# 4. Configurar con soporte a Rust
cd linux
make LLVM=1 rustavailable
make LLVM=1 menuconfig
# Habilitar: General setup -> Rust support

Recursos de Aprendizaje

Documentación oficial:

Ejemplos prácticos:

  • Asahi Linux (driver GPU M1)
  • Drivers de ejemplo en el kernel
  • Rust book (para fundamentos)

Reflexión: Qué Esto Significa Para el Futuro

La decisión de tornar Rust permanente en Linux es más que técnica - es filosófica. Significa que:

💡 Insight: El proyecto de software libre más importante del mundo reconoció que C solo no es suficiente para los desafíos de seguridad modernos.

Efecto Dominó

Si Linux adoptó Rust permanentemente, otros proyectos seguirán:

Proyectos observando:

  • FreeBSD (ya experimentando)
  • Otros kernels Unix-like
  • Sistemas embebidos
  • Firmware de dispositivos

Conclusión

La adopción permanente de Rust en el Linux Kernel marca un momento histórico en la evolución de la programación de sistemas. No es más una cuestión de "si" Rust será relevante para sistemas - es una cuestión de "cómo" nos adaptaremos.

Para desarrolladores interesados en sistemas, kernel y seguridad, aprender Rust dejó de ser opcional. Y para el ecosistema como un todo, esto significa sistemas más seguros y confiables en el futuro.

Si te interesa cómo Rust está transformando la industria, recomiendo que revises otro artículo: Microsoft Quiere Eliminar Todo Código C y C++ Hasta 2030 Usando Rust e IA donde vas a descubrir cómo otras gigantes están siguiendo el mismo camino.

¡Vamos a por ello! 🦅

Comentarios (0)

Este artículo aún no tiene comentarios 😢. ¡Sé el primero! 🚀🦅

Añadir comentarios