FreeBSD 开发报告 2019 年第 XNUMX 季度

发表 2019年XNUMX月至XNUMX月FreeBSD项目发展报告。 在这些变化中我们可以注意到:

  • 一般性和系统性问题
    • 核心团队已普遍批准将代码包含在根据 BSD 许可证分发的系统中以及附加专利协议的可能性(BSD+专利),但根据本许可证将每个组件包含在系统中的决定必须单独批准;
    • 为将源代码从集中式源控制系统 Subversion 迁移到分散式系统 Git 而创建的工作组召开了第一次会议。 关于迁移可行性的讨论仍在进行中,许多问题的决策尚未制定(例如,contrib/ 该怎么办、是否有必要在当前 git 存储库中重新生成哈希值以及如何最好地实施测试)承诺);
    • 来自 NetBSD 移植的 KCSAN(Kernel Concurrency Sanitizer)工具包,它允许您检测在不同 CPU 上运行的内核线程之间的竞争条件;
    • 使用 Clang 的内置汇编器 (IAS) 代替 GNU binutils 汇编器的工作正在进行中;
    • Linux环境仿真基础设施(Linuxulator)适合在ARM64架构上工作。 实现了“renameat2”系统调用。 strace 实用程序已得到改进,可以诊断 Linuxulator 中运行的 Linux 可执行文件中的问题。 用新的 glibc 链接可执行文件时崩溃的问题已得到解决。 Linuxulator 的 Linux 组件端口已更新至 CentOS 7.7;
    • 作为 Google Summer of Code 计划的一部分,学生们成功完成了六个项目:准备了统一 (IPv4/IPv6) ping 实用程序的实现、开发了用于测试防火墙和识别内核错误的工具(Kernel sanitizer)、mac_ipacl提出了模块,为虚拟内存压缩编写了代码,并完成了将端口构建过程与本地安装分开的工作;
    • 使用该系统对 FreeBSD 内核进行模糊测试的项目仍在继续开发 塞兹卡勒。 报告期内,使用 syzkaller 发现并消除了十多个错误。 要在基于 bhyve 的虚拟机中运行 syzkaller,需要一个单独的服务器,并使用
      syzbot 已在 Google 基础设施中建立了各种 FreeBSD 子系统的测试。 组织将所有崩溃的信息传输到 backtrace.io 服务,以简化其分组和分析;

    • 正在努力更新内核级别的 zlib 实现。
      与压缩相关的代码已从 1.0.4 多年前发布的 zlib 20 迁移到当前的 zlib 1.2.11 代码库。 为了统一对 zlib 的访问,内核中添加了 compress、compress2 和 uncompress 函数。 确保 netgraph 子系统的 PPP 协议运行的代码已转移到使用 zlib 的系统实现,而不是该库自己的版本。 kern_ctf.c、opencryptodeflate、geom_uzip、subr_compressor 子系统也已转移到新的 zlib。
      if_mxge、bxe 更新和 ng_deflate;

    • 正在开发新的内核接口 系统信息,它允许您在 sysctl 参数数据库中查找元素,以 MIB(管理信息库)的形式进行处理,并将有关对象的信息传输到用户空间。
  • 安全
    • 内核模块开发 mac_ipacl,基于 TrustedBSD MAC 框架,并为监狱环境的网络堆栈设置实现访问控制系统。 例如,使用 mac_ipacl,主机系统管理员可以防止监狱环境中的 root 用户更改或设置某些网络接口的 IP 地址或子网设置。 拟议的强制访问控制系统 它允许 设置 Jail 允许的 IP 地址和子网列表,禁止在 Jail 中安装某些 IP 和子网,或限制仅更改某些网络接口的参数;
    • 英特尔向该项目捐赠了一个软件堆栈端口 TPM 2.0 (可信平台模块)与安全计算芯片接口,通常用于验证固件和操作系统引导加载程序的加载。 堆栈组件以 ports security/tpm2-tss、security/tpm2-tools 和 security/tpm2-abrmd 的形式呈现。 tpm2-tss 端口包括用于使用 TPM2 API 的库,tpm2-tools 提供用于执行 TPM 操作的命令行实用程序,tpm2-abrmd 包含 TPM 访问代理和资源管理器组件的后台进程实现,用于复用来自不同 TPM 用户的请求到单个设备。 除了在 FreeBSD 上验证启动之外,TPM 还可以通过在单独的芯片上执行加密操作来增强 Strongswan IPsec、SSH 和 TLS 的安全性;
    • amd64 架构的内核适合使用 W^X(写入 XOR 执行)保护技术进行引导,这意味着内存页不能同时访问以进行写入和执行(现在可以使用可执行内存页来加载内核被禁止)。 新的内核保护方法包含在 HEAD 分支中,并将包含在 FreeBSD 13.0 和 12.2 版本中;
    • 对于 mmap 和 mprotect 系统调用 已实施 宏 PROT_MAX(),它允许您确定允许进一步更改的访问限制标志集(PROT_READ、PROT_WRITE、PROT_EXEC)。 使用 PROT_MAX(),开发人员可以禁止将内存区域转移到可执行类别,或者请求不允许执行但稍后可以转换为可执行文件的内存。 例如,内存区域可能仅在动态链接或 JIT 代码生成期间开放用于写入,但一旦写入完成,它就仅限于读取和执行,并且在将来,如果受到损害,攻击者将无法访问该区域。将无法启用对该内存块的写入。 除了 PROT_MAX() 之外,还实现了 sysctl vm.imply_prot_max,它在激活时根据第一次调用 mmap 的初始参数确定有效标志集;
    • 为了增强对漏洞利用的保护,除了地址空间随机化技术(ASLR)之外,还采用了一种机制,用于随机化寻址初始堆栈帧和堆栈上的结构的指针偏移量,以及有关环境、程序启动参数和数据的信息建议使用 ELF 格式的可执行映像;
    • 已经完成了从 libc 中删除不安全的 gets 函数的工作(从 C11 标准开始,该函数已从规范中排除),并纠正了仍然使用该函数的端口。 该更改计划在 FreeBSD 13.0 中提供;
    • 一个实验项目已经启动,旨在创建基于该框架编排监狱环境的工具 用于创建和导出图像,实现类似于 Docker,以及驱动程序 游牧,它提供了一个在监狱环境中动态启动应用程序的接口。 所提出的模型允许我们将创建监狱环境和在其中部署应用程序的过程分开。 该项目的目标之一是提供一种将监狱作为 Docker 风格的容器进行操作的方法;
  • 存储和文件系统
    • 从 NetBSD 到“makefs”实用程序 搬家了 FAT 文件系统支持 (msdosfs)。 准备好的更改允许您使用 FAT 创建 FS 映像,而无需使用 md 驱动程序且无需 root 权限;
    • FUSE(USERspace 中的文件系统)子系统驱动程序的重新设计已完成,允许在用户空间中创建文件系统实现。 最初发布的驱动程序包含许多错误,并且基于 7.8 年前发布的 FUSE 11。 作为驱动程序现代化项目的一部分,已实现对 FUSE 7.23 协议的支持,添加了用于检查内核端访问权限的代码(“-o default_permissions”),添加了对 VOP_MKNOD、VOP_BMAP 和 VOP_ADVLOCK 的调用,提供了中断 FUSE 操作的能力,fusefs 中添加了对未命名管道和 unix 套接字的支持,可以将 kqueue 用于 /dev/fuse,可以通过“mount -u”更新挂载参数,添加了支持为了通过 NFS 导出 fusions,实现了 RLIMIT_FSIZE 记账,添加了 FOPEN_KEEP_CACHE 和 FUSE_ASYNC_READ 标志,进行了显着的性能优化并改进了缓存组织。 新驱动程序包含在 head 和 stable/12 分支中(包含在 FreeBSD 12.1 中);
    • FreeBSD 的 NFSv4.2 (RFC-7862) 实现已基本完成。 报告期内的主要重点是测试。 验证与 Linux 实现的兼容性的测试已经完成,但使用 NFSv4.2 的 pNFS 服务器测试仍在进行中。 一般来说,代码已经准备好集成到 FreeBSD 头/当前分支中。 新版本的 NFS 添加了对 posix_fadvise、posix_fallocate 函数、lseek 中的 SEEKHOLE/SEEKDATA 模式的支持、在服务器上本地复制部分文件的操作(无需传输到客户端);
  • 硬件支持
    • 已经启动了一个项目来提高 FreeBSD 在笔记本电脑上的性能。 第一个接受 FreeBSD 硬件支持审核的设备是第七代 Lenovo X1 Carbon 笔记本电脑;
    • CheriBSD,FreeBSD 的一个分支,用于研究处理器架构 切里 (功能硬件增强型 RISC 指令)已更新,以支持即将推出的 ARM Morello 处理器,该处理器将支持基于 Capsicum 设计安全模型的 CHERI 内存访问控制系统。 莫雷洛芯片 正在计划中 2021 年发布。 CheriBSD开发人员也持续关注基于MIPS架构的CHERI参考原型的开发;
    • 扩展了对 RockPro3399 和 NanoPC-T64 板中使用的 RockChip RK4 芯片的支持。 最显着的改进是对 eMMC 的支持以及为板上使用的 eMMC 控制器开发了新的驱动程序;
    • 我们正在继续努力实现对采用 ARMv64 Cortex-A5871 处理器的 ARM8 SoC Broadcom BCM57X 的支持,旨在用于路由器、网关和网络存储。 报告期内
      iProc PCIe 支持已得到扩展,并且添加了使用硬件加密操作来加速 IPsec 的能力。
      预计第四季度将代码集成到 HEAD 分支;

    • 针对 powerpc64 平台的 FreeBSD 移植开发已经取得了重大进展。 重点是为采用 IBM POWER8 和 POWER9 处理器的系统提供优质性能,但也可以选择支持在较旧的 Apple Power Mac、x500 和 Amiga A1222 上运行。 powerpc*/12 分支继续随 gcc 4.2.1 一起提供,powerpc*/13 分支将很快迁移到 llvm90。 33306个端口中,30514个已成功组装;
    • FreeBSD 移植继续针对基于 ARMv64 Cortex-A1046 处理器的 8 位 SoC NXP LS72A,具有集成网络数据包处理加速引擎、10 Gb 以太网、PCIe 3.0、SATA 3.0 和 USB 3.0。 报告期内,实现了对USB 3.0、SD/MMC、I2C、DPAA和GPIO网络接口的支持。 有计划支持QSPI并优化网络接口的性能。 预计将于 4 年第四季度完成工作并纳入 HEAD 分支;
    • ena 驱动程序已更新,支持弹性计算云 (EC2) 基础设施中使用的第二代 ENAv2(弹性网络适配器)网络适配器,以高达 2 Gb/s 的速度组织 EC25 节点之间的通信。 已在 ena 驱动程序中添加并测试了 NETMAP 支持,并且内存布局已进行调整以在 Amazon EC2 A1 环境中启用 LLQ 模式;
  • 应用程序和端口系统
    • 更新了图形堆栈组件和 xorg 相关端口。 使用 USE_XORG 和 XORG_CAT 的端口已移至 USES 框架,而不是通过 bsd.port.mk 调用 bsd.xorg.mk。 此类移植现在在其 makefile 中包含“USES=xorg”标志。 XORG_CAT 功能已从 bsd.xorg.mk 中分离出来,现在由“USES=xorg-cat”标志启用。 添加了用于从 git 存储库直接生成 xorg 端口的工具
      freedesktop.org,例如,它允许您为尚未发布的版本创建端口。 未来,我们计划准备使用介子组装系统的工具而不是autotools来构建xorg端口。

      已完成清理与不再受支持的组件相关的旧 xorg 端口的工作,例如,x11/libXp 端口已被删除,x11/Xxf86misc、x11-fonts/libXfontcache 和graphics/libGLw 端口已被弃用;

    • 我们已经完成了改进对 FreeBSD 中 Java 11 和更新版本的支持,以及将一些更改移植到 Java 8 分支的工作。在实现了对 Java Flight Recorder、HotSpot Serviceability Agent、HotSpot Debugger 等新 Java 11 功能的支持之后对于 FreeBSD、DTrace、Javac Server、Java Sound 和 SCTP,工作转移到确保通过所有兼容性测试。 通过测试时失败的次数从50次减少到2次;
    • KDE Plasma 桌面、KDE ​​框架、KDE ​​应用程序和 Qt 保持最新并更新到最新版本;
    • 带有 Xfce 桌面的 Ports 已更新发布 4.14;
    • FreeBSD 端口树已超过 38000 个端口,未关闭的 PR 数量略多于 2000 个,其中 400 个 PR 尚未解决。 报告期内,7340家开发商进行了169项变更。 两名新参与者(Santhosh Raju 和 Dmitri Goutnik)获得了提交者权利。 新版本的 pkg 1.12 包管理器已经发布,支持 ports 树中的覆盖和 bsd.sites.mk 的清理。 移植中的重要版本更新包括:Lazarus 2.0.4、LLVM 9.0、Perl5.30、PostgreSQL 11、Ruby 2.6、Firefox 69.0.1、Firefox-esr 68.1.0、Chromium 76.0;
    • 项目开发仍在继续 克隆操作系统, 发展 用于部署虚拟服务器基础架构的专门发行版。 就其解决的任务而言,ClonOS 类似于 Proxmox、Triton (Joyent)、OpenStack、OpenNebula 和 Amazon AWS 等系统,其主要区别在于使用 FreeBSD 以及管理、部署和管理 FreeBSD Jail 容器和基于 Bhyve 和 Xen 虚拟机管理程序的虚拟环境。 最近的变化包括支持
      适用于 Linux/BSD VM 的 cloud-init 和适用于 Windows VM 的 cloudbase-init,开始过渡到使用本机映像,使用 Jenkins CI 测试构建并使用新的 pkg 存储库进行安装
      来自软件包的 ClonOS。

来源: opennet.ru

添加评论