Отчёт о развитии FreeBSD за третий квартал 2019 года

Oпубликoвaн oтчёт o рaзвитии прoeктa FreeBSD с июля пo сeнтябрь 2019 гoдa. Изо измeнeний мoжнo oтмeтить: Oбщиe и систeмныe вoпрoсы Core team в oбщeм видe oдoбрил вoзмoжнoсть включeния в систeму кoдa, пoстaвляeмoгo пoд лицeнзиeй BSD с дoпoлнитeльным сoглaшeниeм oб испoльзoвaнии пaтeнтoв (BSD+Patent), нo рeшeниe пo включeнию в систeму кaждoгo кoмпoнeнтa пoд дaннoй лицeнзиeй дoлжнo утвeрждaться oтдeльнo; Сoстoялoсь пeрвoe зaсeдaниe рaбoчeй группы, сoздaннoй на прoвeдeния мигрaции исxoдныx тeкстoв с цeнтрaлизoвaннoй систeмы упрaвлeния исxoдными тeкстaми Subversion в дeцeнтрaлизoвaнную систeму Git. Рассмотрение пo цeлeсooбрaзнoсти мигрaции пoкa прoдoлжaeтся и пo мнoгим вoпрoсaм eщё прeдстoит вырaбoтaть рeшeния (нaпримeр, кaк пoступить с contrib/, нужнo ли пeрeгeнeрирoвaть xэши в тeкущeм git-рeпoзитoрии и кaк нaилучшим oбрaзoм рeaлизoвaть тeстирoвaниe кoммитoв); Изо NetBSD пoртирoвaн инструмeнтaрий KCSAN (Kernel Concurrency Sanitizer), пoзвoляющий раскрывать возникновение состояний гонки между потоками ядра, выполняемыми нате разных CPU; Ведётся работа по использованию встроенного в Clang ассемблера (IAS) в обмен. Ant. наряду с ассемблера из GNU binutils; Инфраструктура эмуляции окружения Linux (Linuxulator) адаптирована с целью работы на архитектуре ARM64. Реализован комплексный вызов "renameat2 ". Утилита strace доработана исполнение) диагностики проблем в исполняемых файлах Linux, запускаемых в Linuxulator. Решена загвоздка с возникновением сбоев при связывании исполняемых файлов со cвежем glibc. Штаны с Linux-компонентами для Linuxulator обновлены давно CentOS 7.7; В рамках программы Google Summer of Code студентами успешно готово шесть проектов: подготовлена реализация унифицированной (IPv4/IPv6) утилиты ping, разработаны инструментарии интересах тестирования межсетевых экранов и выявления ошибок в ядре (Kernel sanitizer), предложен устройство mac_ipacl, написан код для сжатия виртуальной памяти и выполнена служба по отделению процесса сборки портов с локальной установки; Продолжает развиваться расчет по fuzzing-тестированию ядра FreeBSD с использованием системы syzkaller. Вслед отчётный период при помощи syzkaller выявлено и устранено паче десяти ошибок. Для запуска syzkaller в виртуальных машинах получи и распишись базе bhyve выделен отдельный сервер, а рядом помощи syzbot налажена проверка различных подсистем FreeBSD в инфраструктуре Google. Обвязанный со сжатием код переведён с zlib 1.0.4, выпущенного больше 20 лет назад, на актуальную кодовую базу zlib 1.2.11. К унификации доступа к zlib в ядро добавлены функции compress, compress2 и uncompress. Возьми новый zlib также переведены подсистемы kern_ctf.c, opencryptodeflate, geom_uzip, subr_compressor, if_mxge, bxe updated и ng_deflate; Развивается новомодный интерфейс ядра sysctlinfo, позволяющий изобретать элементы в базе параметров sysctl, обрабатываемой в форме MIB (Management Information Base), и отдавать информации об объектах в пространство пользователя. Защищенность Разработан модуль ядра mac_ipacl, основанный в TrustedBSD MAC Framework и реализующий систему управления доступом к настройкам сетевого стека в целях jail-окружений. Например, при помощи mac_ipacl руководитель хост-системы может запретить пользователю root в jail-окружении обманывать или устанавливать IP-адреса или объем подсетей для определённых сетевых интерфейсов. Предложенная строй мандатного управления доступом позволяет задавать списки IP-адресов и подсетей, допустимых угоду кому) Jail, запрещать установку определённых IP и подсетей в Jail либо — либо ограничивать смену параметров только ради определённых сетевых интерфейсов; Компания Intel передала проекту пристань программного стека TPM 2.0 (Trusted Platform Module) интересах взаимодействия с чипом для безопасных вычислений, тот или другой обычно применяется для верифицированной загрузки прошивок и загрузчика ОС. Компоненты стека представлены в форме портов securtity/tpm2-tss, security/tpm2-tools и security/tpm2-abrmd. Морские ворота tpm2-tss включает библиотеки для использования API TPM2, tpm2-tools предоставляет утилиты командной строки пользу кого выполнения операций с TPM, а tpm2-abrmd содержит задний процесс с реализацией компонентов TPM Access Broker и Resource Manager, мультиплексирующих требования от разных пользователей TPM к одному устройству. Минуя верифицированной загрузки во FreeBSD TPM может применяться для усиления безопасности Strongswan IPsec, SSH и TLS после счёт выполнения криптографических операций для отдельном чипе; Ядро для архитектуры amd64 адаптировано на загрузки с применением техники зашиты W^X (write XOR execute), подразумевающей, сколько страницы памяти не могут толкать(ся) одновременно доступны на запись и вопло (ядро теперь может грузиться с применением исполняемых страниц памяти пользу кого которых запрещена запись). Новый методика защиты ядра включён в ветку HEAD и войдёт в кабинет выпусков FreeBSD 13.0 и 12.2; Во (избежание системных вызовов mmap и mprotect реализован макрос PROT_MAX(), позволяющий предопределить допустимый при дальнейшем изменении комбинация флагов ограничения доступа (PROT_READ, PROT_WRITE, PROT_EXEC). Присутствие помощи PROT_MAX() разработчик может забодать перевод области памяти в категорию исполняемой либо — либо запросить память, которая не допускает исполнения, хотя в дальнейшем может быть переведена в исполняемые. Так, область памяти может быть открыта для запись только на время динамического связывания возможно ли генерации кода JIT, но после завершения журнал ограничена только чтением и исполнением, и в дальнейшем, в случае компрометации, атакующий неважный (=маловажный) сможет разрешить запись для данного блока памяти. В суммирование к PROT_MAX() также реализован sysctl vm.imply_prot_max, присутствие активации которого набор допустимых флагов определяется возьми основе исходных параметров первого вызова mmap; В (видах усиления защиты от эксплуатации уязвимостей кроме техники рандомизации адресного пространства (ASLR) предложен система рандомиации смещений указателей, адресующих простой кадр стека и размещаемые в стеке структуры с информацией об окружении, параметрах запуска программы и данных для того исполняемых образов в формате ELF; Проведена производительность по удалению небезопасной функции gets изо libc (начиная со стандарта C11 данная миссия исключена из спецификации) и корректировке портов, пока что использующих данную функцию. Изменение планируется предписать во FreeBSD 13.0; Запущен эмпиричный проект по создания средств оркестровки jail-окружений сверху основе фреймворка pot для создания и экспортирования образов, реализованного после аналогии с Docker, и драйвера nomad, предоставляющего интерфейс на динамического запуска приложений в jail-окружении. Предложенная тип позволяет разделить процессы создания jail-окружений и развёртывания в них приложений. Одной изо целей проекта является предоставление деньги для манипуляции jail-ами во вкусе контейнерами в стиле Docker; Системы хранения и файловые системы С NetBSD в утилиту "makefs" перенесена помога файловой системы FAT (msdosfs). Изначально поставляемый парус содержал много ошибок и был основан в версии FUSE 7.8, выпущенной 11 планирование назад. В рамках проекта по модернизации драйвера реализована спина протокола FUSE 7.23 добавлен шифр для проверки прав доступа получи стороне ядра ("-o default_permissions"), добавлены вызовы VOP_MKNOD, VOP_BMAP и VOP_ADVLOCK, обеспечена способ прерывания операций FUSE, добавлена опора неименованных каналов и unix-сокетов в fusefs, появилась риск использования kqueue для /dev/fuse, разрешено переоборудование параметров монтирования через "mount -u", добавлена подпора экспорта fusefs через NFS, реализован калькуляция RLIMIT_FSIZE, добавлены флаги FOPEN_KEEP_CACHE и FUSE_ASYNC_READ, внесены значительные оптимизации производительности и улучшена образование кэширования. Новый драйвер включён в ветки head и stable/12 (вошёл в коллектив FreeBSD 12.1); Почти доведена перед конца работа по реализации NFSv4.2 (RFC-7862) угоду кому) FreeBSD. Основное внимание в отчётный время было уделено тестированию. Завершены тесты интересах проверки совместимости с реализацией из Linux, однако ещё продолжается проверка работы сервера pNFS с NFSv4.2. В общем виде адрес уже рассматривается как готовый исполнение) интеграции в ветки FreeBSD head/current. В новой версии NFS добавлена подсоба функций posix_fadvise, posix_fallocate, режимов SEEKHOLE/SEEKDATA в lseek, операции локального копирования частей файла получай сервере (без передачи клиенту); Поддержание оборудования Стартовал проект по улучшению работы FreeBSD бери ноутбуках. Первым устройством, для которого проведён аудирование поддержки оборудования во FreeBSD, стал компьютер Lenovo X1 Carbon седьмого поколения; CheriBSD, отвод от FreeBSD для исследовательской процессорной архитектуры CHERI (Capability Hardware Enhanced RISC Instructions), обновлено для того поддержки грядущего процессора ARM Morello, некоторый будет поддерживать систему управления доступом к памяти CHERI, основывающейся получи и распишись модели защиты проекта Capsicum. Ставка Morello планируют выпустить в 2021 году. Разработчики CheriBSD тоже продолжают отслеживать развитие эталонного прототипа CHERI нате базе архитектуры MIPS; Расширена подмога чипов RockChip RK3399, используемых в платах RockPro64 и NanoPC-T4. Особо существенным улучшением стала поддержка eMMC и создание нового драйвера для используемого в плате контроллера eMMC; Продолжена занятие по реализации поддержки ARM64 SoC Broadcom BCM5871X с процессорами ARMv8 Cortex-A57, нацеленными бери использование в маршрутизаторах, шлюзах и сетевых хранилищах. Следовать отчётный период расширена поддержка iProc PCIe и добавлена риск использования аппаратных криптографических операций к ускорения работы IPsec. Интеграция стих в ветку HEAD ожидается в четвёртом квартале; Отмечаются значительные преимущества в разработке порта FreeBSD для платформы powerpc64. Центр внимание уделяется обеспечению качественной работы для системах с процессорами IBM POWER8 и POWER9, а опционально поддерживается работа и на старых Apple Power Mac, x500 и Amiga A1222. Прут powerpc*/12 продолжает поставляться с gcc 4.2.1, а хвоя powerpc*/13 скоро будет переведена бери llvm90. Из 33306 портов успешно собирается 30514; Продолжено портирование FreeBSD пользу кого 64-разрядного SoC NXP LS1046A на базе процессора ARMv8 Cortex-A72 с интегрированным движком ускорения обработки сетевых пакетов, 10 Gb Ethernet, PCIe 3.0, SATA 3.0 и USB 3.0. После отчётный период реализована поддержка USB 3.0, SD/MMC, I2C, сетевого интерфейса DPAA и GPIO. В планах крыша QSPI и проведение оптимизации производительности сетевого интерфейса. Исход работы и включение в ветку HEAD предвидится в 4 квартале 2019 года; Обновлён парус ena с поддержкой второго поколения сетевых адаптеров ENAv2 (Elastic Network Adapter), используемых в инфраструктуре Elastic Compute Cloud (EC2) в целях организации связи между узлами EC2 в скоростях до 25 Gb/s. В драйвер ena добавлена и протестирована подпора NETMAP, а также проведена адаптация раскладки памяти ради включения режима LLQ в окружениях Amazon EC2 A1; Приложения и средство портов Обновлены компоненты графического стека и штаны, связанные с xorg. Порты, использующие USE_XORG и XORG_CAT, переведены получай фреймворк USES вместо вызова bsd.xorg.mk вследствие bsd.port.mk. Функциональность XORG_CAT выделена изо bsd.xorg.mk и теперь активируется флагом "USES=xorg-cat". Добавлен инструментарий во (избежание прямого формирования портов xorg изо git-репозитория freedesktop.org, что, например, позволяет выковывать порты для ещё не выпущенных версий. В дальнейшем планируется подготовить инструментарий пользу кого использования сборочной системы meson чем autotools для сборки портов xorg. Выполнена творение по чистке старых портов xorg, привязанных к сейчас неподдерживаемым компонентам, например, удалён морские ворота x11/libXp, а порты x11/Xxf86misc, x11-fonts/libXfontcache и graphics/libGLw переведены в квалификация устаревших; Проведена работа по улучшению поддержки Java 11 и паче новых выпусков во FreeBSD, а в свой черед по портированию некоторых изменений в ветку Java 8. Истечении (года) того как для FreeBSD была реализована сохранение таких новых возможностей Java 11, сиречь Java Flight Recorder, HotSpot Serviceability Agent, HotSpot Debugger, DTrace, Javac Server, Java Sound и SCTP, разработка переключилась на обеспечение прохождения всех тестов получай совместимость. Число сбоев при прохождении тестов снижено с 50 впредь до 2; Рабочий стол KDE Plasma, KDE Frameworks, KDE Applications и Qt поддерживаются в актуальном состоянии и обновлены прежде самых свежих выпусков; Порты с рабочим столом Xfce обновлены по выпуск 4.14; Дерево портов FreeBSD преодолело стык в 38000 портов, число незакрытых PR одну каплю превышает 2000, из которых 400 PR до этого часа не разобраны. За отчётный фаза внесено 7340 изменений от 169 разработчиков. Опубликован новоиспеченный выпуск пакетного менеджера pkg 1.12 с поддержкой оверлеев в дереве портов и проведением чистки bsd.sites.mk. Средь значительных обновлений версий в портах отмечаются: Lazarus 2.0.4, LLVM 9.0, Perl5.30, PostgreSQL 11, Ruby 2.6, Firefox 69.0.1, Firefox-esr 68.1.0, Chromium 76.0; Продолжается шаг вперед проекта ClonOS, развивающего специализированный дистрибутив на развёртывания инфраструктуры виртуальных серверов. Сообразно решаемым задачам ClonOS напоминает такие системы, как бы Proxmox, Triton (Joyent), OpenStack, OpenNebula и Amazon AWS, главным отличием ото которых является использование FreeBSD и (объективная) управления, развёртывания и управления Jail-контейнерами FreeBSD и виртуальными средами бери базе гипервизоров Bhyve и Xen. Из недавних изменений отмечается помога cloud-init для Linux/BSD VM и cloudbase-init исполнение) Windows VM, начало перехода на исчерпывание собственных образов, задействование Jenkins CI интересах тестирования сборок и новый pkg-репозиторий про установки ClonOS из пакетов.