Альянс AOUSD (Alliance for OpenUSD) и организация ASWF (Academy Software Foundation) подготовили новые рекомендации по использованию инклюзивной терминологии. Альянс AOUSD (Alliance for OpenUSD) занимается продвижением технологии OpenUSD (Universal Scene Description) и функционирует на базе фонда, курируемого организацией Linux Foundation. Органинизация ASWF учреждена Академией кинематографических искусств (США) и организацией Linux Foundation с целью продвижения использования открытого ПО в процессе создания фильмов.
Помимо ранее не рекомендованных к применению терминов, новые рекомендации предлагают избегать использование следующих слов:
Томас Домке (Thomas Dohmke) объявил о решений уйти с поста руководителя (CEO) компании GitHub для создания нового стартапа. Компания Microsoft намерена не назначать на его место нового руководителя, а поменять модель управления подразделением, которое перестанет быть независимым. Финансовые и инженерные операции в GitHub будет курировать Джулия Лиусон (Julia Liuson), президент Microsoft по разработке. Марио Родригес (Mario Rodriguez), директор по развитию продуктов GitHub (Chief Product Officer) будет переведён в подчинение Аше Шарме (Asha Sharma), вице-президенту Microsoft по платформе AI.
После поглощения компанией Microsoft сервис GitHub функционировал как независимое бизнес-подразделение, имеющее собственное руководство, сохранявшее прежнюю философию в отношении построения продуктов и ориентированное на удовлетворение интересов и потребностей разработчиков. По данным издания The Verge, после ухода Томаса Домке, GitHub войдёт в состав новой инженерной группы CoreAI в Microsoft, которую возглавит Джей Парих (Jay Parikh), бывший руководитель Facebook. Группа будет развивать платформы и инструменты для разработчиков, фокусируясь на использовании в них AI.
Исследователи безопасности из компании Google выявили в ядре Linux уязвимость (CVE-2025-38236), позволяющую повысить свои привилегии в системе. Среди прочего уязвимость даёт возможность обойти механизм sandbox-изоляции, применяемый в Google Chrome, и добиться выполнения кода на уровне ядра при выполнении кода в контексте изолированного процесса рендеринга Chrome (например, при эксплуатации другой уязвимости в Chrome). Ошибка устранена в обновлениях ядра Linux 6.1.143, 6.6.96, 6.12.36 и 6.15.5, но эксплуатация уязвимости возможна только начиная с ядра Linux 6.9. Для загрузки доступен прототип эксплоита.
Уязвимость вызвана ошибкой в реализации флага MSG_OOB, который можно выставить для сокетов AF_UNIX. Флаг MSG_OOB ("out-of-band") позволяет прикрепить дополнительный байт к отправляемым данным, который получатель может прочитать до получения остальных данных. Данный флаг был добавлен в ядре Linux 5.15 по запросу Oracle и в прошлом году предлагался для перевода в разряд устаревших, как не получивший широкого распространения.
В реализации sandbox-окружения Chrome разрешены операции с UNIX-сокетами и системные вызовы send()/recv(), в которых флаг MSG_OOB допускался наряду c другими опциями и не был отдельно отфильтрован. Ошибка в реализации MSG_OOB позволяла добиться обращения к памяти после её освобождения (use-after-free) после выполнения определённой последовательности системных вызовов:
Опубликован релиз СУБД Redis 8.2, относящейся к классу NoSQL-систем. Redis предоставляет функции для хранения данных в формате ключ/значение, расширенные поддержкой структурированных форматов данных, таких как списки, хэши и множества, а также возможностью выполнения на стороне сервера скриптов-обработчиков на языке Lua. Код проекта написан на язык Си и распространяется под лицензией AGPLv3.
СУБД Redis поддерживает транзакции, позволяющие выполнить за один шаг группу команд, гарантируя непротиворечивость и последовательность (команды от других запросов не могут вклиниться) выполнения заданного набора команд, а в случае проблем позволяя откатить изменения. Все данные в полном объёме кэшируются в оперативной памяти. Клиентские библиотеки доступны для большинства популярных языков, включая Perl, Python, PHP, Java, Ruby и Tcl.
Для управления данными предоставляются такие команды, как инкремент/декремент, стандартные операции над списками и множествами (объединение, пересечение), переименование ключей, множественные выборки и функции сортировки. Поддерживается два режима хранения: периодическая синхронизация данных на диск и ведение на диске лога изменений. Во втором случае гарантируется полная сохранность всех изменений. Возможна организация master-slave репликации данных на несколько серверов, осуществляемая в неблокирующем режиме. Доступен также режим обмена сообщениями "публикация/подписка", при котором создаётся канал, сообщения из которого распространяются клиентам по подписке.
Проведена оптимизация более 70 команд, которые стали работать быстрее, чем в Redis 8.0. Например, команда BITCOUNT стала быстрее на 35%, а команды для операции со списками LINSERT, LREM и LPOS - быстрее на 25%. 17 из оптимизированных команд стали быстрее минимум на 5%, а 52 - минимум на 2%.
Проведены оптимизации кода обработки одновременных операций и многопоточного ввода/вывода, позволившие на 49% увеличить число обрабатываемых операций в секунду в тестах c 8 потоками ввода/вывода при распределении нагрузки в 20% запросов на запись и 80% на чтение. На одном сервере удалось превысить рубеж в 1 миллион обрабатываемых операций в секунду.
Фундаментально изменён метод хранения данных в формате ключ/значение - для хранения теперь используется унифицированная структура
kvobj, позволяющая упаковывать имя ключа, короткое значение и время жизни в одном блоке выделяемой памяти и обойтись одной ссылкой на эту структуру в хэш таблицах, вместо отдельных ссылок на ключи, данные и TTL. При хранении коротких строковых значений новый метод хранение позволил сократить потребление памяти на 25-37%.
Проведена оптимизация хранения данных в формате JSON, позволившая снизить потребление памяти на 25-67% при хранении целых чисел и чисел с плавающей запятой.
В механизм Streams, применяемый для обработки и хранения потока сообщений, добавлены новые команды XACKDEL и XDELEX, упрощающие работу с потоками, к которым подключено несколько получателей (consumer groups). Команды решают задачу удаления сообщения только после того, как его получение будет подтверждено всеми обработчиками.
В команду BITOP, предназначенную для выполнение битовых операций, добавлены новые логические операторы DIFF, DIFF1, ANDOR и ONE.
Добавлен новый тип индексов векторов SVS-VAMANA, поддерживающий сжатие векторов.
Добавлены новые метрики: нагрузка в разрезе отдельных слотов и распределение размеров ключей для базовых типов данных.
Представлен выпуск дистрибутива Debian GNU/Hurd 2025, сочетающего программное окружение Debian c ядром GNU/Hurd. Репозиторий Debian GNU/Hurd включает примерно 72% пакетов от общего размера архива Debian, в том числе портированы Firefox и Xfce. Установочные сборки сформированы (364МБ) для архитектур i386 и x86_64. Для ознакомления с дистрибутивом без установки подготовлены готовые образы для виртуальных машин.
Debian GNU/Hurd остаётся единственной активно развиваемой платформой Debian, созданной на базе ядра, отличного от Linux (ранее развивался порт Debian GNU/KFreeBSD, но он давно находится в заброшенном состоянии). Платформа GNU/Hurd не входит в число официально поддерживаемых архитектур Debian, поэтому релизы Debian GNU/Hurd формируются отдельно и имеют статус неофициального выпуска Debian.
GNU Hurd представляет собой ядро, развиваемое в качестве замены ядра Unix и оформленное в виде набора серверов, работающих поверх микроядра GNU Mach и реализующих различные системные сервисы, такие как файловые системы, сетевой стек, система управления доступом к файлам. Микроядро GNU Mach предоставляет IPC-механизм, используемый для организации взаимодействия компонентов GNU Hurd и построения распределённой мультисерверной архитектуры.
В новом выпуске:
Задействована пакетная база дистрибутива Debian 13.
Реализована полноценная поддержка 64-разрядных систем. Степень поддержки пакетов в 64-разрядной сборке доведена до уровня i386.
В 64-разрядном окружении задействованы драйверы дисков из NetBSD, работающие в пространстве пользователя и основанные на предложенном проектом NetBSD механизме rump (Runnable Userspace Meta Program).
Через Rump обеспечена поддержка USB-дисков и CD-ROM.
По умолчанию задействованы расширенные атрибуты файлов (xattr) для
бутстрэппинга из других операционных систем, используя mmdebstrap.
Для GNU/Hurd портирован Rust.
Подготовлены пакеты для поддержки SMP.
В консоли для переключения раскладки клавиатуры задействован xkb.
После двух лет разработки состоялся релиз Debian 13 "Trixie", доступный для восьми официально поддерживаемых архитектур: Intel IA-32/x86 (i686), AMD64/x86-64, ARM EABI (armel), ARM64, ARMv7 (armhf), RISC-V, PowerPC 64 (ppc64el) и IBM System z (s390x). Обновления для Debian 13 будут выпускаться в течение 5 лет.
Для загрузкидоступны установочные образы, загрузить которые можно по HTTP, jigdo или BitTorrent. Для архитектуры amd64 разработаны LiveUSB, доступные в вариантах с GNOME, KDE, LXDE, Xfce, Cinnamon и MATE, а также многоархитектурный DVD, сочетающий пакеты для платформы amd64 с дополнительными пакетами для архитектуры i386.
Перед процедурой миграции с Debian 12 следует ознакомиться со следующим документом.
В репозитории представлено 69830 бинарных пакетов, что на 5411 пакетов больше, чем было предложено в Debian 12. По сравнению с Debian 12 добавлено 14116 новых бинарных пакетов, удалено 8844 (12%) устаревших или заброшенных пакетов, обновлено 44326 (63%) пакетов.
Суммарный размер всех предложенных в дистрибутиве исходных текстов составляет 1 463 291 186 строк кода, а размер всех пакетов - 403 GB.
Для 96.9% пакетов обеспечена поддержка воспроизводимых сборок, позволяющих подтвердить, что исполняемый файл собран именно из заявленных исходных текстов и не содержит посторонних изменений, подстановка которых, например, может быть совершена путём атаки на сборочную инфраструктуру или закладки в компиляторе.
Добавлен официальный порт дистрибутива для систем на базе 64-разрядной архитектуры RISC-V.
Добавлен порт "loong64" для систем на базе архитектуры набора команд LoongArch, применяемой в процессорах Loongson 3 5000 и реализующей RISC ISA, похожий на MIPS и RISC-V. Порт не включён в число официально поддерживаемых.
Удалены порты "mipsel" и "mips64el" для систем на базе архитектуры MIPS. Порт "mipsel" был одним из старейших поддерживаемых портов Debian, старше которого только порт для процессоров i386. Причиной удаления стали технические проблемы, такие как ограничение размера памяти в пространстве пользователя в 2Gb и наличие проблем со сборкой.
Прекращено формирование официальных установочных сборок и пакетов с ядром для 32-разрядных систем x86, но сохранено наличие официально поддерживаемого репозитория пакетов и multi-arch-репозитория, возможности развёртывания 32-разрядных окружений в изолированных контейнерах и инструментария для обеспечения сборки 32-разрядных приложений. Архитектура i386 в Debian теперь ограничивается поддержкой запуска 32-разрядных приложений в 64-разрядном окружении x86_64 (при сборке используются инструкции SSE2, которые недоступны в большинстве 32-разрядных процессоров, поддерживавшихся в Debian 12).
Полностью решена проблема 2038 года. Все пакеты переведены на использование 64-разрядного типа time_t в портах дистрибутива для 32-разрядных архитектур, в которых продолжал использоваться 32-разрядный тип time_t (не может применяться для обработки времени позднее 19 января 2038 года из-за переполнения счётчика секунд, прошедших после 1 января 1970 года).
В инсталляторе изменена логика управления разделами EFI, и добавлен режим восстановления систем, установленных в подраздел Btrfs. Исключены прошивки, которые не требуются при установке, не могут работать без несвободных пакетов или бесполезны при текущих настройках ядра. Прекращена поддержка grub-legacy и win32-loader. Возобновлена поддержка использования не-ASCII символов в полном имени пользователя. Добавлена поддержка плат и устройств: Pine64 Pinebook, MNT Reform 2, AM64x HummingBoard-T, Pine64 Star64, Wandboard rev D1, а также ноутбуков и планшетов на базе ARM SoC Snapdragon X Elite.
В инсталлятор и Live-сборки добавлен режим удалённой загрузки "HTTP Boot", при котором загрузочные образы доставляются при помощи протокола HTTP (URL iso-образа вводится в интерфейсе прошивки UEFI или U-Boot).
Для хранения каталога со временными файлами /tmp задействована файловая система tmpfs, использующая размещаемый в оперативной памяти RAM-диск, который может быть вытеснен в раздел подкачки при нехватке свободной памяти. Применение tmpfs позволяет сократить число операций записи на физический накопитель, снизить энергопотребление жёстких дисков, продлить жизнь SSD-накопителей, увеличить производительность работы с временными файлами. Для возвращения хранения /tmp в обычной ФС можно использовать команду "systemctl mask tmp.mount".
Исключены команды last, lastb и lastlog, которые были завязаны на файлы /var/log/wtmp, /var/log/btmp, /var/run/utmp и /var/log/lastlog, использующие 32-разрядный тип time_t, который невозможно заменить на 64-разрядный без изменения ABI Glibc и нарушения совместимости с приложениями. Вместо данных утилит рекомендовано использовать утилиты
wtmpdb, lastlog2 и lslogins.
Для определения и монтирования шифрованных ФС задействован пакет systemd-cryptsetup.
На системах с архитектурой AMD64 и ARM64 задействованы расширения Intel CET (Control-flow Enforcement Technology), ARM PAC (Pointer Authentication) и BTI (Branch Target Identification) для защиты от эксплоитов, использующих методы возвратно-ориентированного программирования (ROP - Return-Oriented Programming). При использовании техники ROP атакующий не пытается разместить свой код в памяти, а оперирует уже имеющимися в загруженных библиотеках кусками машинных инструкций, завершающихся инструкцией возврата управления (как правило, это окончания библиотечных функций). Работа эксплоита сводится к построению цепочки вызовов подобных блоков ("гаджетов") для получения нужной функциональности. Суть защиты в том, что после передачи управления функции, адреса возврата сохраняются процессором не только в обычном стеке, но и в отдельном теневом стеке, который не может быть изменён напрямую.
Добавлена поддержка утилиты run0, поставляемой в systemd для выполнения процессов под идентификаторами других пользователей. Утилита реализована в форме надстройки над командой systemd-run и преподносится как более безопасная замена программы sudo.
Задействована ветка пакетного менеджера APT 3.0, в которой переработан интерфейс пользователя, активирован движок разрешения зависимостей Solver3, добавлена поддержка снапшотов, прекращено использования утилиты apt-key, добавлен крипто-бэкенд для библиотеки OpenSSL и реализована команда 'dist-clean'.
Добавлена команда debian-repro-status для проверки состояния воспроизводимой сборки для установленных в текущей системе пакетов.
Завершена миграция дистрибутива с использования отдельного раздела /usr на представление, при котором каталоги /bin, /sbin и /lib* оформлены как символические ссылки на соответствующие каталоги внутри /usr.
Ядро Linux обновлено до версии 6.12. Задействованы новые выпуски systemd 257, bash 5.2.37, Glibc 2.41, OpenSSL 3.5.
В состав вошли выпуски сред рабочего стола GNOME 48, KDE Plasma 6.3, LXDE 13, LXQt 2.1.0 и Xfce 4.20. Обновлён графический стек.
Обновлены пользовательские приложения, например, LibreOffice 25.2.
GIMP 3.0.2, Inkscape 1.4, Vim 9.1.
Опубликован выпуск СУБД MariaDB 12.0.2, который отмечен как первый стабильный релиз ветки 12.0. Ветка MariaDB 12.0 отнесена к промежуточным выпускам (rolling), продолжает постепенное развитие функциональности и пришла на смену ветке MariaDB 11.8. Одновременно опубликован выпуск MariaDB 12.1.1, имеющий статус кандидата в релизы. Ветка MariaDB 12.0 будет сопровождаться до формирования выпуска 12.1.2.
Проектом MariaDB развивается ответвление от MySQL, сохраняющее обратную совместимость и отличающееся интеграцией дополнительных движков хранения и расширенных возможностей. Развитие MariaDB курирует независимая организация MariaDB Foundation в соответствии с открытым и прозрачным процессом разработки, не зависящим от отдельных производителей. MariaDB поставляется вместо MySQL во многих дистрибутивах Linux (RHEL, SUSE, Fedora, openSUSE, Slackware, OpenMandriva, ROSA, Arch Linux, Debian) и внедрён в таких крупных проектах, как Wikipedia, Google Cloud SQL и Nimbuzz.
Добавлена поддержка SSL-ключей, защищённых паролем. Пароль для разблокирования SSL-сертификатов может быть задан через переменную ssl_passphrase или вручную при запуске сервера.
Добавлено выражение "SET SESSION AUTHORIZATION" для выполнения действия под другим пользователем при выставлении соответствующих привилегий (выражение можно рассматривать как аналог "sudo" для СУБД).
В плагин file_key_management.so добавлена поддержка хэшей SHA-2.
Добавлена поддержка слабых курсорных переменных (weak cursor variable) предопределенного типа SYS_REFCURSOR, позволяющих возвращать курсор из хранимых процедур (в параметре OUT) или из функций (в выражении RETURN). Для ограничения максимального числа одновременно открытых курсоров добавлена системная переменная "max_open_cursors".
В тип TO_CHAR добавлена поддержка формата FM (Fill Mode) для исключения добавочного заполнения. Например, запрос
"SELECT CONCAT('/', TO_CHAR('2020-01-06 10:11:12', 'FMDAY'), '/');" вернёт "/Monday/" вместо "/Monday /".
В оптимизатор добавлена поддержка опций (hint), влияющих на построения плана оптимизаций: QB_NAME, NO_RANGE_OPTIMIZATION, NO_ICP, MRR, NO_MRR, BKA, NO_BKA, BNL, NO_BNL, SEMIJOIN, SUBQUERY, JOIN_FIXED_ORDER, JOIN_ORDER, JOIN_PREFIX, JOIN_SUFFIX и MAX_EXECUTION_TIME. Опции подставляются в запрос в формате, совместимом с MySQL, например:
SELECT /*+ BKA(t1) NO_BKA(t2) */ * FROM t1 INNER JOIN t2 WHERE ...;
SELECT /*+ MAX_EXECUTION_TIME(1000) */ * FROM t1 INNER JOIN t2 WHERE ...;
Добавлена поддержка новых функций GIS (Geographic Information System):
ST_Validate, MBRCoveredBy, ST_Simplif, ST_GeoHash, ST_LatFromGeoHash, ST_LongFromGeoHash, ST_PointFromGeoHash, ST_IsValid, ST_Collect.
Добавлена поддержка триггеров, срабатывающих для нескольких событий. В выражении CREATE TRIGGER теперь можно перечислять подпадающие под него события, используя синтаксис "{ event [ OR ... ] }".
В плагине Audit реализовано сохранение в логе аудита информации о сетевых портах для входящих соединений (ранее отражался только хост).
В утилиту mariadb добавлена опция "--script-dir" для задания альтернативного каталога поиска скриптов, запускаемых командой SOURCE.
Удалены переменные big_tables, large_page_size и storage_engine, ранее объявленные устаревшими.
Опубликован релиз языка программирования Rust 1.89, основанного проектом Mozilla, но ныне развиваемого под покровительством независимой некоммерческой организации Rust Foundation. Язык сфокусирован на безопасной работе с памятью и предоставляет средства для достижения высокого параллелизма выполнения заданий, при этом обходясь без использования сборщика мусора и runtime (runtime сводится к базовой инициализации и сопровождению стандартной библиотеки).
Методы работы с памятью в Rust избавляют разработчика от ошибок при манипулировании указателями и защищают от проблем, возникающих из-за низкоуровневой работы с памятью, таких как обращение к области памяти после её освобождения, разыменование нулевых указателей, выход за границы буфера и т.п. Для распространения библиотек, обеспечения сборки и управления зависимостями проектом развивается пакетный менеджер Cargo. Для размещения библиотек поддерживается репозиторий crates.io.
Безопасная работа с памятью обеспечивается в Rust во время компиляции через проверку ссылок, отслеживание владения объектами, учёт времени жизни объектов (области видимости) и оценку корректности доступа к памяти во время выполнения кода. Rust также предоставляет средства для защиты от целочисленных переполнений, требует обязательной инициализации значений переменных перед использованием, лучше обрабатывает ошибки в стандартной библиотеке, применяет концепцию неизменяемости (immutable) ссылок и переменных по умолчанию, предлагает сильную статическую типизацию для минимизации логических ошибок.
Предоставлена возможность использования символа "_" в качестве аргумента обобщённых параметров с признаком "const" для выведения значений этих параметров на основе окружающего контекста.
Добавлено новое lint-предупреждение "mismatched_lifetime_syntaxes"
для решение проблемы неочевидного определения времени жизни в сигнатурах функций при использовании механизма "lifetime elision" (автоматически определяет время жизни ссылок, позволяя обойтись без его ручного указания). Предупреждение выполняет проверку того, что входные и выходные параметры функции принадлежат к одной и той же группе типов. Группы формируются на основе поддержки явного задания времени жизни и возможности автоматического вывода времени жизни компилятором (например, в типах "&'a T" и "ContainsLifetime<'a>" может явно присутствовать время жизни, но компилятор не может автоматически определить время жизни, в а типах "&T", "&'_ T" и "ContainsLifetime<'_>" допускается как явное задание, так и автоматическое определение).
В атрибуте "target_feature" для систем x86 реализована возможность проверки поддержки расширенных наборов инструкций sha512, sm3, sm4, kl и widekl, а также отдельных функций avx512.
Обеспечен запуск doctest (тесты, встроенные в документацию) не только для текущей целевой платформы, но и для других платформ, указанных при запуске пакетного менеджера "cargo" ("cargo test --doc --target other_target").
Для функций 'extern "C"' при сборке для целевой платформы "wasm32-unknown-unknown" реализован стандартный C ABI для WebAssembly.
С некоторыми оговорками, касающимися совместимости типов, разрешено использование типов i128 и u128 во внешних Си-функциях (extern "C"), для которых ранее показывалось lint-предупреждение "improper_ctypes_definitions".
В разряд стабильных переведена новая порция API, в том числе стабилизированы методы и реализации типажей:
Многие встроенные в компилятор функции (Intrinsics) для процессоров x86, включая функции для AVX512, SHA512, SM3 и SM4.
Начался процесс перевода целевой платформы "x86_64-apple-darwin" с первого уровня поддержки на второй (Apple планирует прекратить поддержку архитектуры x86_64). Первый уровень поддержки подразумевает формирование бинарных сборок, проведение досконального тестирования и предоставление наивысшей гарантии поддержки платформы - каждое изменение в компиляторе проверяется выполнением полного тестового набора. Второй уровень поддержки подразумевает гарантию сборки, но отсутствие гарантий при прохождении тестового набора.
Реализован третий уровень поддержки платформ "loongarch32-unknown-none" и "loongarch32-unknown-none-softfloat". Третий уровень подразумевает базовую поддержку, но без автоматизированного тестирования, публикации официальных сборок и проверки возможности сборки кода.
Дополнительно можно отметить связанные с Rust события и проекты:
Опубликован отчёт о состоянии пакетов на языке Rust в Debian. Отмечается, что в ветке Debian Unstable (Sid) около 8% src-пакетов в репозитории main связаны сборочными зависимостями как минимум с одним пакетом "librust-*". В Debian 12 подобных пакетов было 4.5%. Также отмечено, что более 3 тысяч пакетов включают код на языке Rust, вынесенный в пакеты librust-..-dev, а 150 src-пакетов поставляют скомпилированные исполняемые файлы или библиотеки Rust.
Из представляющих интерес для Debian пакетов упомянуты sudo-rs,
ntpd-rs, uutils, Sequoia, rpgp, hickory (DNS), Rustls, rav1d и fish. Опциональная поддержка Rust реализована в APT, QEMU (virtiofsd), ядре Linux и Mesa, а также ожидается в LibreOffice. Для преобразования crate-пакетов в src-пакеты Debian реализован инструментарий debcargo.
Представлен проект tmux-rs, развивающий клон мультиплексора терминала tmux (консольный оконный менеджер), переписанный с Си на Rust.
Разработчик драйвера Tyr из компании Сollabora, опубликовал статью об устройстве работающих на уровне ядра драйверов для GPU и принципах разработки таких драйверов на языке Rust.
Продемонстрировано универсальное приложение на языке Rust, способное выполняться как на CPU, так и на различных платформах GPU: CUDA для NVIDIA, SPIR-V для GPU с поддержкой Vulkan, Metal для Apple, DirectX 12 для Windows, WebGPU для браузеров.
После трёх месяцев разработки представлен релиз свободной реализации API OpenGL и Vulkan - Mesa 25.2.0. Первый выпуск ветки Mesa 25.2.0 имеет экспериментальный статус - после проведения окончательной стабилизации кода будет выпущена стабильная версия 25.2.1.
В Mesa 25.2 доступна поддержка графического API Vulkan 1.4 в драйверах ANV для GPU Intel, RADV для GPU AMD, NVK для GPU NVIDIA, Asahi для GPU Apple, Turnip для GPU Qualcomm, PanVK для GPU ARM Mali, в программном растеризаторе lavapipe (lvp) и в режиме эмулятора (vn). В драйверах v3dv (GPU Broadcom VideoCore для Raspberry Pi 4+) и dzn (реализация Vulkan поверх Direct3D 12) поддерживается Vulkan 1.0.
В Mesa также обеспечивается полная поддержка OpenGL 4.6 для драйверов iris (GPU Intel Gen 8+), radeonsi (AMD), Crocus (старые GPU Intel Gen4-Gen7), AMD (r600), zink, llvmpipe, virgl (виртуальный GPU Virgil3D для QEMU/KVM), freedreno (Qualcomm Adreno), d3d12 (прослойка для организации работы OpenGL поверх DirectX 12) и asahi (GPU AGX, используемый в чипах Apple M1 и M2). Поддержка OpenGL 4.5 доступна для GPU NVIDIA (nvc0). Поддержка OpenGL 3.3 присутствует в драйверах softpipe (программный растеризатор) и nv50 (NVIDIA NV50). В драйверах panfrost (GPU ARM Mali) и v3d (GPU Broadcom VideoCore) поддерживается OpenGL 3.1.
В Vulkan-драйвер PanVK для устройств с GPU ARM Mali на базе архитектуры V10, таких как Mali-G610 и Mali-G310, добавлена поддержка графического API Vulkan 1.4 (ранее поддерживался Vulkan 1.2).
В OpenGL-драйвер r600 для старых GPU AMD (до серии Radeon HD 7000 включительно) добавлена поддержка графического API OpenGL 4.6 (ранее поддерживался OpenGL 4.5).
В Vulkan-драйвер NVK добавлена поддержка GPU NVIDIA на базе микроархитектур Blackwell и Kepler (GTX 600/700). Для GPU Blackwell реализована поддержка Vulkan 1.4, а для GPU Kepler - API Vulkan 1.2 (более новые версии Vulkan не поддерживаются из-за аппаратных ограничений). Для GPU NVIDIA на базе микроархитектуры Maxwell обеспечена полная совместимость с Vulkan 1.4.
Оптимизирована работа компилятора шейдеров NAK, написанного на языке Rust и применяемого в драйвере NVK. В число зависимостей к драйверу NVK включён crate-пакет rustc-hash, благодаря которому удалось сократить время компиляции шейдеров примерно на 12%.
Поддержка OpenGL для GPU NVIDIA Maxwell, Pascal и Volta переключена по умолчанию с драйвера Nouveau на использование драйвера Zink в связке с Vulkan-драйвером NVK. Zink также задействован для обеспечения поддержки OpenGL на системах с GPU Blackwell (в OpenGL-драйвер Nouveau добавлять поддержку GPU Blackwell не планируют).
Zink предоставляет реализацию OpenGL 4.6 поверх Vulkan, позволяющую получить аппаратно ускоренный OpenGL на устройствах, поддерживающих API Vulkan. Производительность Zink близка к производительности родных реализаций OpenGL.
Значительно повышена производительность Vulkan-драйвера Honeykrisp для графических процессоров, поставляемых в чипах Apple M1/M2.
В Vulkan-драйверы RADV (GPU AMD) и ANV (Intel) добавлена поддержка аппаратного ускорения декодирования видео в формате VP9. Возможность реализована при помощи Vulkan-расширения VK_KHR_video_decode_vp9, весной подготовленного рабочей группой Vulkan WG. Аппаратное ускорение доступно для GPU AMD начиная с GPU Navi 10 на базе микроархитектуры RDNA 1.0.
В Vulkan-драйвере RADV для GPU AMD на базе микроархитектур RDNA3 и RDNA4 повышена производительность трассировки лучей и улучшена поддержка технологии суперсэмплинга FSR 4 (FidelityFX Super Resolution). Добавлена возможность настройки приоритетов для очереди потока команд (OpenCL-расширение cl_khr_priority_hints).
В OpenGL-драйвере radeonsi для старых семейств GPU AMD Evergreen и Cayman реализована поддержка OpenGL 4.6. Добавлена поддержка разделяемой виртуальной памяти (SVM, Shared Virtual Memory).
В OpenGL-драйвере Iris и Vulkan-драйвере ANV реализована поддержка GPU, применяемых в процессорах Intel Wildcat Lake. В Iris и ANV также объявлена стабильной поддержка GPU Intel на базе архитектуры Xe3, задействованной в процессорах Panther Lake. Улучшена поддержка семейств GPU Xe2 и Xe3.
В драйвер Iris добавлена поддержка разделяемой виртуальной памяти (SVM, Shared Virtual Memory).
В OpenGL-драйвер freedreno добавлена поддержка GPU Adreno X1-45, применяемом в SoC Qualcomm Snapdragon X Plus.
Продолжено развитие OpenCL-драйвера Rusticl, написанного на языке Rust и пришедшего на смену драйверу Clover. В Rusticl добавлена поддержка
SVM (Shared Virtual Memory), изображений в цветовом пространстве sRGB (форматы CL_sRGBA и CL_sBGRA), формата FP16 (OpenCL-расширение cl_khr_fp16 для драйверов asahi, freedreno, llvmpipe, panfrost, radeonsi и zink).
Добавлен Gallium3D-фронтэнд MFT (Media Foundation Transform), позволяющий использовать драйвер D3D12 (Direct3D 12) для реализации других графических API. Разработан Microsoft для WSL (Windows Subsystem for Linux).
Удалена поддержка инфраструктуры DRI2 (Direct Rendering Infrastructure), на смену которой для организации прямого доступа к видеоадаптеру пришёл интерфейс DRI3, использующий DMA-BUF. В качестве причины упоминается, что интерфейс DRI3 существует уже более 10 лет, DRI2 давно устарел, а все поддерживаемые драйверы GPU давно реализовали интерфейс DRI3.
Прекращена поддержка устаревших методов совместной работы с буферами - оставлена только возможность использования dma-buf.
Прекращена поддержка версий libX11, не обеспечивающих безопасную работу в многопоточных приложениях. Оставлена только поддержка libX11 1.8 (апрель 2022 года) и более новых выпусков, использующих вызов XInitThreads().
Объявлена устаревшей и отключена по умолчанию поддержка EGL-расширения EGL_WL_bind_wayland_display, реализованного для Wayland. Для обмена пиксельными буферами между клиентом и сервером Wayland предлагается использовать Wayland-протокол linux_dmabuf. Для возвращения поддержки требуется указание флага "-Dlegacy-wayland=bind-wayland-display" во время сборки. Xwayland поддерживает корректную работу без
EGL_WL_bind_wayland_display начиная с выпуска 24.1 (май 2024 года).
Удалён устаревший OpenCL-драйвер Clover. Для OpenCL следует использовать драйвер RustiCL, более функциональный и поддерживающий больше версий OpenCL.
В драйвере ANV (Intel) реализовано Vulkan-расширение:
Компания Google опубликовала релиз web-браузера Chrome 139. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается от Chromium использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого от копирования видеоконтента (DRM), системой автоматической установки обновлений, постоянным включением Sandbox-изоляции, поставкой ключей к Google API и передачей RLZ-параметров при поиске. Для тех, кому необходимо больше времени на обновление, отдельно поддерживается ветка Extended Stable, сопровождаемая 8 недель. Следующий выпуск Chrome 140 запланирован на 2 сентября.
Добавлена возможность использования AI-модели для формирования поисковых рекомендаций в адресной строке и на странице открытия новой вкладки. Для показа подобных AI-рекомендаций в адресную строку добавлена кнопка "AI Mode", а в списке рекомендаций вывод от AI помечен или выделен в отдельную секцию. Возможность пока активирована по умолчанию только для части пользователей.
В централизованно управляемых системах расширена возможность создания собственных ярлыков быстрого поиска через адресную строку (можно создать ярлык "@имя" для поиска на определённом сайте). В новой версии добавлена дополнительная настройка, позволяющая разрешить переопределение, удаление или отключение пользователем ярлыков, заданных администратором.
В версии для Android в режимах стандартной и расширенной защиты Google Safe Browsing реализована проверка безопасности загружаемых APK-пакетов. Проверка осуществляется через обращение к серверам Google. В случае, если файл признан опасным пользователю выводится соответствующее предупреждение, а доступ к файлу блокируется (в интерфейсе предусмотрена отдельная возможность доступа в обход блокировки).
Удалена настройка ExtensionManifestV2Availability, позволявшая вернуть поддержку второй версии манифеста Chrome, определяющего возможности и ресурсы, доступные для дополнений, написанных с использованием API WebExtensions. Для возвращения поддержки второй версии манифеста ещё остаётся возможность запуска исполняемого файла chrome с флагами "--disable-features=ExtensionManifestV2Unsupported,ExtensionManifestV2Disabled".
В официальных стабильных сборках Chrome прекращена поддержка опций командной строки "--extensions-on-chrome-urls" и "--disable-extensions-except", позволявших отключить блокировку установки рискованных дополнений, например, подставляемых в браузер без спроса пользователя. В Chromium и тестовых сборках Chrome поддержка указанных опций сохранена.
На странице открытия новой вкладки реализована нижняя панель, на которой показывается информация о дополнениях, влияющих на содержимое страницы новой вкладки, а также сведения о применяемых политиках централизованного управления.
Добавлена защита от случайного удаления сохранённых паролей при выборе операции полной очистки данных. При наличии сохранённых паролей браузер теперь направляет пользователя на страницу менеджера паролей, на которой можно осмысленно и по-отдельности удалить пароли и ключи passkey.
Отключена возможность автоматического отката на использование для WebGL системы программной отрисовки SwiftShader, программно реализующей API Vulkan. В случае отсутствия должного бэкенда на базе GPU создание контекста WebGL теперь будет возвращать ошибку, а не переключаться на SwiftShader. Прекращение использования SwiftShader позволит повысить безопасность, благодаря исключению выполнения сгенерированного JIT-компилятором кода в процессе, отвечающем за взаимодействие с GPU. На платформах Linux и macOS системы без GPU больше не смогут использовать
WebGL. В Windows поддержка SwiftShader оставлена только для устройств без GPU или с проблемными GPU, добавленными в чёрный список.
Во встроенном хранилище корневых сертификатов (Chrome Root Store) прекращено доверие к удостоверяющим центрам Chunghwa Telecom и Netlock
из-за нарушений требований к удостоверяющим центрам. В связи с отсутствием действий по устранению выявленных недостатков, TLS-сертификаты, выданные Chunghwa Telecom и Netlock после 31 июля 2025 года, теперь воспринимаются в Chrome как не заслуживающие доверия. Сертификаты, выпущенные до 31 июля, продолжают восприниматься как нормальные.
В API Web Speech добавлена поддержка распознавания речи, используя локально доступные на устройстве движки. Сайт может запросить наличие движков распознавания для необходимого языка, выбрать между локальными и облачными сервисами, запросить установку необходимых ресурсов для локального распознавания и убедиться, что распознавание будет выполнено на устройстве пользователя без отправки данных во внешние сервисы.
В CSS, помимо задания радиуса скругления при помощи свойства border-radius, реализовано свойство "corner-shape" для управления формой и кривизной углов прямоугольных элементов. Например, при помощи "corner-shape" можно делать плавные переходы от квадрата к кругу (squircle), вогнутые углы (scoop), срезать фаску (bevel) и делать вырезы (notch), а также анимировать изменение формы углов.
Добавлена поддержка спецификации Custom Functions, позволяющей создавать собственные функции для CSS, действующие по аналогии с собственными параметризованными CSS-свойствами. Отличие сводится к тому, что CSS-свойства могут вернуть только одно фиксированное значение, а CSS-функции могут возвращать значения на основе других собственных CSS-свойств, параметров и условий. Для определения CSS-функций добавлено правило "@function".
Добавлено CSS-свойство "caret-animation", позволяющее управлять анимацией изменения курсора в полях ввода (например, мигание курсора можно заменить на собственную анимацию).
С целью соблюдения спецификации и улучшения совместимости с другими браузерами добавлено CSS-свойство "font-width", аналогичное ранее доступному свойству "font-stretch".
При блокировке Service Worker-а из-за срабатывания правил CSP (Content Security Policy) теперь в асинхронном режиме отправляется событие "error", вместо генерации исключения SecurityError сразу после вызова конструктора "new Worker(url)" или "new SharedWorker(url)".
Предоставлена возможность создания единого web-приложения, работающего с несколькими доменами верхнего уровня или разными поддоменами. Для настройки привязки к доменам в манифесте предусмотрено поле "scope_extensions".
Реализовано определение всех корректных MIME-типов для данных JSON, отмеченных в спецификации WHATWG MIME Sniffing. В дополнение к традиционным MIME-типам "application/json" и "text/json" добавлена поддержка составных MIME-типов, таких как "text/html+json" и "image/svg+json".
В API Invoker Commands добавлена команда "request-close" для принудительного закрытия диалога на базе HTML-элемента <dialog>, действие которой аналогично вызову JavaScript-метода requestClose().
В WebGPU добавлена поддержка 3D-текстур, сжатых с использованием форматов BC и ASTC. Также добавлен экспериментальный (Origin Trial) режим обеспечения совместимости, предоставляющий урезанный API WebGPU, пригодный для работы с устаревшими графическими API, такими как OpenGL и Direct3D11.
Для SVG-элементов <script> (SVGScriptElement) добавлена поддержка атрибута "async" для выполнения скриптов в асинхронном режиме.
Для усложнения пассивной идентификации экземпляра браузера в HTTP-заголовке Accept-Language теперь перечисляются не все выбранные пользователем языки, а только наиболее приоритетные языки.
Добавлен экспериментальный (Origin trials) API Prompt, предоставляющий вызовы для взаимодействия с большими языковыми моделями, позволяющие использовать в запросах текст, изображения и звуковой ввод. Результат возвращается в удобном для разбора структурированном виде. Среди примеров использования упоминаются генерация описания изображений, визуальный поиск, транскрибирование речи, классификация звуков, генерация текста по заданной инструкции и извлечение информации из текста.
В инструментах для web-разработчиков проведена работа
по устранению известных проблем c функциональностью и недоработок в интерфейсе пользователя. Благодаря проделанной работе, число открытых уведомлений о проблемах сокращено на 27%. Во встроенный AI-ассистент добавлена поддержка загрузки произвольных изображений. В панели инспектирования сети реализована возможность добавления столбцов для отображения состояния произвольных HTTP-заголовков.
Прекращена поддержка операционной системы macOS 11, для работы теперь требуется как минимум выпуск macOS 12.
В версии для Android прекращена поддержка платформ Android 8 (Oreo) и Android 9 (Pie).
Кроме нововведений и исправления ошибок в новой версии устранены 12 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 8 премий на сумму 18500 долларов США (одна премия $10000, три $2000, две $1000 и одна $500). Размер одного вознаграждения пока не определён.
Дополнительно можно отметить включение в кодовой базе, на основе которой формируется выпуск Chrome 140, режима OverrideDefaultOzonePlatformHintToAuto, активирующего автоматический выбор бэкенда в прослойке Ozone, абстрагирующей взаимодействие с графической подсистемой. Изменение позволит адаптивно активировать Wayland-бэкенд на системах с поддержкой Wayland, не привязываясь по умолчанию с бэкенду X11. Вручную включить автоматический выбор бэкенда можно и в выпуске Chrome 139 при помощи настройки "chrome://flags/#ozone-platform-hint" или флага командной строки "--ozone-platform-hint=auto".
Опубликован релиз Proxmox Virtual Environment 9.0, специализированного Linux-дистрибутива на базе Debian GNU/Linux, нацеленного на развертывание и обслуживание виртуальных серверов с использованием LXC и KVM, и способного выступить в роли замены таких продуктов, как VMware vSphere, Microsoft Hyper-V и Citrix Hypervisor. Размер установочного iso-образа 1.6 ГБ.
Proxmox VE предоставляет средства для развёртывания полностью готовой системы виртуальных серверов промышленного уровня с управлением через web-интерфейс, рассчитанный на управление сотнями или даже тысячами виртуальных машин. Дистрибутив имеет встроенные инструменты для организации резервного копирования виртуальных окружений и доступную из коробки поддержку кластеризации, включая возможность миграции виртуальных окружений с одного узла на другой без остановки работы. Среди особенностей web-интерфейса: поддержка безопасной VNC-консоли; управление доступом ко всем доступным объектам (VM, хранилище, узлы и т.п.) на основе ролей; поддержка различных механизмов аутентификации (MS ADS, LDAP, Linux PAM, Proxmox VE authentication).
Осуществлён переход на пакетную базу дистрибутива Debian 13, релиз которого ожидается 9 августа. По умолчанию задействовано ядро Linux 6.14. Обновлены версии QEMU 10.0.2, LXC 6.0.4, OpenZFS 2.3.3 и Ceph Squid 19.2.3.
Представлен новый web-интерфейс для мобильных устройств, написанный на языке Rust с использованием web-фреймворка Yew. Интерфейс автоматически применяется при доступе с мобильных устройств вместо штатного Proxmox VE GUI и позволяет быстро оценить состояние гостевых систем, задач, хранилищ и других ресурсов. Через мобильный web-интерфейс также можно изменять базовые настройки и выполнять типовые операции, такие как запуск и остановка виртуальных машин.
Добавлена поддержка нового механизма создания снапшотов виртуальных машин, который можно использовать с любыми системами хранения, поддерживающими блочное хранилище, включая SAN на базе iSCSI и Fibre Channel. Функциональность реализована через снапшоты как цепочки томов (volume), в которых том, основанный на снапшоте, сохраняет только отличия по сравнению с родительским томом. Поддержка снапшотов на основе цепочек томов также доступна для хранилищ Directory, NFS и CIFS.
Предложен новый механизм "HA affinity rules", позволяющий управлять распределением виртуальных машин в кластере и размещением ресурсов в отказоустойчивых конфигурациях. Механизм даёт возможность определять правила привязки ресурса к определённому узлу или закрепления ресурсов между собой. Например, зависящие друг от друга ресурсы, такие как сервер приложений и связанная с ним база данных, могут быть размещены вместе на одном физическом узле для минимизации задержек при обмене данными. С другой стороны, для сервисов, требующих максимальной избыточности, можно настроить разнесение обработчиков по разным узлам. Например, для обеспечения отказоустойчивости можно настроить запуск виртуальных машин, выполняющих одно и то же критически важное приложение, всегда на разных узлах.
В стеке программно определяемых сетей (SDN, Software-Defined Networking) появилась функция SDN Fabric, упрощающая настройку и управление сложными маршрутизируемыми сетями из соединённых между собой узлов. Для повышения надёжности SDN Fabric может направлять межузловой трафик по разным маршрутам и автоматически обрабатывать сбои сетевых карт. SDN Fabric упрощает управление динамически маршрутизированными сетями, которые могут использоваться для создания кластера Ceph или в качестве основы для построения VPN-сети. Из протоколов маршрутизации поддерживаются OpenFabric и OSPF.
Предоставлена возможность прозрачного обновления с ветки Proxmox VE 8.x до выпуска 9.0.
В OpenZFS реализовано добавление на лету новых дисков в существующий массив RAIDZ, что позволяет увеличить размер хранилища без остановки работы и без необходимости создания новой группы накопителей. Перераспределение избыточных данных с учётом новых дисков осуществляется автоматически.
В предлагаемом в репозитории Debian Testing (будущий релиз Debian 13) пакете StarDict, реализующем интерфейс для поиска в словарях, выявлена проблема с конфиденциальностью - в конфигурации по умолчанию приложение отправляет автоматически помещаемый в буфер обмена выделенный текст (x11 PRIMARY selection) на внешние серверы. Достаточно в любом приложении выделить отрывок текста, и он сразу отправляется без шифрования по протоколу HTTP на китайские серверы online-словарей dict.youdao.com и dict.cn. Проблема проявляется только при работе в окружениях на базе протокола X11, при использовании Wayland по умолчанию применяется изоляция буфера обмена.
Сопровождающий пакет StarDict в Debian ответил, что подобное поведение является штатным. По умолчанию в StarDict включён режим автоматического поиска в словарях выделенного текста и активированы как локальные, так и внешние словари. Серверы dict.youdao.com и dict.cn предоставляют англо-китайские словари, подключаемые через плагины, по умолчанию включаемые при установке пакета stardict-plugin, который является рекомендованной зависимостью для пакета stardict-gtk. Тем, кого подобное поведение не устраивает, рекомендовано в настройках отключить сетевые словари или функцию автоматического поиска при выделении.
Обративший внимание на проблему пользователь возразил, что подобное поведение ни при каких условиях не должно активироваться по умолчанию, так как оно приводит к утечке информации. Пользователь может выделять в приложениях текст с конфиденциальным содержимым, например, паролями и личными данными. При этом информация не только потенциально оседает в логах на серверах dict.youdao.com и dict.cn и видна их администраторам, но и становится доступна для перехвата трафика из-за использования HTTP, а не HTTPS.
Примечательно, что в 2009 году аналогичное поведение в StarDict было признано уязвимостью (CVE-2009-2260) и обращение к сетевым словарям было отключено по умолчанию. Теперь данная функциональность опять возвращена.
Аарон Баллман (Aaron Ballman), главный сопровождающий компилятор Clang и участник команд разработки стандартов WG21 (C++) и WG14 (C), начал обсуждение добавления в компилятор Clang режима усиления безопасности. Новый режим позволит разом активировать набор опций для усиления защиты по аналогии с добавленным в GCC 14 флагом "-fhardened", при котором включаются опции "-D_FORTIFY_SOURCE=3 -D_GLIBCXX_ASSERTIONS -ftrivial-auto-var-init=zero -fPIE -pie -Wl,-z,relro,-z,now -fstack-protector-strong -fstack-clash-protection -fcf-protection=full".
Отмечается, что в настоящее время ведётся работа по добавлению возможностей для усиления безопасности в стандарты C и C++, но этот процесс не быстрый, при том, что в Сlang уже доступны отдельные опции с реализацией дополнительных механизмов защиты. Реализуемые методы защиты часто приводят к отдельным несовместимостям с существующим кодом или нарушению ABI, что не позволяет активировать их по умолчанию. Кроме того, подобные опции разрознены (флаги для управления компиляцией, флаги генерации машинных инструкций, привязанные к аппаратным архитектурам, предупреждения, режимы диагностики, макросы), плохо документированы и выпадают из поля зрения многих разработчиков.
Единая настройка унифицирует включение связанных с безопасностью опций и упростит их применение. Рассматривается несколько вариантов активации режима усиленной безопасности, например, обсуждается активация через флаг "-fhardened", набор настроек "--config=hardened", отдельный драйвер (clang --driver-mode) или раздельные опции "-fhardened, -mhardened и -Whardened", привязанные к компиляции, генерации кода и выводу предупреждений. Режим может охватывать:
Возможности компилятора: -ftrivial-auto-var-init, -fPIE, -fcf-protection и т.п.
Возможности, привязанные к генерации кода для целевых платформ: -mspeculative-load-hardening, -mlvi-hardening и т.п.
Предупреждения: -Wall, -Wextra, -Werror=return-type и т.п.
Режимы усиления безопасности в стандартной библиотеке функций.
Макросы: _FORTIFY_SOURCE, _GLIBCXX_ASSERTIONS и т.п.
Требование к явному выбору используемого стандарта языка.
Отказ компилировать код с использованием устаревших стандартов C89 и C++98.
Передача дополнительных флагов компоновщику, например, для включения рандомизации адресов.
Опубликованы исходные тексты работ, победивших в двадцать восьмом конкурсе IOCCC (International Obfuscated C Code Contest), участникам которого предлагалось подготовить наиболее запутанный и трудноразбираемый код на языке Си. 28 конкурс проведён после четырёхлетнего перерыва и примечателен разрешением использовать кодировку UTF-8 в коде.
Участвующие в конкурсе работы, с одной стороны, должны препятствовать анализу кода и пониманию сути решаемой задачи, но, с другой стороны, код должен быть интересен и чем-то примечателен (работы могут быть необычно оформлены или выделять неожиданные стороны языка Си). Размер исходного кода программы не должен превышать 4096 байт, а программа должна собираться и выполнять осмысленное действие.
Помощник в решении головоломки Wordle, в которой нужно угадать пятибуквенное слово за шесть попыток (код).
Чат-бот, использующий модель llama2-7b-chat и OpenMP. Проект отмечен как самый компактный движок для выполнения больших языковых моделей (код всего 1800 байт).
На первый взгляд программа возводит в квадрат числа от 1 до 10, но на деле показывается рецепт приготовления жареного лосося. Код 15 строк и содержит манипуляции с незаметными символами Unicode.
Один из участников соревнования UIUCTF 2025, подробно разобрал, как ему удалось выполнить задание, требующее добиться исполнения своего кода на сервере, имея лишь возможность изменения содержимого текста комментария в коде.
Участники могли отправить сетевой запрос к Python-скрипту, который создавал новый Python-скрипт cо случайными именем, добавлял поступившие от пользователя данные в текст комментария, вырезав символы "\n" и "\r", и запускал этот скрипт командой "python3 имя.py". Контролируя только содержимое комментария, участник должен был извлечь строку из файла "/home/ctfuser/flag". Скрипт создавался следующим кодом:
comment = input("> ").replace("\n", "").replace("\r", "")
code = f"""print("hello world!")
# This is a comment. Here's another:
# {comment}
print("Thanks for playing!")"""
Вместо "{comment}" подставлялись данные, поступившие от участника, и в итоге запускался следующий код:
print("hello world!")
# This is a comment. Here's another:
# Данные, поступившие от участника соревнования
print("Thanks for playing!")
Задание было сформировано по мотивам уязвимости в парсере CPython, который обрабатывал символ с нулевым кодом как окончание строки (уязвимость, например, можно было использовать для скрытия вредоносных действий в тексте комментария). Проблема была устранена в выпусках CPython 3.12.0 и 3.11.4. В применяемом в конкурсе обработчике вырезались только символы "\n" и "\r", но при использовании уязвимой версии СPython участник мог использовать символ "\0" как разделитель. Тем не менее этот трюк не сработал, так как в конкурсе использовалась уже исправленная версия CPython c расчётом на то, что в парсере могут оставаться ещё какие-то похожие ошибки и участники смогут их выявить.
Успешно справившийся с заданием участник не стал искать новые уязвимости в парсере, которые бы позволили разбить строку на части, а воспользовался особенностью выполнения в Python файлов по типу их содержимого. Например, вместо исходного кода в файл с расширением ".py" можно поместить прокэшированный байткод, сохраняемый в файлах с расширением ".pyc", и подобный файл будет выполнен. В рассматриваемом конкурсе участник мог контролировать только содержимое в середине файла, поэтому не мог добавить свой заголовок для искажения MIME-типа.
Задачу удалось решить, воспользовавшись тем, что Python начиная с ветки 2.6 может исполнять содержимое ZIP-архивов для поставки Python-пакетов в сжатом виде. Как и в случае с кэшем байт-кода, наличие zip-архива определяется по содержимому, а не по расширению файла, т.е. в "файл.py" можно поместить zip-архив, и при запуске командой "python файл.py" он будет обработан как сжатый Python-пакет. При этом ZIP-архивы в Python индексируются не по заголовку в начале файла, а по секции EOCD (End of Central Directory Record) в конце файла. При наличии в архиве файла "__main__.py" этот файл запускается автоматически при прямом запуске архива командой "python архив".
Конкурсная задача была решена генерацией подобного ZIP-архива и подстановкой его в текст комментария. Для сохранения корректности структуры файла в условиях наличия в конце исходного файла вызова 'print("Thanks for playing!")' было использовано наличие в EOCD-секции области комментария, размещаемой в самом конце.