The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

·22.01.2025 Заметки Теодора Тс'о о ядре Linux, кодексе поведения, ext4, btrfs и ZFS (40 +11)
  Перевод размышлений Теодора Тс'о (Theodore Ts'o), создателя файловой системы Ext4, о разработке ext4, файловой системе BcacheFS, ядре Linux, ZFS, кодексе поведения и файловых системах в целом:

О разработке ext4.

В каждый выпуск ядра ext4 вносят вклад более полудюжины человек. В настоящее время большая часть моего времени уходит на рецензирование кода, проведение тестов и улучшение тестового приложения {kvm,gce,qemu,android}-xfstests. И я очень полагаюсь на 2-3 других разработчиков, работающих в SUSE и IBM, которые помогают мне с рецензированием кода.

О BcacheFS

Если честно, bcachefs не является полностью одиночным проектом - например, Кент был автором 72% патчей между выпусками ядра 6.11 и 6.12, в то время как из 103 патчей к ext4 за тот же период времени, я был автором ровно 0%. Это потому, что я твёрдо придерживаюсь мнения, что программирование - это командный вид спорта, и моя работа как технического руководителя заключается в том, чтобы дать возможность участникам ext4 сделать все возможное для улучшения файловой системы. Мы проводим еженедельные конференции, и Дэррик Вонг, старший разработчик XFS и бывший сопровождающий XFS, принимает участие в этих конференциях - и я, как известно, помогал ему в вопросах тестирования XFS, а Дэррик помогал мне в различных вопросах тестирования ext4 и даже рассмотрел пару патчей ext4. Мы сотрудничаем друг с другом, и это хорошо.

Я предоставляю другим людям решать, хотят ли они доверять свои данные кому-то, кто является одиноким горячим программистом, который вполне может быть более талантливым, чем я, но я дам вам подсказку - вы можете «сжульничать», привлекая команду к решению проблемы. Не обязательно делать это в одиночку. Конечно, для этого вам нужно знать, как пробудить лучшее в других, и вы должны работать вместе. И вежливое отношение друг к другу в списках рассылки не помешает.

О ядре, CoC, возможностях и будущем ext4

Ext4 действительно получает некоторые новые функции, но это те, которые компании готовы финансировать, потому что окупаемость разработки функции имеет смысл с точки зрения затрат и выгод. Так, например, fscrypt и каталоги без учёта регистра были функциями, полезными для Android и Chrome OS, и были профинансированы, по крайней мере частично, этими группами разработчиков (Steam также беспокоился о сворачивании регистра и поддержал одного из инженеров). Мы хотим добавить поддержку записи без разрыва (untorn), потому что это улучшит производительность баз данных на облачных эмулируемых блочных устройствах, где можно гарантировать 16k атомарных записей, что позволит избавиться от двойной буферизации в MySQL и PostgreSQL.

(На самом деле Amazon и Google могут сделать это в своих собственных СУБД-продуктах, сделав предположения о том, как работают Amazon EBS и Google Persistent Disk, но мы хотим сделать это более общим способом, который будет более поддерживаемым в долгосрочной перспективе). Это менее привлекательно, чем такие вещи, как reflinks, но окупаемость инвестиций гораздо легче обосновать, как потому, что затраты ниже (меньше работы по разработке, тестированию и квалификации для корпоративного развёртывания), так и потому, что преимущества гораздо легче оценить количественно. Такие вещи, как «я могу сэкономить стоимость зарплаты XX штатных инженеров-программистов в течение пяти лет», гораздо легче сделать для такого рода функций повышения производительности.

В отличие от этого, reflinks - это весело, но я не смог найти клиента, готового оплатить расходы на разработку, или компанию, которая считает, что их клиенты будут покупать больше их продукта, если они добавят reflinks в ext4. Это может показаться ужасно корпоративным, но есть история о том, как инженеры ZFS начали проект с нуля, не спросив разрешения у руководства и не получив предложений от отдела продаж, и представили Sun то, что фактически было свершившимся фактом.

Звучит здорово, но если вспомнить, что в итоге Sun стала терять деньги, пока не была вынуждена продать себя другой компании, и фактически инженерная организация, поддерживающая ZFS, больше не существует. Примерно в то время, когда была анонсирована ZFS, я участвовал в исследовании всей компании на предмет того, имеет ли смысл инвестировать в функции файловой системы для AIX и Linux - и мы пришли к выводу, что нет, окупаемость инвестиций невелика, а новые функции файловой системы не приведут к увеличению числа клиентов, покупающих оборудование, программное обеспечение или системы IBM. Возможно, для IBM настали тяжёлые времена, но она все ещё существует, а Sun - нет.

Примерно в это же время представители нескольких Linux-компаний собрались вместе, чтобы придумать, как Linux будет конкурировать с ZFS. Именно на этой встрече была выдвинута идея, что btrfs будет долгосрочным ответом, а ext4 - краткосрочным решением, которое обеспечит поддержку таких вещей, как изменение размера в режиме реального времени, 64-битные номера блоков и другие вещи, которые были в традиционных Legacy Unix OS и которых не было в ext3.

На той встрече меня попросили определить, что потребуется для создания совершенно новой файловой системы. Я провёл исследование, посмотрев, сколько усилий потребовалось для создания таких файловых систем, как GPFS и JFS от IBM, advfs от Digital, оценил, сколько потребовалось Sun для создания ZFS и доведения этой файловой системы до состояния полностью готовой к производству. Ответ, который я получил, был примерно 100 человеко-лет, с одной низкой оценкой в 50 человеко-лет и высокой оценкой в 200 человеко-лет (но это было для GPFS, которая была кластерной файловой системой, и поэтому намного сложнее).

Я сообщил об этом на совещании, и некий старший инженер из Intel сказал: «Нет, не говорите об этом руководителям, потому что они никогда не одобрят проект! Скажите им, что btrfs будет готов через 18 месяцев». Я предоставляю людям самим решать, когда btrfs достигнет статуса «готовности к корпоративному использованию», особенно для тех новых привлекательных расширенных функций, которые должны были конкурировать с ZFS, но я не думаю, что подлежит обсуждению то, что это произошло не через 18 месяцев.

И даже до того, как Sun распалась, многие компании, приславшие своих представителей на встречу, отказались от участия инженеров в работе над btrfs, и это, конечно, не помогло. Но, вероятно, это было связано с тем, что компании - рациональные организации, принимающие собственные решения об окупаемости инвестиций, и финансирование новой файловой системы не имело такого же смысла, как рассказывать людям, что у Linux будет ответ на ZFS.

Оглядываясь назад, можно сказать, что, хотя у ZFS и были эти действительно классные функции, их было недостаточно, чтобы заставить большинство пользователей выбрать Solaris по сравнению с покупкой гораздо более дешёвых платформ x86 и установкой Linux. И к тому времени, когда Sun решила попробовать стратегию OpenSolaris и Solaris x86, было слишком поздно. Сетевые эффекты были огромны, а стратегия x86 не давала ответа на вопрос, как одна компания, Sun, могла платить зарплату всем суперталантливым инженерам, работавшим над Solaris. Покупка x86-сервера за 5000 долларов не даёт большой рентабельности продаж по сравнению с сервером SunFire E10k Sparc за 100000 долларов, который Sun называла «точкой» в «dot Com».

Суть в том, что инженерная деятельность в реальном мире - это компромисс, и бизнес-реалии являются частью этого компромисса. Я не извиняюсь за то, что предпочитаю есть еду, и что я хочу зарабатывать достаточно денег, чтобы когда-нибудь выйти на пенсию. А это, в свою очередь, означает, что я должен хорошо понимать, как я приношу работодателю пользу, по крайней мере, в 10 раз превышающую мою зарплату. Если я смогу сделать это, продолжая работать с открытым исходным кодом и помогая другим компаниям зарабатывать деньги, чтобы они были готовы внести свой вклад в ext4, что ж, это часть вызова и то, почему я люблю работать с открытым исходным кодом.

И, возвращаясь к Кодексу поведения, скажу, что почти все мейнтейнеры основных файловых систем поддержали Кодекс не из-за каких-то вялых либеральных соображений. Это потому, что нам нужен каждый инженер, готовый внести свой вклад в наш проект, и большинство из нас видели людей, которые отказывались работать в Linux и переходили на другие операционные системы (я знаю одного человека, который перешёл на Windows и был ценным разработчиком ядра Linux в IBM Linux Technology Center) или работали над внутренними проектами, но не над тем, что требовало взаимодействия с LKML, из-за токсичной среды нескольких людей в списке рассылки.

В некоторых случаях опасения были необоснованными; например, Линус кричал на старшего разработчика, который действительно должен был знать лучше и с которым в большинстве случаев Линус встречался лично, и у них были уже сложившиеся отношения. Проблема в том, что новички не знали этого и пугались - «а вдруг Линус унизит меня на публике так же, как он поступил со Стивом», не понимая, что на практике этого не произойдёт. Вот почему у нас есть CoC; это не для нас, старших инженеров, а для поддержки более молодых инженеров в наших командах, которых мы хотим обучать, чтобы они в какой-то момент заменили нас, когда придёт время уходить на пенсию, или нас собьёт автобус, или мы иным образом покинем этот бренный мир.

Не забывайте о 50-100 человеко-лет работы над созданием файловой системы, готовой к использованию в корпоративной среде. Нам нужны все инженеры, которых мы можем привлечь, и многие из нас выполняют дополнительную работу в свободное время, потому что нам не все равно. Создание высококачественной файловой системы - это командная работа, и нам нужен каждый талантливый инженер, которого мы можем заполучить. Даже если один инженер - супер 10-кратный программист, если в итоге он отпугнёт кучу других инженеров, которые могут работать над тестированием, настройкой производительности и т.д., это просто не стоит того, чтобы позволить кому-то быть мерзавцем.

  1. OpenNews: Автора BcacheFS временно отстранили от разработки ядра Linux из-за нарушения кодекса поведения
  2. OpenNews: Драйвер для файловой системы Ext2 объявлен устаревшим
  3. OpenNews: Для файловой системы Ext4 представлена поддержка шифрования
  4. OpenNews: Теодор Тцо отказался от предложений по стабилизации ФС Ext4 через создание Ext5
  5. OpenNews: Один из ключевых разработчиков Python отстранён на три месяца из-за нарушения кодекса поведения
Обсуждение (40 +11) | Автор: Artem S. Tashkinov |
·22.01.2025 Релиз мультимедийной библиотеки SDL 3 (76 +15)
  Представлен релиз библиотеки SDL 3.2.0 (Simple DirectMedia Layer), который помечен как первый официальный стабильный выпуск ветки SDL 3. Библиотека нацелена на упрощение написания игр и мультимедийных приложений, и предоставляет такие возможности, как аппаратно-ускоренный вывод 2D- и 3D-графики, обработка ввода, воспроизведение звука и вывод 3D через OpenGL, OpenGL ES, Metal, Direct3D или Vulkan. Код написан на языке Си и распространяется под лицензией Zlib. Предоставляются обвязки для использования SDL в проектах на различных языках программирования.

