Nach zweieinhalb Jahren seit der Bildung des Branches 12.x wird das Release von FreeBSD 13.0 präsentiert, das für die Architekturen amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 und riscv64 vorbereitet wurde. Zudem wurden Images für Virtualisierungssysteme (QCOW2, VHD, VMDK, raw) und Cloud-Umgebungen wie Amazon EC2, Google Compute Engine und Vagrant erstellt.
Hauptneuheiten:
- Es wurde der Übergang zu einer einheitlichen Implementierung des ZFS-Dateisystems in Linux gemäß dem OpenZFS-Projekt vollzogen. Zu den Funktionen, die in FreeBSD nach dem Übergang zu OpenZFS verfügbar wurden, gehören: erweiterte Quotenverwaltung, Verschlüsselung von Datensätzen, separate Auswahl von Verteilklassen (allocation classes), Nutzung von Vektorprozessoranweisungen zur Beschleunigung der RAIDZ-Implementierung und zur Berechnung von Prüfziffern, Unterstützung des ZSTD-Kompressionsalgorithmus, der Multihost-Modus (MMP, Multi Modifier Protection), verbesserte Befehlszeilenwerkzeuge sowie die Behebung zahlreicher Probleme im Zusammenhang mit Race Conditions und Sperren.
- Der ARM64 (AArch64) Port wurde auf die erste Unterstützungsstufe (Tier 1) übertragen, die von Teams betreut wird, die für die Behebung von Sicherheitsanfälligkeiten, die Bereitstellung von Releases und die Wartung der Ports verantwortlich sind. Tier 1 umfasst die Erstellung von Installationspaketen, Binäraktualisierungen und fertigen Paketen sowie die Gewährleistung der Lösung spezifischer Probleme und die Aufrechterhaltung der ABI-Konstanz für die Benutzerumgebung und den Kernel (außer für einige Subsysteme).
- Die i386-Architektur wurde auf die zweite Unterstützungsstufe (Tier 2) übertragen, bei der die Erstellung von Installationspaketen, Binäraktualisierungen und fertigen Paketen fortgesetzt wird, jedoch keine Garantie für die Lösung spezifischer Probleme gegeben wird. Der CPU-Typ (CPUTYPE) für die i386-Architektur wurde standardmäßig von 486 auf 686 geändert (bei Bedarf können Pakete für i486 und i586 selbst erstellt werden).
- Die Komponenten clang, lld, lldb, compiler-rt, llvm, libunwind und libc++ wurden auf Version 11 aktualisiert.
- Die Entwicklung wurde von dem zentralisierten System zur Verwaltung von Quelltexten Subversion auf das dezentralisierte System Git übertragen.
- Das Basissystem wurde von Anwendungen, die unter der GPL-Lizenz verbreitet werden, bereinigt. Aus dem Quellbaum wurden die Versionen binutils 2.17 und gcc 4.2.1 entfernt, und alle unterstützten Architekturen wurden auf das LLVM/clang-Toolkit umgestellt. Die unter der BSD-Lizenz verbreiteten Versionen der Utilities grep und dtc (Device Tree Compiler) haben die GPL-Versionen ersetzt. Der automatische Montageprozess amd wurde entfernt; seine Funktionalität wird jetzt durch autofs realisiert. Das Utility ctm wurde entfernt, stattdessen wird empfohlen, den Port misc/ctm zu verwenden.
- Der Routing-Stack wurde überarbeitet und unterstützt jetzt Nexthop-Objekte, die Statusinformationen speichern, die für die Paketweiterleitung an das gewünschte Ziel verwendet werden. Es besteht die Möglichkeit, eigene Routensuche-Algorithmen zu integrieren. Zudem wurden Routenfindungsalgorithmen aus DPDK (Data Plane Development Kit) librte hinzugefügt, die die Arbeit mit sehr großen Routing-Tabellen optimieren. Für Proxy-ARP-Anfragen wird die FIB-Schnittstelle verwendet. Es ist nun möglich, die Anzahl der FIB zur Laufzeit über sysctl net.fibs zu ändern. Unterstützt werden auch temporäre Routen für IPv4 und IPv6 (mit festgelegter Lebensdauer).
- Die Unterstützung für Multipath-Routing wurde überarbeitet und skalierbarer gestaltet, sodass die Suchzeit unabhängig von der Größe der Liste ist (O(1)). Die neue Implementation von Multipath ist nun mit dem Kernel-Parameter ROUTE_MPATH verbunden, der den RADIX_MPATH ersetzt und standardmäßig aktiviert ist. Zur Verwaltung von Multipath wurde sysctl net.route.multipath eingeführt.
- Der überarbeitete krytografische Framework auf Kernel-Ebene unterstützt moderne kryptografische Algorithmen und vereinfacht die Schnittstelle für die Nutzung von Verschlüsselungen in Treibern und anderen Komponenten des Kernels. Veraltete Algorithmen wie ARC4, Blowfish, CAST128, DES, MD5-HMAC und Skipjack wurden entfernt. Die Unterstützung für Algorithmen in IPsec und Kerberos, die in den RFC 8221 und RFC 6649/8429 als veraltet erklärt wurden, einschließlich 3DES, wurde eingestellt. Bereits als veraltet erklärte Algorithmen in der Datenträgersicherheitssubsystem geli und cryptodev wurden entfernt.
- Der GENERIC-Kernel hat Unterstützung für die Treiber aesni und armv8crypto hinzugefügt, um die Disk-Verschlüsselung auf Basis von geli mit Hilfe der AES-NI-Befehle für amd64/i386-Architekturen und AES-XTS für ARM64 zu beschleunigen.
- Ein Treiber für die Intel QuickAssist Crypto-Beschleuniger (QAT) und ein Treiber ossl mit optimierten, beschleunigten Software-Verschlüsselungsverfahren aus OpenSSL, die mit Assembler-Code optimiert wurden, wurden hinzugefügt. Der Treiber armv8crypto unterstützt jetzt AES-XTS und AES-GCM unter Verwendung der entsprechenden ARMv8-Prozessorbefehle.
- Die Implementierung von TLS (kTLS) wurde hinzugefügt, die auf der Kernel-Ebene von FreeBSD arbeitet und eine signifikante Leistungssteigerung der Verschlüsselung für TCP-Sockets ermöglicht. Die Versionen von TLS 1.0 bis 1.3 werden unterstützt. Für die Verschlüsselung kommen Kernel-Kryptotreiber mit Unterstützung für AES-CBC oder AES-GCM zum Einsatz. Um kTLS im Benutzerraum zu verwenden, ist eine Neucompilierung von OpenSSL mit der Option WITH_OPENSSL_KTLS erforderlich.
- Ein neuer Typ von Netzpuffern mbuf (network data buffer) wurde hinzugefügt, der es ermöglicht, in einem einzigen Puffer mehrere nicht reflektierte physische Speicherseiten darzustellen, was die Leistung des Aufrufs von sendfile(2) durch die Verringerung der Größe von mbuf-Listen in den Socket-Puffern verbessert.
- Die Unterstützung für den proportionalen Paketreduzierungsalgorithmus (Proportional Rate Reduction, RFC 6937) wurde in den TCP-Stack integriert, um die optimalen Stromparameter schneller wiederherzustellen, nachdem es temporäre Probleme bei der Datenübertragung gegeben hat. Um PRR zu deaktivieren, ist der sysctl net.inet.tcp.do_prr vorgesehen.
- Die Möglichkeiten des Hypervisors Bhyve wurden erweitert: Es wurde die Unterstützung für die gemeinsame Dateizugriffsbereitstellung mithilfe von VirtIO-9p (VirtFS) hinzugefügt. Die Möglichkeit zur Arbeit mit Snapshots wurde implementiert. virtuellen Maschinen. Unterstützung für PCI HDAudio-Geräte und zusätzliche serielle Ports COM3 und COM4 hinzugefügt. Veraltete Modelle wie bvmconsole und bvmdebug wurden entfernt. Die Stabilität bei der Nutzung von VNC-Clients, einschließlich der macOS-Anwendung „Bildschirmfreigabe“, wurde verbessert.
- Im VirtIO-Treiber wurde die Unterstützung für die Spezifikation VirtIO V1 hinzugefügt, was die Kompatibilität der Gastsysteme mit FreeBSD in verschiedenen Emulatoren und Hypervisoren verbessert.
- Für an Jail-Umgebungen angehängte Prozesse wurde eine Umwandlung der CPU-Bindungen gewährleistet (die ursprünglich an den Prozess gebundene cpuset wird unter Berücksichtigung des cpuset des Jails und der festgelegten Einschränkungen ersetzt).
- Die Möglichkeit zur Erstellung eines Basis-Systems von FreeBSD in Umgebungen basierend auf anderen Betriebssystemen wurde hinzugefügt. Diese Notwendigkeit ergibt sich aus dem Wunsch, Continuous-Integration-Tools, die auf Linux oder macOS basieren, für Tests mit FreeBSD zu nutzen.
- Ein neuer MMC/SD-Stack wurde basierend auf dem CAM-Framework eingeführt, der die Verbindung von Geräten mit dem SDIO (Secure Digital I/O) Interface ermöglicht. Zum Beispiel wird SDIO in WiFi- und Bluetooth-Modulen vieler Platinen verwendet, wie etwa beim Raspberry Pi 3. Der neue Stack ermöglicht es zudem, das CAM-Interface zu nutzen, um SD-Befehle aus Anwendungen im Benutzerspeicher zu senden, was die Erstellung von Geräte-Treibern zur Benutzerebene ermöglicht.
- Die Middleware für die Kompatibilität mit Linux wurde verbessert. Die DTS-Dateien (Device Tree Sources) wurden mit dem Linux-Kernel 5.8 synchronisiert.
- Unterstützung für NFSv4.2 (RFC-7862) hinzugefügt, und es wurde die Möglichkeit umgesetzt, NFS über einen verschlüsselten Kommunikationskanal mit TLS 1.3 zu betreiben, anstelle der Verwendung von Kerberos (modus sec=krb5p), der nur die Verschlüsselung von RPC-Nachrichten beinhaltete und ausschließlich softwarebasiert umgesetzt wurde.
- Die veraltete Version des GDB-Debuggers, die zuvor im Verzeichnis /usr/libexec installiert war und in der crashinfo-Utility verwendet wurde, wurde entfernt. Anstelle des vorinstallierten GDB wird empfohlen, eine aktuelle Version von GDB aus Ports oder Paketen zu installieren, um detaillierte Informationen zu den Absturzursachen zu erhalten. Die Unterstützung für das Debugging von Prozessen über procfs wurde eingestellt. Ein netgdb-Treiber wurde hinzugefügt, der den Zugriff auf den Kernel-Debugger über das Netzwerk ermöglicht.
- Die unsichere Funktion gets wurde aus der libc entfernt (seit dem C11-Standard ist diese Funktion aus der Spezifikation ausgeschlossen) und die Ports, die diese Funktion noch verwenden, wurden angepasst. Die Funktionen cap_random wurden entfernt (es sollte getrandom verwendet werden).
- Ein neuer Systemaufruf copy_file_range wurde hinzugefügt, der mit der Implementierung im Linux-Kernel kompatibel ist und das Kopieren von Daten von einer Datei in eine andere beschleunigt, indem die Operation ausschließlich auf der Kernel-Seite ohne vorheriges Lesen der Daten in den Prozessespeicher durchgeführt wird. Der Systemaufruf wird auch in Server NFSv4.2 für die lokale Ausführung von Kopieroperationen auf dem Server (ohne Übertragung an den Client) verwendet.
- Im Mechanismus der asynchronen Eingabe/Ausgabe von POSIX AIO wird Unterstützung für vektorisierte Funktionen bereitgestellt. Insbesondere wurden die Systemaufrufe aio_writev und aio_readv hinzugefügt, die vektorisierte Äquivalente der Funktionen aio_read und aio_write ermöglichen.
- Die Unterstützung von Benutzerraums-Komponenten zur Unterstützung des a.out Executable-Formats auf i386-Architekturen wurde eingestellt. Das elf2aout-Tool wurde entfernt.
- Die Tools ping und ping6 wurden zusammengeführt. In ping wurde die Möglichkeit hinzugefügt, Quality of Service (QoS)-Parameter über IP DSCP und Ethernet PCP festzulegen.
- Im Tool freebsd-update wurde der Fortschritt des Dateitransfers angezeigt und die Befehle updatesready und showconfig hinzugefügt, um nach Updates zu suchen und die Konfiguration anzuzeigen.
- Es wurden umfangreiche Arbeiten zur Verbesserung der Unterstützung von NUMA (Non-Uniform Memory Access)-Systemen durchgeführt.
- Die Grafiktreiber und Komponenten des Grafik-Stacks wurden aktualisiert. Probleme mit Umgebungen basierend auf dem Wayland-Protokoll wurden behoben.
- Ein Subsystem für die Hintergrundbeleuchtung wurde hinzugefügt, um Treiber zur Steuerung der Beleuchtung zu erstellen. Der Treiber pwm-backlight zur Steuerung der Beleuchtung von Pinebook und Pinebook Pro wurde hinzugefügt.
- Der SCTP-Protokollsupport wurde in ein separates Modul sctp.ko ausgelagert, das in der GENERIC-Kernel-Konfiguration standardmäßig deaktiviert ist.
- Ein neuer usbhid-Treiber wurde für Eingabegeräte angeboten, der das HID-Framework für die Arbeit mit USB HID-Geräten nutzt, anstelle der Treiber ukbd, ums und uhid.
- Der cpufreq-Treiber unterstützt jetzt die Intel Speed Shift-Technologie.
- Unterstützung für neue Plattformen auf Basis von 64-Bit ARMv8-CPUs wurde hinzugefügt, einschließlich der SoCs Broadcom BCM5871X und NXP LS1046A.
- Für die AMD64-Architektur wurde Unterstützung für 57-Bit virtuelle Adressen (LA57) implementiert. Zudem wird Unterstützung für die chinesischen x86-CPUs Hygon Dhyana auf Basis von AMD-Technologien hinzugefügt.
- Der Port für die powerpc64-Architektur wurde auf LLVM und ABI ELFv2 umgestellt (binäre Dateien aus vorherigen FreeBSD-Versionen können in FreeBSD 13 nicht verwendet werden). Treiber für powerpc64 wurden portiert: virtio, ixl, mrsas, aacraid, cpld.
- Treiber für veraltete Ethernet-Adapter wurden entfernt:
- bm(4) BMAC
- cs(4) Crystal Semiconductor CS8900/CS8920
- de(4) DEC DC21x4x
- ed(4) NE-2000 und WD-80×3
- ep(4) 3Com Etherlink III (3c5x9) ISA
- ex(4) Intel EtherExpress Pro/10 und Pro/10+
- fe(4) Fujitsu MB86960A/MB86965A
- hme(4) Sun Microelectronics STP2002-STQ
- pcn(4) AMD PCnet
- sf(4) Starfire
- sn(4) SMC 91Cxx
- tl(4) Texas Instruments ThunderLAN
- tx(4) SMC 83c17x
- txp(4) 3Com 3XP Typhoon/Sidewinder (3CR990)
- vx(4) 3Com EtherLink III / Fast EtherLink III (3c59x) PCI
- wb(4) Winbond W89C840F
- xe(4) Xircom PCMCIA
- Die Treiber für ubsec (Krypto-Beschleuniger Broadcom BCM58xx), ufm (FM-Tuner mit USB-Schnittstelle), ctau (Cronix Tau), cx (Cronix Sigma) und vpo (Parallelport SCSI) wurden entfernt.
Quelle: opennet.ru
