След като изминаха две години и половина от формирането на клон 12.x, бяха представени FreeBSD 13.0, който е подготвен за архитектурите amd64, i386, powerpc, powerpc64, powerpc64le, powerpcspe, armv6, armv7, aarch64 и riscv64. Допълнително са формирани образи за виртуализационни системи (QCOW2, VHD, VMDK, raw) и облачни среди Amazon EC2, Google Compute Engine и Vagrant.
Основни нововъведения:
- Извършен е преход към унифицирана реализация на файловата система ZFS от проекта OpenZFS. Сред възможностите, които станаха налични в FreeBSD след прехода към OpenZFS, са: разширена система от квоти, шифроване на набори данни, отделен избор на класове за разпределение на блокове (allocation classes), използване на векторни инструкции на процесора за ускорение на реализацията на RAIDZ и изчисления на контролни суми, поддръжка на алгоритъма за компресия ZSTD, режим multihost (MMP, Multi Modifier Protection), подобрен инструментариум за командния ред и корекции на много грешки, свързани с условия на състезание и блокировки.
- Портът за архитектура ARM64 (AArch64) е преместен на първо ниво поддръжка (Tier 1), което попада под грижите на екипи, отговарящи за отстраняване на уязвимости, подготовка на версии и поддържане на портове. Първото ниво на поддръжка предполага формиране на инсталационни пакети, бинарни актуализации и готови пакети, както и предоставяне на гаранции за решаване на специфични проблеми и запазване на неизменността на ABI за потребителската среда и ядрото (с изключение на някои подсистеми).
- Архитектурата i386 е преместена на второ ниво поддръжка на платформи (Tier 2), при което ще продължи формирането на инсталационни пакети, бинарни актуализации и готови пакети, но не гарантира решаване на специфични проблеми. Типът CPU (CPUTYPE) за архитектура i386 по подразбиране е променен от 486 на 686 (при желание, можете сами да формирате пакети за i486 и i586).
- Компонентите clang, lld, lldb, compiler-rt, llvm, libunwind и libc++ са актуализирани до версия 11.
- Разработката е преместена от централизирана система за управление на изходния код Subversion в децентрализирана система Git.
- Почистена основната система от приложения, разпространявани под лицензия GPL. От дървото на изходния код са премахнати binutils 2.17 и gcc 4.2.1, всички поддържани архитектури са преминали на инструментирането LLVM/clang. Включени са разпространявани под лицензия BSD варианти на утилитите grep и dtc (Device Tree Compiler), които заменят версиите под лицензия GPL. Премахнат е процесът на автоматично монтиране amd, чиято функция сега е реализирана чрез autofs. Премахната е утилитата ctm, вместо която се препоръчва да се използва порт misc/ctm.
- Пренаписан е стекът на маршрутизацията, в който е добавена поддръжка за обекти nexthop, съхраняващи информация за състоянието, използвано за предаване на пакета на желаната дестинация. Добавена е възможност за свързване на собствени алгоритми за търсене на маршрути. Добавени са алгоритми за търсене на маршрути от DPDK (Data Plane Development Kit) librte, които оптимизират работата с много големи таблици за маршрутизация. За заявки proxyarp се използва интерфейс fib. Добавена е възможност за промяна на броя на fib на лету чрез sysctl net.fibs. Реализирана е поддръжка на временни маршрути за IPv4 и IPv6 (с зададено време на живот).
- Пренаписана и направена по мащабируема поддръжка на Multipath маршрутизация, при която времето за търсене не зависи от размера на списъка (O(1)). Новата реализация на Multipath сега е свързана с параметъра на ядрото ROUTE_MPATH, който замени RADIX_MPATH и е включен по подразбиране. За управление на Multipath е предложен sysctl net.route.multipath.
- Представен е криптографският фреймуърк на ниво ядро, в който е добавена поддръжка за съвременни криптографски алгоритми и е опростен интерфейсът за използване на шифроване в драйвери и други компоненти на ядрото. Премахнати са остарелите алгоритми ARC4, Blowfish, CAST128, DES, MD5-HMAC и Skipjack. В IPsec и Kerberos е прекратена поддръжката на алгоритми, обявени за остарели в RFC 8221 и RFC 6649/8429, включително 3DES. Премахнати са преди обявените остарели алгоритми в подсистемата за дисково шифроване geli и cryptodev.
- В ядрото GENERIC е добавена поддръжка на драйвери aesni и armv8crypto за ускоряване на дисковото шифроване на база geli чрез инструкции AES-NI за архитектури amd64/i386 и AES-XTS за ARM64.
- Добавен е драйвер qat за криптоакселератори Intel QuickAssist (QAT) и драйвер ossl с реализация на ускорени софтуерни процедури за криптиране от OpenSSL, оптимизирани с помощта на асемблерен код. В драйвера armv8crypto е добавена поддръжка за AES-XTS и AES-GCM, използваща съответните инструкции на ARMv8 процесорите.
- Добавена е реализация на TLS (kTLS), работеща на ниво ядро на FreeBSD, която позволява значително увеличение на производителността на криптирането за TCP сокети. Поддържат се версии на TLS от 1.0 до 1.3. За криптиране се използват крипто драйвъри на ядрото с поддръжка на AES-CBC или AES-GCM. За използване на kTLS в потребителското пространство е необходимо да се преизгради OpenSSL с опцията WITH_OPENSSL_KTLS.
- Добавен е нов тип мрежови буфери mbuf (network data buffer), който може да представя в един буфер няколко неотразени физически страници памет, позволявайки по-голяма производителност на извикването на sendfile(2) чрез съкращаване на размера на списъците mbuf в сокетните буфери.
- В TCP стека е интегрирана поддръжка за алгоритъм за пропорционално намаляване на интензитета на изпращане на пакети (Proportional Rate Reduction, RFC 6937), позволяващ по-бързо възстановяване на оптималните параметри на потока след времеви проблеми с предаването на данни. За деактивиране на PRR е предвиден sysctl net.inet.tcp.do_prr.
- Разширени са възможностите на хипервизора Bhyve: добавена е поддръжка за предоставяне на съвместен достъп до файлове чрез VirtIO-9p (VirtFS). Реализирана е възможност за работа със snapshots. на виртуални машиниДобавена е поддръжка на устройства PCI HDAudio и допълнителни серийни портове COM3 и COM4. Премахнати са остарелите модели устройства bvmconsole и bvmdebug. Повишена е стабилността на работата с VNC клиенти, включително macOS приложението „Screen Sharing.“
- В драйверите VirtIO е добавена поддръжка на спецификацията VirtIO V1, което подобри съвместимостта на гостуващите системи с FreeBSD с различни емулатори и хипервизори.
- За прикрепените към jail-окруженията процеси е осигурено преобразуване на привързаностите към CPU (первоначално привързаното към процеса cpuset ще бъде заменено с оглед на cpuset-а на jail-а и зададените ограничения).
- Добавена възможност за събиране на основна система FreeBSD в среди, основани на други операционни системи. Необходимостта от събиране в други операционни системи е свързана с желанието да се използват инструментариите за непрекъсната интеграция, свързани с Linux или macOS, за тестване на FreeBSD.
- Предложен е нов стек MMC/SD, основан на фреймворка CAM, който позволява свързването на устройства с интерфейс SDIO (Secure Digital I/O). Например, SDIO се използва в модули WiFi и Bluetooth за много платки, като Raspberry Pi 3. Новият стек също така позволява да се използва интерфейс CAM за изпращане на SD-команди от приложения в потребителското пространство, което дава възможност за създаване на драйвери на ниво потребител.
- Подобрената работа на прослойката за съвместимост с Linux. Файловете DTS (Device Tree Sources) са синхронизирани с ядрото на Linux 5.8.
- Добавена е поддръжка на NFSv4.2 (RFC-7862) и е реализирана възможност за работа на NFS над криптиран канал на базата на TLS 1.3, вместо да се използва Kerberos (режим sec=krb5p), който беше ограничен само до криптиране на RPC-съобщения и беше реализиран само софтуерно.
- Премахната е остарялата версия на дебъгера GDB, който по-рано беше инсталиран в директорията /usr/libexec и се използваше в утилитата crashinfo. Вместо предварително инсталирания GDB, за получаване на детайлна информация за причините за срив сега се предлага инсталиране на нова версия на GDB от портовете или пакетите. Спират се поддръжката на отстраняване на грешки в процеси чрез procfs. Добавен е драйвер netgdb, който позволява достъп до дебъгера на ядрото по мрежата.
- От libc е премахната небезопасната функция gets (с началото на стандарта C11, тази функция е изключена от спецификацията) и е извършена корекция на портовете, които все още използват тази функция. Премахнати са функциите cap_random (следва да се използва getrandom).
- Добавен е нов системен повик copy_file_range, съвместим с реализацията от ядрото на Linux, който позволява ускорено копиране на данни от един файл в друг, благодарение на изпълнението на операцията само на страната на ядрото, без предварително четене на данните в паметта на процеса. Системният повик се използва също в сървър NFSv4.2 за локално изпълнение на операции по копиране на сървъра (без предаване на клиента).
- В механизма асинхронен вход/изход POSIX AIO е включена поддръжка на векторизирани функции. В частност, добавени са системните извиквания aio_writev и aio_readv, които позволяват реализирането на векторизирани еквиваленти на функциите aio_read и aio_write.
- Прекратена е поддръжката на компонентите за потребителското пространство за поддръжка на формата на изпълними файлове a.out на системи с архитектура i386. Премахната е утилитата elf2aout.
- Утилитите ping и ping6 са обединени. В ping е добавена възможност за задаване на параметри за качество на услугата (QoS) чрез IP DSCP и Ethernet PCP.
- В утилитата freebsd-update е осигурено показване на напредъка при изтеглянето на файлове и са добавени командите updatesready и showconfig за проверка на наличието на актуализации и показване на конфигурацията.
- Направена е значителна работа по подобряване на поддръжката на системи NUMA (Non-Uniform Memory Access).
- Актуализирани са графични драйвери и компоненти на графичната стек. Решени са проблемите с работата на средите базирани на протокола Wayland.
- Добавена е подсистема backlight за създаване на драйвери за управление на подсветката. Добавен е драйвер pwm-backlight за управление на подсветката на Pinebook и Pinebook Pro.
- Поддръжката на протокола SCTP е извлечена в отделен модул sctp.ko, който е изключен по подразбиране в ядрото GENERIC.
- За входните устройства е предложен нов драйвер usbhid, който използва фреймворка hid за работа с устройства USB HID, вместо драйверите ukbd, ums и uhid.
- В драйвера cpufreq е реализирана поддръжка на технологията Intel Speed Shift.
- Добавена е поддръжка на нови платки, базирани на 64-битови CPU ARMv8, включително SoC Broadcom BCM5871X и NXP LS1046A.
- За архитектурата AMD64 е реализирана поддръжка на 57-битови виртуални адреси (LA57). Добавена е поддръжка на китайските x86 CPU Hygon Dhyana, базирани на технологии AMD.
- Портът за архитектурата powerpc64 е преместен на използване на LLVM и ABI ELFv2 (бинарните файлове от предишни версии на FreeBSD няма да могат да се използват в FreeBSD 13). За powerpc64 са портирирани драйверите virtio, ixl, mrsas, aacraid, cpld.
- Премахнати са драйверите за остарели Ethernet адаптери:
- bm(4) BMAC
- cs(4) Crystal Semiconductor CS8900/CS8920
- de(4) DEC DC21x4x
- ed(4) NE-2000 и WD-80×3
- ep(4) 3Com Etherlink III (3c5x9) ISA
- ex(4) Intel EtherExpress Pro/10 и 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
- Премахнати са драйверите ubsec (криптоакселератори Broadcom BCM58xx), ufm (FM-тунери с интерфейс USB), ctau (Cronix Tau), cx (Cronix Sigma) и vpo (паралелен порт SCSI).
Източник: opennet.ru