Основные новшества:

  • Существенно улучшена поддержка протокола Wayland, который теперь активирован по умолчанию в окружениях, предоставляющих одновременную поддержку Wayland и X11, и поддерживающих расширения протокола fifo-v1 и commit-timing-v1.
  • Задействован по умолчанию мультимедийный сервер PipeWire, который помечен как более приоритетный, чем PulseAudio.
  • Добавлена поддержка видеозахвата с web-камер (при наличии PipeWire).
  • Добавлена возможность использования графических планшетов и цифровых перьев.
  • Значительно улучшена поддержка экранов с высокой плотностью пикселей (High DPI).
  • Добавлена поддержка цветовых пространств и возможность управления несколькими цветовыми пространствами. Реализована начальная поддержка HDR.
  • Полностью переработан код для работы со звуком. Добавлена поддержка логических звуковых устройств (разные части программы могут работать со своим отдельным звуковым устройством). Добавлены средства для работы со звуковыми потоками, преобразования потоков, изменение частоты дискретизации, микширования, управления буферизацией, изменения тона и громкости. Реализована автоматическая обработка подключения или отключения звуковых устройств, а также смена звукового устройства по умолчанию.
  • В API 2D-отрисовки добавлен бэкенд для отрисовки через API Vulkan. Добавлены функции для работы с поверхностями через API Vulkan.
  • Проведена большая чистка устаревших возможностей, потерявших актуальность в современных реалиях. Например, прекращена поддержка OpenGL ES 1.0 и DirectFB, удалён код для работы на устаревших платформах, таких как QNX, Pandora, WinRT и OS/2.
  • Предоставлена возможность организации работы программы с использованием callback-вызовов и определения цикла обработки событий в функции main().
  • В API внесены изменения, нарушающие совместимость. Унифицированы правила наименования API - вызовы в разных подсистемах теперь именуются с использованием одной общей схемы.
  • Добавлены новые API:
    • GPU API - кросс-платформенный доступ к GPU и возможностям 3D-рендеринга.
    • Dialog API - использование диалогов для выбора/открытия/сохранения файлов и каталогов.
    • Filesystem API - операции с файловой системой, управление каталогами и поиск файлов.
    • Storage API - абстрактный программный интерфейс для доступа к разным системам хранения данных.
    • Camera API - доступ к web-камерам.
    • Pen API - работа с графическими планшетами и цифровыми перьями, такими как Wacom и Apple Pencil.
    • Properties API - хранение параметров в формате ключ/значение.
    • Process API - запуск дочерних процессов и организация канала связи с ними.
    • App metadata API - указание метаданных о программе, которые могут использоваться при выводе сведений о приложении (например, в меню macOS в блоке About).
  • Заменён API для работы с прозрачными окнами.
  • Расширен API для работы с буфером обмена - помимо текста через буфер обмена теперь можно передавать данные и других типов. Добавлена возможность помещения в буфер обмена данных в нескольких форматах.
  • Расширены возможности для обработки ввода с клавиатуры. Добавлена возможность настройки виртуальных клавиатур для iOS и Android.
  • Значительно улучшена и переработана документация по API. Добавлена подборка примеров программ, которые можно запускать прямо в браузере.

Одновременно опубликован релиз слоя совместимости sdl2-compat, который предоставляет API, совместимый с бинарными сборками и исходным кодом SDL 2.x, но работающий поверх SDL 3. Пакет sdl2-compat может выступать в качестве полной замены SDL 2, и пригоден для организации выполнения программ, написанных для SDL 2, используя возможности ветки SDL 3.

Также доступен корректирующий выпуск SDL_sound 2.0.4, надстройки над библиотекой SDL3 c функциями для декодирования звуковых форматов, таких как MP3, WAV, OGG, FLAC, AIFF, VOC, MOD, MID и AU. Для декодирования звуковых форматов в SDL_sound не применяются внешние библиотеки - все необходимые для декодирования исходные тексты входят в основной состав. Предоставляемый API позволяет получать звуковые данные из файлов или в форме звуковых потоков из одного или нескольких внешних источников. Поддерживается прикрепление своих обработчиков звука.

  1. OpenNews: В библиотеке SDL3 отменяют переход на Wayland по умолчанию
  2. OpenNews: Выпуск мультимедийной библиотеки SDL 2.30.0
  3. OpenNews: Выпуск мультимедийной библиотеки SDL 2.28.0. Переключение внимания на разработку SDL 3.0
  4. OpenNews: Первый выпуск sdl12-compat, слоя совместимости с SDL 1.2, работающего через SDL 2
  5. OpenNews: Выпуск библиотеки SDL_sound 2.0
Обсуждение (76 +15) | Тип: Программы |
·21.01.2025 Стабильный релиз Wine 10.0 (95 +57)
  После года разработки и 29 экспериментальных версий представлен стабильный релиз открытой реализации Win32 API - Wine 10.0, который вобрал в себя более 6000 изменений. Из ключевых достижений в новой версии выделяется полная поддержка архитектуры ARM64EC, масштабирование на экранах с высокой плотностью пикселей, включение по умолчанию драйвера Wayland, реализация панелей для настройки экрана и джойстика, альтернативный мультимедийный бэкенд на базе FFmpeg, драйвер Bluetooth, поддержка Vulkan 1.4, возможность эмуляции переключения видеорежимов.

В Wine подтверждена полноценная работа 5372 программ для Windows (год назад 5336, два года назад 5266, три года назад 5156), ещё 4435 программ (год назад 4397, два года назад 4370, три года назад 4312) прекрасно работают при дополнительных настройках и внешних DLL. У 4020 программ (год назад 3943, два года назад 3888, три года назад 3813) наблюдаются небольшие проблемы в работе, которые не мешают использованию основных функций приложений.

Ключевые новшества Wine 10.0:

  • ARM64
    • Обеспечена полная поддержка архитектуры ARM64EC (ARM64 Emulation Compatible), уровень поддержки в Wine которой достиг паритета с архитектурой ARM64. Архитектура ARM64EC разработана для упрощения портирования на системы ARM64 приложений, изначально написанных для систем x86_64, и позволяет выполнять в окружении ARM64 отдельные модули с кодом x86_64 при помощи эмулятора.
    • Реализована полная поддержка формата PE-файлов ARM64X, который позволяет совмещать в одном исполняемом файле код для архитектур ARM64EC и ARM64. Для сборки Wine в формате ARM64X необходимо установить LLVM из Git (необходимая функциональность войдёт в состав релиза LLVM 20) и при запуске скрипта "configure" указать опцию "--enable-archs=arm64ec,aarch64".
    • Реализован интерфейс для эмуляции 64-разрядных систем x86. При использовании ARM64EC сам Wine выполняется как есть, а эмуляция применяется только для кода приложений x86-64. Библиотека с эмулятором пока не включена в основной состав Wine, но для запуска кода x86-64 в окружении ARM64 можно использовать внешний эмулятор FEX, собранный с поддержкой ARM64EC.
    • Для поддержки ARM64 необходимо использование в системе страниц памяти размером 4КБ, как того требует ABI Windows (запуск в окружениях с ядрами Linux, использующими страницы памяти 16K или 64K пока не поддерживается).
  • Графическая подсистема
    • Реализовано более точное масштабирование на экранах с высокой плотностью пикселей (High-DPI). Обеспечена поддержка режима DPI Awareness для организации отображения приложений на экранах с высокой плотностью пикселей, с учётом того поддерживает приложение адаптацию к изменению DPI или нет (приложения, которые не учитывают DPI, масштабируются автоматически). Добавлены опции для переопределения поддержки High-DPI в привязке к отдельным приложениям или префиксам Wine.
    • В драйвер для графического API Vulkan добавлена поддержка спецификации Vulkan 1.4 (в Wine 9.0 поддерживался Vulkan 1.3.272). Добавлена поддержка расширений Vulkan для кодирования и декодирования видео.
    • При использовании бэкенда X11 реализована возможность отрисовки дочерних окон Vulkan для приложений, использующих подобные окна для вывода 3D-контента (ранее подобная возможность была доступна только для OpenGL).
    • В библиотеку GdiPlus добавлена поддержка механизма связывания шрифтов ("Font Linking"), позволяющего при отображении текста задействовать несколько шрифтов, если отсутствуют шрифты по отдельности охватывающие все встречающиеся в тексте символы.
  • Wayland
    • В конфигурации по умолчанию активирован драйвер winewayland.drv, позволяющий использовать Wine в окружениях на базе протокола Wayland без применения XWayland и компонентов X11. Wine запускает приложения по умолчанию на Wayland напрямую только если XWayland недоступен, в противном случае запуск с использованием XWayland остаётся приоритетным. Для принудительного включения Wayland можно использовать переменную окружения DISPLAY, либо добавить ключ в реестр, создав файл file.reg:
      
         Windows Registry Editor Version 5.00
         [HKEY_CURRENT_USER\Software\Wine\Drivers]
         "Graphics"="wayland"
      
      и применив его командой:
         $ WINEPREFIX=/путь/до/префикса wine regedit /путь/до/file.reg
      
    • В драйвер winewayland.drv добавлена поддержка OpenGL и пиксельных буферов (pBuffer).
    • Решены проблемы с позиционированием всплывающих окон в окружениях на базе Wayland.
    • При использовании Wayland реализована поддержка автоповтора нажатия при удержании клавиш.
  • Интеграция с рабочим столом
    • Добавлен экспериментальный механизм эмуляции "modesetting", позволяющий эмулировать переключение видеорежимов без фактического изменения настроек экрана. Видимость изменения разрешения экрана без переключения видеорежима создаётся через расширение и масштабирование окон.
    • Добавлен новый апплет Desktop Control Panel (desk.cpl) с реализацией интерфейса управления настройками дисплея (например, можно изменять виртуальное разрешение десктопа или настраивать эмулируемые параметры дисплея).
    • Добавлена возможность сброса настроек экрана в значения по умолчанию в случае невозможности восстановить состояние после аварийного завершения процесса.
    • Добавлена поддержка отключения показа пиктограмм в системном лотке (в "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" следует указать "NoTrayItemsDisplay=1").
    • Добавлена поддержка отключения оболочек (Shell launcher) в режиме десктопа (в "HKLM\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer" следует указать "NoDesktop=1").
  • Direct3D
    • Для отрисовки с использованием OpenGL теперь требуется поддержка GLSL 1.20, а также расширений EXT_framebuffer_object и ARB_texture_non_power_of_two. Поддержка старого бэкенда ARB shader и настройки OffscreenRenderingMode прекращена.
    • Для Direct3D 9 и более старых версий добавлен графический конвейер фиксированных функций (в старых Direct3D предоставлялись только предопределённые графические операции, которые нельзя было изменять), реализованный при помощи языка шейдеров HLSL и позволяющий эмулировать фиксированные функции при отрисовке через API Vulkan или OpenGL.
    • При отрисовке с использованием Vulkan задействованы Vulkan-расширения для динамического изменения состояния графического конвейера, позволяющие сократить подвисания в играх.
    • Добавлен альтернативный бэкенд glsl-vkd3d для шейдеров GLSL, использующий vkd3d-shader.
    • Предоставлена начальная поддержка компиляции эффектов Direct3D, используя vkd3d-shader.
    • В библиотеке D3DX9 реализована возможность генерации MIP-текстур (MipMap) при загрузке объёмных текстур. Добавлена поддержка форматов представления цвета 64bpp RGBA и 48bpp RGB в изображениях PNG, а также форматов X8L8V8U8, A2W10V10U10, A8P8, V16U16 и Q16W16V16U16.
  • Звук и видео
    • В качестве альтернативы бэкенду на базе GStreamer реализован новый мультимедийный бэкенд, основанный на использовании FFmpeg и пригодный для обеспечения работы фреймворка Media Foundation. Для включения альтернативного бэкенда в секции реестра "HKCU\Software\Wine\MediaFoundation" следует указать "DisableGstByteStreamHandler=1".
    • Улучшена реализация API Media Foundation, которая теперь лучше сочетается с приложениями, зависящими от компонентов демультиплексирования и декодирования.
    • В API DirectMusic добавлена поддержка загрузки файлов MIDI.
  • Устройства ввода
    • Добавлена начальная версия драйвера Bluetooth.
    • Добавлен апплет Joystick Control Panel (joy.cpl) c реализацией настроек для джойстика.
    • Внесены улучшения, связанные с устройствами управления указателем (тачпады, мыши), использующими протокол HID (Human Interface Device). Добавлен драйвер mouhid.sys для HID-устройств. Реализован корректный разбор составных устройств ввода и обеспечена передача информации о них в Windows-приложения, как о раздельных устройствах.
    • Для бэкенда X11 добавлена поддержка сенсорных экранов и реализована возможность использования режима мультитач через обработку сообщений WM_POINTER* (WM_POINTERENTER, WM_POINTERLEAVE и т.п.).
    • Реализовано размещение некоторых внутренних структур библиотеки user32 в разделяемой памяти, что повысило производительность и снизило нагрузку на Wine Server.
    • В winex11 добавлена поддержка обработки событий XInput2 в привязке к отдельным окнам.
    • Реализована корректная поддержка клавиатур с раскладкой Dvorak.
  • Ядро (интерфейсы ядра Windows)
    • Добавлена поддержка повышения привилегий процессов (процессу, изначально запущенному под обычным пользователем, могут быть предоставлены привилегии администратора). При создании серверных процессов (msi action server), а также процессов, вызывающих функции RtlCreateUserProcess() и CreateProcessInternal(), по умолчанию задействован ограниченный токен администратора.
    • При получении информации о метках дисков по возможности теперь используется обращение к системным сервисам через DBus, вместо попытки прямого доступа к устройству.
    • Однонаправленный механизм межпроцессного взаимодействия (IPC) Mailslots теперь реализован непосредственно в Wine server, что позволило добиться полной поддержки семантики Windows.
    • Реализовано ожидание событий последовательного порта в асинхронном режиме.
    • Добавлена полная поддержка процессорных расширений XSTATE в контекстах потока, что позволило использовать новые векторные расширения, такие как AVX-512.
  • Встроенные приложения
    • Переписан движок обработки входных данных, используемый в командном интерпретаторе cmd.exe. В cmd.exe добавлена поддержка операций "||" и "&&".
    • В утилиту findstr добавлена поддержка регулярных выражений и поиска без учёта регистра символов.
    • В утилиты regsvr32 и rundll32 добавлена возможность регистрации модулей ARM64EC.
    • Добавлены утилиты: sort для сортировки входных данных, fc для сравнения файлов и where для поиска файлов.
    • В приложении wmic реализован интерактивный режим работы.
    • В Explorer добавлена опциональная поддержка стартового меню и панели инструментов. Обеспечен запуск explorer.exe с урезанными правами доступа.
  • Инструменты для разработки
    • В winebuild добавлена опция "-marm64x" для генерации гибридных библиотек ARM64X.
    • В winegcc добавлена опция "-marm64x", обеспечивающая сборку для ARM64X.
    • В файлах, генерируемых с использованием языка описания интерфейса IDL (Interface Definition Language), задействованы компоненты, полностью поддерживающие выполнение в режиме интерпретации.
    • В компилятор языка описания интерфейса IDL (Interface Definition Language) добавлена поддержка генерации библиотек типов (TypeLib) в старом формате (SLTG).
    • В утилиту winedump добавлена поддержка сохранения дампов таблиц minidump, информации об исключениях C++ и ресурсов typelib.
  • Разное
    • Улучшена поддержка протокола обмена ключами Диффи-Хеллмана (DH). Добавлена возможность настройки и получения параметров DH. Реализованы обработчики для создания пар из открытого и закрытого ключей.
    • Обеспечено использование добавочного заполнения OAEP (Optimal Asymmetric Encryption Padding) вместе с алгоритмом RSA.
    • В API DirectPlay реализована поддержка сетевых сеансов.
    • Налажена обработка состояний асинхронного ввода/вывода при работе в режиме WoW64 (64-bit Windows-on-Windows), позволяющем выполнять 32-разрядные Windows-приложения в 64-разрядных Unix-системах.
    • Добавлена поддержка загрузки ODBC-драйверов к СУБД, собранных для Windows.
    • Для платформы ARM реализована полная поддержка RPC/COM, C++ RTTI (Run-Time Type Information) и исключений C++.
    • В C runtime в ANSI-функциях реализована поддержка кодировки UTF-8.
    • Расширены возможности движка MSHTML. Добавлена поддержка прототипов и конструкторов объектов. В JavaScript-движок добавлен новый интерфейс связывания объектов для MSHTML. Встроенные функции MSHTML преобразованы в корректные объекты JavaScript. Улучшен сборщик мусора для JavaScript, который теперь охватывает все контексты выполнения скрипта в потоке. Добавлена поддержка JavaScript-объектов ArrayBuffer и DataView.
    • В систему непрерывной интеграции на базе Gitlab добавлена поддержка статического анализа с использованием Clang и отчётов о прохождении тестов JUnit.
    • В отладчике WineDb функциональность для дизассемблирования машинного кода переведена на использование библиотеки Capstone (в состав кодовой базы Wine встроен выпуск Capstone 5.0.3). В отличие от ранее используемой библиотеки Zydis, в Capstone поддерживается дизассемблирование не только для архитектур x86/x86-64, но и для ARM/ARM64, LoongArch и RISC-V.
    • Обновлены до новых версий компоненты: Vkd3d 1.14, Faudio 24.10, FluidSynth 2.4.0, LDAP 2.5.18, LCMS2 2.16, LibJpeg 9f, LibMPG123 1.32.9, LibPng 1.6.44, LibTiff 4.7.0, LibXml2 2.12.8, LibXslt 1.1.42 и Zlib 1.3.1.

  1. OpenNews: Стабильный релиз Wine 9.0
  2. OpenNews: Стабильный релиз Wine 8.0
  3. OpenNews: Стабильный релиз Wine 7.0
  4. OpenNews: Стабильный релиз Wine 6.0
  5. OpenNews: Стабильный релиз Wine 5.0
