Симоне Маргарителли (Simone Margaritelli), автор межсетевого экрана OpenSnitch и сетевого анализатора bettercap, досрочно раскрыл информацию о ранее анонсированных критических уязвимостях, позволяющих удалённо атаковать дистрибутивы GNU/Linux, Solaris, FreeBSD и некоторые другие BSD-системы. Изначально публикация была запланирована на 6 октября, но из-за утечки информации сведения пришлось опубликовать досрочно, до того как большинство дистрибутивов успеет подготовить обновление пакетов. Уязвимости затрагивают сервер печати CUPS и позволяют удалённо без прохождения аутентификации добиться выполнения кода в системе.
Выявившим проблему исследователем подготовлен рабочий прототип эксплоита, использующий комбинацию из нескольких уязвимостей и позволяющий удалённо выполнить код с правами процесса обработки заданий вывода на печать CUPS (обычно это пользователь "lp"). Эксплоит позволяет незаметно заменить параметры принтера пользователя или добавить новый принтер, связанный с запущенным атакующим IPP-сервером, который отдаёт специально оформленное PPD-описание принтера, Обработка данного PPD во время запуска работы вывода на печать приводит к выполнению кода атакующего (необходимо, чтобы жертва инициировала печать на подставленный или заменённый атакующим принтер).
Атаке подвержены системы с сервером печати CUPS и запущенным процессом cups-browsed, принимающим сетевые соединения на 631 порту (UDP). Атака также может быть совершена из локальной сети, в которой для доступа к серверу печати используются протоколы zeroconf, mDNS или DNS-SD. Уязвимы только конфигурации cups-browsed в которых в файле /etc/cups/cups-browsed.conf в параметре BrowseRemoteProtocols указано значение "cups". В дистрибутивах с systemd проверить использование сервиса cups-browsed можно командой "sudo systemctl status cups-browsed".
Уязвимость проявляется во всех системах печати на базе CUPS, в которых используются уязвимые версии пакетов cups-filters, libcupsfilters, libppd и cups-browsed. Исправления пока доступны только в виде патчей (1, 2, 3) - актуальные версии cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 и cups-browsed 2.0.1 подвержены уязвимостям. В дистрибутивах проблема остаётся неисправленной, проследить за появлением обновлений можно на следующих страницах: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. В качестве обходного пути защиты до установки обновления можно закрыть для внешних сетей доступ к UDP-порту 631, отключить сервис cups-browsed или выставить настройку BrowseRemoteProtocols в значение "none".
Выявленные уязвимости:
- CVE-2024-47176 - уязвимость в процессе cups-browsed, который создаёт сетевой сокет, принимающий соединения на 631 порту, прикрепляемый ко всем имеющимся в системе сетевым интерфейсам и принимающий IPP-запросы "Get-Printer-Attributes" от любых внешних систем. Через манипуляцию с данным сервисом можно добиться добавления в систему принтера, контролируемого атакующим, и эксплуатировать через передачу PPD-конфигурации уязвимости в других компонентах CUPS.
- CVE-2024-47177 - узявимость в обработчике foomatic-rip из набора cups-filters, позволяющая добиться выполнения кода через передачу параметра FoomaticRIPCommandLine в PPD-файле, который атакующий может передать благодаря вышеописанной уязвимости в cups-browsed. Указанные в параметре FoomaticRIPCommandLine shell-команды выполняются как есть, без учёта того, что параметр может выставить посторонний. Например, для записи в файл /tmp/VULNERABLE можно указать "FoomaticRIPCommandLine: "echo 1 > /tmp/VULNERABLE".
- CVE-2024-47175 - уязвимость в libppd, вызванная отсутствием проверки корректности значения ppdCreatePPDFromIPP2 при записи IPP-атрибутов во временный PPD-файл. Проблема позволяет добиться подстановки произвольных данных в результирующий PPD-файл через прикрепление атрибутов, используя символ перевода строки. Например, можно обойти проверку и вместе с разрешёнными атрибутами подставить атрибут FoomaticRIPCommandLine для эксплуатации вышеотмеченной уязвимости в cups-filters.
- CVE-2024-47076 - уязвимость в библиотеке libcupsfilters из пакета cups-filters, связанная с отсутствием проверки значений cfGetPrinterAttributes5, возвращаемых внешним IPP-сервером, что даёт атакующему возможность организовать обработку произвольных IPP-атрибутов в других подсистемах CUPS, например, при генерации PPD-файлов.
Сценарий атаки на CUPS сводится к следующим шагам:
- Развёртывание атакующим собственного IPP-сервера.
- Отправка жертве UDP-пакета со ссылкой на принтер, привязанный к запущенному атакующим IPP-серверу.
- После получения данного пакета система жертвы подключается к IPP-серверу атакующего и запрашивает атрибуты принтера.
- В ответ на запрос жертвы IPP-сервер атакующего возвращает PPD-файл с атрибутами, среди которых указывается атрибут FoomaticRIPCommandLine. Данный атрибут прикрепляется к одному из допустимых атрибутов, используя символ "\n" в одной строке (например, "cupsPrivacyURI: "https://www.google.com/\n*FoomaticRIPCommandLine: "), что позволяет обойти проверку и приводит к записи FoomaticRIPCommandLine как отдельного атрибута при сохранении полученных данных во временный файл.
- В результате обработки переданных атрибутов в системе жертвы создаётся PPD-файл:
- При выводе на печать на подставленный атакующим принтер на системе жертвы будет выполнена команда "echo 1 > /tmp/I_AM_VULNERABLE"
Выявивший уязвимости исследователь отмечает, что на поиск уязвимости у него ушло пару дней, но затем последовала затянувшиеся на 22 дня переписка с разработчиками проекта OpenPrinting c попыткой убедить их в важности проблемы и необходимости подготовки патчей. Обсуждение погрязло в спорах о том, стоит ли вообще исправлять указанные проблемы, и ситуацию удалось переломить лишь подняв публичный хайп о выявлении критической проблемы. Интересно также появление утечки информации, в ходе которой переданные в CERT конфиденциальный отчёт и эксплоит появились на форуме breachforums.st в открытом доступе, несмотря на выставленное эмбарго на раскрытие информации.
Разработчики анонимной сети Tor и дистрибутива Tailsобъявили о слиянии проектов. Дальнейшая разработка дистрибутива Tails будет вестись в составе проекта Tor, что упростит совместную работу, повысит жизнеспособность, снизит накладные расходы и расширит возможности противодействия цифровым угрозам. Дистрибутив Tails (The Amnesic Incognito Live System) основан на пакетной базе Debian, поставляется с рабочим столом GNOME и предназначенного для анонимного выхода в сеть. Все соединения, кроме трафика через сеть Tor, по умолчанию блокируются пакетным фильтром.
Присоединившись к более крупной организации, отстаивающей те же идеи и имеющей общие цели, команда разработчиков Tails сможет не распылять внимание на решение рутинных организационных и инфраструктурных вопросов, а сосредоточиться только на разработке и улучшении дистрибутива. Отмечается, что проекты плотно сотрудничают с 2015 года и объединение стало естественным шагом после того как Tails перерос возможности своей организационной структуры.
Разработчики анонимной сети Tor и дистрибутива Tailsобъявили о слиянии проектов. Дальнейшая разработка дистрибутива Tails будет вестись в составе проекта Tor, что упростит совместную работу, повысит жизнеспособность, снизит накладные расходы и расширит возможности противодействия цифровым угрозам. Дистрибутив Tails (The Amnesic Incognito Live System) основан на пакетной базе Debian, поставляется с рабочим столом GNOME и предназначенного для...
После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 17. Обновления для новой ветки будут выходить в течение пяти лет до ноября 2029 года. Поддержка PostgreSQL 12.x, самой старой из поддерживаемых веток, будет прекращена 14 ноября.
- При выполнении операции VACUUM (сборка мусора, чистка и упаковка дискового хранилища) задействована новая структура данных, потребляющая до 20 раз меньше памяти. Задействование новой структуры позволило ускорить выполнение операций VACUUM и сократить потребление совместно используемых ресурсов.
- Продолжена оптимизация производительности ввода/вывода. Благодаря улучшению кода для обработки лога отложенной записи WAL удалось до двух раз повысить пропускную способность операций записи в системах с большим числом одновременно выполняемых запросов. Предложен новый интерфейс потокового ввода/вывода, позволивший повысить скорость последовательного перебора данных в таблицах и ускорить обновление статистики для планировщика запросов после выполнения операции ANALYZE.
- Повышена производительность запросов с выражением "IN", если в них используются индексы на базе структуры B-tree. Реализована возможность параллельного построения индексов BRIN (Block Range Index). В планировщике запросов оптимизированы проверки "NOT NULL" и ускорена обработка обобщённых табличных выражений (Common Table Expression, CTE) определяемых при помощи SQL-команды "WITH". Обеспечено использование векторных процессорных инструкций (SIMD) для ускорения некоторых вычислений, например, для ускорения функции bit_count задействованы инструкции AVX-512.
- Реализована поддержка новых возможностей для работы с форматом JSON, определённых в стандарте SQL/JSON. Добавлена функция JSON-TABLE для преобразования данных в формате JSON в обычные таблицы PostgreSQL, а также новые операторы jsonpath для преобразования данных JSON в родные для PostgreSQL типы данных. Предложены новые функции для создания (JSON, JSON_SCALAR и JSON_SERIALIZE) и запроса (JSON_EXISTS, JSON_QUERY и JSON_VALUE) данных в формате JSON.
- Расширены возможности SQL-команды "MERGE", позволяющей создавать условные SQL-выражения, объединяющие в одном выражении операции INSERT, UPDATE и DELETE. Добавлена поддержка выражения RETURNING, позволяющего вычислять и возвращать значения на основе добавленных, обновлённых или удалённых строк. Реализована поддержка обновления представлений.
- Расширены возможности загрузки и экспорта данных в пакетном режиме. В команде COPY до двух раз увеличена скорость экспорта больших строк, оптимизировано копирование при совпадении исходной и целевых кодировок, добавлена опция ON_ERROR, позволяющая продолжить импорт после ошибок при вставке данных.
- Для секционированных таблиц добавлена возможность использования столбцов с уникальными идентификаторами и поддержка техники оптимизации запросов "Constraint exclusion".
- В механизме подключения внешних таблиц Foreign Data Wrapper (postgres_fdw) реализована возможность передачи на внешний сервер подзапросов "EXISTS" и "IN".
- Реализован встроенный платформонезависимый движок для обработки свойств локали "Collation", используемых для задания правил сортировки и методов сопоставления с учётом смысла символов (например, при сортировке цифровых значений учитывается наличие минуса и точки перед числом и разные виды написания, а при сравнении не принимается во внимание регистр символов и наличие знака ударения). Новый движок обеспечивает единое поведение при сортировке результатов запросов, не зависящее от того, на какой платформе запускается PostgreSQL.
- В механизме логической репликации, позволяющем транслировать на другой сервер изменения, вносимые в БД в ходе добавления, удаления или обновления записей, упрощён процесс обновления СУБД. Если раньше при переходе на новый значительный выпуск приходилось удалять слоты логической репликации и повторно синхронизировать данные, то теперь можно обойтись без удаления слотов. Для отказоустойчивых конфигураций реализована возможность управления переключением на запасной сервер (failover) для логической репликации. Добавлена новая утилита pg_createsubscriber для преобразования физической реплики в новую логическую реплику.
- Добавлена новая опция sslnegotiation для прямого согласования защищённых TLS-соединений с использованием TLS-расширения ALPN.
- Реализована предопределённая роль pg_maintain, предоставляющая пользователю право выполнения операций, связанных с обслуживанием СУБД.
- В утилиту pg_basebackup, применяемую для создания резервных копий БД, добавлена поддержка инкрементальных бэкапов. Для реконструирования полного бэкапа из набора инкрементальных копий предложена новая утилита pg_combinebacku. В утилиту pg_dump добавлена опция "--filter" для выбора включаемых в дамп объектов.
- При анализе запросов при помощи операции "EXPLAIN" реализован вывод времени, потраченном на чтение и запись локальных блоков при вводе/выводе. В "EXPLAIN" также добавлены две новые опции "MEMORY" и "SERIALIZE", при помощи которых можно определить размер используемой памяти и время, потраченное на преобразование данных для передачи по сети.
- Обеспечена индикация прогресса выполнения операции VACUUM с индексами. Добавлено системное представление pg_wait_events, которое в сочетании с представлением pg_stat_activity позволяет подробнее изучить причины нахождения активных сеансов в состоянии ожидания.
После года разработки опубликована новая стабильная ветка СУБД PostgreSQL 17. Обновления для новой ветки будут выходить в течение пяти лет до ноября 2029 года. Поддержка PostgreSQL 12.x, самой старой из поддерживаемых веток, будет прекращена 14 ноября.
- При выполнении операции VACUUM (сборка мусора, чистка и упаковка дискового хранилища) задействована новая структура данных, потребляющая до 20 раз меньше памяти. Задействование новой структуры позволило...
Компания Google подвела итоги инициативы по внедрению в Android методовбезопасной разработки (Safe Coding), таких как использование языков программирования, обеспечивающих безопасную работу с памятью, применение статических анализаторов и проектирование API с оглядкой на безопасность. Изменения позволили снизить долю связанных с памятью уязвимостей в Android c 76% в 2019 году до 24% в 2024 году, что значительно ниже среднего показателя по индустрии - 70%.
Инженеры Google также сделали вывод, что основным источником проблем с безопасностью является новый код и поэтому внимание следует сосредоточить на модернизации методов разработки нового кода. Уже существующий код со временем становится более проверенным и безопасным (наблюдается экспоненциальная зависимость безопасности от времени), что делает не столь выгодными вложения в проекты по переписыванию существующего кода. Например, 5-летний код в среднем имеет в 3.4 раза меньшую плотность уязвимостей, чем новый код. Для проектов Android и Chromium благодаря внедрению методов безопасной работы с памятью разница составляет 7.4 раза.
Таким образом, если предотвратить появление ошибок при работе с памятью в новом коде, со временем в старом коде подобные ошибки будут выявляться всё реже и реже. В общем виде Google рекомендует не переписывать старый код, а сосредоточиться на написании нового кода на языках безопасно работающих с памятью и обеспечении переносимости между новым и старым кодом.
Помимо снижения числа уязвимостей использование безопасных методов программирования повышает производительность разработки, позволяет добиться более высокого качества кода и положительно сказывается на производительности. Например, переписывание в Chromium кода для генерации QR-кодов на языке Rust позволило добиться повышения его производительности на 95% за счёт избавления от накладных расходов, вызванный необходимостью применения дополнительной sandbox-изоляции.
Скорость и качество разработки увеличивается за счёт упрощения тестирования и смещения выявления ошибок на ранние стадии разработки, на которых ошибки становятся заметны ещё до того, как разработчик приступает к проверке кода. В качестве примера приводятся показатели отката изменений - для кода на Rust число откатов изменений в результате выявления непредвиденных ошибок в два раза ниже чем для кода на C++.
В общем виде применение безопасных методов программирования преподносится как наиболее эффективная на сегодняшний день парадигма разработки, пришедшая на смену применявшимся ранее трём подходам:
- Исправление уязвимостей после их обнаружения. Затратно, требует частого выпуска обновлений и их оперативного доведения до пользователей.
- Упреждающая защита, сосредоточенная на применении техник, усложняющих эксплуатацию уязвимостей. Ценой подобной защиты было снижение производительности и постоянная игра в кошки-мышки с атакующими.
- Раннее выявление узявимостей через использование fuzzing-тестирования и инструментов, подобных AddressSanitizer и MemorySanitizer. Метод лишь устранял симптомы, а не причину болезни, и требовал постоянной работы.
Компания Google подвела итоги инициативы по внедрению в Android методовбезопасной разработки (Safe Coding), таких как использование языков программирования, обеспечивающих безопасную работу с памятью, применение статических анализаторов и проектирование API с оглядкой на безопасность. Изменения позволили снизить долю связанных с памятью уязвимостей в Android c 76% в 2019 году до 24% в 2024 году, что значительно...
Организация noyb (Европейский центр цифровых прав) отправила в австрийскую службу по надзору в сфере защиты данных жалобу, в которой обвинила компанию Mozilla в скрытом включении в Firefox функции "Privacy Preserving Attribution" (PPA), предназначенной для передачи телеметрии рекламным сетям. По мнению заявителей появившаяся в Firefox возможность нарушает действующий в Евросоюзе общий регламент по защите данных (GDPR), так как позволяет отслеживать поведение пользователей на web-сайтах (отличие технологии PPA от использования Cookie в том, что отслеживание ведётся на стороне браузера, а не на отдельных сайтах).
Претензии к Mozilla касаются не столько самой технологии, сколько методов её продвижения - в жалобе указано, что функция PPA была включена без предупреждения и явного запроса согласия у пользователей, а также не отражена в материалах, определяющих политику Mozilla в области защиты данных. Утверждается, что режим был включён по умолчанию (opt-out) в выпуске Firefox 128 и единственным способом его отключения была добавленная в одну из секций конфигуратора настройка "Website Advertising Preferences".
В Firefox 128 действительно был добавлен API "Privacy Preserving Attribution", но он явно был отражён в примечании к релизу, отключён по умолчанию (по крайней мере на всех проверенных системах) и имел статус эксперимента, для активации которого использовался механизм "Origin Trials" (т.е. для использования данного API на сайтах требовалось согласование через bugzilla.mozilla.org и получение специального токена от Mozilla).
Представители Mozilla также выступили с опровержением и заявили, что технология "Privacy Preserving Attribution" не была активирована по умолчанию в Firefox 128, не приводила к отправке или записи данных пользователей и применялась лишь в ограниченных тестах, охватывающих сайт developer.mozilla.org (Mozilla Developer Network). Тем не менее, Mozilla признаёт, что при продвижении изменений, затрагивающих конфиденциальность, следовало более активно информировать пользователей о сути развиваемых технологий, чтобы избежать недопонимания и спекуляций.
При этом на странице эксперимента имеется информация о намерении в будущем включить новый API по умолчанию (Opt Out), после того как он будет готов для внедрения. По мнению разработчиков из Mozilla механизм включения по желанию применим лишь когда пользователь может принять осознанное решение, но в случае PPA технология достаточно сложна, чтобы на пальцах объяснить её суть технически неподкованному обывателю. Кроме того, включение PPA для большого числа людей позволит усилить конфиденциальность (чем больше участников, тем больше шума, делающего отдельных пользователей менее заметными на общем фоне).
API "Privacy Preserving Attribution", ранее развивавшийся под именем IPA (Interoperable Private Attribution), предоставляет рекламным сетям возможность получать и обрабатывать статистику об эффективности рекламных кампаний, соблюдая при этом конфиденциальность пользователей. Для исключения раскрытия данных о конкретных пользователях при обработке статистики применяются криптографические механизмы дифференциальной приватности и многосторонних конфиденциальных вычислений (MPC, Multi-Party Computation), позволяющие выполнять операции над зашифрованными данными и дающие возможность нескольким независимым участникам производить вычисления не получая информацию о чужих данных (web-сайты, браузеры и рекламодатели по отдельности не имеют доступ ко всей информации).
API вводит понятие ключа сопоставления (match key), генерируемого в привязке к пользователю, но доступного только на запись. В привязке к данному ключу генерируются исходные (source) и итоговые (target) события, информация о которых передаётся в зашифрованном виде сторонним серверам-арбитрам, которые не связаны с рекламными сетями и которым доверяет пользователь или браузер. Под исходными событиями (source) понимаются такие действия как показ рекламы и клик пользователя на рекламе. Итоговые события (target) характеризуют действия, совершённые на другом сайте после реагирования пользователя на рекламу, такие как покупка товара, регистрация и загрузка приложения.
Cерверы-арбитры позволяют рекламным сетям и рекламодателям сформировать запрос для получения агрегированной статистики, связывающей исходные и итоговые события на разных сайтах без утечки информации о пользователе (ключи сопоставления могут быть только назначены, а обрабатываются только в зашифрованном виде, поэтому можно отследить статистику, но не видно с каким именно пользователем она связана). В итоге при помощи технологии "Privacy Preserving Attribution" рекламодатели могут не нарушая конфиденциальности посетителей оценить результаты рекламных кампаний, а владельцы сайтов проанализировать пути оптимизации размещения рекламы.
Организация noyb (Европейский центр цифровых прав) отправила в австрийскую службу по надзору в сфере защиты данных жалобу, в которой обвинила компанию Mozilla в скрытом включении в Firefox функции "Privacy Preserving Attribution" (PPA), предназначенной для передачи телеметрии рекламным сетям. По мнению заявителей появившаяся в Firefox возможность нарушает действующий в Евросоюзе общий регламент по защите данных (
Опубликован выпуск проекта ELKS 0.8 (Embeddable Linux Kernel Subset), развивающего Linux-подобную операционную систему для 16-разрядных процессоров Intel 8086, 8088, 80188, 80186, 80286 и NEC V20/V30. ОС может использоваться на старых компьютерах класса IBM-PC XT / AT, отечественном компьютере MK-88, винтажной плате Monotech NuXT 2.0 и на SBC / SoC / FPGA, воссоздающих архитектуру IA16. Проект развивается с 1995 года и начинался как ответвление ядра Linux для устройств без блока управления памятью (MMU). Исходные тексты распространяются под лицензией GPLv2. Система поставляется в форме образов для записи на floppy-диски или запуска в эмуляторе QEMU.
Помимо ядра Linux, адаптированного для 16-разрядных систем, проектом развивается набор стандартных утилит (ps, bc, tar, du, diff, netstat, mount, sed, xargs, grep, find, telnet, meminfo и т.п.), включая совместимый с bash командный интерпретатор, консольный оконный менеджер screen, текстовые редакторы Kilo и vi, графическое окружение на базе X-сервера Nano-X.
Предлагается два варианта сетевого стека - штатный TCP/IP стек ядра Linux и стек ktcp, работающий в пространстве пользователя. Из сетевых карт поддерживаются Ethernet-адаптеры, совместимые с NE2K и SMC. Также возможно создание каналов связи через последовательный порт при помощи SLIP и CSLIP. Из файловых систем поддерживаются Minix v1, FAT12, FAT16 и FAT32. Настройка процесса загрузки осуществляется через сценарий /etc/rc.d/rc.sys. Формат исполняемых файлов заимствован из ОС Minix.
- Добавлена возможность загрузки и запуска файлов в исполняемом формате OS/2.
- Предоставлена возможность сборки программ Си-компилятором Open Watcom.
- Портирована игра Doom.
- При сборке по умолчанию включена поддержка сетевых адаптеров NE2K, WD и 3COM.
- Включено сжатие исполняемых файлов, позволившее уместить больше приложений в образе флоппи-диска.
- В ядре реализована поддержка асинхронного ввода/вывода.
- Добавлен новый драйвер для дисководов, использующий асинхронный ввод/вывод и позволяющий выполнять другие приложения во время ввода/вывода.
- Во время загрузки обеспечена настройка параметров ядра, таких как размер кучи, число задач, inode и файлов, для выделения ресурсов в зависимости от размера памяти.
- Улучшены возможности отладки, такие как дизассемблер и механизмы трассировки системных вызовов и функций.
- Проведена оптимизация использования кэша L1/L2.
- Добавлены функции для точного измерения времени.
- Из других систем портированы команды ttyclock, ttypong, ttytetris и md5/md5sum.
- Добавлен системный вызов sysctl и связанная с ним команда.
Опубликован выпуск проекта ELKS 0.8 (Embeddable Linux Kernel Subset), развивающего Linux-подобную операционную систему для 16-разрядных процессоров Intel 8086, 8088, 80188, 80186, 80286 и NEC V20/V30. ОС может использоваться на старых компьютерах класса IBM-PC XT / AT, отечественном компьютере
Компания NVIDIA опубликовала набор патчей для ядра Linux с реализацией технологии vGPU, позволяющей использовать виртуальные GPU NVIDIA в системах виртуализации. Работа vGPU организуется аппаратно через разделение ресурсов физического GPU NVIDIA и привязки каждому vGPU своей виртуальной функции PCI Express (VF, Virtual Function), что позволяет создавать на базе гостевых систем мощные виртуальные рабочие станции, способные выполнять ресурсоёмкие вычислительные и графические операции. Драйвер может использоваться с видеокартами NVIDIA на базе микроархитектуры Ada Lovelace. Число создаваемых vGPU зависит от модели видеокарты.
На стороне хост системы операции создания и сопряжения vGPU с гостевыми системами обеспечивает изменённый драйвер Nouveau, а на стороне гостевых систем используются штатные проприетарные драйверы NVIDIA (в гостевой системы возможности vGPU аналогичны обычному GPU). Для vGPU выделяется часть памяти из фреймбуфера физического GPU, которая закрепляется за данным vGPU и используется только им. Предоставляются различные типы vGPU, отличающиеся назначением, размером видеопамяти, числом виртуальных дисплеев и максимальным разрешением экрана.
Реализация включает в себя базовый драйвер nvkm (core driver), построенный на базе открытого драйвера Nouveau, и менеджер vGPU - vgpu_mgr, реализованный в форме модуля VFIO (Virtual Function I/O). Менеджер vGPU выполняет такие функции, как создание/удаление vGPU, выбор типа vGPU, предоставление API для управления из пространства пользователя. Менеджер vGPU взаимодействует с базовым драйвером GPU, который непосредственно обращается к оборудованию, выполняет загрузку прошивки GSP, вызывает связанные с vGPU функции прошивки, управляет совместными ресурсами, резервирует память в GPU, занимается обработкой исключений, определяет конфигурацию оборудования и выполняет обработку системных событий, таких как переход в спящий режим.
Дополнительно можно отметить принятие в состав Mesa Vulkan-драйвера gfxstream (Graphics Streaming Kit), который может применяться для организации доступа к API Vulkan из гостевых систем на базе Linux, Android и Fuchsia. Основой драйвера выступает одноимённый генератор кода (Graphics Streaming Kit), применяемый для перенаправления обращений к графическим API при виртуализации API Vulkan. Драйвер разработан компанией Google и используется в эмуляторе платформы Android, виртуальном Android-устройстве Cuttlefish, сервисе Google Play Games и операционной системе Fuchsia. Поддержка gfxstream уже включена в состав QEMU и crosvm. Поддерживается совместное использование с виртуальными устройствами virtio-gpu и goldish.
Компания NVIDIA опубликовала набор патчей для ядра Linux с реализацией технологии vGPU, позволяющей использовать виртуальные GPU NVIDIA в системах виртуализации. Работа vGPU организуется аппаратно через разделение ресурсов физического GPU NVIDIA и привязки каждому vGPU своей
Тэо де Раадт (Theo de Raadt) добавил в ветку OpenBSD-Current, на базе которой будет сформирован релиз OpenBSD 7.6, изменение, запрещающее использование символа с нулевым кодом в shell-скриптах, обрабатываемых командным интерпретатором ksh, используемым в OpenBSD по умолчанию. Наличие нулевых символов в скриптах теперь будет приводить к завершению выполнения с выводом ошибки, за исключением из размещения среди данных в конце файла, прикреплённых после кода.
Отмечается, что подобное изменение позволит исключить неопределённость поведения, связанную с обработкой нулевого символа в коде, написанном на языке Си и использующем строки, нулевой байт в которых задействован для индикации конца строки. Изучение обработки нулевого символа в различных оболочках показало, что в каждой из них было выявлен один или несколько случаев, когда нулевой байт во входных данных или содержимом переменных приводил к отличающемуся от других оболочек поведению, например, некоторые оболочки игнорировали его, некоторые заменяли на пробел, а некоторые завершали дальнейший разбор скрипта или прекращали его выполнение.
Тэо де Раадт (Theo de Raadt) добавил в ветку OpenBSD-Current, на базе которой будет сформирован релиз OpenBSD 7.6, изменение, запрещающее использование символа с нулевым кодом в shell-скриптах, обрабатываемых командным интерпретатором
Разработчики из компании Valve представили проект frog-protocols, в рамах которого планируется развивать дополнительный набор протоколов для Wayland, дополняющих протоколы из набора wayland-protocols, поставляющего Wayland-расширения для построения композитных серверов и пользовательских окружений. Создание отдельного набора протоколов к Wayland объясняется слишком медленным и буксующим в бесконечных обсуждениях процессом принятия новых протоколов в wayland-protocols, который может затягиваться на месяцы и годы.
В проекте frog-protocols протоколы намерены доводить до пользователей как можно быстрее - по мнению создателей инициативы многие пользователи продолжают работать в окружениях на базе протокола X11 из-за отсутствия необходимой функциональности, которая может быть предоставлена уже сейчас, но по тем или иным причинам её продвижение блокируется. Готовые пакеты с первой версией frog-protocols уже приняты в репозитории Arch Linux, Fedora 41 и Fedora 40, а также находятся на стадии включения в состав openSUSE.
Первыми двумя Wayland-протоколами, включёнными в состав frog-protocols, стали frog-fifo-v1 и frog-color-management-v1. Протокол frog-color-management добавляет расширения для управления цветом, предоставляющих возможности для работы с HDR в играх. Протокол frog-fifo отмечается как очень примитивный по своей сути, но предоставляющий важные возможности, решающие проблемы с высокой нагрузкой на GPU при использовании VSync, снижением производительности и зависанием приложений при перекрытии их окон другими окнами при включённом FIFO/VSync.
Код с реализацией протокола frog-fifo передан для включения в основной состав Mesa. Изменения добавляющие поддержку протокола также подготовлены для композитного менеджера KWin, развиваемого проектом KDE. Реализация уже опробована в работе и входит в состав платформы SteamOS (Steam Deck) и композитного сервера Gamescope. Предлагаемое изменение сводится обеспечению корректной работы Wayland-клиента с FIFO, благодаря переходу к ожиданию завершения вертикальной развёртки (vblank) вместо использования callback-вызовов при каждой готовности отобразить новый кадр.
В ходе обсуждения предложенного в Mesa изменения Симон Сер (Simon Ser), один из разработчиков wlroots, выразил сомнение в целесообразности добавления протоколов, развиваемых в обход основанной на достижении консенсуса модели разработки wayland-protocols или не учитывающих интересы Wayland-сообщества. Пьер-Лу Гриффе (Pierre-Loup Griffais) из компании Valve ответил, что текущей модели разработки wayland-protocols не хватает быстрого цикла продвижения экспериментальных протоколов, который позволил бы проводить эксперименты, сразу получать обратную связь от пользователей и учитывать её при дальнейшей разработке.
Разработчики из компании Valve представили проект frog-protocols, в рамах которого планируется развивать дополнительный набор протоколов для Wayland, дополняющих протоколы из набора wayland-protocols, поставляющего Wayland-расширения для построения композитных серверов и пользовательских окружений. Создание отдельного набора протоколов к Wayland объясняется слишком медленным и буксующим в бесконечных обсуждениях...
Опубликовано обновление дистрибутива OpenWrt 23.05.5, ориентированного на применение в различных сетевых устройствах, таких как маршрутизаторы, коммутаторы и точки доступа. OpenWrt поддерживает множество различных платформ и архитектур и обладает системой сборки, позволяющей просто и удобно производить кросс-компиляцию, включая в состав сборки различные компоненты, что позволяет легко сформировать адаптированную под конкретные задачи готовую прошивку или образ диска с желаемым набором предустановленных пакетов. Сборки сформированы для 35 целевых платформ.
- Решены проблемы в устройствах Zyxel EX5700, FritzBox 4040, UniFi U6, CMCC RAX3000M, JDCloud RE-CP-03, Aruba AP-303H, GL-AR750, Sercomm NA502s, TP-Link EAP613.
- Обеспечена совместимость с новыми редакциями плат Aruba.
- Внесены исправления, связанные с платформами mediatek, ath25, ath79, ipq40xx, octeon, ramips и realtek.
- В состав включены драйверы kmod-r8101, kmod-r8168, kmod-r8125 и kmod-r8126
- Внесены улучшения в lldpd, реализацию протокола LLDP (Link Layer Discovery Protocol).
- Из ядра 6.1.110 в пакет с ядром 5.15 портирован беспроводной стек mac80211. Решены проблемы, приводившие к снижению пропускной способности в беспроводном стеке.
- Обновлены версии ядра Linux 5.15.167, OpenSSL 3.0.15 и MbedTLS 2.28.9.
Опубликовано обновление дистрибутива OpenWrt 23.05.5, ориентированного на применение в различных сетевых устройствах, таких как маршрутизаторы, коммутаторы и точки доступа. OpenWrt поддерживает множество различных платформ и архитектур и обладает системой сборки, позволяющей просто и удобно производить кросс-компиляцию, включая в состав сборки различные компоненты, что позволяет легко сформировать адаптированную под конкретные задачи готовую прошивку или образ диска с желаемым...
Компания Llama Group опубликовала исходный код мультимедийного проигрывателя Winamp. Код написан на языке C++ и использует в качестве зависимостей Qt, libvpx, libmpg123, OpenSSL и DirectX 9 SDK. Сборка десктоп-приложения поддерживается только для платформы Windows и требует наличие компилятора Visual Studio 2019 и библиотек Intel IPP 6.1.1.035. Код вариантов Winamp для macOS, Android и iOS остаётся закрытым.
К сожалению, несмотря на ранее высказанные намерения перевести проект на открытую модель разработки, код опубликован под проприетарной лицензией WCL (Winamp Collaborative License). Лицензия WCL накладывает несколько ограничений, привязывающих разработчиков к основному проекту. Например, сторонним разработчикам в лицензии предписано передавать изменения, улучшения и исправления только в официальный репозиторий основного проекта. Изменения без передачи в основной проект разрешено вносить только для личного использования. Создание форков и распространение модифицированных версий Winamp запрещено.
Распространение Winamp допускается только через официальные каналы. Примечательно, что основной репозиторий размещён на GitHub, но типичный для данной платформы процесс разработки, при котором вначале создаётся форк, после чего в форк вносятся изменения и передаются через pull-запрос в основной проект, формально нарушает отмеченные в лицензии запреты на создания форков и передачу изменений другим лицам.
Проект Winamp создан Джастином Франкелем и Дмитрием Болдыревым в 1997 году и является одним из самых долгоживущих мультимедийных проигрывателей, продолжающих активное развитие. Winamp изначально ориентирован на использование на платформе Windows и насчитывает около 83 млн пользователей. Благодаря самобытности и гибкости в области изменения оформления интерфейса через скины, под впечатлением от Winamp создано несколько открытых клонов для Linux, таких как XMMS, XMMS2, Beep Media Player, Audacious и Qmmp. В прошлом году из-за финансовых проблем компания Llama Group, которая в 2014 году выкупила у компании AOL связанную с Winamp интеллектуальную собственность, была вынуждена уволить основную команду разработчиков классического Windows-приложения Winamp и сосредоточить внимание на развитие одноимённого потокового web-сервиса и мобильных приложений.
Компания Llama Group опубликовала исходный код мультимедийного проигрывателя Winamp. Код написан на языке C++ и использует в качестве зависимостей Qt, libvpx, libmpg123, OpenSSL и DirectX 9 SDK. Сборка десктоп-приложения поддерживается только для платформы Windows и требует наличие компилятора Visual Studio 2019 и библиотек Intel IPP 6.1.1.035. Код вариантов Winamp для macOS, Android и iOS остаётся закрытым.
Компания Тesla опубликовала наработки, связанные с сетевым протоколом TTPoE (Tesla Transport Protocol over Ethernet), разработанным для снижения задержек при передаче трафика в датацентрах и инфраструктурах, обеспечивающих работу систем машинного обучения. Компания Tesla намерена стандартизировать TTPoE и для достижения данной цели присоединилась к консорциуму UEC (Ultra Ethernet Consortium). Код реализации TTPoE написан на языке Си и открыт под лицензией GPLv2.
Протокол разработан для замены TCP в применениях, требующих низких задержек и высокой скорости передачи данных. Так же как TCP протокол TTPoE допускает отбрасывание пакетов и повторную передачу, полностью гарантируя при этом доставку всех отправленных данных. TTPoE рассчитан на использование в сетях с пропускной способностью выше 100Gbps и изначально был реализован на аппаратном уровне для обеспечения взаимодействия узлов в суперкомпьютере DOJO.
Внедрение TTPoE вместо существующих решений, таких как Infiniband, было нацелено на упрощение добавления новых узлов в кластер DOJO, рассчитанный на обработку визуальной информации при обучении AI-моделей, что требовало передачи очень больших объёмов данных между узлами при необходимости обеспечить минимальные задержки, не превышающие несколько десятков микросекунд. Среди требований к протоколу также отмечалась возможность относительно простой его реализации полностью на аппаратном уровне. В итоге был создан протокол TTPoE, работающий поверх обычного Ethernet и заменяющий уровень TCP в сетевом стеке на протокол TTP, реализуемый при помощи значительно более простого конечного автомата (state machine). Использование Ethernet дало возможность организовать работу кластера с использованием существующих Ethernet-коммутаторов.
Для уменьшения задержек в TTP по сравнению с TCP исключено состояние ожидания закрытия соединения (TIME_WAIT) и уменьшено число шагов при согласовании закрытия соединения. В TCP закрытие соединения сводится к отправке FIN-пакета, ожиданию подтверждения получения FIN-пакета, отправке подтверждения на подтверждение и перевод сокета на какое-то время в состояние TIME_WAIT, на случай неупорядоченного поступления задержавшихся пакетов. В TTP для закрытия соединения достаточно отправки опкода закрытия и получения подтверждения о закрытии (CLOSE, CLOSE-ACK).
Похожим образом в TTP выполнена оптимизация открытия соединений - вместо свойственного TCP трёхэтапного согласования нового соединения (SYN, SYN-ACK, ACK) в TTP использовано два этапа (OPEN, OPEN-ACK). Внесённые в TTP упрощения также позволяют избавить программное обеспечение от необходимости явного открытия соединения - достаточно указать адрес для отправки или получения данных.
Для управления перегрузкой (Congestion Control) в TTP как и в TCP применяется отбрасывание пакетов, но без использования усложнённых алгоритмов контроля перегрузки на основе скользящего окна, которое меняет размер в зависимости от уровня потери пакетов. В TTP размер окна не меняется в зависимости от потери пакетов - пакеты прекращают отправляться после заполнения фиксированного буфера, записи удаляются из буфера после прихода подтверждения, а потери пакетов восполняются через повторную передачу данных, хранящихся в буфере. C одной стороны такой подход позволяет снизить задержки, но с другой стороны мешает эффективному использованию TTP в низкоскоростных и некачественных сетях с большой потерей пакетов.
Опубликованная программная реализация включает в себя модуль modttpoe.ko для ядра Linux, позволяющий организовать прямой канал связи между несколькими узлами в одном сегменте сети Ethernet, а также модуль modttpip.ko с реализацией TTP-шлюза (TTP-GW, Tesla Transport Protocol Gateway), позволяющего использовать штатный стек IPv4 поверх TTPoE без необходимости внесения изменений в приложения.
Компания Тesla опубликовала наработки, связанные с сетевым протоколом TTPoE (Tesla Transport Protocol over Ethernet), разработанным для снижения задержек при передаче трафика в датацентрах и инфраструктурах, обеспечивающих работу систем машинного обучения. Компания Tesla намерена стандартизировать TTPoE и для достижения данной цели присоединилась к консорциуму UEC (Ultra Ethernet Consortium). Код реализации TTPoE написан на языке Си и
В инструментарии PCP (Performance Co-Pilot), применяемом для сбора статистики о производительности системы (например, используется в интерфейсе Cockpit), выявлены две уязвимости. Первая уязвимость (CVE-2024-45770) присутствует в утилите pmpost, предназначенной для отправки сообщений в лог и при определённых условиях запускаемой с повышенными привилегиями. Эксплуатация уязвимости позволяет добиться выполнения кода с правами root, но для совершения атаки необходимо иметь доступ к учётной записи PCP. Атака сводится к подмене символической ссылкой файла "/var/log/pcp/NOTICES", в который выполняется запись из процесса правами root без использования при открытии файла флага O_NOFOLLOW.
Вторая уязвимость в PCP (CVE-2024-45769) затрагивает фоновый процесс pcmd и приводит к обращению к памяти вне буфера при отправке специально оформленных данных. Опасность уязвимости снижает то, что по умолчанию в pcmd отключён приём сетевых запросов с других систем. Уязвимости устранены в выпуске PCP 6.3.1. Проблемы были выявлены в ходе аудита, проведённого разработчиками из проекта SUSE.
Кроме того, уязвимость (CVE-2024-45593) выявлена в пакетном менеджере Nix, применяемом в дистрибутиве NixOS. Уязвимость позволяет при распаковке специально оформленных файлов в формате NAR (Nix Archive) добиться записи в произвольные области файловой системы, насколько это позволяют права доступа, с которыми выполняется обработчик (при использовании фонового процесса Nix, распаковка выполняется с правами root). Проблема проявляется в ветке Nix 2.24 и устранена в выпуске 2.24.6.
Дополнительно можно упомянуть публикациюпредупреждения о выявлении критической уязвимости, затрагивающей дистрибутивы GNU/Linux и позволяющей удалённо без прохождения аутентификации добиться выполнения кода в системе. В настоящее время не приводится никакой информации о сути проблемы и подсистемах, которые она затрагивает, указано лишь, что по согласованию с разработчиками дистрибутивов начальный отчёт о проблеме планируют опубликовать 30 сентября, а полный отчёт с деталями - 6 октября. CVE проблеме пока не присвоен. По заявлению выявившего проблему исследователя, компании Canonical и Red Hat присвоили уязвимости критический уровень опасности (9.9 из 10).
В инструментарии PCP (Performance Co-Pilot), применяемом для сбора статистики о производительности системы (например, используется в интерфейсе Cockpit), выявлены две уязвимости. Первая уязвимость (CVE-2024-45770) присутствует в утилите pmpost, предназначенной для отправки сообщений в лог и при определённых условиях запускаемой с повышенными привилегиями. Эксплуатация уязвимости позволяет добиться выполнения кода с правами root, но...
Разработчики дистрибутива CentOS представили новую сборку "MIN", в рамках которой сформировано загрузочное Live-окружение CentOS Stream, работающее только в конcольном режиме. Для установки загруженной системы на диск предложена утилита "install_to_hard_drive", предоставляющая текстовый интерфейс. Размер сборки 1.2 ГБ. Кроме MIN проектом также формируются Live-сборки Cinnamon, GNOME, KDE, MATE, XFce и MAX (коллекция разных графических окружений).
Разработчики дистрибутива CentOS представили новую сборку "MIN", в рамках которой сформировано загрузочное Live-окружение CentOS Stream, работающее только в конcольном режиме. Для установки загруженной системы на диск предложена утилита "install_to_hard_drive", предоставляющая текстовый интерфейс. Размер
После пяти месяцев разработки сформирован выпуск открытого видеоплеера MPV 0.39, в 2013 году ответвившегося от кодовой базы проекта MPlayer2. В MPV основное внимание уделяется разработке новых возможностей, не заботясь о сохранении совместимости с MPlayer. Код MPV распространяется под лицензией LGPLv2.1+, некоторые части остаются под GPLv2, но процесс перехода на LGPL почти завершён и для отключения оставшегося GPL-кода можно использовать опцию "--enable-lgpl".
Среди изменений в новой версии:
- Добавлена поддержка мультитач.
- Добавлен скрипт select.lua, предоставляющий интерфейс для выбора файлов из списков воспроизведения, треков, устройств вывода и т.п.
- Реализована встроенная замена скрипту autoload.lua.
- В фильтре d3d11va предоставлена возможность масштабирования с использованием возможностей NVIDIA RTX и Intel VSR (Video Super Resolution).
- Для платформы Windows реализованы кнопки управления воспроизведением.
- Улучшен выбор треков.
- В скрипте stats.lua реализована страница с информацией о треке.
- Значительно улучшена совместимость с dmabuf-wayland.
После пяти месяцев разработки сформирован выпуск открытого видеоплеера MPV 0.39, в 2013 году ответвившегося от кодовой базы проекта MPlayer2. В MPV основное внимание уделяется разработке новых возможностей, не заботясь о сохранении совместимости с MPlayer. Код MPV распространяется
Компания Tidelift опубликовала результаты опроса более 400 мэйнтейнеров открытых проектов. Наиболее интересные выводы:
- 60% мэйнтейнеров открытых проектов не получают оплаты за работу по сопровождению проектов, при этом из них 14% считают данное занятие хобби и не заинтересованы в получении за него денег, в то время как 44% были бы не против получить финансирование. У 24% мэйнтейнеров часть получаемого заработка связана с данной работой, а у 12% с сопровождением связан основной доход. 24% получают оплату в виде зарплаты у работодателя, а 32% получают средства от сторонних организаций или частных лиц (в 25% случаев это донаты через платформы, такие как GitHub Sponsors, Open Collective и Patreon, 5% - прямые переводы и 3% участие фондов). Получающие оплату мэйнтейнеры в 74% случаях имеют помощников, в то время как у тех кто не получает оплату помощники имеются в 39% случаев.
- 11% времени мэйнтейнеры тратят на задачи, связанные с обеспечением безопасности (в 2021 году этот показатель составлял 4%), 50% (в 2021 году 53%) на рутинную работу, 35% (в 2021 году 25%) на разработку новых возможностей. Получающие оплату мэйнтейнеры тратят на задачи, связанные с безопасностью, 13% времени, а не получающие - 10%.
- 71% (76% получающих оплату и 68% не получающих оплату) мэйнтейнеров применяют двухфакторную аутентификацию, 65% (75% / 59%) применяют инструменты для статического анализа кода, 60% (70% / 54%) занимаются созданием патчей для устранения уязвимостей, 36% (50% / 28%) заверяют релизы цифровой подписью, 29% (37% / 23%) применяют защищённый сборочный инструментарий.
- Используемые практики сопровождения: 53% (51% не получающих оплату) - повторяемые или верифицируемые сборки, 46% (34%) - правила по обеспечению обратной совместимости, 40% (24%) - формализованный процесс управления зависимостями, 37% (33%) - рецензирование кода несколькими участниками.
- Документирование в проектах: 93% документируют лицензию, 76% - документируют примечания к выпуску и рекомендации по обновлению, 61% - предоставляют руководства для участников разработки, 53% - создают кодекс поведения, 17% документируют правила разрешения конфликтов и 13% имеют план на случай ухода мэйнтейнера из проекта.
- 48% мэйнтейнеров ощущают свою работу недооценённой. 38% обдумывают возможность ухода с поста сопровождающего.
- После инцидента с бэкдором в библиотеке xz 66% опрошенных стали меньше доверять pull-запросам от разработчиков, не являющихся мэйнтейнерами, а 37% стали меньше доверять ко-мэйнтейнерам.
- 31% (9% - крайне положительно, 22% - сдержанно положительно) опрошенных положительно оценивают влияние AI-инструментов для написания кода, 45% (23% - крайне отрицательно, 22% - сдержанно отрицательно) - негативно, 24% - нейтрально.
- 27% опрошенных скорее всего не стали бы рецензировать и принимать в проект изменения, подготовленные AI-инструментами, 37% возможно не стали бы принимать такие изменения. Готовность принять изменения от AI выразили всего 3% (более вероятно) и 6% (возможно).
- 45% опрошенных не используют AI-инструменты разработки и не планируют использовать в будущем, 6% - не используют сейчас, но планируют начать использовать в будущем, 15% используют более одного раза в день, 13% используют более одного раза в неделю, 20% используют менее одного раза в неделю. Доли использующих хотя бы изредка AI-инструменты мэйнтейнеров: 71% - до 26 лет, 58% - 26-35 лет, 39% - 36-45 лет, 42% - старше 45 лет.
- 45% опрошенных занимаются сопровождение более 10 лет, 24% - 6-10 лет, 23% - 2-5 лет, 7% - 1-2 года, 2% - менее года.
- 48% мэйнтейнеров проживают в Европе, 38% в Северной Америке, 8% в Азии (в 2021 году из Азии было 24% мэйнтейнеров, 35% из Европы и 35% из Северной Америки).
- Наблюдается увеличение возраста мэйнтейнеров - по сравнению с 2021 годом удвоилось число мэйнтейнеров в возрастной категории от 46 до 65 лет (в 2021 году таких мэйнтейнеров было 11%, в 2023 году - 27%, а в 2024 году - 21%). Число мэйнтейнеров младше 26 лет снизилось с 25% в 2021 году до 12% в 2023 году и 10% в 2024 году.
Компания Tidelift опубликовала результаты опроса более 400 мэйнтейнеров открытых проектов. Наиболее интересные выводы:
- 60% мэйнтейнеров открытых проектов не получают оплаты за работу по сопровождению проектов, при этом из них 14% считают данное занятие хобби и не заинтересованы в получении за него денег, в то время как 44% были бы не против получить финансирование. У 24% мэйнтейнеров часть получаемого заработка связана с данной работой, а у...
В платформе Bun, развиваемой в качестве альтернативы Node.js и предназначенной для обособленного выполнения приложений, написанных на языках JavaScript, JSX и TypeScript, реализована экспериментальная возможность компиляции и выполнения обработчиков, написанных на языке Си. Ранее для вызова низкоуровневого кода требовалось либо создавать N-API-плагины к движку V8, либо компилировать код в формат WebAssembly (WASM/WASI), что усложняло разработку и накладывало определённые ограничения. Теперь код на языке Си можно напрямую встраивать в JavaScript и компилировать на лету с использованием компилятора TinyCC, а также подключать динамически связываемые библиотеки.
Для работы с языком Си используется прослойка bun:ffi, которая компилирует исходный код в машинные инструкции, подставляет его в память при выполнении и обеспечивает автоматическую конвертацию типов данных между JavaScript и Си. Отмечается, что накладные расходы при обращении к скомпилированному Си-коду сведены к минимуму и приводят к задержке на уровне около 2 наносекунд на каждый вызов внешних Си-функций. В качестве примера показано как можно напрямую обращаться к библиотекам FFmpeg для преобразования коротких видео - за счёт исключения таких операций как ответвление отдельного процесса и выделения памяти для каждого видео, общее время выполнения тестового задания при использовании bun:ffi удалось сократить в три раза.
Более того, в выпуске Bun 1.1.29 для кода на языке Си добавлена поддержка N-API (napi), благодаря которому написанные на языке Си-обработчики могут возвращать объекты, строки, массивы и другие не примитивные значения JavaScript, помимо свойственных языку Си типов, таких как int и float. Механизм вызова обработчиков на языке Си действует и при динамической загрузке любых библиотек с C ABI, независимо от того, на каком языке они написаны изначально (C++, Rust, Zig и т.п.), что позволяет вызывать из JavaScript-кода предоставляемые данными библиотеками функции без отдельной стадии пересборки. Например, теперь можно обращаться из JavaScript к системным API.
В платформе Bun, развиваемой в качестве альтернативы Node.js и предназначенной для обособленного выполнения приложений, написанных на языках JavaScript, JSX и TypeScript, реализована экспериментальная возможность компиляции и выполнения обработчиков, написанных на языке Си. Ранее для вызова низкоуровневого кода требовалось либо создавать N-API-плагины к движку V8, либо компилировать код в формат WebAssembly (WASM/WASI), что усложняло...
Представлен релиз браузера Wolvic Chromium 1.0, в котором вместо движка Mozilla Gecko и технологий Firefox, задействован движок Chromium. Браузер Wolvic (бывший Firefox Reality) предназначен для использования в системах дополненной и виртуальной реальности, предоставляет 3D-интерфейс для навигации по сайтам с использованием 3D-шлема, и, помимо традиционных плоских страниц, позволяет web-разработчикам при помощи API WebXR, WebAR и WebVR создавать трехмерные web-приложения для систем виртуальной реальности.
Навигация в браузерном интерфейсе осуществляется при помощи VR-контроллеров или через отслеживания движения глаз, а для ввода данных в web-формы применяется виртуальная клавиатура или система голосового ввода, дающая возможность заполнять формы и отправлять поисковые запросы с использованием развиваемого в Mozilla движка для распознавания речи. Возможен просмотр в браузере пространственных видео, снятых в режиме 360 градусов.
Готовые сборки формируются для платформы Android и поддерживают такие 3D-шлемы, как Huawei VR Glass, Huawei Vision Glass, VIVE Focus, Lynx R1, Lenovo A3, Magic Leap 2, Meta Quest 2/3/Pro, Oculus Quest и Pico 4/4E. В режиме тестирования возможен запуск на обычном Android-смартфоне без 3D-шлема.
По своим возможностям Wolvic Chromium 1.0 очень близок к Wolvic v1.7 на базе движка Mozilla Gecko, например, поддерживается навигация с использованием механизмов отслеживания движения глаз и доступен улучшенный полноэкранный режим. Из специфичных изменений отмечается добавление виджета для отображения заголовков и 18 новых виртуальных окружений, воссоздающих разнообразные ландшафты (окружения включаются через диалог Settings > Environment). Помимо этого проведена большая работа по повышению стабильности, поддержке свежих версий операционных систем и расширению функциональности, связанной с реализацией стандарта OpenXR.
Представлен релиз браузера Wolvic Chromium 1.0, в котором вместо движка Mozilla Gecko и технологий Firefox, задействован движок Chromium. Браузер Wolvic (бывший Firefox Reality) предназначен для использования в системах дополненной и виртуальной реальности, предоставляет 3D-интерфейс для навигации по сайтам с использованием 3D-шлема, и, помимо традиционных плоских страниц, позволяет web-разработчикам при помощи API WebXR, WebAR и WebVR создавать...
Компания Google опубликовала релиз web-браузера Chrome 129. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается от Chromium использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого от копирования видеоконтента (DRM), системой автоматической установки обновлений, постоянным включением Sandbox-изоляции, поставкой ключей к Google API и передачей при поиске RLZ-параметров. Для тех, кому необходимо больше времени на обновление, отдельно поддерживается ветка Extended Stable, сопровождаемая 8 недель. Следующий выпуск Chrome 130 запланирован на 15 октября.
- Добавлена возможность настройки содержимого панели инструментов, позволяющая пользователю закреплять, откреплять и менять местами пиктограммы при помощи конфигуратора, отображаемого в боковой панели. Например, можно разместить на панели кнопки для вызова интерфейса для разработчиков, очистки данных о работе браузера, открытия режима для чтения, перехода в диспетчер задач, перехода в менеджер паролей и т.п. Для управления включением возможности закрепления пиктограмм добавлен параметр "chrome://flags/#toolbar-pinning". https://honk.any-key.press/d/K7Wn7Rz1MM5ymG98mQ.png
- Предложена функция сравнения вкладок, позволяющая использовать элементы машинного обучения для генерации сравнительного обзора товаров, страницы с информацией о которых открыты в разных вкладках. Возможность пока доступна только для пользователей из США. https://honk.any-key.press/d/5pf4Jj9wgGjLfs1PkS.png
- В версии для платформы Android реализовано перемещение неактивных вкладок в отдельную секцию (Inactive Tabs) интерфейса переключения между вкладками. Имеется возможность просмотра всех старых вкладок и из закрытия разом. По умолчанию новая возможность включена для 1% пользователей. Вкладки автоматически удаляются после нахождения в секции Inactive Tabs больше 60 дней.
- Добавлен экспериментальный режим совместного использования процессов, суть которого в том, что для разных вкладок, в которых открыт один и тот же сайт, будет использоваться один общий процесс отрисовки, вместо раздельных процессов. Изменение позволяет ускорить загрузку страниц и снизить потребление памяти. Для включения режиме добавлена настройка "chrome://flags/#enable-process-per-site-up-to-main-frame-threshold".
- Добавлена возможность предоставления сайтам одноразовых полномочий, действующих только в рамах текущего сеанса (например, можно предоставить доступ к камере и микрофону, который будет действовать до закрытия вкладки или перехода на другой сайт).
- Прекращена поддержка платформы macOS 10.15, сопровождение которой было прекращено компанией Apple в 2022 году.
- Для платформ Windows и macOS в конфигураторе реализован новый интерфейс управления сертификатами (ранее на данных платформах вызывались системные интерфейсы управления сертификатами).
- Включена блокировка доступа к IP 0.0.0.0 для предотвращения атак на локальные сервисы.
- Анонсирована предстоящая замена в TLS алгоритма обмена ключами Kyber768+X25519 на ML-KEM768+X25519 (недавно принятый стандарт ML-KEM основан на постквантовом алгоритме Кyber, но полностью не совместим с его прошлой реализацией).
- В API Scheduler добавлен метод "scheduler.yield()", позволяющий при выполнении длительных задач на время возвращать управление в основной поток браузера, что позволяет приостанавливать текущую длительную задачу для выполнения важных работ, таких как обработка ввода и отрисовка кадров. Идея в том, чтобы разбить длительно выполняемые задачи на более мелкие, периодически передавая управление в основной поток через вызов "await scheduler.yield();" в коде, что позволяет уменьшить негативное влияние длительно выполняемых задач на отзывчивость при работе с сайтом.
https://honk.any-key.press/d/D7243Gp1Qcg3WV5Pyl.png
- Добавлено CSS-свойство "interpolate-size", позволяющее выбирать размер анимации не в абсолютных величинах, а относительно значений, вычисленных при использовании свойств auto, min-content или fit-content. Для более точного управления размером предложена CSS-функция calc-size(), похожая на calc(), но поддерживающая операции с фактическим размером элементов, меняющимся в зависимости от содержимого.
- Внесены изменения в CSS-свойства для управления показом элементов, привязанных к местоположению других элементов (CSS Anchor Positioning), без использования JavaScript, например, для прикрепления к элементам всплывающих окон (popover), появляющихся по аналогии со всплывающими подсказками. В соответствии с рекомендацией рабочей группы, занимающейся стандартизацией СSS, CSS-свойство "inset-area" переименовано в "position-area", свойство "position-try-options" переименовано в "position-try-fallbacks", а в свойстве "position-try" убрана необходимость указания inset-area(), т.е. вместо "position-try-fallbacks: inset-area(top)" следует писать "position-try-fallbacks: top".
- В API Intl добавлен метод Intl.DurationFormat для форматирования данных о продолжительности во времени с учётом выбранной локали. Например:
const l = "ru-RU";
const d = {hours: 1, minutes: 46, seconds: 40};
const opts = {style: "long"};
new Intl.DurationFormat(l, opts).format(d);
// "1 час, 46 минут 40 секунд"
- В API Web GPU реализована возможность использования всего диапазона яркости, поддерживаемого экраном, при выводе HDR-изображений.
- В API WebRTCдобавлена поддержка отправки блобов при помощи метода RTCDataChannel.send(Blob) и получения данных с типом Blob при обработке события onMessage, если в атрибуте "binaryType" указано значение "blob" (ранее поддерживалась передача строк и ArrayBuffer). Размер блоба ограничен значением maxMessageSize.
- В API WebAuthn добавлены методы PublicKeyCredential.toJSON(), parseCreationOptionsFromJSON() и parseRequestOptionsFromJSON() для сериализации/десериализации WebAuthn-ответов c использованием формата JSON.
- В режиме "Origin trials" реализован API FileSystemObserver, позволяющий сайтам отслеживать изменения файлов и каталогов.
- В режиме "Origin trials" добавлен API Mesh2D Canvas для визуализации большого количества текстурированных треугольников. Из областей применения API упоминаются реализация расширенных методов текстурного маппинга и создания эффектов деформации в двумерном контексте.
- Расширены возможности инструментов для web-разработчиков.
Кроме нововведений и исправления ошибок в новой версии устранены 9 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Одной проблеме присвоен высокий уровень опасности (неправильная обработка типов в движке V8). Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 5 премий на сумму 13 тысяч долларов США (по одной премии в $8000 и $2000, три премии по $1000). Размер одного вознаграждения пока не определён.
Компания Google опубликовала релиз web-браузера Chrome 129. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается от Chromium использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого от копирования видеоконтента (DRM), системой автоматической установки обновлений, постоянным включением Sandbox-изоляции, поставкой ключей к Google...
Компания Collabora объявила о реализации поддержки GPU ARM Mali на базе микроархитектуры V10 в драйвере PanVK, обеспечивающем поддержку графического API Vulkan. Изменения, которые уже приняты в основную ветку проекта Mesa, позволяют использовать открытые драйверы на системах с GPU ARM Mali-G610 и Mali-G310. Тем не менее, отмечается, что поддержка ещё достаточно сырая, так как сам драйвер PanVK и добавленный для ARM V10 код не признаны готовыми для повсеместного использования (некоторые приложения могут не запускаться), а также ограничены поддержкой версии Vulkan 1.0.
Компания Collabora объявила о реализации поддержки GPU ARM Mali на базе микроархитектуры V10 в драйвере PanVK, обеспечивающем поддержку графического API Vulkan. Изменения, которые уже приняты в основную ветку проекта Mesa, позволяют использовать открытые драйверы на системах с GPU ARM Mali-G610 и Mali-G310. Тем не менее, отмечается, что поддержка ещё достаточно сырая, так как сам драйвер PanVK и добавленный для ARM V10 код...