
Finalmente Linux permite usar Rust en su desarrollo | cortesía de la imagen Linux & World Open-Source.
Hola que tal a todos, sean bienvenidos a un nuevo artículo de su servidor esperando sea de su completo interés. Un par de años atrás (como pasa el tiempo) comentaba en otro artículo que Linux estaba evaluando la posibilidad de reemplazar al lenguaje C con el que fue escrito el sistema operativo por Rust. No era el único interesado en hacerlo, Microsoft también ya se encontraba en el mismo proceso.
¿Qué es Rust?
Rust como se comentó en este par de artículos, es un lenguaje de programación para uso general con una sintaxis similar a C/C++ lo que da la ventaja de portar programas en estos lenguajes a Rust, además está diseñado para tener un acceso seguro a la memoria y no permite punteros nulos o punteros colgantes que tantos problemas ocasionan en C o C++ si no se controlan adecuadamente. También es un lenguaje fuertemente tipado (no se puede convertir entre tipos de datos tan fácilmente y con ello se reduce la posibilidades de fallos, fugas de memoria entre conversiones sin control, etc). Algo así como C/C++ pero con estrictos controles en el uso de la memoria (pueden consultar más información al respecto en Wikipedia).
¿Y cuál es el problema en C/C++?
El gran problema con este par de lenguajes que son geniales para desarrollar sistemas operativos es el manejo de la memoria: tanto C como C++ requieren que para operaciones de manejo de cadenas de datos estos soliciten memoria dinámicamente, no es malo esto, pero "explícitamente" debe de ser liberada tras su uso, pero si el programador no es cuidadoso con esto o simplemente se le olvida (o no sabía que debe liberarla al terminar de usarla) entonces esa memoria se pierde. Poco a poco nuestro sistema operativo se va volviendo lento no habiendo más remedio que reiniciar.
Y hasta la llegada de versiones actualizadas de Windows esto era un problema constante: cada tantas horas había que reiniciar el equipo porque se volvía lento (muy común en Windows 9x), bueno, parte del problema eran las fugas de memoria en aplicaciones mal implementadas (o en el propio sistema operativo). Con el paso de los años Microsoft ha ido puliendo esto y hoy en día es poco frecuente que tengamos que reiniciar nuestro equipo si estamos usando Windows 10 u 11.
Otro problema serio en C/C++ es que no se incluye una protección de la memoria, si tenemos por ejemplo 10 bloques de memoria asignados para una operación y escribimos 12 de ellos, "¿que sucederá?", exacto: los dos restantes serán sobrescritos en bloques que no nos corresponden, no saltará en ningún momento un error (al menos no en las primeras versiones de Windows y MS-DOS) y esto puede ser peligroso. Modalidad que usaban por cierto muchos malwares de la era MS-DOS / Windows 9x para atacar al sistema inyectando código malicioso en zonas sensibles del sistema para desactivar servicios o lo que ellos quisieran.
Con la llegada de Windows XP y posteriores versiones de su sistema operativo Microsoft resolvió muchos de estos problemas al tener una mejor protección de la memoria y restringir muchas de las actividades que se podían hacer sin control alguno en los programas tipo DOS, pero el problema ha persistido y tanto Microsoft como Linux han buscado alternativas.
Rust como la salvación:
Durante el 2023 la Fundación Linux anunció su interés en comenzar a portar módulos de C a Rust para Linux con el afán de mitigar problemas relacionados con una mala gestión de memoria. Cabe aclarar que a diferencia de Windows donde solo los programadores del mismo conocen el código fuente del sistema operativo y donde solo Microsoft implementa políticas para buenas prácticas, en Linux no es así, el código fuente está disponible todo el tiempo y cualquier cambio está a la vista de todos.
Esto hace que si existen vulnerabilidades, "alguien" las pueda encontrar y construir una solución que sea enviada para su evaluación y posterior implementación (que sea aceptada es otro problema, pasará por varias manos primero y al final por Linus Torvald que, como sabemos, suele ser bastante exigente y prepotente en muchas ocasiones, así que más vale armarse de paciencia y "probablemente" recibir los regaños del manda más de Linux). Claro, Torvalds no es único obstáculo dentro de Linux, numerosos programadores defienden a capa y espada su trabajo y aceptar a Rust como lenguaje que reemplaza a C no iba a ser nada sencillo.
Durante años tanto dentro como fuera de círculo de mantenedores del código ha habido opiniones opuestas que van desde "no tocar lo que ya funciona" hasta decir que migrar a Rust código de C o utilerías era una pésima idea (hablando lo más suavemente posible). Entendemos su posición, pero personalmente creo que no es tan mala la idea si eso va a traer ventajas, cierto, Linux tiene políticas de cambios muy estrictos y si algo no le gusta a Torvalds simplemente no pasa, no importa lo bueno que sea, si el dice que "NO" es "NO", y si algo tiene problemas pues con mayor razón será rechazado.
Sin embargo, tras dos años de vaivenes Linux adopta oficialmente Rust en su kernel para mejorar seguridad y estabilidad, esto pone a Rust como opción seria para comenzar a migrar módulos específicos a Rust pero sin que reemplace totalmente a C. Es una victoria parcial ya que el lenguaje de C sigue siendo el dominante. Por cierto, dejo aquí un par de videos explicando la negativa a usar Rust como lenguaje primario en el desarrollo de Linux.
Bueno, ¿y ahora qué?
Pues después de tantas opiniones a favor y en contra, salidas del proyecto por nulo apoyo de los programadores de C en el kernel y un largo etcétera Rust está aquí y módulos del sistema ya están siendo reescritos, "¿qué sucederá a continuación?". Pues es difícil saberlo porque una de dos: o los programadores van a tener que aceptarlo y comenzar a reescribir módulos funcionales a Rust o nuevos de ellos o, Rust tendrá una participación muy pequeña en el kernel de Linux, habrá resistencia al cambio (lo que se lleva viendo durante dos años) y "quizás" otra serie de batallas donde Rust se detendrá e incluso dar marcha atrás.
Hablando de Microsoft este también ya se encuentra en proceso de migrar Windows a Rust de aquí hasta el 2030 (cuatro años estimados) con una postura mucho más blanda en comparación con la comunidad Linux. Será interesante ver como le va a Microsoft en esta nueva aventura.
Conclusiones:
Se ha dicho que la gran ventaja de Linux es su comunidad y su gran inconveniente es precisamente también su comunidad. Lo vemos aquí: simplemente Rust no la ha tenido nada sencilla para hacerse un hueco en el kernel de Linux y aunque Torvalds ha dado su bendición que sea aceptada no es otro asunto.
Muchas gracias por leer este artículo, "¿qué piensan al respecto?", sientanse con toda confianza para dejar sus comentarios al respecto y nos veremos en un próximo artículo.