Обсуждение (95 +57) | Тип: Программы |
·20.01.2025 Открыт инструментарий для программируемых Ethernet-коммутаторов Intel Tofino (33 +12)
  Компания Intel открыла инструментарий, позволяющий создавать собственные приложения для обработки пакетов в программируемых Ethernet-коммутаторах серии Tofino. Под лицензией Apache 2.0 открыт исходный код бэкенда к компилятору p4c и компонентов среды разработки Intel P4 Studio, таких как драйверы, модель симуляции коммутатора, сервер и клиент для протокола BF Runtime. Для создания приложений применяется предметно-ориентированный язык программирования P4 (Programming Protocol-independent Packet Processors), предназначенный для определения логики обработки пакетов в сетевых устройствах, таких как сетевые карты, коммутаторы, маршрутизаторы и межсетевые экраны.

Опубликованный бэкенд позволяет транслировать программы на языке P4 в представление, пригодное для установки на коммутаторах серии Intel Tofino. Благодаря этому пользователи коммутаторов могут создавать приложения, расширяющие штатную функциональность, изменяющие логику работы или адаптирующие устройство к специфике своих сетей.

Программы на языке P4 компилируются в представления для целевых платформ, которые могут быть как аппаратными (FPGA, программируемые ASIC), так и программными (x86, BPF). Вместе с кодом для установки на целевые системы компилятор генерирует runtime для управления приложением с использованием протоколов Protobuf/gRPC и API P4Runtime.

Типовая логика работы программ сводится к классификации пакетов по их заголовкам и выполнению действий над входящими пакетами, таких как перенаправление, отбрасывание, изменение TTL и замена полей. Язык не привязан к сетевым протоколам и вместо вшитой поддержки типовых протоколов, таких как IP, Ethernet, TCP и VxLAN, предоставляет разработчикам возможность определения любых протоколов в привязке к компилируемым приложениям (разработчик прикрепляет описание форматов заголовков и полей протокола).

Кроме опубликованного бэкенда для коммутаторов Intel Tofino проектом P4 предоставляется бэкенд для компиляции P4-приложений в код на языке Си, который затем может быть скомпилирован в формат, пригодный для исполнения в виртуальной машине eBPF внутри ядра Linux. Проектом также развивается открытый симулятор коммутатора, который можно использовать для проведения экспериментов в виртуальной сети Mininet, и бэкенд для компиляции P4-программ для симулятора.

  1. OpenNews: Facebook открыл программные стеки для BMC-контроллеров и сетевых коммутаторов
  2. OpenNews: Компания Microsoft открыла код Linux-системы для сетевых коммутаторов
  3. OpenNews: Выпуск DentOS 2.0, сетевой операционной системы для коммутаторов
  4. OpenNews: Стек протоколов маршрутизации FRRouting и проект DPDK перешли под крыло Linux Foundation
  5. OpenNews: Выпуск DPDK 18.02, фреймворка для высокопроизводительных сетевых приложений
Обсуждение (33 +12) | Тип: К сведению |
·20.01.2025 Релиз ядра Linux 6.13 (174 +32)
  После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 6.13. Среди наиболее заметных изменений: режим ленивого вытеснения в планировщике задач, поддержка атомарной записи в XFS и Ext4, механизм "multigrain timestamps", адаптивный режим включения полинга в сетевой подсистеме, возможность сборки с оптимизациями AutoFDO, поддержка механизма защиты ARM65 Guarded Control Stack, изоляция виртуальных машин при помощи расширения ARM CCA, раздельные стеки в BPF, удаление ReiserFS, драйвер virtual-cpufreq, netlink API net-shaper, режим монтирования tmpfs учёта регистра символов, поддержка POSIX-расширений в SMB3, драйвер AMD Cache Optimizer.

В новую версию принято 14172 исправлений от 2086 разработчиков, размер патча - 46 МБ (изменения затронули 15375 файлов, добавлено 598707 строк кода, удалено 406294 строк). В прошлом выпуске было 14607 исправлений от 2167 разработчиков, размер патча - 37 МБ. Около 52% всех представленных в 6.13 изменений связаны с драйверами устройств, примерно 13% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 11% связано с сетевым стеком, 4% - с файловыми системами и 3% c внутренними подсистемами ядра.

