Relatório de desenvolvimento do FreeBSD para o primeiro trimestre de 2020

Publicado Relatório sobre o desenvolvimento do projeto FreeBSD de janeiro a março de 2020. As mudanças incluem:

  • Questões gerais e sistêmicas
    • Do conjunto de fontes do FreeBSD-CURRENT, foram removidos os compiladores GCC, assim como as utilidades não utilizadas gperf, gcov e gtc (compilador devicetree). Todas as plataformas que não suportam Clang foram transferidas para o uso de um conjunto de ferramentas de construção externas, instaladas a partir dos ports. O sistema base fornecia uma versão desatualizada do GCC 4.2.1, e a integração de versões mais recentes foi impossível devido à transição do 4.2.2 para a licença GPLv3, que foi considerada inaceitável para os componentes básicos do FreeBSD. As versões atuais do GCC, incluindo o GCC 9, ainda podem ser instaladas a partir de pacotes e ports.
    • Na infraestrutura de emulação do ambiente Linux (Linuxulator), foi adicionada a suportar a chamada de sistema sendfile, o modo TCP_CORK (necessário para o nginx), e a flag MAP_32BIT (que resolve o problema de execução de pacotes com Mono do Ubuntu Bionic). Problemas com a resolução de DNS ao usar glibc mais nova que 2.30 (por exemplo, do CentOS 8) foram resolvidos.
      Na infraestrutura de integração contínua, foi garantido o início de tarefas para executar o LTP (Linux Testing Project) sob o Linuxulator para testar as melhorias feitas no código para suportar o Linux. Aproximadamente 400 testes falham e necessitam de correção (alguns erros são causados por falsos positivos, outros requerem correções triviais, mas há também aqueles que exigem a adição de suporte a novas chamadas de sistema). Foi realizado trabalho de limpeza do código do Linuxulator e simplificação da depuração. Foram preparados, mas ainda não revisados, patches com suporte a atributos extendidos e à chamada de sistema fexecve.
    • Continuam as reuniões do grupo de trabalho criado para conduzir a migração dos fontes de um sistema centralizado de controle de versões Subversion para um sistema descentralizado Git. O relatório com propostas para a migração está em fase de preparação.
    • Em rtld (linker em tempo de execução) melhorado o modo de execução direta ("/libexec/ld-elf.so.1 {caminho} {argumentos}").
    • O projeto de teste de fuzzing do núcleo do FreeBSD continua a se desenvolver com o uso do sistema syzkaller. No período relatado, foram resolvidos problemas no stack de rede e no código relacionado ao trabalho com tabelas de descritores de arquivos, identificados através do syzkaller. A partir da análise de erros no stack SCTP, foram acrescentadas mudanças que facilitam a depuração. Novas regras foram adicionadas ao conjunto stress2 para identificar possíveis regressões. O suporte para fuzzing de novas chamadas de sistema foi introduzido, incluindo copy_file_range(), __realpathat() e chamadas do subsistema Capsicum. O trabalho para abranger o fuzzing da camada de emulação do Linux continua. Foi realizada a análise e a correção de erros encontrados nos relatórios recentes do Coverity Scan.
    • No sistema de integração contínua, foi feita a transição para a execução de todos os testes da branch head utilizando apenas clang/lld. Durante os testes para RISC-V, foi garantida a formação de uma imagem de disco completa para executar testes no QEMU utilizando o OpenSBI. Novas tarefas foram adicionadas para testar imagens e máquinas virtuais powerpc64 (FreeBSD-head-powerpc64-images, FreeBSD-head-powerpc64-testvm).
    • Está em andamento o trabalho de migração do conjunto de testes Kyua dos ports (devel/kyua) para o sistema base para resolver problemas (os pacotes estão sendo instalados muito lentamente) que surgem ao usar o Kyua em novas arquiteturas, para as quais o desenvolvimento está sendo realizado com o uso de um emulador ou FPGA. A integração ao sistema base facilitará significativamente o teste de plataformas embarcadas e a conexão com sistemas de integração contínua.
    • Foi iniciado um projeto para otimizar o desempenho do driver de pontes de rede. if_bridge, que usa um mutex para bloquear dados internos, o que não permite alcançar o desempenho desejado em sistemas com muitos ambientes jail ou máquinas virtuais conectadas em uma única rede. Neste estágio, foram adicionados testes ao código para prevenir a ocorrência de regressões durante a modernização do trabalho com bloqueios. Está sendo considerada a possibilidade de utilizar o ConcurrencyKit para paralelizar os manipuladores de transmissão de dados (bridge_input(), bridge_output(), bridge_forward(), …).
    • Foi adicionada uma nova chamada de sistema sigfastblock, que permite a um thread identificar um bloco de memória para um manipulador de sinais rápido, com o objetivo de aumentar o desempenho dos manipuladores de exceções.
    • O suporte a instruções atômicas LSE (Large System Extension) foi adicionado ao núcleo, suportado por sistemas ARMv8.1. Essas instruções são essenciais para melhorar o desempenho em placas Cavium ThunderX2 e AWS Graviton 2. As alterações adicionadas definem a presença de suporte a LSE e ativam dinamicamente a implementação atômica com base nelas. Durante os testes, o uso de LSE permitiu reduzir em 15% o tempo de CPU gasto na compilação do núcleo.
    • Foi realizada uma otimização de desempenho e ampliada a funcionalidade da ferramenta para arquivos executáveis no formato ELF.
      Suporte ao cache de informações de depuração DWARF foi adicionado, resolvendo problemas nas utilitários elfcopy/objcopy, com a inclusão do processamento de DW_AT_ranges.
      No readelf, foi implementada a capacidade de decodificar os sinais PROTMAX_DISABLE, STKGAP_DISABLE e WXNEEDED, além de Xen e GNU Build-ID.
  • Segurança
    • Para melhorar o funcionamento do FreeBSD em ambientes de nuvem Azure, o trabalho está sendo realizado para garantir suporte ao mecanismo HyperV Socket, que permite o uso de interface de soquete para interação entre o sistema convidado e o ambiente host sem a necessidade de configuração de rede.
    • Está sendo trabalhado para garantir compilações repetíveis do FreeBSD, permitindo verificar se os arquivos executáveis dos componentes do sistema foram construídos exatamente a partir dos códigos fonte declarados e não contêm alterações indesejadas.
    • Adicionou-se à ferramenta elfctl a capacidade de controlar a ativação de mecanismos adicionais de proteção (ASLR, PROT_MAX, stack gap, mapeamento W+X) no nível de processos individuais.
  • Sistemas de armazenamento e sistemas de arquivos
    • Está em andamento o desenvolvimento da funcionalidade para operação do NFS sobre um canal de comunicação criptografado baseado em TLS 1.3, em vez de usar Kerberos (modo sec=krb5p), que limita a criptografia apenas das mensagens RPC e é implementado apenas software. A nova implementação utiliza a pilha TLS fornecida pelo núcleo, permitindo o uso de recursos de aceleração de hardware. O código NFS sobre TLS já está quase pronto para teste, mas ainda requer trabalho para suportar certificados de cliente assinados e adaptação da pilha TLS do núcleo para enviar dados NFS (os patches para recepção já estão prontos).
  • Suporte a hardware
    • Está sendo trabalhado para adicionar suporte a CPUs x86 chinesas Hygon baseadas em tecnologias AMD;
    • No âmbito do CheriBSD, um desvio do FreeBSD para a arquitetura de processadores de pesquisa CHERI (Capacidade das Instruções RISC com Hardware Aprimorado), a implementação do suporte ao processador ARM Morello continua, que irá suportar um sistema de gerenciamento de acesso à memória CHERI, baseado no modelo de proteção do projeto Capsicum. O chip Morello planejam será lançado em 2021. Atualmente, o trabalho está focado na adição de suporte à plataforma Arm Neoverse N1, que é a base do Morello. Um porto inicial do CheriBSD para a arquitetura RISC-V foi apresentado. O desenvolvimento do CheriBSD para o protótipo de referência CHERI baseado na arquitetura MIPS64 continua.
    • A portabilidade do FreeBSD para o SoC NXP LS1046A de 64 bits com processador ARMv8 Cortex-A72, que possui um motor integrado para acelerar o processamento de pacotes de rede, Ethernet de 10 Gb, PCIe 3.0, SATA 3.0 e USB 3.0, foi continuada. Atualmente, os drivers QorIQ e LS1046A, GPIO, QorIQ LS10xx AHCI, VF610 I2C, Epson RX-8803 RTC e QorIQ LS10xx SDHCI estão sendo preparados para inclusão na versão principal do FreeBSD.
    • Até a versão 2.1.1, o driver ena foi atualizado com suporte para a segunda geração de adaptadores de rede ENAv2 (Elastic Network Adapter), utilizados na infraestrutura Elastic Compute Cloud (EC2) para estabelecer comunicação entre nós EC2 a velocidades de até 25 Gb/s. Uma atualização para ENA 2.2.0 está em preparação.
    • O aprimoramento do porto do FreeBSD para a plataforma powerpc64 continua. O foco principal está em garantir um desempenho robusto em sistemas com processadores IBM POWER8 e POWER9. No período em questão, o FreeBSD-CURRENT foi adaptado para usar o compilador LLVM/Clang 10.0 e o vinculador lld em vez do GCC. Por padrão, o ABI ELFv2 é utilizado para sistemas powerpc64, enquanto o suporte ao ABI ELFv1 foi descontinuado. No FreeBSD-STABLE, o gcc 4.2.1 continua disponível. Problemas com os drivers virtio, aacraid e ixl foram resolvidos. Sistemas powerpc64 agora podem iniciar o QEMU sem suporte a Huge Pages.
    • O trabalho de implementação do suporte à arquitetura RISC-V foi continuado. Nesta fase, o FreeBSD já inicializa com sucesso na placa SiFive Hifive Unleashed, para a qual drivers
      UART, SPI e PRCI foram preparados, e suporta o firmware OpenSBI e SBI 0.2. Durante o período, o foco foi a migração do GCC para clang e lld.
  • Aplicativos e sistema de ports
    • A coleção de ports do FreeBSD ultrapassou a marca de 39 mil ports, com um número de PR não resolvidos ligeiramente superior a 2400, dos quais 640 PR ainda não foram analisados. Durante o período de relatório, foram feitas 8146 alterações por 173 desenvolvedores. Quatro novos participantes (Loïc Bartoletti, Mikael Urankar, Kyle Evans, Lorenzo Salvadore) receberam direitos de commit. A flag USES=qca foi adicionada e a flag USES=zope foi removida (devido à incompatibilidade com Python 3). O trabalho está em andamento para remover o Python 2.7 da árvore de ports — todos os ports dependentes do Python 2 devem ser portados para o Python 3 ou serão excluídos. O gerenciador de pacotes pkg foi atualizado para a versão 1.13.2.
    • Componentes da pilha gráfica e ports relacionados ao xorg foram atualizados.
      O servidor X.org foi atualizado para a versão 1.20.8 (anteriormente a versão 1.18), permitindo que o FreeBSD utilize por padrão o backend udev/evdev para o processamento de dispositivos de entrada. O pacote Mesa foi convertido para usar por padrão a extensão DRI3 em vez do DRI2. O trabalho está em andamento para manter atualizados os drivers gráficos, a pilha de dispositivos de entrada e os componentes drm-kmod (um port que fornece suporte aos módulos DRM amdgpu, i915 e radeon, usando a estrutura linuxkpi para compatibilidade com o Direct Rendering Manager do núcleo Linux).
    • Desktop KDE Plasma, KDE Frameworks, KDE Applications e Qt estão atualizados e suportam as versões mais recentes. Um novo aplicativo kstars (atlas estelar) foi adicionado aos ports.
    • Trabalhos foram realizados para corrigir regressões no gerenciador de janelas xfwm4, que surgiram após a atualização do Xfce para a versão 4.14 (por exemplo, artefatos apareceram ao decorar janelas).
    • O port do Wine foi atualizado para a versão 5.0 (anteriormente era oferecido a versão 4.0.3).
    • A partir da versão 1.14, o compilador da linguagem Go adicionou suporte oficial para a arquitetura ARM64 no FreeBSD 12.0.
    • OpenSSH no sistema base foi atualizado para a versão 7.9p1.
    • Foi implementada e disponibilizada nos ports (devel/libsysctlmibinfo2) a biblioteca sysctlmibinfo2, que fornece uma API para acesso à MIB sysctl e realiza a tradução de nomes sysctl em identificadores de objetos (OID).
    • Uma atualização do distribuidor foi formada. NomadBSD 1.3.1, que é uma versão do FreeBSD, adaptada para uso como uma área de trabalho portátil, iniciada a partir de um dispositivo USB. O ambiente gráfico é baseado no gerenciador de janelas Openbox. Para montagem de dispositivos, é utilizado DSBMD (suporte para montagem CD9660, FAT, HFS+, NTFS, Ext2/3/4), para configurar a rede sem fio — wifimgr, e para controlar o volume — DSBMixer.
    • Começou trabalho sobre a elaboração de documentação completa para o gerenciador de ambientes jail. pot. O pot 0.11.0 está em preparação para lançamento, contendo ferramentas de gerenciamento da pilha de rede.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster