Po dwóch i pół roku od utworzenia gałęzi 12.x ukazała się wersja FreeBSD 13.0, która została przygotowana dla architektur amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 oraz riscv64. Dodatkowo przygotowane zostały obrazy dla systemów wirtualizacji (QCOW2, VHD, VMDK, raw) oraz środowisk chmurowych Amazon EC2, Google Compute Engine i Vagrant.
Główne nowości:
- Zrealizowano przejście na zunifikowaną z wersją Linux implementację systemu plików ZFS z projektu OpenZFS. Wśród możliwości, które stały się dostępne w FreeBSD po przejściu na OpenZFS, znajdują się: rozszerzony system kwot, szyfrowanie zbiorów danych, osobny wybór klas alokacji bloków, wykorzystanie instrukcji procesorów wektorowych do przyspieszania realizacji RAIDZ oraz obliczania sum kontrolnych, wsparcie dla algorytmu kompresji ZSTD, tryb multihost (MMP, Multi Modifier Protection), ulepszony zestaw narzędzi wiersza poleceń oraz naprawa wielu błędów związanych z rywalizacją stanów i blokadami.
- Port dla architektury ARM64 (AArch64) został przeniesiony na pierwszy poziom wsparcia (Tier 1), który znajduje się pod opieką zespołów odpowiadających za usuwanie podatności, przygotowywanie wydań oraz utrzymanie portów. Pierwszy poziom wsparcia oznacza tworzenie instalacyjnych pakietów, binarnych aktualizacji oraz gotowych pakietów, a także zapewnienie gwarancji rozwiązania specyficznych problemów i utrzymania niezmienności ABI dla środowiska użytkownika i jądra (za wyjątkiem niektórych podsystemów).
- Architektura i386 została przeniesiona na drugi poziom wsparcia platform (Tier 2), przy którym kontynuowane będzie tworzenie instalacyjnych pakietów, binarnych aktualizacji oraz gotowych pakietów, ale nie gwarantuje rozwiązania specyficznych problemów. Typ CPU (CPUTYPE) dla architektury i386 domyślnie zmieniono z 486 na 686 (jeśli to pożądane, pakiety dla i486 i i586 można utworzyć samodzielnie).
- Składniki clang, lld, lldb, compiler-rt, llvm, libunwind oraz libc++ zostały zaktualizowane do wersji 11.
- Rozwój został przeniesiony z centralizowanego systemu zarządzania kodem źródłowym Subversion do zdecentralizowanego systemu Git.
- Przeprowadzono czyszczenie systemu podstawowego z aplikacji objętych licencją GPL. Z drzewa kodu źródłowego usunięto binutils 2.17 i gcc 4.2.1, wszystkie obsługiwane architektury zostały przeniesione na narzędzia LLVM/clang. Dodano wersje narzędzi grep i dtc (Device Tree Compiler), objęte licencją BSD, które zastąpiły wersje na licencji GPL. Usunięto proces automatycznego montowania amd, którego funkcjonalność teraz realizowana jest przez autofs. Usunięto narzędzie ctm, zamiast którego zaleca się użycie portu misc/ctm.
- Przepisałem stos routingu, w którym dodano wsparcie dla obiektów nexthop, przechowujących dane o stanie wykorzystywanym do przesyłania pakietów do wybranej lokalizacji. Dodano możliwość podłączenia własnych algorytmów wyszukiwania tras. Dodano algorytmy wyszukiwania tras z DPDK (Data Plane Development Kit) librte, które umożliwiają optymalizację pracy z bardzo dużymi tabelami routingu. Dla zapytań proxyarp wykorzystano interfejs fib. Dodano możliwość zmiany liczby fib w locie za pomocą sysctl net.fibs. Wdrożono wsparcie dla tymczasowych tras dla IPv4 i IPv6 (z ustawionym czasem życia).
- Przepisano i uczyniono bardziej skalowalnym wsparcie dla Multipath-routingu, w którym czas wyszukiwania nie zależy od rozmiaru listy (O(1)). Nowa implementacja Multipath jest teraz powiązana z parametrem jądra ROUTE_MPATH, który zastąpił RADIX_MPATH i jest włączony domyślnie. Aby zarządzać Multipath, zaproponowano sysctl net.route.multipath.
- Przebudowano zaimplementowany na poziomie jądra framework kryptograficzny, w którym dodano wsparcie dla nowoczesnych algorytmów kryptograficznych oraz uproszczono interfejs do używania szyfrowania w sterownikach i innych komponentach jądra. Usunięto przestarzałe algorytmy ARC4, Blowfish, CAST128, DES, MD5-HMAC i Skipjack. W IPsec i Kerberos zaprzestano wsparcia dla algorytmów uznanych za przestarzałe w RFC 8221 i RFC 6649/8429, w tym 3DES. Usunięto wcześniej ogłoszone przestarzałe algorytmy w podsystemie szyfrowania dysków geli oraz cryptodev.
- Do jądra GENERIC dodano wsparcie dla sterowników aesni i armv8crypto w celu przyspieszenia szyfrowania dysku opartego na geli przy użyciu instrukcji AES-NI dla architektur amd64/i386 oraz AES-XTS dla ARM64.
- Dodano sterownik qat dla akceleratorów kryptograficznych Intel QuickAssist (QAT) oraz sterownik ossl z implementacją przyspieszonych procedur szyfrowania z OpenSSL, zoptymalizowanych dzięki kodowi w asemblerze. W sterowniku armv8crypto dodano wsparcie dla AES-XTS i AES-GCM z wykorzystaniem odpowiednich instrukcji procesorów ARMv8.
- Dodano implementację TLS (kTLS), działającą na poziomie jądra FreeBSD, która pozwala na znaczne zwiększenie wydajności szyfrowania dla gniazd TCP. Wspierane są wersje TLS od 1.0 do 1.3. Do szyfrowania wykorzystywane są sterowniki kryptograficzne jądra z obsługą AES-CBC lub AES-GCM. Aby skorzystać z kTLS w przestrzeni użytkownika, należy przebudować OpenSSL z opcją WITH_OPENSSL_KTLS.
- Dodano nowy typ buforów sieciowych mbuf (bufor danych sieciowych), który może reprezentować w jednym buforze kilka nieodzwierciedlonych stron pamięci, co pozwala na zwiększenie wydajności wywołania sendfile(2) poprzez zmniejszenie rozmiaru list mbuf w buforach gniazda.
- W stosie TCP zintegrowano wsparcie dla algorytmu proporcjonalnego zmniejszania intensywności wysyłania pakietów (Proportional Rate Reduction, RFC 6937), który pozwala szybciej przywrócić optymalne parametry transmisji po tymczasowych problemach z przesyłem danych. Aby wyłączyć PRR, dostępna jest zmienna sysctl net.inet.tcp.do_prr.
- Rozszerzone możliwości hyperwizora Bhyve: Dodano wsparcie dla współdzielenia plików za pomocą VirtIO-9p (VirtFS). Zrealizowano możliwość pracy z migawkami. maszyn wirtualnych. Dodano obsługę urządzeń PCI HDAudio oraz dodatkowych portów szeregowych COM3 i COM4. Usunięto przestarzałe modele urządzeń bvmconsole i bvmdebug. Zwiększona stabilność pracy z klientami VNC, w tym aplikacją macOS „Screen Sharing”.
- W sterownikach VirtIO dodano wsparcie dla specyfikacji VirtIO V1, co poprawiło kompatybilność systemów gościnnych z FreeBSD z różnymi emulatorami i hypervisorami.
- Dla procesów dołączanych do środowisk jail zapewniono konwersję powiązań z CPU (pierwotnie przypisany do procesu cpuset zostanie zastąpiony z uwzględnieniem cpuset jail-a i nałożonych ograniczeń).
- Dodano możliwość budowania podstawowego systemu FreeBSD w środowiskach opartych na innych systemach operacyjnych. Potrzeba budowy w innych systemach operacyjnych wynika z chęci wykorzystania narzędzi ciągłej integracji powiązanych z Linuxem lub macOS do testowania FreeBSD.
- Proponowany jest nowy stos MMC/SD oparty na frameworku CAM, który umożliwia podłączanie urządzeń z interfejsem SDIO (Secure Digital I/O). Na przykład SDIO jest wykorzystywane w modułach WiFi i Bluetooth dla wielu płyt, takich jak Raspberry Pi 3. Nowy stos pozwala także korzystać z interfejsu CAM do wysyłania poleceń SD z aplikacji w przestrzeni użytkownika, co daje możliwość tworzenia sterowników urządzeń działających na poziomie użytkownika.
- Ulepszono działanie warstwy kompatybilności z Linuxem. Pliki DTS (Device Tree Sources) zostały zsynchronizowane z jądrem Linux 5.8.
- Dodano wsparcie dla NFSv4.2 (RFC-7862) oraz zrealizowano możliwość korzystania z NFS w oparciu o szyfrowany kanał komunikacji oparty na TLS 1.3, zamiast korzystania z Kerberos (tryb sec=krb5p), który ograniczał się tylko do szyfrowania wiadomości RPC i był realizowany wyłącznie programowo.
- Usunięto przestarzałą wersję debuggera GDB, który wcześniej był zainstalowany w katalogu /usr/libexec i wykorzystywany w narzędziu crashinfo. Zamiast preinstalowanego GDB, aby uzyskać szczegółowe informacje o przyczynach awarii, teraz proponuje się zainstalowanie świeżej wersji GDB z portów lub pakietów. Zaprzestano wsparcia dla debugowania procesów przez procfs. Dodano sterownik netgdb, który umożliwia zdalny dostęp do debuggera jądra.
- Z biblioteki libc usunięto niebezpieczną funkcję gets (od standardu C11 ta funkcja została wykluczona ze specyfikacji) i przeprowadzono korektę portów, które nadal używają tej funkcji. Usunięto funkcje cap_random (należy użyć getrandom).
- Dodano nowy systemowy wywołanie copy_file_range, zgodny z implementacją z jądra Linux, które pozwala przyspieszyć kopiowanie danych z jednego pliku do drugiego, dzięki wykonaniu operacji tylko po stronie jądra bez wcześniejszego odczytu danych do pamięci procesu. Wywołanie systemowe jest również wykorzystywane w serwerze NFSv4.2 do lokalnego wykonywania operacji kopiowania na serwerze (bez przesyłania do klienta).
- W mechanizmie asynchronicznego wejścia/wyjścia POSIX AIO wprowadzono wsparcie dla funkcji wektorowych. W szczególności dodano wywołania systemowe aio_writev i aio_readv, które umożliwiają realizację wektorowych odpowiedników funkcji aio_read i aio_write.
- Utrzymanie komponentów przestrzeni użytkownika dla obsługi formatu plików wykonywalnych a.out na systemach z architekturą i386 zostało zakończone. Usunięto narzędzie elf2aout.
- Narzędzia ping i ping6 połączono. Do ping dodano możliwość ustalania parametrów jakości usług (QoS) za pośrednictwem IP DSCP i Ethernet PCP.
- W narzędziu freebsd-update wprowadzono wyświetlanie postępu pobierania plików i dodano komendy updatesready oraz showconfig do sprawdzania dostępności aktualizacji oraz wyświetlania konfiguracji.
- Przeprowadzono znaczną pracę nad poprawą wsparcia dla systemów NUMA (Non-Uniform Memory Access).
- Zaktualizowano sterowniki graficzne i komponenty stosu graficznego. Rozwiązano problemy z działaniem środowisk opartych na protokole Wayland.
- Dodano podsystem podświetlenia do tworzenia sterowników zarządzania podświetleniem. Dodano sterownik pwm-backlight do zarządzania podświetleniem Pinebook i Pinebook Pro.
- Wsparcie dla protokołu SCTP przeniesiono do osobnego modułu sctp.ko, który jest domyślnie wyłączony w jądrze GENERIC.
- Dla urządzeń wejściowych zaproponowano nowy sterownik usbhid, wykorzystujący framework hid do pracy z urządzeniami USB HID, zamiast sterowników ukbd, ums i uhid.
- W sterowniku cpufreq wdrożono wsparcie dla technologii Intel Speed Shift.
- Dodano wsparcie dla nowych płyt opartych na 64-bitowych CPU ARMv8, w tym SoC Broadcom BCM5871X i NXP LS1046A.
- Dla architektury AMD64 wdrożono wsparcie dla 57-bitowych adresów wirtualnych (LA57). Dodano wsparcie dla chińskich procesorów x86 Hygon Dhyana opartych na technologiach AMD.
- Port dla architektury powerpc64 przeniesiono na użycie LLVM i ABI ELFv2 (plików binarnych z poprzednich wersji FreeBSD nie będzie można używać w FreeBSD 13). Dla powerpc64 portowano sterowniki virtio, ixl, mrsas, aacraid, cpld.
- Usunięto sterowniki dla nieaktualnych adapterów Ethernet:
- bm(4) BMAC
- cs(4) Crystal Semiconductor CS8900/CS8920
- de(4) DEC DC21x4x
- ed(4) NE-2000 i WD-80×3
- ep(4) 3Com Etherlink III (3c5x9) ISA
- ex(4) Intel EtherExpress Pro/10 i 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
- Usunięto sterowniki ubsec (kryptoakceleratory Broadcom BCM58xx), ufm (FM-tunery z interfejsem USB), ctau (Cronix Tau), cx (Cronix Sigma) oraz vpo (SCSI z portu równoległego).
Źródło: opennet.ru