Основные новшества в ядре 6.13:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Добавлен механизм "multigrain timestamps", позволяющий получать информацию о времени изменения или доступа к файлам c более чем с миллисекундой точностью, но без негативного влияния на производительность. Повышение точности меток приводит к дополнительным накладным расходам из-за увеличения интенсивности записи метаданных на диск, поэтому в предложенной реализации более точные метки создаются не для всех файлов, а только для тех, для которых процессы запрашивают подобные метки через вызов getattr().
    • Добавлена поддержка атомарных операций записи, при которых запись данных, размер которых превышает размер сектора, осуществляется атомарно на устройствах хранения, предоставляющих подобную возможность. В настоящее время атомарная запись реализована для XFS, Ext4 в режиме O_DIRECT (Direct I/O) и md RAID 0/1/10.
    • Предложен новый механизм подсчёта ссылок для файлов, обеспечивающий прирост производительности на 3-5% в рабочих нагрузках, имеющих более 255 потоков.
    • Удалена реализация файловой системы ReiserFS, которая в позапрошлом году была объявлена устаревшей.
    • Добавлен sysctl-параметр "fs.dentry-negative" для выставления в VFS политики очистки записей "dentry" (внутреннее представление элементов каталогов) после удаления связанных с ними файлов. Для каких-то видов нагрузки оптимальнее оставлять подобные записи об удалённых файлах, а для каких-то - удалять, поэтому в ядре предоставлена возможность выбора (по умолчанию "dentry" автоматически не удаляются).
    • В системный вызов statmount() добавлен флаг STATMOUNT_OPT_ARRAY для возвращения списка опций файловой системы в виде массива из строк, завершающихся нулевым символом и не использующих экранирование "\000". Добавлена поддержка возвращения подтипа ФС (fs_subtype, для определения использования FUSE), опций безопасного монтирования и исходного суперблока (sb_source).
    • В OverlayFS предоставлена возможность указания слоёв через файловые дескрипторы, а не имена файловых путей.
    • В файловую систему tmpfs добавлена опция монтирования "casefold" для работы без учёта регистра символов и опция "strict_encoding" для блокирования создания файлов с именами, содержащими некорректные символы UTF-8.
    • Предложен новый набор системных вызовов для управления расширенными атрибутами файлов: setxattrat(), getxattrat(), listxattrat() и removexattrat(). В отличие от системных вызовов setxattr(), getxattr(), listxattr() и removexattr() новые варианты требуют указания файлового дескриптора каталога, относительно которого осуществляется поиск файлового пути.
    • В Btrfs добавлена ioctl-операция BTRFS_IOC_SUBVOL_SYNC_WAIT, включающая ожидание завершения очистки подразделов, что позволяет выполнить команду "btrfs subvolume sync" непривилегированным пользователем, не имеющим доступа к ioctl SEARCH_TREE (полезно в приложениях резервного копирования, очищающих подразделы). Добавлена ioctl-операция ENCODED_READ для чтения через io_uring закодированных данных, например, для чтения напрямую сжатых экстентов без распаковки. Продолжена работа по переходу на использование фолиантов страниц памяти (page folios). Сокращено возникновение конкурирующих блокировок ("lock contention") при поиске встроенных обратных ссылок и при переборе буферов экстентов. Повышена эффективность сжатия карты экстентов.
    • В файловой системе EROFS (Extendable Read-Only File System), предназначенной для использования на разделах, доступных в режиме только для чтения, реализована возможность использования в системном вызове lseek() опций SEEK_HOLE и SEEK_DATA.
    • В F2FS добавлена поддержка отражения устройств ("device aliasing"), позволяющая временно зарезервировать область в F2FS для использования части блочного устройства в другой ФС. После завершения внешней операции зарезервированную область можно вернуть в F2FS. Например, можно создать ФС командой "mkfs.f2fs -c /dev/[email protected] /dev/vdb", после чего содержимое устройства /dev/vdc будет зарезервировано и отражено в файл vdc.file и раздел /dev/vdc можно использовать для своих нужд, например, отформатировать под другую ФС. Для возвращения зарезервированного содержимого достаточно удалить файл vdc.file.
    • В XFS включена поддержка квот для realtime-устройств. Добавлена поддержка директории с метаданными (metadata directory), в которой размещаются все inode с метаданными.
    • В механизме FUSE включена возможность динамического изменения максимального числа страниц (FUSE_MAX_MAX_PAGES), используя "sysctl fs.fuse.max_pages_limit". В работе задействованы фолианты страниц памяти (page folios).
    • В SMB реализована поддержка POSIX-расширений для SMB3, необходимых для хранения специальных типов файлов, таких как fifo, файлы устройства и символические ссылки. Добавлена возможность монтирования раздела с альтернативным паролем, применяемым при ротации паролей. Добавлена новая опция монтирования "cifs.upcall" для определения пространства имён. Обеспечено распознавание файлов символьных и блочных устройств, созданных в Windows NFS Server. Добавлена поддержка символических ссылок в стиле WSL (Windows Subsystem for Linux).
    • Файловые системы UBIFS, ADFS, BEFS, HFS, HFSPLUS, HPFS, JFS и ECRYPTFS переведены на использование нового API монтирования разделов.
    • Файловые системы и ECRYPTFS, UFS и NILFS2 переведены на использование фолиантов страниц памяти (page folios).
  • Память и системные сервисы
    • В планировщике реализована модель ленивого вытеснения задач (PREEMPT_LAZY, lazy preemption), которая соответствует модели полного вытеснения ("full preemption") для realtime-задач (RR/FIFO/DEADLINE), но задерживает вытеснение обычных задач (SCHED_NORMAL) до границы тика. Указанная задержка приводит к сокращению случаев вытеснения держателей блокировок, что позволяет приблизить производительность к конфигурациям, использующим модель добровольного вытеснения (voluntary preemption). Таким образом, новая модель позволяет сохранить возможности полного вытеснения в отношении realtime-задач, но сводит к минимуму проседание производительности для обычных задач. Кроме того, новая модель упрощает логику операций вытеснения задач в ядре, благодаря исключению из процесса планирования обработчиков, находящихся в других компонентах ядра (вне планировщика задач).
    • При сборке компилятором Clang предоставлена возможность использования оптимизаций AutoFDO и добавлена конфигурация для инструментария Propeller. Оптимизация AutoFDO (Auto-Feedback-Directed Optimization) использует результаты профилирования c информацией о частоте выполнения различных участков кода для повышения производительности часто выполняемых операций. Propeller используется для накопления статистики о выполнении кода для её дальнейшего использования компилятором при принятии решений, связанных с оптимизацией. Проведённое тестирование показало снижение задержек на 10% при сборке с AutoFDO.
    • В системный вызов madvise(), предоставляющий средства для оптимизации управления памятью процесса, добавлен флаг MADV_GUARD_INSTALL для подстановки в указанный диапазон адресов сторожевых страниц памяти (guard page), обращение к которым вызывает исключение и аварийное завершение процесса (SIGSEGV). По сравнению с маппингом в режиме PROT_NONE сторожевые страницы позволяют более эффективно блокировать выполнение кода за пределами выделенной области памяти, так как их создание не требует выделения новой области виртуальной памяти.
    • Новые возможности подсистемы асинхронного ввода/вывода io_uring: поддержка изменения размера уже созданного кольцевого буфера; отправка в синхронном режиме сообщений в другой кольцевой буфер; частичное клонирование буфера; фиксированные области ожидания; гибридный полинг ввода/вывода; расширенный API для регистрации кольцевых буферов и областей памяти.
    • На системах с CPU AMD реализована возможность выявления расщеплённых блокировок ("split-lock"), возникающих при доступе к невыровненным данным в памяти, когда при выполнении атомарной инструкции данные пересекают две линии кеша CPU. Подобные блокировки приводят к значительному падению производительности (на 1000 циклов медленнее, чем атомарная операция с данными, попадающими в одну линию кеша).
    • Добавлен драйвер AMD Cache Optimizer, позволяющий для выполняющихся процессов настраивать предпочтение ядер CPU с технологией AMD 3D V-Cache (режим Cache) или повышенными частотами (режим Frequency).
    • Для архитектуры MIPS добавлена поддержка систем с многокластерными (multi-cluster) контроллерами прерываний (для каждого кластера в CPU предусмотрен отдельный контроллер прерываний).
    • Добавлена новая ioctl-операция PIDFD_GET_INFO, позволяющая получить сведения о процессе по его идентификатору PIDFD. Идентификатор PIDFD связывается с конкретным процессом и не меняется, в то время как PID может быть привязан к другому процессу после завершения процесса с используемым PID.
    • В планировщик задач добавлены компоненты, необходимые для реализации механизма Proxy Execution, решающего проблему с инверсией приоритетов (ситуация, когда низкоприоритетная задача удерживает ресурс, необходимый высокоприоритетной (realtime) задаче, и тем самым блокирует её). Осуществлено разделение контекстов планировщика и исполнения процессов.
    • Добавлен API, основанный на netlink, для выставления ограничений температуры в привязке к устройствам. При превышении выставленных ограничений в обработчик в пространстве пользователей передаются уведомления.
    • Продолжен перенос изменений из ветки Rust-for-Linux, связанных с использованием языка Rust в качестве второго языка для разработки драйверов и модулей ядра (поддержка Rust не активна по умолчанию, и не приводит ко включению Rust в число обязательных сборочных зависимостей к ядру). Добавлены обвязки над структурами данных и интерфейсами VFS, необходимые для работы драйвера Binder, переписанного на Rust. Добавлена поддержка событий трассировки в коде на Rust. Добавлены дополнительные обвязки для написания драйверов. Добавлены обвязки для pid_namespace.

      Предложен модуль 'alloc' с системой выделения памяти и специфичная для ядра реализация типажа Allocator, не привязанная к внешнему модулю Alloc и в отличие от последнего не использующая нестабильные возможности языка. На базе Allocator подготовлены реализации Kmalloc, Vmalloc и KVmalloc, а также созданы типы Vec и Box.

    • В подсистеме BPF предоставлена возможность использования в BPF-программах отдельного стека с целью снижения риска переполнений при обработке больших цепочек вызовов. Реализован итератор kmem_cache для получения из BPF-программы данных о состоянии механизма распределения памяти slab (slab allocator). Добавлена функция bpf_send_signal_task(), позволяющая BPF-программам отправлять сигналы другим процессам. Добавлен механизм разделяемой памяти BPF map, который можно использовать, например, для передачи сведений о нагрузке обработчикам планировщика задач sched_ext.
    • В систему трассировки добавлена возможность генерации исключения (page fault) при срабатывании точек трассировки на входе или выходе из системного вызова, что может использоваться для чтения параметров, передаваемых из пространства пользователя.
    • Добавлен параметр командной строки ядра "transparent_hugepage_shmem" для управления использованием больших страниц памяти в ФС tmpfs и shmem.
    • Реализована поддержка работы в режиме реального времени на системах с архитектурой Loongarch.
    • Для систем RISC-V реализована поддержка расширений "Smmpm", "Smnpm" и "Ssnpm" для маскирования указателей в пространстве пользователя (использования части битов указателей для хранения не связанных с адресацией метаданных).
    • Для сжатия образов ядра по умолчанию вместо lz4c задействован алгоритм lz4.
  • Виртуализация и безопасность
    • Для систем на базе архитектуры ARM64 добавлена поддержка запуска Linux в виртуальных машинах, изолированных при помощи технологии ARM CCA (Confidential Compute Architecture). ARM CCA предоставляет гарантии целостности памяти виртуальных машин и защищает их от модификации и анализа со стороны администратора хост-системы, способного выполнить код на уровне гипервизора.
    • Добавлена поддержка расширения ARM64 GCS (Guarded Control Stack) для аппаратной защиты адресов возврата из функций и блокирования эксплоитов, использующих методы возвратно-ориентированного программирования (ROP - Return-Oriented Programming, эксплоит формируется из уже имеющихся кусков машинных инструкций, завершающихся инструкцией возврата управления). ARM64 GCS позволяет использовать для защиты процессов в пространстве пользователя технику теневого стека (shadow stack) - после передачи управления функции, адреса возврата сохраняются процессором не только в обычном стеке, но и в отдельном теневом стеке, который не может быть изменён напрямую. Перед выходом из функции адрес возврата извлекается из теневого стека и сверяется с адресом возврата из основного стека.
    • В SELinux реализована поддержка управления политиками безопасности в привязке к отдельным операциям Netlink. Объявлен устаревшим и будет удалён одном из будущих выпусков конфигурационный интерфейс /sys/fs/selinux/user, который до 2020 года использовался в библиотеке libselinux.
    • В криптоподсистему ядра добавлен внутренний API Asymmetric Signature для генерации цифровых подписей по открытым ключам.
    • В подсистеме "iommufd", позволяющей управлять таблицами страниц памяти ввода/вывода IOMMU (I/O Memory-Management Unit) через файловые дескрипторы из пространства пользователя, реализованы операции IOMMU_IOAS_MAP_FILE, IOMMU_IOAS_CHANGE_PROCESS, IOMMU_VIOMMU_ALLOC и IOMMU_VDEVICE_ALLOC. Добавлена возможность использования ARM SMMuv3 (System Memory Management Unit) для вложенной трансляции адресов.
    • Добавлен виртуализированный драйвер virtual-cpufreq для ядер, запускаемых в гостевых системах. Драйвер позволяет отправлять хосту запросы на изменение частоты виртуального CPU (vCPU), которые могут использоваться на стороне хоста при планировании изменения частоты реального CPU.
    • В драйвер vfio-virtio добавлена поддержка Live-миграции (при использовании VFIO поверх virtio-net).
  • Сетевая подсистема
    • Добавлен новый режим доставки пакетов, в зависимости от периодов активности приложения адаптивно переключающийся между активным полингом (NAPI/busy polling, периодический опрос устройства ядром) и генерацией прерываний. Когда приложение находится в состоянии простоя (idle) используется обработка прерываний, а когда фиксируется высокая нагрузка - используется полинг.
    • Добавлен netlink API для управления полингом (NAPI) в сетевых драйверах, позволяющий настраивать отдельные экземпляры NAPI вместо настройки всего сетевого интерфейса.
    • Добавлен netlink API net-shaper для настройки аппаратно ускоренного ограничения интенсивности отправки пакетов (TX H/W shaping) с поддержкой интроспекции аппаратных возможностей сетевой карты для шейпинга.
    • В сетевом стеке проведена работа по избавлению от конкурирующих блокировок - глобальная блокировка RTNL (rtnl_lock) преобразована в блокировку, привязываемую к отдельным пространствам сетевых имён, что позволило сократить конкуренцию между блокировками в системах, активно использующих пространства имён, например, в конфигурациях с изолированными контейнерами. Оптимизация пока объявлена экспериментальной и отключена по умолчанию. Для включения следует использовать при сборке параметр DEBUG_NET_SMALL_RTNL.
    • Для UDP-сокетов задействована новая хэш-таблица, позволяющая заметно ускорить поиск подключённых сокетов.
  • Оборудование
    • Продолжена работа над drm-драйвером (Direct Rendering Manager) Xe для GPU на базе архитектуры Intel Xe, которая используется в видеокартах Intel семейства Arc и интегрированной графике, начиная с процессоров Tiger Lake. Добавлена начальная поддержка GPU Intel на базе архитектуры Xe3, задействованной в процессорах Panther Lake.
    • В драйвер i915 добавлены идентификаторы новых GPU на базе микроархитектуры Arrow Lake.
    • В драйвере Nouveau реализована поддержка механизма drm_panic (отображает при сбоях подобие "синего экрана смерти") для GPU начиная с nv50.
    • В драйвере AMDGPU реализована возможность сброса очередей SDMA. Добавлена поддержка SMU 13.0.6 и JPEG 4.0.3.
    • В DRM-драйвер msm (GPU Qualcomm Adreno) добавлена поддержка GPU Adreno A663, чипсетов MSM8917, MSM8937, MSM8953 и MSM8996, а также платформы Qualcomm SA8775P.
    • В звуковой подсистеме ALSA предложен новый режим обращения к аппаратным устройствам, предоставляющим функции для ускорения вычислений, связанных с обработкой звука (например, аппаратные ускорители для преобразования частоты дискретизации, распаковки и декодирования звуковых потоков).
    • Для управления энергопотреблением некоторых серверных процессоров AMD EPYC, например, AMD EPYC 9005 Turin, вместо драйвера acpi-cpufreq по умолчанию задействован драйвер amd-pstate. Драйвер amd-pstate динамически изменяет частоту CPU для достижения оптимальной производительности, используя механизм CPPC (Collaborative Processor Performance Control), который в отличие от acpi-cpufreq не ограничен тремя уровнями производительности и позволяет более оперативно реагировать на изменение состояния.
    • Добавлена поддержка карт хранения SDUC (Ultra Capacity SD), которые могут иметь размер более 2 ТБ (максимальный размер до 128ТБ).
    • Добавлена поддержка жёстких дисков с интерфейсом NVMe. В драйвере NVMe Target заявлена полная поддержка спецификации NVMe 2.1.
    • Добавлена поддержка звуковых систем устройств Samsung Galaxy Book3 360, ASUS Zenbook UM5606WA, ASUS Zen AIO 27 и Ayaneo System CS35L41. Добавлена поддержка звуковых кодеков Realtek RT721 SDCA, Everest Semi ES8323, NXP UDA1342, Cirrus Logic CS42L84. Добавлена поддержка усилителей NeoFidelity NTP8918/NTP8835/NTP8835C, Awinic aw88081 и Iron Device SMA1307.
    • Прекращена поддержка платформы PowerPC Maple, которая давно не используется на практике.
    • Удалены устаревшие драйверы: fieldbus, gdm724x, olpc_dcon, rtl8192e, rtl8712, rts5208, vt6655, vt6656.
    • Добавлена поддержка ARM-плат, SoC и устройств: Nothing Phone 1, Microsoft Surface Pro 9 5G, Redmi 5A (MSM8917/PM8937), Samsung Galaxy S9, Samsung Exynos 8895, 9810 и 990 (применялись в смартфонах Samsung Galaxy), X1E Dell XPS 9345 (на базе Qualcomm Snapdragon X Elite), Apple A7/A8/A9/A10/A11*, FriendlyARM NanoPi R3S, Orange Pi 5b, Radxa ROCK 5C, Rockchip RK3528, Microchip sam9x7, TI J742S2, Renesas R-Car Gen4 E-FUSE, Marvell PXA1908, Nuvoton Arbel NPCM8XX, Kobo Clara 2E, Kontron OSM-S i.MX8MP, Freescale Ivy, Boundary Device Nitrogen8MP, i.MX8M Plus Gateworks GW82XX-2X, iMX8MP, CS9100, Powkiddy RGB20SX, Rockchip RK3528, IPQ5424, IPQ5404.
    • Добавлена поддержка экранных панелей Samsung AMS581VF01, Samsung AMS639RQ08, Samsung S6E3HA8 и Microchip AC69T88A LVDS.

  1. OpenNews: Релиз ядра Linux 6.12 с поддержкой Realtime-режима
  2. OpenNews: Релиз ядра Linux 6.11
  3. OpenNews: Релиз ядра Linux 6.10
  4. OpenNews: Релиз ядра Linux 6.9
  5. OpenNews: Релиз ядра Linux 6.8
