Po dvou a půl letech od vzniku větve 12.x byl představen vydání FreeBSD 13.0, které je připraveno pro architektury amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 a riscv64. Dále byly vytvořeny obrazy pro virtualizační systémy (QCOW2, VHD, VMDK, raw) a cloudová prostředí Amazon EC2, Google Compute Engine a Vagrant.
Hlavní novinky:
- Byl proveden přechod na unified c Linux implementaci souborového systému ZFS z projektu OpenZFS. Mezi funkcemi, které se staly dostupnými ve FreeBSD po přechodu na OpenZFS, patří: rozšířený systém kvót, šifrování datových sad, oddělený výběr tříd alokace bloků (allocation classes), použití vektorových procesorových instrukcí pro zrychlení implementace RAIDZ a výpočtu kontrolních součtů, podpora kompresního algoritmu ZSTD, režim multihost (MMP, Multi Modifier Protection), vylepšené nástroje příkazového řádku, opravy mnoha chyb souvisejících se stavy závodů a zámky.
- Port pro architekturu ARM64 (AArch64) byl převeden na první úroveň podpory (Tier 1), která je udržována týmy odpovědnými za odstranění zranitelností, přípravu vydání a údržbu portů. První úroveň podpory zahrnuje tvorbu instalačních balíčků, binárních aktualizací a hotových balíčků, a také poskytování záruk na řešení specifických problémů a zachování neměnnosti ABI pro uživatelské prostředí a jádro (s výjimkou některých podsystemů).
- Architektura i386 byla převedena na druhou úroveň podpory platforem (Tier 2), při které bude pokračováno v tvorbě instalačních balíčků, binárních aktualizací a hotových balíčků, ale nezaručuje se řešení specifických problémů. Typ CPU (CPUTYPE) pro architekturu i386 byl ve výchozím nastavení změněn z 486 na 686 (pokud je to žádoucí, balíčky pro i486 a i586 si můžete vytvořit sami).
- Složky clang, lld, lldb, compiler-rt, llvm, libunwind a libc++ byly aktualizovány na verzi 11.
- Vývoj byl převeden z centralizovaného systému správy zdrojových kódů Subversion do decentralizovaného systému Git.
- Byl proveden úklid základního systému od aplikací distribuovaných pod licencí GPL. Ze stromu zdrojových textů byly odstraněny binutils 2.17 a gcc 4.2.1, všechny podporované architektury byly převedeny na nástroje LLVM/clang. Byly přidány varianty nástrojů grep a dtc (Device Tree Compiler) distribuované pod licencí BSD, které nahradily verze pod licencí GPL. Bylo odstraněno automatické montování amd, jehož funkčnost je nyní realizována pomocí autofs. Nástroj ctm byl odstraněn a doporučuje se použít port misc/ctm.
- Byla přepsána routovací stack, ve které byla přidána podpora objektů nexthop, které ukládají informace o stavu používané pro přenos paketu do požadovaného cíle. Byla přidána možnost připojit vlastní algoritmy pro hledání tras. Byly přidány algoritmy pro hledání tras z DPDK (Data Plane Development Kit) librte, které umožňují optimalizaci práce s velmi velkými routovacími tabulkami. Pro požadavky proxyarp byl zapojen interface fib. Byla přidána možnost měnit počet fib za běhu prostřednictvím sysctl net.fibs. Byla implementována podpora dočasných tras pro IPv4 a IPv6 (s nastavenou dobou života).
- Byla přepsána a učiněna škálovatelnější podpora Multipath routingu, kde doba hledání nezávisí na velikosti seznamu (O(1)). Nová implementace Multipath je nyní spojena s parametrem jádra ROUTE_MPATH, který nahradil RADIX_MPATH a je standardně zapnutý. Pro správu Multipath byl navržen sysctl net.route.multipath.
- Byl přepracován kryptografický rámec na úrovni jádra, ve kterém byla přidána podpora moderních kryptografických algoritmů a zjednodušen rozhraní pro použití šifrování v ovladačích a dalších komponentách jádra. Byly odstraněny zastaralé algoritmy ARC4, Blowfish, CAST128, DES, DES, MD5-HMAC a Skipjack. V IPsec a Kerberos byla ukončena podpora algoritmů, které byly označeny jako zastaralé v RFC 8221 a RFC 6649/8429, včetně 3DES. Byly odstraněny dříve vyhlášené zastaralé algoritmy v subsystému šifrování disku geli a cryptodev.
- Do jádra GENERIC byla zahrnuta podpora ovladačů aesni a armv8crypto pro zrychlení šifrování disku založeného na geli pomocí instrukcí AES-NI pro architektury amd64/i386 a AES-XTS pro ARM64.
- Byl přidán ovladač qat pro kryptografické akcelerátory Intel QuickAssist (QAT) a ovladač ossl, který implementuje zrychlené programové šifrovací procedury z OpenSSL optimalizované pomocí assemblerového kódu. Ovladač armv8crypto nyní podporuje AES-XTS a AES-GCM s využitím příslušných instrukcí procesorů ARMv8.
- Byla přidána implementace TLS (kTLS), která funguje na úrovni jádra FreeBSD a umožňuje podstatné zvýšení výkonu šifrování pro TCP sokety. Podporují se verze TLS od 1.0 do 1.3. Pro šifrování se používají jádrové kryptografické ovladače s podporou AES-CBC nebo AES-GCM. Pro použití kTLS v uživatelském prostoru je třeba překompilovat OpenSSL s volbou WITH_OPENSSL_KTLS.
- Byl přidán nový typ síťových bufferů mbuf (buffer pro síťová data), který může představovat v jednom bufferu více neodrážených fyzických stránek paměti, což umožňuje zvýšit výkon volání sendfile(2) díky zmenšení velikosti seznamů mbuf v bufferech soketu.
- Do TCP zásobníku byla integrována podpora algoritmu pro proporční snižování intenzity odesílání paketů (Proportional Rate Reduction, RFC 6937), který umožňuje rychleji obnovit optimální parametry toku po dočasných problémech s přenosem dat. Pro deaktivaci PRR je k dispozici sysctl net.inet.tcp.do_prr.
- Byly rozšířeny možnosti hypervizoru Bhyve: Přidána podpora sdílení souborů pomocí VirtIO-9p (VirtFS). Byla implementována možnost práce se snapshoty. virtuálních strojůByla přidána podpora zařízení PCI HDAudio a dalších sériových portů COM3 a COM4. Byly odstraněny zastaralé modely zařízení bvmconsole a bvmdebug. Byla zvýšena stabilita práce s klienty VNC, včetně aplikace pro macOS "Screen Sharing".
- Do ovladačů VirtIO byla přidána podpora specifikace VirtIO V1, což zlepšilo kompatibilitu hostitelských systémů s FreeBSD s různými emulátory a hypervizory.
- Pro procesy připojené k jail prostředím je zajištěna konverze vazeb na CPU (původně přidělená k procesu cpuset bude nahrazena s ohledem na cpuset jailu a stanovená omezení).
- Byla přidána možnost sestavování základního systému FreeBSD v prostředích na základě jiných operačních systémů. Potřeba sestavování v jiných operačních systémech vyplývá z touhy využít nástroje kontinuální integrace pro testování FreeBSD, které jsou navázány na Linux nebo macOS.
- Byl navržen nový stack MMC/SD založený na rámci CAM, který umožňuje připojování zařízení s rozhraním SDIO (Secure Digital I/O). Například, SDIO se používá v WiFi a Bluetooth modulech pro mnoho desek, jako je Raspberry Pi 3. Nový stack také umožňuje používat rozhraní CAM pro odesílání SD příkazů z aplikací v prostoru uživatele, což umožňuje vytváření ovladačů zařízení, které pracují na úrovni uživatele.
- Byla vylepšena práce vrstvy pro zajištění kompatibility s Linuxem. Soubor DTS (Device Tree Sources) byl synchronizován s jádrem Linux 5.8.
- Byla přidána podpora NFSv4.2 (RFC-7862) a byla implementována možnost práce NFS přes šifrovaný komunikační kanál na bázi TLS 1.3, místo použití Kerberosu (režim sec=krb5p), který byl omezen na šifrování pouze RPC zpráv a byl realizován pouze softwarově.
- Byla odstraněna zastaralá verze ladicího nástroje GDB, která byla dříve nainstalována v adresáři /usr/libexec a používána v utilitě crashinfo. Místo předinstalovaného GDB se doporučuje pro získání podrobných informací o příčinách pádu nainstalovat novou verzi GDB z portů nebo balíčků. Byla také ukončena podpora ladění procesů prostřednictvím procfs. Byl přidán ovladač netgdb, který umožňuje přístup k laděči jádra přes síť.
- Z libc byla odstraněna nebezpečná funkce gets (od standardu C11 byla tato funkce vyloučena ze specifikace) a byly provedeny úpravy portů, které tuto funkci ještě používají. Byly odstraněny funkce cap_random (doporučuje se použít getrandom).
- Byl přidán nový systémový hovor copy_file_range, kompatibilní s implementací v jádře Linux, který umožňuje urychlit kopírování dat z jednoho souboru do druhého díky provádění operace pouze na straně jádra bez předchozího čtení dat do paměti procesu. Systémový hovor se také používá v serveru NFSv4.2 pro lokální provádění operací kopírování na serveru (bez přenosu klientovi).
- V mechanismu asynchronního vstupu/výstupu POSIX AIO je podpora vektorizovaných funkcí. Zejména byly přidány systémové volání aio_writev a aio_readv, které umožňují implementaci vektorizovaných ekvivalentů funkcí aio_read a aio_write.
- Byla ukončena podpora komponent pro uživatelský prostor pro formát spustitelných souborů a.out na systémech s architekturou i386. Nástroj elf2aout byl odstraněn.
- Nástroje ping a ping6 byly sloučeny. Do ping byla přidána možnost nastavení parametrů kvality služeb (QoS) pomocí IP DSCP a Ethernet PCP.
- Nástroj freebsd-update nyní zobrazuje postup při stahování souborů a byly přidány příkazy updatesready a showconfig pro kontrolu aktualizací a zobrazení konfigurace.
- Byla provedena rozsáhlá práce na vylepšení podpory systémů NUMA (Non-Uniform Memory Access).
- Byly aktualizovány grafické ovladače a komponenty grafického stacku. Byly vyřešeny problémy s provozem prostředí založených na protokolu Wayland.
- Byl přidán podsystem backlight pro vytváření ovladačů pro řízení podsvětlení. Byl přidán ovladač pwm-backlight pro řízení podsvětlení Pinebook a Pinebook Pro.
- Podpora protokolu SCTP byla vyčleněna do samostatného modulu sctp.ko, který je ve výchozím nastavení v jádře GENERIC vypnutý.
- Pro vstupní zařízení byl navržen nový ovladač usbhid, který používá framework hid pro práci s USB HID zařízeními, místo ovladačů ukbd, ums a uhid.
- V ovladači cpufreq byla realizována podpora technologie Intel Speed Shift.
- Byla přidána podpora nových desek založených na 64-bitových CPU ARMv8, včetně SoC Broadcom BCM5871X a NXP LS1046A.
- Pro architekturu AMD64 byla implementována podpora 57-bitových virtuálních adres (LA57). Byla přidána podpora čínských x86 CPU Hygon Dhyana založených na technologiích AMD.
- Port pro architekturu powerpc64 byl převeden na použití LLVM a ABI ELFv2 (binární soubory z předchozích verzí FreeBSD nebudou moci být použity ve FreeBSD 13). Pro powerpc64 byly portovány ovladače virtio, ixl, mrsas, aacraid, cpld.
- Byly odstraněny ovladače pro zastaralé Ethernet adaptéry:
- bm(4) BMAC
- cs(4) Crystal Semiconductor CS8900/CS8920
- de(4) DEC DC21x4x
- ed(4) NE-2000 a WD-80×3
- ep(4) 3Com Etherlink III (3c5x9) ISA
- ex(4) Intel EtherExpress Pro/10 a 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
- Byly odstraněny ovladače ubsec (kryptoakcelerátory Broadcom BCM58xx), ufm (FM tunery s USB rozhraním), ctau (Cronix Tau), cx (Cronix Sigma) a vpo (paralelní port SCSI).
Zdroj: opennet.ru
