Al día de hoy la contribución de Microsoft al Kernel de Linux no es ningún chiste, y es que después de ver a Linux como un enemigo a muerte durante décadas y al cual le jugó una guerra sucia, Microsoft se ha convertido en uno de los principales contribuyentes.
Y aunque muchos podrán desaprobar los movimientos de Microsoft a favor de Linux y el open source, no pueden negar que gran parte de sus contribuciones han resultado bastante interesantes y hasta cierto punto benéficas para proyectos open source.
Cabe aclarar que al igual que otros contribuyentes de Linux, dígase Google, Intel, IBM, Oracle, entre otros el trabajo de Microsoft en Linux principalmente está enfocado hacia sus productos y como repito, al igual que lo hacen los otros pesos pesados y no está mal, porque al final el Kernel de Linux es el resultado de todo eso y claro de la supervisión del jefe, Linus Torvalds, ya que si algo no le gusta o cree que no es necesario, no se introduce en Linux y punto.
La razón de mencionar esto, es que hace poco Wedson Almeida, un ingeniero de Microsoft involucrado en el desarrollo de Rust for Linux, dio a conocer la introducción de parches clave que mejoran significativamente la inicialización de módulos Rust en el kernel.
Actualmente tenemos una bifurcación de la caja con cambios en `Vec`; otros cambios se han incorporado (al proyecto Rust). Esta serie elimina la bifurcación y expone toda la funcionalidad como rasgos de extensión. Además, también introduce parámetros de indicador de asignación para todas las funciones que pueden resultar en asignaciones
Una de las principales mejoras es la eliminación de la bifurcación alloc
y el uso de la característica inestable allocator_api
, lo que simplifica el código y reduce la carga de mantenimiento a largo plazo. Además, se han introducido indicadores para las asignaciones, como GFP_KERNEL y GFP_ATOMIC, que mejoran la gestión de la memoria y optimizan el rendimiento de los módulos.
Cambios en v2:
– Descripción actualizada de la caja `alloc`.
– Se cambiaron los nombres de los módulos vecext y boxext a vec_ext y box_ext.
– Se agregó una directiva de derivación a «AllocError».
– Comentario de seguridad actualizado en `BoxExt::new`.
– Se actualizaron `VecExt::push` y `VecExt::extend_from_slice` para usar
`spare_capacity_mut`
– Agregar directiva para no compilar `destructure` y `rebuild` durante la `test` o
`testlib` están configurados. De lo contrario tenemos una advertencia porque `push` y
`extend_from_slice` ya no los uses.
– Sangría actualizada en `Arc::new_uninit`
– Se movió la eliminación de la conversión `TryReserveError` a `Error` en el parche 7, donde
El uso de `TryReserveError` en realidad se elimina.
Estas correcciones refinan las API de asignación para el código del kernel de Rust e introducen un nuevo concepto: inicializar módulos directamente en su ubicación de memoria prevista. Esto elimina la necesidad de asignaciones de memoria innecesarias y permite que los módulos administren de manera competente estructuras de datos complejas, como cerraduras.
Filho mencionó que este desarrollo permite tener módulos cuyo estado contiene objetos que deben inicializarse en su lugar y además, de que permite implementar registros (por ejemplo, registros de conductores) en el lugar y hacerlos similares a sus contrapartes en C, donde no se necesitan nuevas asignaciones.
Anteriormente, la inicialización del módulo implicaba asignar memoria para una instancia que luego se movería a su ubicación designada. Sin embargo, con los nuevos parches, los módulos se pueden inicializar directamente en la ubicación de memoria prevista, eliminando asignaciones innecesarias y permitiendo una gestión más eficiente de estructuras de datos complejas, como las cerraduras. Esto tiene un impacto significativo en la optimización del uso de la memoria y la eficiencia general de los módulos de Rust en el kernel de Linux.
Además de mejorar la eficiencia y la gestión de la memoria, este paso alinea más los módulos impulsados por Rust con sus equivalentes en C, reduciendo la brecha y abriendo el camino hacia el desarrollo de Rust.
Si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.