Обсуждение (174 +32) | Тип: Программы | Интересно
·18.01.2025 Выпуск отладчика GDB 16 (54 +19)
  Представлен релиз отладчика GDB 16.1 (первый выпуск серии 16.x, ветка 16.0 использовалась для разработки). GDB поддерживает отладку на уровне исходных текстов для широкого спектра языков программирования (Ada, C, C++, D, Fortran, Go, Objective-C, Modula-2, Pascal, Rust и т.д.) на различных аппаратных (i386, amd64, ARM, Power, Sparc, RISC-V, LoongArch и т.д.) и программных платформах (GNU/Linux, *BSD, Unix, Windows, macOS).

Наиболее заметные улучшения:

  • Для Linux-окружений на системах с архитектурой LoongArch реализована поддержка записи и повторного выполнения (record/replay).
  • Для теггированных указателей, часть битов в которых используется для хранения дополнительных данных, реализована поддержка точек останова, срабатывающих при изменении данных (watchpoint).
  • На системах с архитектурой AArch64 реализована поддержка отладки механизма защиты MTE (Memory Tagging Extension). MTE даёт возможность привязать теги к областям в памяти и организовать проверку корректности использования указателей для блокирования эксплуатации уязвимостей, вызванных некорректной работой с памятью.
  • Добавлен bash-скрипт gstack, использующий GDB для вывода трассировок стека работающих процессов.
  • Для точек остановка в состоянии ожидания (pending) ключевые слова 'thread' и 'task' теперь разбираются во время создания точки останова, а не после выхода из состояния ожидания.
  • Обеспечена подстановка точек останова, привязанных к потокам, только в ту область программы, в которой выполняется необходимый поток.
  • Расширены возможности трассировки на процессорах Intel: при пошаговой отладке, а также в командах "record instruction-history" и "record function-call-history" реализован вывод асинхронных событий и данных, сохраняемых при использовании инструкции ptwrite.
  • В Python API добавлены: модуль gdb.missing_objfile, событие gdb.tui_enabled, атрибут gdb.Symbol.is_artificial и функция gdb.record.clear.
  • Расширены возможности протокола DAP (Debugger Adapter Protocol), связанные с обработкой запросов "scopes", "launch" и "attach".
  • В протокол удалённой отладки добавлена поддержка пакетов "vFile:stat" и "x addr,length".
  • Прекращена поддержка QNX Neutrino, Nios II и Intel MPX.

  1. OpenNews: Выпуск отладчика GDB 15
  2. OpenNews: Проект OpenAI открыл Transformer Debugger, отладчик для моделей машинного обучения
  3. OpenNews: Выпуск системы динамической отладки SystemTap 5.0
  4. OpenNews: Проект Debian запустил сервис для динамического получения отладочной информации
  5. OpenNews: Для Linux представлена система динамической отладки BPFtrace (DTrace 2.0)
Обсуждение (54 +19) | Тип: Программы |
·18.01.2025 Рейтинг языков программирования TIOBE за январь 2025 года (173 +17)
  Компания TIOBE Software опубликовала январский рейтинг популярности языков программирования. Языком года назван Python, который сохранил 1 место и обогнал другие языки по росту популярности за год (+9.3%). По сравнению с январём 2024 года выделяется смещение языка Си со 2 на 4 место, при этом язык С++ поднялся с 3 на 2 место, а язык Java с 4 на 3 место.

Значительный рост популярности зафиксирован для языка Go, который переместился с 11 на 7 место. Язык PHP при этом опустился с 7 места на 13. Рост популярности отмечен для языков: Rust (19 → 14), R (23 → 18), SQL (9 → 8), Fortran (12 → 10), Delphi/Object Pascal (13 → 11), Ruby (18 → 16). Снижение популярности наблюдается для языков: Visual Basic (8 → 9), Scratch (10 → 12), MATLAB (14 → 15), Ассемблер (15 → 17), Swift (16 → 19).

Индекс популярности TIOBE строит свои выводы на основе анализа статистики поисковых запросов в таких системах, как Google, Bing, Yahoo!, Wikipedia, Amazon, YouTube и Baidu.

В январском рейтинге PYPL, в котором используется Google Trends, лидеры за год не изменились: первое место занимает язык Python, далее следуют Java, JavaScript, С/C++ и C#. По сравнению с январём прошлого года выросла популярность языка Rust, который переместился с 11 на 9 место, а также языков Ada (16 → 15), PowerShell (18 → 17), Abap (23 → 22) и Cobol (28 → 26). Снизилась популярность Swift (9 → 11), Dart (15 → 16), Ruby (17 → 18), Visual Basic (22 → 23), Perl (26 → 27) и Haskell (27 → 28).

По данным рейтинга IEEE Spectrum лидерами остаются языки Python и Java. С 5 на 3 место поднялся язык JavaScript, с 9 на 5 язык TypeScript, с 18 на 11 язык Rust. Язык С++ сместился с 3 на 4 место, а Си - с 4 на 9 место. Рейтинг IEEE Spectrum подготовлен Институтом инженеров электротехники и электроники (IEEE) и учитывает сочетание 12 метрик, полученных от 10 различных источников (в основе метода заложена оценка результатов поиска по запросу "{название_языка} programming", анализ упоминаний в Twitter, число новых и активных репозиториев в GitHub, число вопросов в Stack Overflow, число публикаций на сайтах Reddit и Hacker News, вакансии на CareerBuilder и EEE Job Site, упоминания в цифровом архиве журнальных статей и докладов с конференций).

В рейтинге RedMonk, построенном на основе оценки популярности на GitHub и активности обсуждений на Stack Overflow, двадцатка лидеров выглядит следующим образом: JavaScript, Python, Java, PHP, C#, TypeScript, CSS, C++, Ruby, C, Swift, R, Shell, Kotlin, Scala, Objective-C, PowerShell, Rust и Dart.

  1. OpenNews: Опубликован рейтинг популярности СУБД
  2. OpenNews: Рейтинг языков программирования TIOBE за январь 2024 года
  3. OpenNews: С++ поднялся на 3 место в рейтинге языков программирования Tiobe
  4. OpenNews: Рейтинг языков программирования от издания IEEE Spectrum
  5. OpenNews: Январский рейтинг языков программирования TIOBE
Обсуждение (173 +17) | Тип: К сведению |
·18.01.2025 Haiku ограничит доступ из Великобритании из-за риска нарушения закона Online Safety Act (19 +41)
  Александр фон Глюк (Alexander von Gluck), входящий в совет директоров некоммерческой компании Haiku Inc, курирующей разработку операционной системы Haiku, сообщил о намерении до 16 марта заблокировать доступ пользователей из Великобритании к форуму проекта и другим платформам, на которых осуществляется взаимодействие с сообществом. Решение объясняется юридическими и финансовыми рисками, возникшими из-за принятого в Великобритании закона Online Safety Act, вступающего в силу 16 марта.

