Comience con Rust en la programación de Windows

¿Podría Microsoft cambiar su uso de C, C ++ y C # a otros lenguajes? Una publicación de blog reciente del Centro de Respuesta de Seguridad de Microsoft (MSRC) sugirió que bien podría estar buscando alternativas, con el objetivo de reducir los riesgos de su código. Como Gavin Thomas, el principal gerente de ingeniería de seguridad de MSRC, señaló que una de las principales causas de los errores en el código de Microsoft informados al MSRC es la corrupción de la memoria, errores que permiten sobrescribir la memoria o acceder a lo que debería ser memoria protegida.

Manteniendo la memoria segura

La seguridad de la memoria ha sido un problema importante durante mucho tiempo, pero el trabajo estadístico realizado por MSRC muestra que el problema no va a desaparecer. Tiene muchas herramientas para ayudar a escribir código seguro, desde el propio ciclo de vida de desarrollo seguro de Microsoft, hasta el uso de lenguajes seguros para la memoria más nuevos como C #. Pero esos enfoques tienen sus compensaciones: el código que producen es más lento y funciona a un nivel más alto que C ++.

Eso no es un problema para el código de cara al cliente. No hay diferencia de percepción entre una experiencia de usuario desarrollada en C ++ y una integrada en C #. Pero a nivel de sistema, el código utilizado para crear sistemas operativos y controladores de dispositivos, hay una gran diferencia. Los ciclos del procesador son importantes cuando se trabaja a nivel de sistemas y, como señala Thomas en su publicación de blog, los lenguajes desprotegidos como C ++ y C son realmente las únicas herramientas que históricamente funcionan a ese nivel.

Está claro que los enfoques seguros para la memoria que utilizan los lenguajes de nivel superior no funcionan a nivel de sistema. Muchos de los problemas que plagaron el fallido proyecto Longhorn de Microsoft fueron causados ​​por intentar construir un sistema operativo completo en la plataforma .NET. Entonces, ¿cómo podemos llevar la seguridad de la memoria a las bases del desarrollo de sistemas?

Presentando Rust

La respuesta viene con una nueva generación de lenguajes de programación de sistemas como Go y Rust, lenguajes que tienen los diseños seguros de memoria de .Net con la velocidad de C y C ++. Microsoft ya está usando Go ampliamente en Azure, porque es el lenguaje en el que está escrito Kubernetes. Pero estos enfoques aún no han llegado a Windows, donde C ++ sigue siendo el rey de la programación de sistemas.

En su publicación de blog, Thomas argumenta a favor del uso de Rust de Mozilla como lenguaje de sistemas seguro para Windows. Es una sugerencia interesante, y una que ya tiene un gran punto de prueba a su favor: el diseñador de lenguaje Mozilla ya lo está usando en sus últimas versiones de navegadores web, donde impulsa los motores de renderizado actuales y de próxima generación de Mozilla. Otros grandes usuarios de Rust incluyen el repositorio de módulos JavaScript NPM, Dropbox y Oracle. Incluso Microsoft ya lo está usando, con código Rust en algunas de sus herramientas de Azure IoT Edge.

Configuración de un entorno de desarrollo de Windows Rust

El lugar obvio para comenzar con el desarrollo de Rust es Visual Studio Code. En su mercado de extensiones, puede encontrar varias extensiones que instalan Rust Language Server y que vienen con soporte completo de idiomas, así como herramientas para crear sus aplicaciones Rust desde Visual Studio Code. He estado usando la extensión oficial de Rust del equipo de idiomas de Rust. Otras herramientas brindan soporte para fragmentos de código para impulsar el desarrollo, así como herramientas adicionales de depuración y prueba. Incluso hay herramientas para crear documentación para su código. Vale la pena instalar el paquete de extensión de Rust como parte de su entorno de Visual Studio Code Ruse, ya que esto agrega herramientas adicionales para trabajar con las propias herramientas de desarrollo de Rust.

