Torvalds anunció que Rust será aceptado en Linux 6.1

Controladores Rust en Linux

Rust ya está listo para unirse a C como un lenguaje práctico para implementar en Linux

Este año 2022 podría ser el año de Rust dentro del kernel de Linux, ya que es probable que Rust para Linux esté listo para la versión 6.1 del kernel de Linux. Esto es lo que se desprende de un reciente discurso de Linus Torvalds en el último Open Source Summit.

Y es que los principales mantenedores del kernel de Linux están familiarizados con el lenguaje C cuya edad ya se considera que debe tomarse en cuenta, pues algunos incluso están se acercan a los sesenta, mientras que una nueva generación de mantenedores cuyo grupo de edad está en la treintena está ascendiendo, lo cual es probable que aumente la dificultad de encontrar mantenedores para el kernel de Linux si su desarrollo continúa en el lenguaje C.

Durante la Open Source Summit Europe, Linus Torvalds anunció que, salvo problemas imprevistos, se incluirán los parches para respaldar el desarrollo del controlador Rust en el kernel Linux 6.1, que se espera que se lance en diciembre.

Algunos de los beneficios de obtener soporte de Rust en el kernel son facilitar la escritura de controladores de dispositivos seguros al reducir las posibilidades de errores de memoria y alentar a los nuevos desarrolladores a involucrarse en el kernel.

«Rust es una de esas cosas que creo que traerá caras nuevas… nos estamos volviendo viejos y grises», dijo Linus.

Las notas de la versión de Linux 6.0 rc1 brindan una actualización sobre el progreso del proyecto Rust para Linux: existe un grupo de trabajo relacionado, está disponible un controlador preliminar para medios de almacenamiento NVMe desarrollado con dicho lenguaje, así como un controlador para un servidor previsto para el protocolo de red 9P.

Sin embargo, el equipo continúa enfrentando dificultades con la compilación. De hecho, está hecho con GCC para el kernel mientras que Rust todavía está con LLVM. Se está trabajando en una interfaz de Rust para GCC, pero la iniciativa aún está en pañales.

El inicio del soporte de Rust para el desarrollo del kernel de Linux se considera «un paso importante para poder escribir controladores en un lenguaje más seguro». Rust de Mozilla Research es el tipo de lenguaje de programación que aquellos que escriben código para sistemas básicos de entrada/salida (BIOS), cargadores de arranque, sistemas operativos, etc. tener un interés.

Según observadores, es el futuro de la programación de sistemas en lugar del lenguaje C. De hecho, los expertos opinan que ofrece mejores garantías de seguridad de software que el par C/C++. En AWS, especifican que que elegir Rust para los proyectos de desarrollo significa agregar la eficiencia energética y el rendimiento de ejecución de C a la ventaja de la seguridad.

Linus también anunció que la versión 6.1 del kernel mejorará algunas de las partes más antiguas y fundamentales del kernel, como la función printk(). Además, Linus recordó que hace unas décadas, Intel trató de convencerlo de que el procesador Itanium era el futuro, pero él respondió

«No, esto no sucederá, porque no existe una plataforma de desarrollo para ello. ARM lo está haciendo todo bien». «

Otro problema que señaló Torvalds es la inconsistencia en la producción de procesadores ARM:

«empresas de hardware locas del Lejano Oeste, que fabrican chips especializados para diversas tareas». Agregó que «fue un gran problema cuando salieron los primeros procesadores, hoy en día hay suficientes estándares para facilitar la transferencia de núcleos a los nuevos procesadores ARM».

Además, podemos señalar la publicación de la implementación inicial del controlador rust-e1000 para adaptadores Intel Ethernet, parcialmente escrito en Rust.

El código todavía tiene una llamada directa a algunos enlaces de C, pero se está trabajando gradualmente para reemplazarlos y agregar las abstracciones de Rust necesarias para escribir controladores de red (para acceder a PCI, DMA y API de red del kernel). En su forma actual, el controlador pasa con éxito la prueba de ping cuando se inicia en QEMU, pero aún no funciona con hardware real.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

from Linux Adictos https://ift.tt/dVeA98B
via IFTTT

Libadwaita 1.2 ya fue liberado e incluye diversas mejoras

message-dialog-adaptive-1

Libadwaita incluye un conjunto de componentes para diseñar la interfaz de usuario de acuerdo con GNOME HIG

