FreeBSD 發展報告 Q2019 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

添加評論