Отмечается, что у проекта нет ресурсов для юридического анализа и приведения инфраструктуры к требованиям закона. Выполнение требований усложняет необходимость выполнения большого объёма бюрократических процедур, связанных с подготовкой документации, описывающей процессы и оценивающей имеющиеся риски (перечень рисков занимает 84 страницы с запутанными и неоднозначными формулировками).

Компания Haiku Inc зарегистрирована в США, а закон Online Safety Act принят в Великобритании, но является экстерриториальным, т.е. под его действие подпадают сайты, работающие за пределами Великобритании, если считается, что они "связаны с Великобританией", т.е. ими пользуются жители Великобритании. Предполагается, что без привлечения юристов сложно корректно заполнить все документы и выполнить требования закона. Игнорирование же закона создаёт существенные риски, например, размер штрафа за нарушение закона достигает 22 млн долларов.

Для вывода проекта Haiku из области действия закона Online Safety Act решено полностью заблокировать доступ из Великобритании к площадкам для взаимодействия с сообществом, по крайней мере до тех пор, пока не будет найдено другое решение. Кроме форума блокировка вероятно будет распространена на сервисы Gerrit и Haiku Depot, в которых допускается оставление комментариев. Сайт Haiku и репозитории проекта блокироваться не будут.

Требования закона Online Safety Act связаны с модерацией контента, отправляемого пользователями, удалением содержимого, нарушающего законы Великобритании, и ограничением доступа детей к контенту для взрослых. Сайты, насчитывающие более 700 тысяч пользователей, обязаны на этапе публикации отслеживать, фильтровать и сканировать отправляемое пользователями содержимое (ссылки, тексты, изображения). Требования к остальным ограничивается необходимостью реагировать на жалобы, но дополнительно может потребоваться проведение анализа рисков, назначение ответственных и создание регламента рассмотрения жалоб.

Закон касается сайтов, имеющих значительное количество пользователей из Великобритании (что считается значительным не детализируется) или предоставляющих услуги для граждан Великобритании, при наличии рисков причинения вреда таким гражданам. Исключение предусмотрено для сервисов, допускающих публикацию комментариев к авторским статьям и собственному контенту, но при этом не уточняется, подпадают ли под исключение площадки, допускающие публикацию ответов на другие комментарии.

  1. OpenNews: Европейскому регулятору подана жалоба о появлении в Firefox функции отслеживания пользователей
  2. OpenNews: Калифорнийский законопроект делает скрытое использование ботов нелегальным
  3. OpenNews: В закон DMCA внесены исключения, разрешающие замену прошивок маршрутизаторов
  4. OpenNews: Предложение по перекладыванию ответственности за ошибки в открытом коде
  5. OpenNews: Разработчики Debian опубликовали заявление, связанное с законопроектом Cyber Resilience Act
Обсуждение (19 +41) | Тип: К сведению | Интересно
·17.01.2025 Уязвимость в pam-u2f, позволяющая обойти аутентификацию на базе аппаратного токена (15 +15)
  Разработчики проекта openSUSE выявили уязвимость (CVE-2025-23013) в PAM-модуле pam-u2f, применяемом при аутентификации через токены YubiKey, Yubico Security Key, YubiHSM и другие FIDO-устройства, поддерживающие протокол U2F (Universal 2nd Factor). Уязвимость позволяет пользователю, имеющему непривилегированный локальный доступ к системе, в определённых конфигурациях PAM пройти аутентификацию без вставки аппаратного токена. На практике модуль pam-u2f как правило подключается для двухфакторной или беспарольной аутентификации с использованием токенов (например, для подтверждения полномочий выполнения команд через утилиты su и sudo).

Уязвимость вызвана некорректным возвращением функцией pam_sm_authenticate() значения PAM_IGNORE. Данное значение возвращается в случае ошибки выполнения вызовов gethostname(), pam_modutil_drop_priv(), pam_modutil_regain_priv() или resolve_authfile_path(), а также при проблемах выделения памяти в strdup() или calloc(). Проблема в том, что библиотека libpam, получив от PAM-модуля результат с кодом PAM_IGNORE, вернёт итоговый код PAM_SUCCESS, обозначающий успешное прохождение аутентификации, если в цепочке проверок какой-то другой PAM-модуль вернул успешный результат аутентификации.

При использовании модуля pam-u2f в связке с pam_unix для двухфакторной аутентификации, уязвимость позволяет успешно пройти аутентификацию в случае успешной проверки пароля, без подтверждения второго фактора. При выполнении беспарольной аутентификации по аппаратному токену pam-u2f может применяться в связке с PAM-модулем pam_faillock, ограничивающим число попыток аутентификации и возвращающим PAM_SUCCESS, если лимит не исчерпан.

В качестве примера атаки называется обход проверки токена при выполнении локальным пользователем привилегированных команд, используя утилиты sudo и su. Во время запуска этих команд атакующий может создать условия для возвращения модулем pam-u2f значения PAM_IGNORE, например, через исчерпание доступной памяти. Проблема устранена в версии pam-u2f 1.3.1.

  1. OpenNews: Уязвимость в pam_oath, позволяющая получить права root в системе
  2. OpenNews: Локальная root-уязвимость в pam-python
  3. OpenNews: PAM-модуль для аутентификации через распознавание лица пользователя
  4. OpenNews: Атака EUCLEAK, позволяющая клонировать YubiKey 5 и другие ключи на чипах Infineon
  5. OpenNews: Уязвимости в PCP и Nix, позволяющие поднять привилегии в системе
Обсуждение (15 +15) | Тип: Проблемы безопасности |
·17.01.2025 Обход дискового шифрования, использующего TPM2 для автоматической разблокировки (117 +27)
  Один из сопровождающих пакеты в NixOS представил технику атаки, позволяющую получить доступ к данным на зашифрованных дисковых разделах, в конфигурациях, не требующих ввода пароля разблокировки при загрузке, благодаря размещению в TPM2 (Trusted Platform Module) информации для расшифровки. Такие конфигурации часто используются на серверах или многопользовательских рабочих станциях, на которых проблематично после каждой перезагрузки вручную вводить пароль.

При применении подобного метода шифрования дисков расшифровка выполняется с использованием дополнительного ключа, хранимого в TPM и выдаваемого только при подтверждении исходного состояния системы. Состояние системы сохраняется в виде хэшей в регистрах PCR (Platform Configuration Register) и привязывается к цифровой подписи, которой заверен загрузчик, а также к контрольным суммам загрузчика и начального загрузочного окружения (initrd). Доступ к ключу в TPM предоставляется только когда все привязанные к нему регистры PCR находятся в том же состоянии, что и при сохранении ключа.

Подразумевается, что цепочка загрузки операционной системы верифицируется при помощи UEFI Secure Boot и доступ к ключам можно получить только из немодифицированного образа initrd. При успешной проверке диск автоматически разблокируется, но доступ к расшифрованным данным можно получить только через вход в свою учётную запись в системе. При обращении без верифицированной загрузки или при попытке замены или внесения изменений в initrd с целью перехвата ключей цепочка доверия будет нарушена, состояние регистров PCR изменится и TPM2 не отдаст сведения, необходимые для расшифровки.

Опубликованный метод атаки позволяет обойтись без изменения содержимого initrd в конфигурациях, не идентифицирующих шифрованные разделы LUKS. Отмечается, что включение подобной проверки разделов не описывается во всех найденных инструкциях по настройке дискового шифрования, так как идентификация раздела заметно усложняет конфигурацию (требуется привлечение дополнительного регистра PCR для проверки ключа раздела и генерация initrd с учётом его значения). Примеры совершения атаки продемонстрированы для Fedora Linux в связке с инструментарием clevis и для NixOS в связке с systemd-cryptenroll. Для совершения атаки необходим физический доступ к компьютеру и возможность извлечения накопителя.

Метод основывается на том, что атакующий может заменить существующий корневой шифрованный раздел на собственный зашифрованный раздел, созданный с тем же UUID-идентификатором и заданными атакующим ключами расшифровки. Окружение initrd передаст управление init-процессу в разделе атакующего. Так как содержимое initrd не было изменено, состояние TPM не будет нарушено, и атакующий, получив управление в своём окружении, cможет использовать TPM для расшифровки ключа исходного дискового раздела.

Атака сводится к следующим шагам:

  • Извлечение диска и проведение на другом компьютере анализа незашифрованных данных в разделе /boot. Определение информации о зашифрованном разделе и его UUID-идентификаторе из initrd-образа, находящегося в разделе /boot.
  • Создание резервной копии первых 64МБ зашифрованного LUKS-раздела.
  • Замена указанных 64МБ на образ с собственным корневым разделом, зашифрованным с использованием ключа атакующего и имеющим UUID-идентификатор как у старого раздела.
  • Возвращение диска в исходный компьютер и загрузка с подменённым корневым разделом. Так как автоматическая разблокировка по ключу из TPM для подменённого раздела завершается неудачей, initrd выводит запрос для ручного ввода пароля.
  • Получение из TPM исходного ключа, используя метаданные о TPM и зашифрованный токен из LUKS-заголовка старого раздела.
  • Перестановка диска на компьютер атакующего, восстановление перезаписанной части LUKS-раздела из резервной копии и использование полученного исходного ключа для доступа к данным.

  1. OpenNews: В Ubuntu появится поддержка полнодискового шифрования, использующего TPM
  2. OpenNews: Мэтью Гаррет опроверг критику TPM, распространяемую Фондом СПО
  3. OpenNews: Уязвимости в эталонной реализации TPM 2.0, позволяющие получить доступ к данным в крипточипе
  4. OpenNews: Уязвимость TPM-Fail, позволяющая восстановить ключи, хранимые в TPM-модулях
  5. OpenNews: Обход шифрования диска в Linux через непрерывное нажатие клавиши Enter
Обсуждение (117 +27) | Тип: Проблемы безопасности |
·16.01.2025 Релиз дистрибутива Linux Mint 22.1 (115 +17)
  Представлен релиз дистрибутива Linux Mint 22.1, продолжающий развитие ветки на пакетной базе Ubuntu 24.04 LTS. Дистрибутив полностью совместим с Ubuntu, но существенно отличается подходом к организации интерфейса пользователя и подбором используемых по умолчанию приложений. Разработчики Linux Mint предоставляют десктоп-окружение, соответствующее классическим канонам организации рабочего стола, которое является более привычным для пользователей, не принимающих новые методы построения интерфейса GNOME 3. Для загрузки доступны DVD-сборки на базе оболочек MATE (3 ГБ), Cinnamon (3 ГБ) и Xfce (3 ГБ). Ветка Linux Mint 22 отнесена к выпускам с длительным сроком поддержки (LTS), обновления для которых будут формироваться до 2029 года.

