Nach zweieinhalb Jahren seit der Erstellung des Branches 12.x wird die Version FreeBSD 13.0 vorgestellt, die für die Architekturen amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 und riscv64 vorbereitet wurde. Zusätzlich wurden Images für Virtualisierungssysteme (QCOW2, VHD, VMDK, raw) und Cloud-Umgebungen wie Amazon EC2, Google Compute Engine und Vagrant erstellt.
Hauptneuheiten:
- Es wurde auf die vereinheitlichte Linux-Implementierung des Dateisystems ZFS aus dem Projekt OpenZFS umgestellt. Zu den Funktionen, die in FreeBSD nach der Umstellung auf OpenZFS verfügbar sind, gehören: erweiterte Quotensysteme, Datenverschlüsselung, separate Auswahl von Blockverteilungsklassen (allocation classes), Verwendung von Vektorprozessoranweisungen zur Beschleunigung der Implementierung von RAIDZ und der Berechnung von Prüfziffern, Unterstützung des ZSTD-Komprimierungsalgorithmus, Multihost-Modus (MMP, Multi Modifier Protection), verbesserte Kommandozeilen-Werkzeuge, Behebung vieler Fehler im Zusammenhang mit Rennen und Sperren.
- Der Port für die Architektur ARM64 (AArch64) wurde auf die erste Unterstützungsstufe (Tier 1) umgestellt, die unter der Betreuung von Teams steht, die für die Behebung von Schwachstellen, die Erstellung von Releases und die Pflege der Ports zuständig sind. Die erste Unterstützungsstufe umfasst die Erstellung von Installationspaketen, binären Updates und fertigen Paketen sowie die Gewährleistung der Behebung spezifischer Probleme und der Stabilität der ABI für Nutzerumgebungen und den Kernel (außer für einige Subsysteme).
- Die Architektur i386 wurde auf die zweite Unterstützungsstufe (Tier 2) umgestellt, bei der die Erstellung von Installationspaketen, binären Updates und fertigen Paketen fortgesetzt wird, jedoch keine Garantie für die Behebung spezifischer Probleme gegeben ist. Der CPU-Typ (CPUTYPE) für die Architektur i386 wurde standardmäßig von 486 auf 686 geändert (bei Bedarf können Installationen 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 Versionskontrollsystem Subversion auf das dezentralisierte System Git umgestellt.
- Die Basissoftware wurde von Anwendungen bereinigt, die unter der GPL-Lizenz verbreitet werden. Aus dem Quelltextbaum wurden binutils 2.17 und gcc 4.2.1 entfernt, alle unterstützten Architekturen wurden auf das LLVM/clang-Toolset umgestellt. Die unter der BSD-Lizenz bereitgestellten Varianten der Tools grep und dtc (Device Tree Compiler) wurden eingefügt, die die GPL-Versionen ersetzt haben. Der Prozess der automatischen Montage von amd wurde entfernt, die Funktionalität wird jetzt durch autofs realisiert. Das Tool ctm wurde entfernt, stattdessen wird die Verwendung des Ports misc/ctm empfohlen.
- Der Routing-Stack wurde umgeschrieben und unterstützt jetzt Nexthop-Objekte, die den Status speichern, der für die Paketübertragung an den gewünschten Zielort verwendet wird. Es wurde die Möglichkeit hinzugefügt, eigene Routing-Suchalgorithmen anzuschließen. Algorithmen für die Routenfindung aus DPDK (Data Plane Development Kit) librte wurden hinzugefügt, die die Arbeit mit sehr großen Routing-Tabellen optimieren. Für proxyarp-Anfragen wird die fib-Schnittstelle verwendet. Es wurde die Möglichkeit hinzugefügt, die Anzahl der fib zur Laufzeit über sysctl net.fibs zu ändern. Temporäre Routen für IPv4 und IPv6 (mit festgelegter Lebensdauer) werden unterstützt.
- Die Unterstützung für Multipath-Routing wurde neu geschrieben und skalierbarer gestaltet, bei der die Suchzeit nicht von der Größe der Liste abhängt (O(1)). Die neue Multipath-Implementierung ist jetzt mit dem Kernelparameter ROUTE_MPATH verknüpft, der RADIX_MPATH ersetzt hat und standardmäßig aktiviert ist. Zur Verwaltung von Multipath wird sysctl net.route.multipath vorgeschlagen.
- Das auf Kernel-Ebene implementierte kryptografische Framework wurde neu gestaltet, wobei die Unterstützung für moderne kryptografische Algorithmen hinzugefügt und die Schnittstelle zur Verwendung von Verschlüsselung in Treibern und anderen Kernelkomponenten vereinfacht wurde. Veraltete Algorithmen wie ARC4, Blowfish, CAST128, DES, MD5-HMAC und Skipjack wurden entfernt. Die Unterstützung für die in RFC 8221 und RFC 6649/8429 als veraltet erklärten Algorithmen wie 3DES wurde in IPsec und Kerberos eingestellt. Früher als veraltet erklärte Algorithmen im Bereich der Festplattenverschlüsselung geli und cryptodev wurden entfernt.
- In den GENERIC-Kernel wurde die Unterstützung für die Treiber aesni und armv8crypto eingefügt, um die Festplattenverschlüsselung auf Basis von geli mithilfe der AES-NI-Befehle für die Architekturen amd64/i386 und AES-XTS für ARM64 zu beschleunigen.
- Der qat-Treiber für Intel QuickAssist-Krypto-Beschleuniger (QAT) und der ossl-Treiber mit einer Implementierung beschleunigter Softwareverschlüsselungsverfahren aus OpenSSL, optimiert durch Assembler-Code, wurden hinzugefügt. Der armv8crypto-Treiber unterstützt nun AES-XTS und AES-GCM unter Verwendung der entsprechenden ARMv8-Prozessorinstruktionen.
- Eine 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 TLS 1.0 bis 1.3 werden unterstützt. Zur Verschlüsselung werden Core-Kryptotreiber mit Unterstützung für AES-CBC oder AES-GCM verwendet. Für die Verwendung von kTLS im Benutzerspeicher ist eine Neubauten von OpenSSL mit der Option WITH_OPENSSL_KTLS erforderlich.
- Ein neuer Typ von Netzwerkpuffern mbuf (Netzwerkdatenpuffer) wurde hinzugefügt, der in einem Puffer mehrere nicht spiegelnde physische Seiten des Speichers darstellen kann, was die Leistung des Aufrufs sendfile(2) durch Reduzierung der Größe der mbuf-Listen in den Socket-Puffern erhöht.
- Im TCP-Stack wurde die Unterstützung des Algorithmus zur proportionalen Reduzierung der Paketversandintensität (Proportional Rate Reduction, RFC 6937) integriert, der eine schnellere Wiederherstellung optimaler Flusseigenschaften nach vorübergehenden Übertragungsproblemen ermöglicht. Um PRR zu deaktivieren, ist sysctl net.inet.tcp.do_prr vorgesehen.
- Die Möglichkeiten des Hypervisors Bhyve wurden erweitert: Unterstützung für die gemeinsame Dateifreigabe über VirtIO-9p (VirtFS) wurde hinzugefügt. Eine Funktion zur Arbeit mit Snapshots wurde implementiert. virtuelle MaschinenDie Unterstützung für PCI HDAudio-Geräte und zusätzliche serielle Ports COM3 und COM4 wurde hinzugefügt. Veraltete Gerätemodelle wie bvmconsole und bvmdebug wurden entfernt. Die Stabilität der Arbeit mit VNC-Clients, einschließlich der macOS-App „Bildschirmfreigabe“, wurde verbessert.
- Die VirtIO-Treiber wurden um die Unterstützung der Spezifikation VirtIO V1 erweitert, was die Kompatibilität von Gastbetriebssystemen mit FreeBSD mit verschiedenen Emulatoren und Hypervisoren verbessert hat.
- Für an Jail-Umgebungen gebundene Prozesse wurde eine Umwandlung der CPU-Bindungen sichergestellt (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, die auf anderen Betriebssystemen basieren, wurde hinzugefügt. Die Notwendigkeit, in anderen Betriebssystemen zu erstellen, ergibt sich aus dem Wunsch, die für FreeBSD entwickelten Continuous Integration-Tools zu nutzen, die auf Linux oder macOS basieren.
- Ein neuer MMC/SD-Stack wurde vorgeschlagen, der auf dem CAM-Framework basiert und es ermöglicht, Geräte mit SDIO (Secure Digital I/O)-Schnittstelle anzuschließen. Zum Beispiel wird SDIO in WiFi- und Bluetooth-Modulen für viele Platinen wie Raspberry Pi 3 verwendet. Der neue Stack ermöglicht auch die Verwendung der CAM-Schnittstelle zum Senden von SD-Befehlen aus Anwendungen im Benutzerspeicher, was die Erstellung von Gerätetreibern auf Benutzerebene ermöglicht.
- Die Funktionalität der Abstraktionsschicht zur Kompatibilität mit Linux wurde verbessert. Die DTS-Dateien (Device Tree Sources) wurden mit dem Linux-Kernel 5.8 synchronisiert.
- Die Unterstützung für NFSv4.2 (RFC-7862) wurde hinzugefügt, und die Möglichkeit zur Nutzung von NFS über einen verschlüsselten Kommunikationskanal auf Basis von TLS 1.3 wurde implementiert, anstelle der Verwendung von Kerberos (Modus sec=krb5p), der nur die Verschlüsselung von RPC-Nachrichten ermöglichte und nur softwaremäßig implementiert war.
- Die veraltete Version des Debuggers GDB, der früher im Verzeichnis /usr/libexec installiert war und in der crashinfo-Utility verwendet wurde, wurde entfernt. Anstelle des vorinstallierten GDB wird nun empfohlen, eine aktuelle Version von GDB aus den Ports oder Paketen zu installieren, um detaillierte Informationen über die Gründe für Abstürze zu erhalten. Die Unterstützung für die Fehlersuche 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 (ab dem C11-Standard wurde 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 des Linux-Kernels kompatibel ist und das Kopieren von Daten von einer Datei in eine andere beschleunigt, indem die Operation nur auf der Kernel-Seite ohne vorheriges Lesen der Daten in den Prozessspeicher 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 des asynchronen Eingangs/Ausgangs POSIX AIO wird die 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 Benutzerraumkomponenten für das a.out Executable File Format auf i386-Architekturen wurde eingestellt. Das Dienstprogramm elf2aout wurde entfernt.
- Die Dienstprogramme ping und ping6 wurden zusammengeführt. In ping wurde die Möglichkeit hinzugefügt, die Qualität des Dienstes (QoS) über IP DSCP und Ethernet PCP festzulegen.
- Im Dienstprogramm freebsd-update wird der Fortschritt beim Herunterladen von Dateien angezeigt, und die Befehle updatesready und showconfig wurden hinzugefügt, um nach Updates zu suchen und die Konfiguration anzuzeigen.
- Es wurden umfangreiche Arbeiten zur Verbesserung der Unterstützung für NUMA-Systeme (Non-Uniform Memory Access) durchgeführt.
- Grafiktreiber und Komponenten des Grafikstapels wurden aktualisiert. Probleme mit Umgebungen, die auf dem Wayland-Protokoll basieren, wurden behoben.
- Ein Backlight-Subsystem wurde hinzugefügt, um Treiber zur Steuerung des Backlights zu erstellen. Ein Treiber pwm-backlight wurde hinzugefügt, um das Backlight des Pinebook und Pinebook Pro zu steuern.
- Die Unterstützung des SCTP-Protokolls wurde in ein separates Modul sctp.ko ausgelagert, das standardmäßig im GENERIC-Kernel deaktiviert ist.
- Für Eingabegeräte wurde ein neuer Treiber usbhid vorgeschlagen, der das hid-Framework zur Arbeit mit USB HID-Geräten verwendet, anstelle der Treiber ukbd, ums und uhid.
- Im cpufreq-Treiber wurde die Unterstützung für die Intel Speed Shift-Technologie implementiert.
- Die Unterstützung neuer Platinen auf Basis von 64-Bit ARMv8-CPUs wurde hinzugefügt, einschließlich SoC Broadcom BCM5871X und NXP LS1046A.
- Für die AMD64-Architektur wurde die Unterstützung von 57-Bit virtuellen Adressen (LA57) implementiert. Die Unterstützung chinesischer x86-CPUs Hygon Dhyana auf Basis von AMD-Technologien wurde hinzugefügt.
- Der Port für die powerpc64-Architektur wurde auf die Verwendung von LLVM und ABI ELFv2 umgestellt (Binärdateien vorheriger Versionen von FreeBSD sind nicht mit FreeBSD 13 kompatibel). Die Treiber virtio, ixl, mrsas, aacraid, cpld wurden für powerpc64 portiert.
- 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 ubsec (Krypto-Beschleuniger Broadcom BCM58xx), ufm (FM-Tuner mit USB-Schnittstelle), ctau (Cronix Tau), cx (Cronix Sigma) und vpo (parallel port SCSI) wurden entfernt.
Quelle: opennet.ru