El Proyecto GNOME ha publicado el lanzamiento de la biblioteca Libadwaita 1.2, la biblioteca libadwaita se usa junto con GTK4 e incluye componentes de la skin de Adwaita que se usa en GNOME que se han movido de GTK a una biblioteca separada.

Mover las imágenes de GNOME a una biblioteca separada permite que los cambios necesarios de GNOME se desarrollen por separado de GTK, lo que permite a los desarrolladores de GTK centrarse en lo básico y a los desarrolladores de GNOME impulsar sus propios cambios de estilo de manera más rápida y flexible sin afectar a GTK.

La biblioteca incluye widgets estándar que cubren varios elementos de la interfaz, como listas, paneles, bloques de edición, botones, pestañas, formularios de búsqueda, cuadros de diálogo, etc. Los widgets propuestos le permiten crear interfaces universales que funcionan sin problemas tanto en pantallas grandes de PC y portátiles como en pantallas táctiles pequeñas de teléfonos inteligentes.

La interfaz de la aplicación cambia dinámicamente según el tamaño de la pantalla y los dispositivos de entrada disponibles. La biblioteca también incluye un conjunto de estilos de Adwaita que aportan la apariencia a las pautas de GNOME sin necesidad de personalización manual.

Principales novedades de libadwaita 1.2

En la nueva versión que se presenta se ha añadido el widget Adw.EntryRow para ser utilizado como elemento de listas. El widget proporciona un campo de entrada y un encabezado con la capacidad de adjuntar widgets adicionales antes y después del campo de entrada (por ejemplo, botones de confirmación de entrada o un indicador de que los datos se pueden editar). Además, está disponible la variante Adw.PasswordEntryRow, diseñada para ingresar contraseñas.

entry-rows

libadwaita 1.2 widget Adw.EntryRow

Ademas de ello se agregó el widget Adw.MessageDialog para mostrar un cuadro de diálogo con un mensaje o una pregunta. El Widget es un reemplazo extendido para Gtk.MessageDialog, que puede ajustar el diseño de los elementos al tamaño de la ventana.

Por ejemplo, en ventanas anchas, los botones se pueden mostrar en una línea y en ventanas estrechas se pueden dividir en varias columnas. Otra diferencia es que el widget no es un elemento secundario de la clase GtkDialog y proporciona una API completamente nueva que no está vinculada a los tipos de botones GtkResponseType predefinidos (en Adw.MessageDialog, todas las acciones son manejadas por la aplicación), lo que facilita la inserción otros widgets que usan la propiedad extra-child y brindan estilos separados para el título y el cuerpo del texto.

Ademas de ello, tambien sé destaca que se agregó el widget Adw.AboutWindow para mostrar una ventana con información sobre el programa. El widget reemplaza a Gtk.AboutDialog y presenta un diseño receptivo y secciones de ayuda extendidas, como registro de cambios, cuadro de agradecimiento, información de licencia de terceros, enlaces a recursos de información y datos de depuración.

Tambien se destaca que se han ampliado las capacidades de los widgets Adw.TabView y Adw.TabBar, en los que se ha rediseñado el mecanismo de procesamiento de teclas de acceso rápido para resolver el problema con el trabajo de combinaciones que se cruzan con los controladores GTK4 (por ejemplo, Ctrl+Tab). La nueva versión también ofrece una propiedad para establecer información sobre herramientas para indicadores y botones de pestañas.

Por otra parte, se presenta una disminución de la altura de los divisores verticales, lo que permite que la barra de título y la barra de búsqueda eliminen los bordes claros que distraen a favor de los bordes oscuros establecidos con @headerbar_shade_color y agregue un estilo de fondo que coincida con los paneles de encabezado.

De los demás cambios que se destacan de esta nueva versión:

  • La clase de estilo «.large-title» ha quedado obsoleta y se debe usar «.title-1» en su lugar
  • Reducción del relleno en el widget Adw.ActionRow para acercar su apariencia a los paneles y al widget Adw.EntryRow.
  • Se agregó la clase Adw.PropertyAnimationTarget para facilitar la animación de las propiedades de los objetos.
  • El estilo de la barra de pestañas (Adw.TabBar) se ha cambiado significativamente: la pestaña activa se resalta más claramente y se ha aumentado el contraste de los elementos en la opción de diseño oscuro.
  • Los widgets Gtk.Actionbar y Adw.ViewSwitcherBar usan los mismos estilos que la barra de título, la barra de búsqueda y la barra de pestañas.

Finalmente si estás interesado en poder conocer más al respecto puedes consultar los detalles en el siguiente enlace.