Основные изменения в Linux Mint 22.1:

  • Модернизирован стек управления пакетами, связанный с пакетным менеджером APT. Вместо инструментария aptdaemon задействован собственный сервис Aptkit, также реализующий фоновый процесс и DBus-интерфейс для выполнения непривилегированными пользователями операций управления пакетами. Вместо приложений, использующих aptdaemon, таких как GDebi, synaptic и apturl, реализован новый интерфейс установки пакетов Captain, который можно вызвать из других приложений при попытке открытия файлов с расширением deb или задействовать в качестве обработчика URL "apt://pkgname".

    Отмечается, что основанный на aptdaemon инструментарий устарел, не развивается основным проектом и сопровождается через накопление отдельной коллекции патчей в дистрибутивах. Замена aptdaemon позволила решить проблемы с локализацией и переводом в средствах управления пакетами; избавила дистрибутив от компонентов, оставшихся без сопровождения; упростила архитектуру; сократила трудозатраты разработчиков. Переход на Aptkit позволил реализовать в приложении Software Sources графический режим для отката на прошлые версии для пакетов, отсутствующих в репозиториях Ubuntu. В приложении Update Manager удалось улучшить поддержку Wayland и обновить код для многопоточного и многопроцессного выполнения операций.

  • Реализована поддержка профилей энергопотребления, позволяющих пользователю выбрать приемлемый для себя баланс между энергопотреблением и производительностью. Доступно три режима: экономия энергии, высокая производительность и сбалансированный. В среде рабочего стола Cinnamon режим можно выбрать в секции конфигуратора "Preferences → Power Management" или через апплет в панели. В Xfce и MATE выбор режима осуществляется командой "powerprofilesctl set power-saver|performance|balanced".
  • Среда рабочего стола Cinnamon обновлена до выпуска 6.4.
  • Интегрирован режим ночной подсветки ("Night Light"), который меняет цветовую температуру в зависимости от времени суток и может использоваться в окружениях на базе X11 и Wayland. При работе в ночное время автоматически уменьшается интенсивность синего цвета на экране, что делает цветовую гамму более тёплой для снижения напряжения глаз и сокращения факторов возникновения бессонницы при работе перед сном.
  • Предложена новая тема оформления, которая отличается использованием более тёмных цветов, выраженным контрастом, скруглением элементов интерфейса и увеличенными отступами между апплетами и панелью.
  • Изменено оформление диалоговых окон. Добавлена возможность использования цветных кнопок в диалогах. Для отрисовки ключевых всплывающих диалоговых окон задействована библиотека Clutter. Переделан диалог для принудительного завершения работы приложений, показываемый в случае зависания программы и прекращения её реагирования на действия пользователя.
  • Переработан внешний вид экранных индикаторов (OSD), используемых при изменении яркости и громкости медиа-кнопками, а также при переключении виртуальных рабочих столов.
  • Улучшен интерфейс смены задач по Alt-tab. Добавлена опция для показа только окон, размещённых на текущем мониторе. Переделана работа со свёрнутыми окнами.
  • Обновлён стиль и увеличены отступы в основном меню. Добавлена поддержка навигации по меню с использованием клавиш управления курсором на цифровой клавиатуре. Упрощена анимация при работе с меню.
  • Улучшена совместимость с Wayland. Добавлена опциональная возможность установки сессионных файлов для Wayland. На собственные диалоги заменён устаревший пакет policykit-1-gnome, что позволило при использовании Wayland наладить в Cinnamon корректную работу приложений, запрашивающих права администратора.
  • В менеджере приложений (Software Manager) ускорены операции установки и навигации по пакетам.
  • В файловый менеджер Bulky добавлена функция удаления диакритических знаков из имён группы файлов (например, "résumé.pdf" может заменить на "resume.pdf").
  • Включена генерация миниатюр для файлов с расширением ".ora" (OpenRaster).

  1. OpenNews: Релиз дистрибутива Linux Mint 22
  2. OpenNews: Linux Mint развивает новое приложение для чата после сворачивания IRC-клиента HexChat
  3. OpenNews: Выпуск среды рабочего стола Cinnamon 6.4
  4. OpenNews: Опубликована сборка Linux Mint Edge 21.2 с новым ядром Linux
  5. OpenNews: Выпуск дистрибутива Linux Mint Debian Edition 6
Обсуждение (115 +17) | Тип: Программы |
·16.01.2025 Выпуск web-браузера Chrome 132 (119 +15)
  Компания Google опубликовала релиз web-браузера Chrome 132. Одновременно доступен стабильный выпуск свободного проекта Chromium, выступающего основой Chrome. Браузер Chrome отличается от Chromium использованием логотипов Google, наличием системы отправки уведомлений в случае краха, модулями для воспроизведения защищённого от копирования видеоконтента (DRM), системой автоматической установки обновлений, постоянным включением Sandbox-изоляции, поставкой ключей к Google API и передачей RLZ-параметров при поиске. Для тех, кому необходимо больше времени на обновление, отдельно поддерживается ветка Extended Stable, сопровождаемая 8 недель. Следующий выпуск Chrome 133 запланирован на 4 февраля.

Основные изменения в Chrome 132:

  • Добавлена эвристика, автоматически включающая функцию "HTTPS-First", перенаправляющую HTTP-запросы на HTTPS, для пользователей, которые в своей практике обычно используют HTTPS. Если пользователь не согласен с включением "HTTPS-First", он может принудительно отключить данный режим в настройках. При активном "HTTPS-First" работа с сайтами, не поддерживающими HTTPS, выполняется через откат на HTTP, если после перенаправления не удаётся выполнить запрос по HTTPS или возникают проблемы с сертификатами. При недоступности варианта с HTTPS перед открытием сайта по HTTP выводится специальное предупреждение.
  • Расширены возможности поиска при помощи сервиса Google Lens ("Поиск с объективом"), вызываемого через контекстное меню. Помимо поиска по изображениям и выделенному тексту добавлена поддержка задания вопросов на естественном языке, связанных с содержимым web-страниц и PDF-документов. Для отправки вопроса следует вызвать интерфейс поиска через Google Lens через меню и ввести вопрос в верхней части появившейся боковой панели. Расширено число языков, доступное в функции наложения перевода (переведённый текст показывается поверх исходного текста на изображении).
  • Для платформы Windows предоставлена поддержка sandbox-изоляции процесса, обеспечивающего работу сетевого сервиса. Для включения изоляции добавлена опция "--enable-features=NetworkServiceSandbox". Проверить режимы изоляции можно на странице "chrome://sandbox/".
  • В настройки добавлена возможность выборочной загрузки паролей и адресов, ранее сохранённых на локальной системе, в облачное хранилище, привязанное к учётной записи Google.
  • В десктоп-сборках вместо настройки синхронизации между устройствами с использованием отдельной учётной записи, предоставлена возможность привязки браузеров пользователя к учётной записи Google, применяемой в таких сервисах как Gmail и Google Docs. Например, при входе на сайт Gmail теперь будет предлагаться войти с этой учётной записью в Chrome для сохранения и синхронизации открытых вкладок, настроек, истории, закладок, паролей, адресов, дополнений, тем и PWA-приложений.
  • Добавлена настройка "chrome://flags/#enable-user-link-capturing-pwa", при активации которой переход по ссылкам, связанным с установленным Web-приложением (PWA), приводит к открытию обычного сайта и появлению в адресной строке индикатора для переключения на использование web-приложения. До этого открытие подобных ссылок сразу приводило к переходу к web-приложению, без возможности работы со страницей как с обычным сайтом.
  • Для элемента <dialog> реализованы события "beforetoggle" и "toggle" (ToggleEvent), позволяющее определять моменты открытия и закрытия диалога, и вызывать свои обработчики на стадии до начала показа/закрытия диалога или когда диалог уже показан или закрыт. При вызове метода showModal или show события ToggleEvent генерируются со значением "open" в параметре newState, а при закрытии диалога со значением "closed".
  • Обеспечена генерация исключения InvalidStateError при вызове методов showPopover() и showModal() для элементов c атрибутом "popover" или элементов "dialog", находящихся в неактивном документе. Ранее подобный вызов молча игнорировался.
  • В дополнение к возможности захвата видео и произвольной области во вкладке, добавлен API Element Capture для захвата отдельных HTML-элементов. Возможность может быть полезной в ситуации, когда нужно захватить элементы, перекрывающие друг друга. Например, в web-приложении для проведения видеоконференций, позволяющем встраивать другие web-приложения через iframe, новый API может потребоваться для захвата содержимого iframe в форме видео и передачи его другим участникам.
  • Добавлен метод getAllScreensMedia() для захвата содержимого всех экранов, подключённых к устройству.
  • В версии для Android и компонентах на базе WebView разрешено использовать API File System Access, позволяющий web-приложениям читать и записывать данные напрямую в файлы и каталоги на устройстве пользователя. Ранее данный API был доступен только в desktop-сборках. Для вызова диалогов выбора файлов можно использовать методы showOpenFilePicker() и showSaveFilePicker().
  • В CSS-свойстве "a href="https://developer.mozilla.org/docs/Web/CSS/writing-mode">writing-mode", позволяющем настроить позиционирование текста в формах, реализована поддержка ключевых слов sideways-rl и sideways-lr, полезных для организации вертикального вывода традиционного текста, в котором не используются иероглифы.
  • В CSS-свойствах "inset" и "margin" разрешено использование значения anchor-size().
  • Возвращена возможность активации областей прокрутки при навигации с использованием клавиатуры, позволяющая пользователям без мыши вначале переключиться в нужную область клавишей Tab, а затем прокрутить её содержимое стрелками управления курсором. Ранее данная возможность была отключена из-за регрессий в средствах для людей с ограниченными возможностями, которые удалось устранить в этой версии.
  • Добавлены методы Request.bytes() и Response.bytes(), возвращающие promise для чтения с использованием объекта Uint8Array.
  • Обеспечено игнорирование HTTP-заголовка Strict-Transport-Security в ответах с сервера, размещённого на локальной системе и принимающего запросы через localhost.
  • В API WebGPU реализована возможность смешивания текстур с представлением цвета в 32-разрядных форматах с плавающей точкой (r32float, rg32float и rgba32float). В объект GPUDevice добавлен атрибут adapterInfo.
  • Расширены возможности инструментов для web-разработчиков. Добавлена поддержка использования AI-ассистента Gemini для упрощения отладки и уточнения вопросов, связанных с сетевыми запросами, исходными файлами и трассировкой производительности. Реализовано сохранение истории чата с AI-ассистентом.

    В панели Sensors реализована симуляция различной интенсивности нагрузки на CPU (Nominal, Fair, Serious, Critical). В панели для оценки потребления памяти добавлена поддержка группировки JavaScript-объектов по имени. Изменено оформление конфигуратора. Во вкладке Computed обеспечено обновление вычисляемых значений в режиме реального времени (полезно для отслеживания изменений значений в процессе анимации). В секции "Application > Storage" добавлена возможность инспектирования хранилищ браузерных дополнений.



Кроме нововведений и исправления ошибок в новой версии устранены 16 уязвимостей. Многие из уязвимостей выявлены в результате автоматизированного тестирования инструментами AddressSanitizer, MemorySanitizer, Control Flow Integrity, LibFuzzer и AFL. Пяти проблемам присвоен высокий уровень опасности. Критических проблем, которые позволяют обойти все уровни защиты браузера и выполнить код в системе за пределами sandbox-окружения, не выявлено. В рамках программы по выплате денежного вознаграждения за обнаружение уязвимостей для текущего релиза компания Google выплатила 13 премий на сумму 37 тысяч долларов США (по две премии в $7000 и $5000, одна премия $3000, три премии $2000 и четыре премии $1000). Размер одного вознаграждения пока не определён.

  1. OpenNews: Выпуск web-браузера Chrome 131
  2. OpenNews: Google намерен перевести Chrome OS на платформу Android
  3. OpenNews: Google экспериментирует со встраиванием в Chrome большой языковой модели
  4. OpenNews: В Chrome появилось предупреждение о скором прекращении поддержки uBlock Origin
  5. OpenNews: Google передумал прекращать поддержку сторонних Cookie в Chrome
Обсуждение (119 +15) | Тип: Программы |
·14.01.2025 В Rsync 3.4.0 устранены уязвимости, позволявшие выполнить код на сервере и клиенте (194 +19)
  Опубликован релиз утилиты для синхронизации файлов Rsync 3.4.0, в котором устранено шесть уязвимостей. Комбинация уязвимостей CVE-2024-12084 и CVE-2024-12085 позволяет клиенту добиться выполнения своего кода на сервере. Для совершения атаки достаточно анонимного подключения к серверу Rsync с доступом на чтение. Например, атака может быть совершена на зеркала различных дистрибутивов и проектов, предоставляющих возможность загрузки сборок через Rsync. Проблема также затрагивает различные приложения для синхронизации файлов и резервного копирования, использующие Rsync в качестве бэкенда, такие как BackupPC, DeltaCopy и ChronoSync.

