Zweieinhalb Jahre nach der Gründung des 12.x-Zweigs wurde die Veröffentlichung von FreeBSD 13.0 vorgestellt, das für die Architekturen amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 und riscv64 vorbereitet ist. Darüber hinaus wurden Images für Virtualisierungssysteme (QCOW2, VHD, VMDK, Raw) und Cloud-Umgebungen Amazon EC2, Google Compute Engine und Vagrant generiert.
Wichtigste Neuerungen:
- Der Übergang zu einem einheitlichen c wurde abgeschlossen Linux Das OpenZFS-Projekt implementiert das ZFS-Dateisystem. Zu den in FreeBSD nach dem Wechsel zu OpenZFS verfügbaren Funktionen gehören: ein erweitertes Quota-System, Datensatzverschlüsselung, separate Auswahl der Speicherzuordnungsklasse, die Verwendung von Vektorprozessorbefehlen zur Beschleunigung der RAIDZ-Implementierung und der Prüfsummenberechnung, Unterstützung für den ZSTD-Komprimierungsalgorithmus, Multihost-Modus (MMP, Multi Modifier Protection), verbesserte Befehlszeilenwerkzeuge sowie die Behebung zahlreicher Race-Condition- und Sperrfehler.
- Der Port für die ARM64-Architektur (AArch64) wurde auf die erste Supportebene (Tier 1) verschoben, die von Teams unterstützt wird, die für die Beseitigung von Schwachstellen, die Vorbereitung von Releases und die Pflege von Ports verantwortlich sind. Die erste Ebene der Unterstützung umfasst die Erstellung von Installationsassemblys, Binäraktualisierungen und vorgefertigten Paketen sowie die Bereitstellung von Garantien für die Lösung spezifischer Probleme und die Aufrechterhaltung des unveränderten ABI für die Benutzerumgebung und den Kernel (mit Ausnahme einiger Subsysteme).
- Die i386-Architektur wurde in die zweite Ebene der Plattformunterstützung (Tier 2) überführt, auf der weiterhin Installationsassemblys, Binäraktualisierungen und vorgefertigte Pakete erstellt werden, die jedoch keine Lösung spezifischer Probleme garantieren. Der Standard-CPU-Typ (CPUTYPE) für die i386-Architektur wurde von 486 auf 686 geändert (auf Wunsch können Assemblys für i486 und i586 unabhängig voneinander erstellt werden).
- Die Komponenten clang, lld, lldb, Compiler-RT, llvm, libunwind und libc++ wurden auf Version 11 aktualisiert.
- Die Entwicklung wurde vom zentralen Versionsverwaltungssystem Subversion auf das dezentrale System Git verlagert.
- Das Basissystem wurde von Anwendungen bereinigt, die unter der GPL-Lizenz vertrieben wurden. Binutils 2.17 und gcc 4.2.1 wurden aus dem Quellbaum entfernt und alle unterstützten Architekturen wurden in das LLVM/clang-Toolkit verschoben. Enthalten sind BSD-lizenzierte Versionen der Dienstprogramme grep und dtc (Device Tree Compiler), die die GPL-lizenzierten Versionen ersetzen. Der automatische Mount-Prozess von amd wurde entfernt, dessen Funktionalität nun über autofs implementiert wird. Das Dienstprogramm „ctm“ wurde entfernt und es wird empfohlen, stattdessen den Port „misc/ctm“ zu verwenden.
- Der Routing-Stack wurde neu geschrieben, um Unterstützung für Nexthop-Objekte zu bieten, die Statusdaten speichern, die zum Weiterleiten eines Pakets an das gewünschte Ziel verwendet werden. Es wurde die Möglichkeit hinzugefügt, Ihre eigenen Routensuchalgorithmen zu verbinden. Routensuchalgorithmen von DPDK (Data Plane Development Kit) librte hinzugefügt, sodass Sie die Arbeit mit sehr großen Routing-Tabellen optimieren können. Für Proxyarp-Anfragen wird die Fib-Schnittstelle verwendet. Es wurde die Möglichkeit hinzugefügt, die Fib-Nummer im laufenden Betrieb über sysctl net.fibs zu ändern. Unterstützung für temporäre Routen für IPv4 und IPv6 implementiert (mit festgelegter Lebensdauer).
- Die Unterstützung für Multipath-Routing wurde neu geschrieben und skalierbarer gemacht, sodass die Suchzeit nicht von der Listengröße (O(1)) abhängt. 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, um Unterstützung für moderne kryptografische Algorithmen hinzuzufügen und die Schnittstelle für die Verwendung der Verschlüsselung in Treibern und anderen Kernel-Komponenten zu vereinfachen. Veraltete Algorithmen ARC4, Blowfish, CAST128, DES, DES, MD5-HMAC und Skipjack entfernt. IPsec und Kerberos unterstützen keine Algorithmen mehr, die durch RFC 8221 und RFC 6649/8429 veraltet sind, einschließlich 3DES. Zuvor angekündigte veraltete Algorithmen im Festplattenverschlüsselungs-Subsystem von Geli und Cryptodev wurden entfernt.
- Der GENERIC-Kernel unterstützt die Treiber aesni und armv8crypto, um die Gel-basierte Festplattenverschlüsselung mithilfe von AES-NI-Anweisungen für amd64/i386-Architekturen und AES-XTS für ARM64 zu beschleunigen.
- Qat-Treiber für Intel QuickAssist (QAT)-Kryptobeschleuniger und Ossl-Treiber mit Implementierung beschleunigter Softwareverschlüsselungsverfahren von OpenSSL hinzugefügt, optimiert mit Assembler-Code. Der armv8crypto-Treiber fügt Unterstützung für AES-XTS und AES-GCM hinzu, indem er die entsprechenden Anweisungen für ARMv8-Prozessoren verwendet.
- TLS (kTLS)-Implementierung hinzugefügt, die auf FreeBSD-Kernel-Ebene ausgeführt wird, was eine deutliche Steigerung der Verschlüsselungsleistung für TCP-Sockets ermöglicht. Unterstützte TLS-Versionen 1.0 bis 1.3. Zur Verschlüsselung werden Kernel-Kryptotreiber verwendet, die AES-CBC oder AES-GCM unterstützen. Die Verwendung von kTLS im Benutzerbereich erfordert eine Neuerstellung von OpenSSL mit der Option WITH_OPENSSL_KTLS.
- Ein neuer Typ von Netzwerkpuffern hinzugefügt, mbuf (Netzwerkdatenpuffer), der mehrere nicht zugeordnete physische Speicherseiten in einem Puffer darstellen kann, was die Leistung des sendfile(2)-Aufrufs verbessert, indem die Größe der mbuf-Listen in Socket-Puffer reduziert wird.
- Der TCP-Stack integriert die Unterstützung für den Algorithmus zur proportionalen Reduzierung der Sendeintensität von Paketen (Proportional Rate Reduction, RFC 6937), wodurch Sie nach vorübergehenden Problemen bei der Datenübertragung schnell optimale Flussparameter wiederherstellen können. Um PRR zu deaktivieren, wird sysctl net.inet.tcp.do_prr bereitgestellt.
- Die Funktionen des Bhyve-Hypervisors wurden erweitert: Unterstützung für die Dateifreigabe mit VirtIO-9p (VirtFS) wurde hinzugefügt. Snapshot-Unterstützung wurde implementiert. virtuelle MaschinenUnterstützung für PCI-HDAudio-Geräte und die zusätzlichen seriellen Schnittstellen COM3 und COM4 hinzugefügt. Veraltete Gerätemodelle für bvmconsole und bvmdebug entfernt. Stabilität mit VNC-Clients verbessert, einschließlich macOS-Bildschirmfreigabe-Anwendung.
- VirtIO-Treiber haben Unterstützung für die VirtIO V1-Spezifikation hinzugefügt, wodurch die Kompatibilität von FreeBSD-Gästen mit verschiedenen Emulatoren und Hypervisoren verbessert wurde.
- Für Prozesse, die an Gefängnisumgebungen angeschlossen sind, ist eine Konvertierung von CPU-Bindungen vorgesehen (der ursprünglich an den Prozess gebundene CPU-Satz wird unter Berücksichtigung des CPU-Satz des Gefängnisses und der festgelegten Einschränkungen ersetzt).
- Die Möglichkeit, das FreeBSD-Basissystem in Umgebungen mit anderen Betriebssystemen zu erstellen, wurde hinzugefügt. Die Notwendigkeit, auf anderen Betriebssystemen zu kompilieren, ergibt sich aus dem Wunsch, Continuous-Integration-Tools zum Testen von FreeBSD zu verwenden, die auf … basieren. Linux oder macOS.
- Es wird ein neuer MMC/SD-Stack vorgeschlagen, der auf dem CAM-Framework basiert und den Anschluss von Geräten mit einer SDIO-Schnittstelle (Secure Digital I/O) ermöglicht. Beispielsweise wird SDIO in WiFi- und Bluetooth-Modulen für viele Boards wie dem Raspberry Pi 3 verwendet. Der neue Stack ermöglicht es auch, die CAM-Schnittstelle zum Senden von SD-Befehlen von Anwendungen im User Space zu verwenden, was die Erstellung von Geräten ermöglicht Treiber, die auf Benutzerebene arbeiten.
- Verbesserte Zwischenschichtleistung für Kompatibilität mit LinuxDTS-Dateien (Device Tree Sources) werden mit dem Kernel synchronisiert. Linux 5.8
- Unterstützung für NFSv4.2 (RFC-7862) hinzugefügt und die Möglichkeit implementiert, NFS über einen verschlüsselten Kommunikationskanal basierend auf TLS 1.3 zu betreiben, anstatt Kerberos (sec=krb5p-Modus) zu verwenden, der auf die Verschlüsselung nur von RPC-Nachrichten beschränkt war und implementiert wurde nur in Software.
- Die veraltete Version des GDB-Debuggers, die zuvor im Verzeichnis /usr/libexec installiert und im Dienstprogramm crashinfo verwendet wurde, wurde entfernt. Um detaillierte Informationen über die Absturzursachen zu erhalten, wird nun anstelle der vorinstallierten GDB empfohlen, die neueste Version von GDB über Ports oder Pakete zu installieren. Die Unterstützung für das Prozessdebuggen über procfs wurde eingestellt. Der Netgdb-Treiber wurde hinzugefügt und ermöglicht den Zugriff auf den Kernel-Debugger über das Netzwerk.
- Die unsichere Gets-Funktion wurde aus libc entfernt (ab dem C11-Standard wurde diese Funktion aus der Spezifikation ausgeschlossen) und die Ports, die diese Funktion noch verwenden, wurden angepasst. cap_random-Funktionen entfernt (getrandom sollte verwendet werden).
- Es wurde ein neuer Systemaufruf copy_file_range hinzugefügt, der mit der Kernel-Implementierung kompatibel ist. Linux und ermöglicht das Beschleunigen des Kopierens von Daten von einer Datei in eine andere, indem die Operation nur auf Kernel-Seite ausgeführt wird, ohne die Daten vorher in den Prozessspeicher zu laden. Der Systemaufruf wird auch verwendet in Server NFSv4.2 für die Durchführung von Kopiervorgängen lokal auf dem Server (ohne Übertragung an den Client).
- Die asynchrone I/O-Engine POSIX AIO bietet Unterstützung für vektorisierte Funktionen. Insbesondere wurden die Systemaufrufe aio_writev und aio_readv hinzugefügt, die die Implementierung vektorisierter Äquivalente der Funktionen aio_read und aio_write ermöglichen.
- User-Space-Komponenten wurden eingestellt, um das ausführbare Dateiformat a.out auf Systemen mit i386-Architektur zu unterstützen. Das Dienstprogramm elf2aout wurde entfernt.
- Die Dienstprogramme ping und ping6 wurden kombiniert. Dem Ping wurde die Möglichkeit hinzugefügt, QoS-Parameter (Quality of Service) über IP DSCP und Ethernet PCP festzulegen.
- Das Dienstprogramm „freebsd-update“ zeigt jetzt den Datei-Download-Fortschritt an und fügt die Befehle „updatesready“ und „showconfig“ hinzu, um nach Updates zu suchen und die Konfiguration anzuzeigen.
- Es wurde viel Arbeit geleistet, um die Unterstützung für NUMA-Systeme (Non-Uniform Memory Access) zu verbessern.
- Aktualisierte Grafiktreiber und Grafik-Stack-Komponenten. Probleme beim Betrieb von Umgebungen, die auf dem Wayland-Protokoll basieren, wurden behoben.
- Hintergrundbeleuchtungs-Subsystem zum Erstellen von Hintergrundbeleuchtungs-Steuerungstreibern hinzugefügt. PWM-Hintergrundbeleuchtungstreiber hinzugefügt, um die Hintergrundbeleuchtung von Pinebook und Pinebook Pro zu steuern.
- Die Unterstützung für das SCTP-Protokoll ist in einem separaten Modul sctp.ko enthalten, das im GENERIC-Kernel standardmäßig deaktiviert ist.
- Für Eingabegeräte wurde ein neuer usbhid-Treiber vorgeschlagen, der anstelle der ukbd-, ums- und uhid-Treiber das hid-Framework für die Arbeit mit USB-HID-Geräten verwendet.
- Der cpufreq-Treiber unterstützt die Intel Speed Shift-Technologie.
- Unterstützung für neue Boards hinzugefügt, die auf 64-Bit-ARMv8-CPUs basieren, einschließlich Broadcom BCM5871X und NXP LS1046A SoCs.
- Für die AMD64-Architektur ist Unterstützung für virtuelle 57-Bit-Adressen (LA57) implementiert. Unterstützung für die chinesische x86-CPU Hygon Dhyana basierend auf AMD-Technologien hinzugefügt.
- Der Port für die PowerPC64-Architektur wurde auf die Verwendung von LLVM und ELFv2 ABI umgestellt (Binärdateien aus früheren Versionen von FreeBSD können in FreeBSD 13 nicht verwendet werden). Die Treiber Virtio, IXL, Mrsas, Aacraid und Cpld wurden für PowerPC64 portiert.
- Treiber für ältere 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
- Bsp. (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) Sternenfeuer
- 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 (Broadcom BCM58xx-Kryptobeschleuniger), ufm (FM-Tuner mit USB-Schnittstelle), ctau (Cronix Tau), cx (Cronix Sigma) und vpo (Parallel-Port-SCSI) wurden entfernt.
Source: opennet.ru