Primero debe instalar el compilador Rust y el administrador de paquetes Cargo. El sitio de instalación oficial de Rust detectará la versión de Windows que estás usando y proporcionará la descarga adecuada. Incluso hay instrucciones para instalar Rust en el subsistema de Windows para Linux (WSL), si está utilizando WSL como parte de una cadena de herramientas de desarrollo de Unix. Al ejecutar el instalador de Rustup, se descargan los componentes del idioma y se configura la RUTA de Windows . Tiene la opción de personalizar la instalación, pero en la práctica es mejor aceptar los valores predeterminados.

Comprender la seguridad de la memoria y el óxido

Si programó C o C ++, la transición a Rust es relativamente fácil. Hay mucha similitud entre los idiomas, aunque es el concepto de propiedad de Rust lo que lo hace seguro para la memoria. La propiedad permite a Rust administrar el alcance de las variables, lo que les permite ser válidas solo mientras están dentro del alcance. Si no se utilizan, no están en la memoria. Algunas variables son literales, valores inmutables codificados en su código. Pero los tipos de variables más complejas pueden solicitar memoria cuando están configurados, un proceso que en otros muchos lenguajes requiere que asigne memoria explícitamente y luego la libere cuando la variable u objeto ya no sea necesario. Rust automatiza esto, manejando el uso de memoria como parte de su administración de alcance.

El equipo de Mozilla que creó Rust ha pensado profundamente en la seguridad de la memoria y las compensaciones que pueden ocurrir en un entorno seguro. El resultado es un lenguaje seguro y rápido, con herramientas que administran tanto las pilas como las pilas de memoria. La asignación de un valor a una función cambia su propiedad, moviéndola de un ámbito a otro; un proceso similar gestiona los valores que se devuelven desde una llamada de función.

La propiedad es un concepto complejo, pero es importante. Protege la memoria y permite que solo las funciones que poseen un valor lo cambien, incluso cuando estás usando una referencia a una variable. Debido a que Rust trata una referencia como si tomara prestada la variable, intentar modificarla solo generará un error, a menos que la declare mutable.

El futuro de Rust en Windows

Es importante recordar que Rust es todavía un lenguaje joven, y mucho de lo que da por sentado en el desarrollo de Windows no existe. No existe una integración directa con Win32 u otros SDK de Windows básicos, y no encontrará soporte para las herramientas GUI de Windows sin instalar bibliotecas adicionales. Sin embargo, eso no es un problema tan grande como podría pensar: Rust, como Go, es un lenguaje de programación de sistemas. Es una herramienta de bajo nivel, rápida y segura. Eso lo hace ideal para crear código que manipule sus datos, procese números y procese matrices. En lugar de utilizar rutinas de C ++ en las que trabaja con grandes cantidades de memoria, utilice Rust, reduciendo el riesgo asociado con la corrupción de la memoria.

Si desea desarrollar aplicaciones GUI en Rust, tiene la opción de utilizar una de varias bibliotecas de UI. Quizás el más fácil de usar es Kiss-ui, que admite el desarrollo de GUI tanto de Windows como de Linux, con acceso a la API de Win32 y soporte para GTK multiplataforma. Otras bibliotecas añaden una compatibilidad más profunda con la API de Win32.

Incluso si Microsoft no termina admitiendo Rust directamente, hay mucho apoyo de la comunidad. Si bien ensamblar una cadena de herramientas completa aún puede ser una cuestión de elegir los diversos elementos que necesita y usar herramientas como Rustup para instalarlos, la llegada de las extensiones de Visual Studio Code y los paquetes de extensión parece estar preparada para simplificar el proceso. Las actualizaciones periódicas muestran que este es un proyecto en gran medida en vivo, con el equipo de Rust y una gran cantidad de colaboradores externos trabajando en él.

El principio subyacente de usar lenguajes seguros para la memoria es importante, y ciertamente es bueno ver que la gente de MSRC aborda el problema. Hasta que haya un lanzamiento oficial de un lenguaje de programación de sistemas de bajo nivel seguro para la memoria, ciertamente vale la pena darle una mirada a Rust. Si Microsoft lo elige, estará muy por delante del juego.

Fuera de Windows, Rust es un lenguaje clave para el desarrollo de WebAssembly y debería ayudar a ofrecer aplicaciones web mucho más potentes en la próxima versión de Edge impulsada por Chromium, otra razón para darle una mirada cuidadosa.