Более того, эксплуатировав уязвимость на сервере атакующий может организовать атаку на подключающихся к серверу клиентов и добиться чтения или записи любых файлов в их системе, насколько это позволяют права доступа процесса rsync. Например, через создание вредоносных rsynс-серверов можно организовать загрузку SSH-ключей или добиться выполнения кода, перезаписав такие файлы, как ~/.bashrc и ~/.popt.

Для упрощения проверки обновления серверов до новой версии Rsync номер протокола в выпуске Rsync 3.4.0 повышен до 32. Проследить за появлением обновлений в дистрибутивах можно на следующих страницах: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD.

Выявленные уязвимости:

  • CVE-2024-12084 - запись за пределы выделенного буфера через передачу некорректной контрольной суммы, размер которой превышает 16 байт.
  • CVE-2024-12085 - утечка содержимого неинициализированных данных из стека (по одному байту за раз) при выполнении операций сравнения контрольных сумм некорректного размера.
  • CVE-2024-12086 - получение доступа сервера к содержимому произвольных файлов из системы клиента через генерацию сервером некорректных коммуникационных токенов и контрольных сумм в процессе копирования файлов от клиента на сервер (определение содержимого байт за байтом через подбор контрольной суммы).
  • CVE-2024-12087 - выход за пределы базового каталога при использовании опции "--inc-recursive" (включается по умолчанию для многих флагов). Уязвимость вызвана отсутствуем должной проверки символических ссылок и позволяет записать файлы за пределами указанного клиентом целевого каталога. Подконтрольный атакующему сервер может использовать уязвимость для атаки на систему подключившегося клиента.
  • CVE-2024-12088 - некорректная проверка символических ссылок, указывающих на другие символические ссылки, при использовании опции "--safe-links". Проблема даёт возможность выйти за пределы базового каталога и записать данные в любой файл в системе, насколько это позволяют права доступа.
  • CVE-2024-12747 - состояние гонки при работе с символическими ссылками, позволяющее пользователю повысить свои привилегии и получить доступ к привилегированным файлам на сервере.

  1. OpenNews: Выпуск утилиты для синхронизации файлов Rsync 3.3.0. Эндрю Триджелл возвращается в проект
  2. OpenNews: Уязвимость в Rsync, позволяющая перезаписать файлы на стороне клиента
  3. OpenNews: Вышел Rsync 3.0.2 с исправлением критической уязвимости
  4. OpenNews: В состав OpenBSD добавлена собственная реализация rsync
  5. OpenNews: Выпуск Rsync 3.1.2 c устранением уязвимости
Обсуждение (194 +19) | Тип: Проблемы безопасности |
·14.01.2025 Доступен Emscripten 4.0, компилятор из C/C++ в WebAssembly (58 +12)
  Опубликован выпуск инструментария Emscripten 4.0, позволяющего компилировать код на C/C++ и других языках, для которых имеются фронтэнды на базе LLVM, в универсальный низкоуровневый промежуточный код WebAssembly. Полученный результат можно использовать для интеграции с JavaScript-проектами, запуска в web-браузере, использования в Node.js или создания обособленных многоплатформенных приложений, запускаемых при помощи wasm runtime. Код проекта распространяется под лицензией MIT. В компиляторе используются наработки проекта LLVM, а для генерации WebAssembly и оптимизации задействована библиотека Binaryen.

Основной целью Emscripten заявлено создание инструмента, позволяющего выполнять в Web код независимо от языка программирования, на котором этот код изначально написан. В компилируемых приложениях могут использоваться вызовы стандартных библиотек C и С++ (libc, libcxx), расширения C++, многопоточность на базе pthreads, API POSIX и многие мультимедийные библиотеки. Отдельно предоставляются API для интеграции с Web API и кодом на JavaScript.

Emscripten поддерживает трансляцию вывода библиотеки SDL2 через Canvas, а также реализует поддержку OpenGL и EGL через API WebGL, что позволяет преобразовывать в WebAssembly графические приложения и игры (например, имеется порт тулкита Qt, поддерживаются игровые движки Unreal Engine и Unit, а также движок симуляции физических процессов Bullet).

Помимо компиляции кода на C/C++ отдельно развиваются проекты для запуска в браузерах интерпретаторов и виртуальных машин для языков Lua, C#, Python, Ruby и Perl. Кроме того, возможно применение фронтэндов к LLVM, отличных от Clang, например, фронтэндов для языков, как Swift, Rust, D и Fortran.

Присвоение номера версии 4.0 связано с внесением изменений, нарушающих совместимость на уровне ABI (при пересборке проекта в Emscripten 4.0 потребуется пересборка объектных файлов и библиотек, собранных прошлыми версиями Emscripten). Основные изменения в Emscripten 4.0:

  • Добавлена опция "-sWASM_LEGACY_EXCEPTIONS" для выбора между старым и новым механизмами обработки исключений. По умолчанию продолжает использоваться старый механизм, так как не все браузеры реализовали возможности WebAssembly для работы новых обработчиков исключений.
  • Компоненты compiler-rt, libcxx, libcxxabi и libunwind обновлены до ветки LLVM 19.
  • Минимально поддерживаемая в сборках версия браузера Safari (настройка MIN_SAFARI_VERSION) повышена с 14.1 до 15.0, что позволило по умолчанию задействовать несколько расширенных возможностей WebAssembly:
    • Включено использование новых инструкций для преобразования типа float в int (nontrapping-fptoint), которые вместо генерации исключения при переполнении результата возвращают минимально или максимально возможное значение (необходимо для SIMD).
    • Включена опция WASM_BIGINT, при которой для обмена целочисленными 64-разрядными значениями между WebAssembly и кодом на JavaScript применяется тип BigInt.
    • Включена опция BULK_MEMORY, при которой для реализации Си-функций memcpy и memset применяются WebAssembly-инструкции memory.copy и memory.fill.
  • В функции PATH.basename() отключена нормализация путей (PATH.normalize()), т.е. вызов 'PATH.basename("a/.")' теперь вернёт "." вместо "a", а 'PATH.basename("a/b/..")' вернёт ".." вместо "a".
  • При использовании опции "-sMODULARIZE" factory-функции, которые создают и возвращают экземпляры WebAssembly-модулей и объектов для JavaScript, теперь помечены признаком "async" при компиляции в режиме WASM_ASYNC_COMPILATION, применяемом по умолчанию.
  • Добавлена возможность указания JavaScript-библиотек, используя опцию "-lfoo.js". В отличие от опции "--js-library" поиск библиотеки выполняется во всех путях, указанных через опцию "-L".
  • При компоновке в отладочном режиме (-O0 или -sASSERTIONS) по умолчанию задействован отладочный вариант функции malloc со включёнными assert-проверками, выявляющими такие ошибки, как двойной вызов функции free().

  1. OpenNews: Доступен Emscripten 3.0, компилятор из C/C++ в WebAssembly
  2. OpenNews: В рамках проекта Emscripten-Qt развивается порт Qt, работающий в web-браузере
  3. OpenNews: Emscripten - проект по созданию компилятора кода C/C++ в JavaScript
  4. OpenNews: Доступен предварительный вариант стандарта WebAssembly 2.0
  5. OpenNews: Доступен Wasmer 5.0, инструментарий для создания приложений на базе WebAssembly
Обсуждение (58 +12) | Тип: Программы |
·14.01.2025 Релиз OpenZFS 2.3.0, реализации ZFS для Linux и FreeBSD (258 +29)
  После более года разработки опубликован релиз проекта OpenZFS 2.3.0, развивающего реализацию файловой системы ZFS для Linux и FreeBSD. Проект получил известность как "ZFS on Linux" и ранее ограничивался разработкой модуля для ядра Linux, но после слияния с кодом из FreeBSD был признан основной реализацией OpenZFS и переименован.

Работа OpenZFS проверена с ядрами Linux c 4.18 по 6.12 и всеми ветками FreeBSD, начиная с 13.3. Код распространяется под свободной лицензией CDDL. OpenZFS уже используется во FreeBSD и входит в состав дистрибутивов Debian, Ubuntu, Gentoo, NixOS и ALT Linux. Пакеты с новой версией в ближайшее время будут подготовлены для основных дистрибутивов Linux, включая Debian, Ubuntu, Fedora, RHEL/CentOS.

OpenZFS предоставляет реализацию компонентов ZFS, связанных как с работой файловой системы, так и с функционированием менеджера томов. Реализованы компоненты: SPA (Storage Pool Allocator), DMU (Data Management Unit), ZVOL (ZFS Emulated Volume) и ZPL (ZFS POSIX Layer). Проект также позволяет использовать ZFS в качестве бэкенда для кластерной файловой системы Lustre. Наработки OpenZFS основаны на оригинальном коде ZFS, импортированном из проекта OpenSolaris и расширенном улучшениями и исправлениями от сообщества Illumos. Проект развивается при участии сотрудников Ливерморской национальной лаборатории по контракту с Министерством энергетики США.

Код распространяется под свободной лицензией CDDL, которая несовместима с GPLv2, что не позволяет добиться интеграции OpenZFS в состав основной ветки ядра Linux, так как смешивание кода под лицензиями GPLv2 и CDDL недопустимо. Для обхода лицензионной несовместимости было решено распространять продукт для Linux целиком под лицензией CDDL в виде отдельно загружаемого модуля, поставляемого отдельно от ядра. Стабильность кодовой базы OpenZFS оценивается как сопоставимая с другими ФС для Linux.

Основные изменения:

  • Реализована возможность добавления на лету новых дисков в существующий массив RAIDZ для увеличения размера хранилища без остановки работы и без необходимости создания новой группы накопителей. Перераспределение избыточных данных с учётом новых дисков осуществляется автоматически. Для добавления диска к существующей группе можно использовать команду "zpool attach POOL raidzP-N NEW_DEVICE", а для отслеживания окончания фонового процесса расширения массива - "zpool status".
  • Значительно ускорено выполнение операций, связанных с дедупликацией блоков данных. Оптимизации среди прочего затронули формат таблиц дедупликации, поэтому для задействования предложенных оптимизаций в уже существующих пулах необходимо включить опцию "fast_dedup", после чего будет созданы новые таблицы дедупликации, которые будут использованы параллельно со старыми таблицами.
  • Добавлен режим прямого ввода/вывода (Direct IO), позволяющий совершать операции чтения и записи в обход кэша ARC (Adaptive Replacement Cache). Режим позволяет повысить эффективность работы в ситуациях, когда кэширование может негативно влиять на производительность из-за дополнительных операций копирования в памяти, например, при использовании устройств NVMe.
  • В большинство команд (zfs list|get|mount|version, zpool status|list|get|version) добавлена опция "-j" для вывода в формате JSON.
  • Допустимый размер имён файлов и каталогов увеличен c 255 до 1023 символов (новый размер выбран с расчётом размещения 255 4-байтовых символов).
  • Внесены оптимизации производительности, охватывающие различные части кодовой базы.
  • В модуль ядра добавлены опции:

  1. OpenNews: Релиз OpenZFS 2.2, реализации ZFS для Linux и FreeBSD
  2. OpenNews: В OpenZFS выявлена ошибка, которая может привести к повреждению файлов
  3. OpenNews: Обновление OpenZFS 2.1.14 и 2.2.2 с устранением ошибки, приводящей к повреждению файлов
  4. OpenNews: В инсталляторе Ubuntu 23.10 будет возвращена поддержка ZFS
  5. OpenNews: Ошибка в патчах FreeNAS, вызывающая скрытое повреждение данных в ZFS
Обсуждение (258 +29) | Тип: Программы |
Следующая страница (раньше) >>



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру