Po dveh letih in pol od oblikovanja veje 12.x je izdan FreeBSD 13.0, ki je pripravljen za arhitekture amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 in riscv64. Dodatno so oblikovane slike za virtualizacijske sisteme (QCOW2, VHD, VMDK, raw) in oblačna okolja Amazon EC2, Google Compute Engine in Vagrant.
Glavne novosti:
- Prešel je na poenoteno c Linux izvedbo datotečnega sistema ZFS iz projekta OpenZFS. Med funkcionalnostmi, ki so postale na voljo v FreeBSD po prehodu na OpenZFS, so: razširjen sistem kvot, šifriranje podatkovnih nizov, ločeno izbiro razredov dodeljevanja blokov (allocation classes), uporaba vektorskih procesorskih navodil za pospešitev izvedbe RAIDZ in izračuna kontrolnih številk, podpora algoritmu stiskanja ZSTD, način multihost (MMP, Multi Modifier Protection), izboljšano orodje za ukazno vrstico ter odpravljene številne napake, povezane s stanjem dirke in zaklepanjem.
- Pristanišče za arhitekturo ARM64 (AArch64) je prešlo na prvo raven podpore (Tier 1), ki jo obravnavajo ekipe, odgovorne za odpravo ranljivosti, pripravo izdaj in vzdrževanje pristanišč. Prva raven podpore vključuje oblikovanje namestitvenih sprememb, binarnih posodobitev in pripravljenih paketov ter zagotavljanje jamstev za reševanje specifičnih težav in ohranjanje nespremenjenosti ABI za uporabniško okolje in jedro (razen nekaterih podsystemov).
- Arhitektura i386 je bila prenesena na drugo raven podpore platform (Tier 2), pri čemer se bo nadaljevalo oblikovanje namestitvenih sprememb, binarnih posodobitev in pripravljenih paketov, vendar ne zagotavlja reševanja specifičnih težav. Tipo CPU (CPUTYPE) za arhitekturo i386 je privzeto spremenjeno iz 486 na 686 (po želji pa lahko sami oblikujete spremembe za i486 in i586).
- Komponente clang, lld, lldb, compiler-rt, llvm, libunwind in libc++ so bile posodobljene na različico 11.
- Razvoj je bil prenesen iz centraliziranega sistema za upravljanje izvornih kod Subversion v decentralizirani sistem Git.
- Očistili smo osnovni sistem od aplikacija pod GPL licencom. Iz stabla izvornih kodova uklonjeni su binutils 2.17 i gcc 4.2.1, a sve podržane arhitekture su prešle na LLVM/clang alate. Uključene su BSD verzije alata grep i dtc (Device Tree Compiler), koje su zamenile GPL verzije. Uklonjen je proces automatskog montiranja amd, čija funkcionalnost se sada realizuje putem autofs. Uklonjen je ctm alat, a preporučuje se korišćenje porta misc/ctm.
- Prepisana je staza rutiranja, u kojoj je uvedena podrška za nexthop objekte, koji čuvaju podatke o stanju korišćenim za prenos paketa na željenu destinaciju. Dodata je mogućnost povezivanja sopstvenih algoritama za pretragu ruta. Uvedeni su algoritmi za pretragu ruta iz DPDK (Data Plane Development Kit) librte, koji omogućavaju optimizaciju rada sa vrlo velikim tabelama rutiranja. Za proxyarp zahteve korišćen je fib interfejs. Omogućena je promena broja fib-a u hodu putem sysctl net.fibs. Implementirana je podrška za privremene rute za IPv4 i IPv6 (sa postavljenim vremenom života).
- Prepisana je i učinjena je skalabilnijom podrška za Multipath rutiranje, pri čemu vreme pretrage ne zavisi od veličine liste (O(1)). Nova implementacija Multipath sada je povezana sa kernel parametrima ROUTE_MPATH, koji je zamenio RADIX_MPATH i uključen je podrazumevano. Za upravljanje Multipath-om predložen je sysctl net.route.multipath.
- Redizajniran je kriptografski okvir na nivou jezgra, u kojem je uvedena podrška za moderne kriptografske algoritme i pojednostavljen je interfejs za korišćenje enkripcije u drajverima i drugim komponentama jezgra. Uklonjeni su zastareli algoritmi ARC4, Blowfish, CAST128, DES, DES, MD5-HMAC i Skipjack. U IPsec i Kerberos-u prestala je podrška za algoritme koji su označeni kao zastareli u RFC 8221 i RFC 6649/8429, uključujući 3DES. Uklonjeni su ranije označeni zastareli algoritmi u podskupini šifrovanja diska geli i cryptodev.
- U GENERIC jezgru uključena je podrška za drajvere aesni i armv8crypto za akceleraciju diskovne enkripcije bazirane na geli pomoću AES-NI instrukcija za amd64/i386 arhitekture i AES-XTS za ARM64.
- Dodano drvo qat za kriptoakceleratore Intel QuickAssist (QAT) i drvo ossl sa implementacijom ubrzanih programskih procedura šifriranja iz OpenSSL, optimizovanog uz pomoć assembler koda. U drajveru armv8crypto dodata je podrška za AES-XTS i AES-GCM korišćenjem odgovarajućih instrukcija ARMv8 procesora.
- Dodata je implementacija TLS (kTLS) koja funkcioniše na nivou jezgra FreeBSD, omogućavajući značajno povećanje performansi šifriranja za TCP sokete. Podržavaju se verzije TLS od 1.0 do 1.3. Za šifriranje se koriste kripto drajveri jezgra sa podrškom za AES-CBC ili AES-GCM. Za korišćenje kTLS u korisničkom prostoru neophodna je ponovna kompilacija OpenSSL sa opcijom WITH_OPENSSL_KTLS.
- Dodata je nova vrsta mrežnih bafera mbuf (network data buffer), koja može predstavljati više neodrezanih fizičkih stranica memorije u jednom baferu, što omogućava povećanje performansi poziva sendfile(2) smanjenjem veličine lista mbuf u baferima soketa.
- U TCP stek je integrisana podrška za algoritam proporcionalnog smanjenja intenziteta slanja paketa (Proportional Rate Reduction, RFC 6937), omogućavajući brže obnavljanje optimalnih parametara toka nakon privremenih problema sa prenosom podataka. Za isključivanje PRR-a predviđen je sysctl net.inet.tcp.do_prr.
- Proširene mogućnosti hipervizora Bhyve: dodata je podrška za zajednički pristup datotekama pomoću VirtIO-9p (VirtFS). Implementirana je mogućnost rada sa snimcima. virtualnih napravDodata je podrška za PCI HDAudio uređaje i dodatne serijske portove COM3 i COM4. Uklonjene su zastarele verzije uređaja bvmconsole i bvmdebug. Povećana je stabilnost rada sa VNC klijentima, uključujući macOS aplikaciju „Screen Sharing“.
- U VirtIO drajvere dodata je podrška za specifikaciju VirtIO V1, što je poboljšalo kompatibilnost gostujućih sistema sa FreeBSD sa raznim emulatorima i hipervizorima.
- Za procese prikačene na jail okruženja obezbeđeno je prevođenje vezivanja na CPU (prvobitno vezano za proces cpuset biće zamenjeno uzimajući u obzir cpuset jail-a i postavljene ograničenja).
- Dodana je mogućnost gradnje osnovnog sistema FreeBSD u okruženjima zasnovanim na drugim operativnim sistemima. Potreba za gradnjom u drugim operativnim sistemima proizašla je iz želje da se za testiranje FreeBSD koriste alati za kontinuiranu integraciju vezani za Linux ili macOS.
- Predložen je novi stek MMC/SD, zasnovan na okviru CAM, koji omogućava povezivanje uređaja sa SDIO (Secure Digital I/O) interfejsom. Na primer, SDIO se koristi u WiFi i Bluetooth modulima za mnoge ploče, poput Raspberry Pi 3. Novi stek takođe omogućava korišćenje CAM interfejsa za slanje SD komandi iz aplikacija u prostoru korisnika, što omogućava kreiranje upravljačkih programa uređaja koji rade na nivou korisnika.
- Poboljšan je rad sloja za kompatibilnost sa Linuxom. DTS (Device Tree Sources) datoteke su usklađene sa Linux kernelom 5.8.
- Dodata je podrška za NFSv4.2 (RFC-7862) i implementirana je mogućnost rada NFS-a preko šifrovane komunikacione linije zasnovane na TLS 1.3, umesto korišćenja Kerberos-a (mod sec=krb5p), koji se ograničavao na šifrovanje samo RPC poruka i bio je implementiran samo softverski.
- Uklonjena je zastarela verzija debagera GDB, koja je ranije bila instalirana u direktorijumu /usr/libexec i korišćena u alatu crashinfo. Umesto unapred instaliranog GDB-a, za dobijanje detaljnih informacija o uzrocima kvarova sada se preporučuje instalacija svežih verzija GDB-a iz portova ili paketa. Prekinuta je podrška za debagovanje procesa kroz procfs. Dodan je netgdb drajver, koji omogućava pristup debageru jezgra putem mreže.
- Iz libc je uklonjena nesigurna funkcija gets (počevši od C11 standarda, ova funkcija je isključena iz specifikacije) i izvršena je revizija portova koji još koriste ovu funkciju. Uklonjene su funkcije cap_random (preporučuje se korišćenje getrandom).
- Dodana je nova sistemska pozivna funkcija copy_file_range, kompatibilna sa implementacijom iz Linux kernela, koja omogućava ubrzanje kopiranja podataka iz jedne datoteke u drugu, zahvaljujući izvršavanju operacije samo na strani jezgra bez prethodnog čitanja podataka u memoriju procesa. Sistemski poziv se takođe koristi u strežnikom NFSv4.2 za lokalno izvršavanje operacija kopiranja na serveru (bez slanja klijentu).
- V mehanizmu asinhronega vnosa/izvoda POSIX AIO je podprt vektorizirani funkcionalnosti. Zlasti so dodani sistemski klici aio_writev in aio_readv, ki omogočajo izvajanje vektoriziranih ekvivalentov funkcij aio_read in aio_write.
- Podpora za komponente uporabniškega prostora za format izvršnih datotek a.out na sistemih z arhitekturo i386 je bila ukinjena. Orodje elf2aout je bilo odstranjeno.
- Orodja ping in ping6 so združena. V ping je dodana možnost nastavitve parametrov kakovosti storitev (QoS) preko IP DSCP in Ethernet PCP.
- V orodju freebsd-update je bila zagotovljena prikaz napredka pri nalaganju datotek, dodani pa so tudi ukazi updatesready in showconfig za preverjanje razpoložljivosti posodobitev in prikaz konfiguracije.
- Izvedeno je bilo obsežno delo na izboljšanju podpore za sisteme NUMA (Non-Uniform Memory Access).
- Grafični gonilniki in sestavni deli grafičnega sklada so bili posodobljeni. Težave z delovanjem okolij na osnovi protokola Wayland so bile rešene.
- Dodana je bila podmenjava backlight za ustvarjanje gonilnikov za nadzor osvetlitve. Dodan je bil gonilnik pwm-backlight za upravljanje osvetlitve Pinebook in Pinebook Pro.
- Podpora SCTP protokola je umestnená do samostatného modulu sctp.ko, ktorý je predvolene vypnutý v GENERIC jadre.
- Za vhodne naprave je bil predstavljen novi gonilnik usbhid, ki uporablja okvir hid za delo z napravami USB HID, namesto gonilnikov ukbd, ums in uhid.
- V upravljalniku cpufreq je dodana podpora za tehnologijo Intel Speed Shift.
- Dodana je podpora za nove plošče na osnovi 64-bitnih CPU ARMv8, vključno s SoC Broadcom BCM5871X in NXP LS1046A.
- Za arhitekturo AMD64 je bila uvedena podpora za 57-bitne virtualne naslove (LA57). Dodana je podpora za kitajske x86 CPU Hygon Dhyana, temelječe na tehnologijah AMD.
- Port za arhitekturo powerpc64 je bil preusmerjen na uporabo LLVM in ABI ELFv2 (binarne datoteke iz prejšnjih različic FreeBSD ne bodo delovale v FreeBSD 13). Za powerpc64 so bili portirani gonilniki virtio, ixl, mrsas, aacraid, cpld.
- Odstranjeni so bili gonilniki za zastarele Ethernet adapterje:
- bm(4) BMAC
- cs(4) Crystal Semiconductor CS8900/CS8920
- de(4) DEC DC21x4x
- ed(4) NE-2000 in WD-80×3
- ep(4) 3Com Etherlink III (3c5x9) ISA
- ex(4) Intel EtherExpress Pro/10 in 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
- Odstranjeni so bili gonilniki ubsec (kryptoakseleratorji Broadcom BCM58xx), ufm (FM-tunerji z USB vmesnikom), ctau (Cronix Tau), cx (Cronix Sigma) in vpo (paralelni SCSI).
Izvor: opennet.ru