from Linux Adictos https://ift.tt/8FUHMYw
via IFTTT

Cloudflare cambió a Pingora, su propio proxy escrito en Rust

Cloudflare migra de NGINX a Pingora

Pingora, es un nuevo proxy HTTP creado por cloudflare usando Rust

Cloudflare dio a conocer hace poco que está migrando su red de entrega de contenido para usar el proxy «Pingora», el cual se destaca por estar escrito en Rust. El nuevo proxy reemplazó la configuración basada en el servidor NGINX con secuencias de comandos Lua y maneja más de un billón de solicitudes por día.

Se observa que la transición al proxy especializado «Pingora» permitió no solo implementar nuevas funciones y aumentar la seguridad debido al trabajo seguro con la memoria, sino que también condujo a un aumento significativo en el rendimiento y el ahorro de recursos.

Una solución basada en Pingora no requiere el uso de Lua y utiliza una arquitectura optimizada para la carga de Cloudflare, por lo que consume un 70 % menos de recursos de CPU y un 67 % menos de memoria mientras procesa la misma cantidad de tráfico.

Durante mucho tiempo, un sistema de proxy de tráfico entre usuarios y servidores finales basado en scripts NGINX y Lua satisfacía las necesidades de Cloudflare, pero a medida que la red crecía y su complejidad aumentaba, una solución universal no era suficiente, tanto en términos de rendimiento como de limitaciones en la extensibilidad e implementación de nuevas oportunidades para los clientes.

En particular, hubo dificultades para agregar funcionalidad más allá de una simple puerta de enlace y un equilibrador de carga. Por ejemplo, en el caso de que el servidor no pudiera procesar una solicitud, era necesario redirigir la solicitud a otro servidor, proporcionándole un conjunto diferente de encabezados HTTP.

En lugar de una arquitectura con solicitudes divididas en procesos de trabajo separados (trabajadores), Pingora usa un modelo de subprocesos múltiples, que en los escenarios de uso de Cloudflare (alta concentración de tráfico de diferentes sitios con un gran cambio estadístico) mostró una distribución más eficiente de recursos entre núcleos de CPU.

En particular, vincular solicitudes desequilibradas a procesos en nginx condujo a una carga desequilibrada en los núcleos de la CPU, como resultado de lo cual las solicitudes que consumen muchos recursos y el bloqueo de E/S ralentizaron el procesamiento de otras solicitudes.

Además, vincular el grupo de conexiones a los procesos del controlador no permitía reutilizar las conexiones ya establecidas de otros procesos del controlador, lo que reduce la eficiencia cuando hay una gran cantidad de procesos del controlador.

La introducción de Pingora permitió reducir 160 veces el número de operaciones de establecimiento de nuevas conexiones y aumentar la proporción de solicitudes reutilizadas del 87,1 % al 99,92 %. Además de reducir las reconexiones y un uso más eficiente de los núcleos de la CPU, la mejora del rendimiento del nuevo proxy se debió principalmente a la eliminación de los lentos controladores de Lua que se usan con nginx.

Se eligió el lenguaje Rust porque permite un alto rendimiento combinado con la disponibilidad de herramientas seguras para la memoria. Se menciona que a pesar de la alta calificación de los ingenieros de Cloudflare y la revisión de código, los programas escritos en lenguaje C no pudieron evitar errores que derivan en problemas de memoria (por ejemplo, una vulnerabilidad en el analizador HTML).

En cuanto al nuevo código, hablamos de casos de análisis de bloqueos en Pingora, que resultaron ser causados ​​no por problemas en la aplicación, sino por un error en el kernel de Linux y fallas de hardware.

Adicionalmente, se puede señalar que Linus Torvalds comentó sobre la inclusión de soporte para el lenguaje Rust en el kernel de Linux, expresado en la conferencia Open-Source Summit Europe que se lleva a cabo estos días. El kernel 6.0 no incluía parches para desarrollar controladores de dispositivos en el lenguaje Rust, pero según Linus, es probable que se acepten en el kernel 6.1, no va a aprovechar la integración.

Como motivo para agregar soporte para Rust, además de un impacto positivo en la seguridad, Linus también aprovecha la oportunidad para aumentar el interés en trabajar en el núcleo de los nuevos participantes, lo cual es importante en el contexto del envejecimiento de los veteranos.

Finalmente si estás interesado en poder conocer más al respecto, puedes consultar los detalles en el siguiente enlace.

from Linux Adictos https://ift.tt/gp8KuSV
via IFTTT