Po dwóch latach od publikacji gałęzi 14.0, wydano wersję FreeBSD 15.0. Zestawy instalacyjne zostały przygotowane dla architektur amd64, aarch64, armv7, powerpc64, powerpc64le oraz riscv64. Dodatkowo dostarczane są zestawy dla systemów wirtualizacji (QCOW2, VHD, VMDK, raw) i środowisk chmurowych Amazon EC2, Google Compute Engine i Vagrant.
Od gałęzi FreeBSD 15 czas wsparcia dla głównych gałęzi po utworzeniu pierwszego wydania (15.0) został skrócony z 5 do 4 lat, a nowe główne gałęzie będą tworzone co dwa lata. Wydania pośrednie (15.1, 15.2, 15.3) będą opracowywane w ramach ustalonego cyklu rozwoju, zakładającego publikację nowych wersji w jednej gałęzi mniej więcej co 6 miesięcy, a nie raz w roku jak dotychczas. Biorąc pod uwagę równoczesne wsparcie dla dwóch różnych głównych gałęzi, nowe wydanie pośrednie będzie publikowane co 3 miesiące (15.4, 16.1, 15.5, 16.2 itd.), z wyjątkiem przygotowania pierwszych wydań nowych głównych gałęzi, przed którymi będzie 6-miesięczna przerwa w wydaniach (na przykład wydanie 15.3 zostanie utworzone w czerwcu 2027 roku, 16.0 w grudniu 2027, 15.4 — w marcu 2028, 16.1 — w czerwcu 2028).
Główne zmiany w FreeBSD 15.0 (w oficjalnej notatce do wydania, oprócz specyficznych dla wydania 15.0 zmian, wspomniano wiele funkcji, które wcześniej dodano w gałęziach 14.1, 14.2 i 14.3):
- Zaimplementowano możliwość użycia menedżera pakietów pkg do instalowania i aktualizowania komponentów systemu podstawowego. Pakiety pkgbase mogą być dostarczane na nośniku instalacyjnym do instalacji offline lub pobierane z repozytorium pkg.freebsd.org. W konfiguracji pkg (/etc/pkg/FreeBSD.conf) repozytorium FreeBSD-base nie jest domyślnie włączone. Instalator bsdinstall oferuje dwie opcje instalacji: tradycyjną oraz z wykorzystaniem pakietów (pkgbase). Obsługa tradycyjnego sposobu, w którym system podstawowy traktowany jest jako monolityczne środowisko, aktualizowane za pomocą narzędzia freebsd-update, planowana jest do usunięcia w gałęzi FreeBSD 16. Nowa metoda, polegająca na instalacji systemu podstawowego jako zestawu pakietów z repozytorium FreeBSD-base, jest domyślnie proponowana w wydaniach dla maszyn wirtualnych i obrazów dla środowisk chmurowych, ale obecnie jest traktowana jako eksperymentalna dla standardowych systemów.
- Dodano wsparcie dla kompilacji FreeBSD w nieuprzywilejowanych środowiskach, które nie wymagają uprawnień roota. Bez uprawnień roota możliwe jest także tworzenie instalacyjnych obrazów ISO i systemowych obrazów dla maszyn wirtualnych. Na etapie kompilacji uprawnienia roota były niezbędne do tworzenia plików urządzeń, ustawiania praw dostępu oraz montowania dodatkowych systemów plików (na przykład podczas tworzenia obrazów dysków).
- Zrealizowano wsparcie dla powtarzalnych kompilacji, które pozwalają upewnić się, że rozpowszechniane pliki binarne zostały zbudowane z dostarczonego kodu źródłowego i nie zawierają ukrytych zmian. Powtarzalne kompilacje zapewniają tożsamość plików binarnych wytwarzanych z kodu źródłowego w różnych środowiskach kompilacyjnych.
- Zakończono tworzenie instalacyjnych obrazów i kompilacji pakietów binarnych dla 32-bitowych architektur i386, armv6 i powerpc. Z 32-bitowych platform pozostawiono tylko armv7. Możliwość kompilacji 32-bitowych programów oraz korzystania z trybu COMPAT_FREEBSD32 do uruchamiania 32-bitowych plików wykonywalnych w środowisku opartym na 64-bitowym jądrze pozostanie co najmniej do końca cyklu życia gałęzi FreeBSD 16.
- Dodano wywołania systemowe z implementacją mechanizmu inotify do śledzenia zmian w systemach plików.
- Dodano wsparcie dla nazwanych atrybutów plików (rozszerzonych atrybutów w stylu Solaris), które planuje się wspierać jako alternatywny mechanizm zarządzania rozszerzonymi atrybutami dostępnymi dla ZFS i NFSv4. Różnice w porównaniu do tradycyjnych metod pracy z rozszerzonymi atrybutami w FreeBSD i Linuksie dotyczą przedstawienia atrybutów w specjalnym katalogu, niewidocznym w głównym przestrzeni nazw FS, i skojarzonym z plikiem. Operacje na atrybutach wykonuje się jak na zwykłych plikach, na przykład, aby określić listę atrybutów, można użyć funkcji readdir().
- Ogłoszono gotowy do użycia moduł mac_do, który pozwala na definiowanie polityk umożliwiających nieuprzywilejowanym użytkownikom zmianę danych uwierzytelniających procesów. Do uruchamiania poleceń jako inny użytkownik przygotowano narzędzie mdo, podobne do narzędzia su, ale nie wymagające uprawnień suid roota.
- Stan sterowników DRM i915 oraz amdgpu jest synchronizowany z jądrem Linux 6.9. Sterowniki urządzeń bezprzewodowych rtw88 (Realtek 802.11n/ac), rtw89 (Realtek 802.11ax) oraz iwlwifi (Intel 02.11a/b/g/n/ac/ax/be) są synchronizowane z jądrem Linux 6.17.
- Implementacja protokołu TLS po stronie jądra (KTLS) jest włączona domyślnie.
- Dodano narzędzie sndctl do zarządzania ustawieniami kart dźwiękowych.
- Dodano narzędzie mididump do zrzutu zdarzeń MIDI 1.0 w czasie rzeczywistym.
- Do hyperwizora bhyve dodano nowy backend sieciowy „slirp”, który wykorzystuje bibliotekę libslirp z realizacją stosu sieciowego w przestrzeni użytkownika. Backend „slirp” umożliwia dostęp do sieci systemu gościa z poziomu środowiska hosta bez konieczności dodatkowej konfiguracji sieci po stronie hosta.
- Implementacja Kerberos w podstawowej wersji FreeBSD została zastąpiona Heimdal Kerberos przez MIT Kerberos. Aby przywrócić Heimdal Kerberos podczas kompilacji, można użyć flagi WITHOUT_MITKRB5. W FreeBSD 16 wsparcie dla kompilacji Heimdal Kerberos zostanie usunięte.
- Zachowanie wywołań systemowych setgroups, getgroups oraz initgroups przy przetwarzaniu grup użytkowników zostało zbliżone do innych platform (różnica w implementacji w FreeBSD polegała na przechowywaniu efektywnego identyfikatora grupy procesów w zerowym elemencie tablicy ze listą grup).
- W ustawieniach menedżera pakietów pkg domyślnie włączono nowe repozytorium FreeBSD-kmods, które zawiera pakiety z modułami jądra, zbudowanymi dla konkretnych gałęzi wydania 15.x-RELEASE, a nie stale aktualizowanej gałęzi 15-STABLE. Repozytorium FreeBSD-kmods rozwiązuje problem z instalacją sterowników zależnych od niestabilnych interfejsów jądra (na przykład sterowników graficznych). Wcześniej obecne w /etc/pkg/FreeBSD.conf repozytoria „FreeBSD” i „FreeBSD-kmods” zostały przemianowane na „FreeBSD-ports” i „FreeBSD-ports-kmods”.
- W NFS dodano wsparcie dla operacji CLONE definiowanej w specyfikacji NFSv4.2, która umożliwia szybkie kopiowanie plików poprzez klonowanie bloków na serwerze. Tryb ten działa obecnie tylko przy eksporcie przez NFS partycji ZFS.
- Na systemach amd64 dodano możliwość korzystania z więcej niż 4TB RAM.
- Dodano sterownik ufshci do obsługi kontrolerów systemów magazynowania z interfejsem UFSHCI (Universal Flash Storage Host Controller Interface).
- Domyślnie ustawienie sysctl net.link.bridge.member_ifaddrs wynosi 0, co oznacza, że można dodawać interfejsy do mostów sieciowych bez. adresów IP.
- Zwiększona niezawodność działania sekcji z systemem plików UFS, zawierających ponad 2 000 000 000 inode. W realizacji systemu plików UFS1 rozwiązano problem roku 2038 (można używać dat do 2106 roku).
- Dodano opcję gniazd sieciowych SO_SPLICE do łączenia połączeń TCP (podobnie jak proxy, działające bez kopiowania danych do przestrzeni użytkownika).
- W narzędziu grep domyślnie wyłączono przeszukiwanie symbolicznych linków podczas rekurencyjnego wyszukiwania.
- Dodano moduł jądra nvmf dla wsparcia kontrolerów NVMe over Fabric oraz narzędzie nvmecontrol do podłączenia do zewnętrznego kontrolera NVMe over Fabric.
- Do narzędzia date dodano wsparcie dla wyświetlania czasu z dokładnością do nanosekund, na przykład „date -Ins” wyświetli „2024-04-22T12:20:28,763742224+02:00”.
- W jail dodano wsparcie dla opcji zfs.dataset, umożliwiającej dodanie do izolowanego środowiska jail sekcji, migawki lub klona ZFS. Do polecenia jail dodano wsparcie dla parametrów „meta” i „env”, które pozwalają na powiązanie metadanych lub przekazywanie zmiennych środowiskowych. Dodano możliwość adresowania środowisk jail według deskryptorów jail, dla których zaproponowano funkcje jail_set i jail_get, oraz wywołania systemowe jail_attach_jd i jail_remove_jd. Dodano możliwość używania filtrów kevent do monitorowania operacji tworzenia, usuwania, modyfikacji i dołączania Jail.
- W narzędziu newsyslog wprowadzono parametr do określenia domyślnej metody kompresji (bzip2, xz, zstd, gzip), eliminujący potrzebę podawania osobnych flag (J, X, Y, Z) w każdej linii newsyslog.conf.
- W standardowej bibliotece C w wielu funkcjach do pracy z łańcuchami i pamięcią zastosowano optymalizacje oparte na instrukcjach SIMD.
- W czcionce Gallant, używanej w wirtualnych terminalach, dodano ponad 4300 nowych glifów, w tym glify z symbolami cyrylicy i znakami matematycznymi.
- W tty domyślnie ustawiono flagę IUTF8, przy której prawidłowo działa usuwanie znaków UTF-8 po naciśnięciu Backspace.
- Narzędzie dialog, używane w konfiguratorze bsdconfig i instalatorze bsdinstall, zostało zastąpione przez bsddialog.
- W narzędziu adduser, stosowanym w bsdinstall, zapewniono tworzenie oddzielnego zestawu ZFS (sekcji, migawki lub klona) dla katalogu domowego użytkownika, jeśli zestaw ZFS jest już używany dla katalogu nadrzędnego. Dodano również możliwość używania szyfrowania katalogów domowych za pomocą ZFS. W celu zarządzania aktywacją tych funkcji w adduser.conf dodano parametry „Zcreate” i „Zencrypt”.
- Zapewniono tworzenie obrazów kontenerów i obrazów systemowych zgodnych z OCI dla Oracle Cloud.
- Dodano nowy typ obrazów „small” dla chmurowych środowisk zgodnych z AWS EC2. W przeciwieństwie do podstawowych obrazów, wykluczone są z nich dane do debugowania, testy, biblioteki 32-bitowe, debugger LLDB, Amazon SSM Agent i AWS CLI. Ładowanie obrazów „base” dla EC2 przyspieszono o 76%.
- Domyślnie wyłączono i uznano za przestarzałe ustawienie net.inet.tcp.nolocaltimewait, tzn. przywrócono domyślne tworzenie wpisów TIME_WAIT dla połączeń TCP przerwanych po stronie lokalnej. Aby skonfigurować czas trwania połączenia w stanie TIME_WAIT, dodano nowy sysctl net.inet.tcp.msl_local.
- Domyślnie wyłączono obsługę tworzenia połączeń sieciowych do localhost, w których wskazywane jest INADDR_ANY. Aby przywrócić wsparcie, można ustawić sysctl net.inet.ip.connect_inaddr_wild na wartość 1.
- Usunięto menedżera logicznych woluminów gvinum, który był używany do programowego RAID. Rozwój Gvinum zatrzymał się około 15 lat temu, pomimo że w kodzie występuje szereg znanych problemów, które nikt nie podjął się naprawić. Zamiast gvinum zaleca się stosowanie gconcat, gmirror, gstripe, graid lub zfs.
- Planowane jest usunięcie w FreeBSD 16 sterownika agp (Accelerated Graphics Port), niezbędnego do działania wielu sterowników dla starych kart graficznych. Ogłoszono także, że przestarzałe i planowane do usunięcia są sterowniki: fdc (IBM PC Floppy Disk Controller), firewire (IEEE1394 Serial Bus), le (AMD Am7900 LANCE i Am79C9xx Ethernet) oraz upgt (USB 802.11g).
- Ogłoszono przestarzałą funkcję readdir_r.
- W serwerze SNMP bsnmpd zaprzestano wsparcia dla transportu UDP.
- Zaprzestano generowania kluczy hostów RSA dla SSH i EC2 AMI. Usunięto wsparcie DSA z OpenSSH. Usunięto bazę danych publickey, powiązaną z algorytmem DES.
- Usunięto ftpd i shar z systemu podstawowego, w ich miejsce należy używać portów ftp/freebsd-ftpd i sysutils/freebsd-shar.
- Ogłoszono przestarzałe narzędzie fdisk, w miejscu którego należy używać gpart.
- Do kategorii przestarzałych został przekazany sterownik syscons, który jest niezgodny z UEFI, nie obsługuje UTF-8 i jest uzależniony od globalnej blokady.
- Zaktualizowane wersje LLVM 19.1.7, OpenSSH 10.0p2, OpenSSL 3.5.4, OpenZFS 2.4.0rc4, Lua 5.4.8, jemalloc 5.3.0, Awk 20250804 (z obsługą UTF-8), bc 7.1.0, unicode 16.0.0, ncurses 6.5, libarchive 3.8.2, tcpdump 4.99.5, unbound 1.24.1, less 679, file 5.46, GoogleTest 1.15.2.
Źródło: opennet.ru
