informe sobre el desarrollo del proyecto FreeBSD de enero a marzo de 2020. Entre los cambios destacados se encuentran:
- Cuestiones generales y sistemáticas
- Del árbol de códigos fuente de FreeBSD-CURRENT se ha eliminado el conjunto de compiladores GCC, así como las utilidades no utilizadas gperf, gcov y gtc (compilador de devicetree). Todas las plataformas que no soportan Clang han sido trasladadas para usar herramientas de compilación externas instaladas desde puertos. En el sistema base se suministraba una versión obsoleta de GCC 4.2.1, y la integración de versiones más nuevas no era posible debido a la transición de 4.2.2 a la licencia GPLv3, que fue considerada inaceptable para los componentes base de FreeBSD. Las versiones actuales de GCC, incluyendo GCC 9, pueden ser instaladas como antes desde paquetes y puertos.
- En la infraestructura de emulación de entornos Linux (Linuxulator) se ha añadido soporte para la llamada al sistema sendfile, el modo TCP_CORK (requerido para nginx), y la bandera MAP_32BIT (que resuelve problemas al ejecutar paquetes de Mono desde Ubuntu Bionic). Se han solucionado problemas de resolución DNS al usar glibc más reciente que 2.30 (por ejemplo, de CentOS 8).
En la infraestructura de integración continua, se asegura la ejecución de tareas para iniciar LTP (Linux Testing Project) bajo Linuxulator para probar las mejoras realizadas en el código para soportar Linux. Alrededor de 400 pruebas terminan con errores y requieren correcciones (algunos errores son causados por falsos positivos, algunos requieren correcciones triviales, pero hay otros que necesitan la adición de soporte para nuevas llamadas al sistema). Se ha trabajado en la limpieza del código de Linuxulator y en la simplificación de la depuración. Se han preparado, pero aún no revisado, parches que añaden soporte para atributos extendidos y la llamada al sistema fexecve. - Continúan las reuniones del grupo de trabajo creado para llevar a cabo la migración de los códigos fuente del sistema centralizado de gestión de códigos fuente Subversion a un sistema descentralizado Git. El informe con propuestas para la migración está en proceso de preparación.
- En (enlazador en tiempo de ejecución) se ha mejorado el modo de ejecución directa ("/libexec/ld-elf.so.1 {ruta} {argumentos}").
- El proyecto de pruebas de fuzzing del núcleo de FreeBSD, utilizando el sistema syzkaller, sigue en desarrollo. Durante el período informado, se solucionaron problemas en la pila de red y en el código relacionado con la gestión de tablas de descriptores de archivos, identificados con syzkaller. A raíz del diagnóstico de errores en la pila SCTP, se añadieron cambios que simplifican la depuración. En el conjunto stress2 se incluyeron reglas para detectar posibles regresiones. Se añadió soporte para pruebas de fuzzing de nuevas llamadas al sistema, incluyendo copy_file_range(), __realpathat() y llamadas al subsistema Capsicum. Continúa el trabajo para abarcar pruebas de fuzzing en la capa de emulación de Linux. Se llevó a cabo un análisis y solución de errores destacados en informes recientes de Coverity Scan.
- En el sistema de integración continua se ha realizado el cambio para ejecutar todas las pruebas de la rama head utilizando solo clang/lld. Para las pruebas en RISC-V, se obtuvo la creación de una imagen de disco completa para ejecutar pruebas en QEMU utilizando OpenSBI. Se añadieron nuevas tareas para probar imágenes y máquinas virtuales powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
- Se está trabajando en la migración del conjunto de pruebas Kyua de los puertos (devel/kyua) al sistema base para resolver los problemas (los paquetes se instalan muy lentamente) que surgen al usar Kyua en nuevas arquitecturas, para las cuales el desarrollo se lleva a cabo utilizando un emulador o FPGA. La integración en el sistema base simplificará enormemente las pruebas en plataformas embebidas y su conexión con sistemas de integración continua.
- Se ha iniciado un proyecto para optimizar el rendimiento del controlador de puentes de red , que utiliza un único mutex para bloquear los datos internos, lo que impide alcanzar el rendimiento deseado en sistemas con un gran número de entornos jail o máquinas virtuales conectadas en una sola red. En esta etapa, se han agregado pruebas al código para prevenir la aparición de regresiones durante la modernización del trabajo con bloqueos. Se está considerando la posibilidad de utilizar ConcurrencyKit para paralelizar los manejadores de transferencia de datos (bridge_input(), bridge_output(), bridge_forward(), …).
- Se ha añadido una nueva llamada al sistema sigfastblock, que permite a un hilo determinar un bloque de memoria para un manejador de señales rápido, con el fin de mejorar el rendimiento de los manejadores de excepciones.
- Se añadió soporte para instrucciones atómicas LSE (Large System Extension) en el núcleo, soportadas por sistemas ARMv8.1. Estas instrucciones son necesarias para mejorar el rendimiento al trabajar en placas Cavium ThunderX2 y AWS Graviton 2. Los cambios añadidos determinan la presencia de soporte LSE e incluyen dinámicamente la implementación atómica basada en ellas. Durante las pruebas, el uso de LSE permitió reducir en un 15% el tiempo del procesador empleado en la compilación del núcleo.
- Se realizó una optimización del rendimiento y se amplió la funcionalidad de las herramientas para archivos ejecutables en formato ELF.
Se añadió soporte para la caché de información de depuración DWARF, se resolvieron problemas en las utilidades elfcopy/objcopy, y se agregó el procesamiento de DW_AT_ranges.
En readelf se implementó la posibilidad de decodificar los flags PROTMAX_DISABLE, STKGAP_DISABLE y WXNEEDED, así como Xen y GNU Build-ID.
- Seguridad
- Para mejorar el funcionamiento de FreeBSD en entornos cloud de Azure, se está trabajando en garantizar el soporte para el mecanismo HyperV Socket, que permite utilizar la interfaz de sockets para la interacción del sistema huésped con el entorno host sin necesidad de configurar la red.
- Se está trabajando para garantizar compilaciones reproducibles de FreeBSD, lo que permite verificar que los archivos ejecutables de los componentes del sistema se han construido exactamente a partir de los códigos fuente especificados y no contienen modificaciones no autorizadas.
- Se añadió a la utilidad elfctl la capacidad de gestionar la activación de mecanismos de protección adicionales (ASLR, PROT_MAX, stack gap, mapeo W+X) a nivel de procesos individuales.
- Sistemas de almacenamiento y sistemas de archivos
- Se está trabajando en la implementación de la funcionalidad para que NFS funcione sobre un canal de comunicación encriptado basado en TLS 1.3, en lugar de utilizar Kerberos (modo sec=krb5p), que se limita a cifrar solo los mensajes RPC y se implementa únicamente de forma programática. La nueva implementación utiliza la pila TLS proporcionada por el núcleo, que permite aprovechar las capacidades de aceleración por hardware. El código de NFS sobre TLS ya está casi listo para pruebas, pero aún requiere trabajo para soportar certificados de cliente firmados y adaptación de la pila TLS del núcleo para el envío de datos NFS (los parches para la recepción ya están listos).
- Soporte de hardware
- Se está trabajando en añadir soporte para CPUs x86 chinas Hygon basadas en tecnologías AMD.
- En el marco de CheriBSD, una bifurcación de FreeBSD para la arquitectura de procesadores de investigación. (Capacidades de Instrucciones RISC Mejoradas por Hardware), continúa la implementación del soporte para el procesador ARM Morello, que admitirá un sistema de gestión de acceso a la memoria CHERI, basado en el modelo de protección del proyecto Capsicum. El chip Morello se lanzará en 2021. Actualmente, el trabajo se centra en añadir soporte para la plataforma Arm Neoverse N1, que es la base de Morello. Se ha presentado un puerto inicial de CheriBSD para la arquitectura RISC-V. El desarrollo de CheriBSD continua para el prototipo de referencia CHERI basado en la arquitectura MIPS64.
- Se ha continuado el porte de FreeBSD para el SoC NXP LS1046A de 64 bits, basado en el procesador ARMv8 Cortex-A72, que incluye un motor de aceleración para el procesamiento de paquetes de red, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 y USB 3.0. Actualmente, se están preparando controladores QorIQ y LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC, y QorIQ LS10xx SDHCI para su inclusión en la rama principal de FreeBSD.
- Hasta la versión 2.1.1, se ha actualizado el controlador ena con soporte para la segunda generación de adaptadores de red ENAv2 (Elastic Network Adapter), que se utilizan en la infraestructura de Elastic Compute Cloud (EC2) para facilitar la comunicación entre nodos EC2 a velocidades de hasta 25 Gb/s. Se prepara una actualización a ENA 2.2.0.
- Se sigue mejorando el puerto de FreeBSD para la plataforma powerpc64. El enfoque principal está en asegurar un rendimiento de calidad en sistemas con procesadores IBM POWER8 y POWER9. Durante el período informado se ha realizado la transición de FreeBSD-CURRENT para usar el compilador LLVM/Clang 10.0 y el enlazador lld en lugar de GCC. Por defecto, las sistemas powerpc64 utilizan ELFv2 ABI, mientras que el soporte para ELFv1 ABI ha terminado. En FreeBSD-STABLE todavía se mantiene gcc 4.2.1. Se han resuelto problemas con los controladores virtio, aacraid e ixl. En los sistemas powerpc64 se ha logrado iniciar QEMU sin soporte para Huge Pages.
- Se ha continuado trabajando en la implementación del soporte para la arquitectura RISC-V. En su estado actual, FreeBSD ya se carga exitosamente en la placa SiFive Hifive Unleashed, para la cual se han preparado los controladores
UART, SPI y PRCI, y admite el firmware OpenSBI y SBI 0.2. Durante el período informado, el trabajo se ha centrado en la migración de GCC a clang y lld.
- Aplicaciones y sistema de puertos
- La colección de puertos de FreeBSD ha superado la marca de 39,000 puertos, y el número de PR sin cerrar supera ligeramente los 2,400, de los cuales 640 PR no se han analizado. Durante el período informado, se realizaron 8,146 cambios por parte de 173 desarrolladores. Cuatro nuevos participantes (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) obtuvieron derechos de committer. Se añadió la bandera USES=qca y se eliminó la bandera USES=zope (debido a la incompatibilidad con Python 3). Se trabaja en la eliminación de Python 2.7 del árbol de puertos: todos los puertos vinculados a Python 2 deben ser portados a Python 3 o serán eliminados. El gestor de paquetes pkg se actualizó a la versión 1.13.2.
- Se actualizaron los componentes de la pila gráfica y los puertos relacionados con xorg.
El servidor X.org se actualizó a la versión 1.20.8 (anteriormente se suministraba la rama 1.18), lo que permitió que FreeBSD utilice por defecto el backend udev/evdev para manejar dispositivos de entrada. El paquete Mesa se configuró por defecto para usar la extensión DRI3 en lugar de DRI2. Se trabaja en mantener actualizados los controladores gráficos, la pila de dispositivos de entrada y los componentes drm-kmod (puerto que proporciona funcionalidad a los módulos DRM amdgpu, i915 y radeon, usando el marco linuxkpi para compatibilidad con el Direct Rendering Manager del núcleo de Linux). - El entorno de escritorio KDE Plasma, KDE Frameworks, KDE Applications y Qt se mantienen actualizados y se han actualizado a las versiones más recientes. Se ha añadido una nueva aplicación al puerto kstars (atlas estelar).
- Se han llevado a cabo trabajos para corregir cambios regresivos en el gestor de ventanas xfwm4, que surgieron después de actualizar Xfce a la versión 4.14 (por ejemplo, aparecían artefactos al decorar ventanas).
- El puerto de Wine se actualizó a la versión Wine 5.0 (anteriormente se ofrecía 4.0.3).
- A partir de la versión 1.14 del compilador del lenguaje Go, se añadió soporte oficial para la arquitectura ARM64 en FreeBSD 12.0.
- OpenSSH en el sistema base se actualizó a la versión 7.9p1.
- Se implementó y se publicó en los puertos (devel/libsysctlmibinfo2) la biblioteca sysctlmibinfo2, que proporciona una API para acceder al MIB de sysctl y realiza la traducción de nombres de sysctl a identificadores de objetos (OID).
- Se ha formado una actualización de distribución , que es una edición de FreeBSD, adaptada para ser utilizada como escritorio portátil, arrancando desde una unidad USB. El entorno gráfico se basa en el gestor de ventanas . Para la configuración de dispositivos se utiliza (se soporta el montaje de CD9660, FAT, HFS+, NTFS, Ext2/3/4), para la configuración de la red inalámbrica — , y para el control del volumen — .
- Comenzó sobre la redacción de documentación completa para el gestor de entornos jail . Se está preparando para el lanzamiento de pot 0.11.0, que incluirá herramientas de gestión de la pila de red.
Fuente: opennet.ru
