MIT удалил коллекцию Tiny Images из-за выявления расистских и женоненавистнических терминов

Массачусетский технологический институт удалил набор данных Tiny Images, включающий аннотированную коллекцию из 80 миллионов небольших изображений с разрешением 32×32. Набор поддерживался группой, развивающей технологии компьютерного зрения, и использовался c 2008 года различными исследователями для тренировки и проверки распознавания объектов в системах машинного обучения.

Причиной удаления стало выявление использования расистских и женоненавистнических терминов в метках, характеризующих изображённые на картинках объекты, а также наличия образов, которые воспринимались как оскорбительные. Например, присутствовали изображения половых органов с жаргонными терминами, изображения некоторых женщин характеризовались как «шлюхи», применялись недопустимые в современном обществе термины для чернокожих и азиатов.

Причиной появления недопустимых слов было использование автоматизированного процесса, использующего при классификации семантические связи из лексической базы данных английского языка WordNet, созданной в 1980-е годы в Принстонском университете. Так как вручную проверить наличие оскорбительной лексики в 80 млн мелких картинок не представляется возможным, было принято решение полностью закрыть доступ к БД. MIT также призвал других исследователей прекратить использование данной коллекции и удалить её копии. Аналогичные проблемы наблюдаются и в крупнейшей аннотированной базе изображений ImageNet, в которой также используются привязки из WordNet.

Источник: [ссылка]

DNS Push-уведомления получили статус предложенного стандарта

Комитет IETF (Internet Engineering Task Force), занимающийся развитием протоколов и архитектуры интернета, завершил формирование RFC для механизма «DNS Push Notifications» и опубликовал связанную с ним спецификацию под идентификатором RFC 8765. RFC получил статус «Предложенного стандарта», после чего начнётся работа по приданию RFC статуса чернового стандарта (Draft Standard), фактически означающего полную стабилизацию протокола и учёт всех высказанных замечаний.

Механизм «DNS Push Notification» даёт возможность клиенту в асинхронном режиме получать уведомления от DNS-сервера об изменении DNS-записей, без необходимости их периодического опроса. Push-уведомления обрабатываются только с использованием транспорта TCP с защитой канала связи при помощи «TLS over TCP». Авторитативный DNS-сервер может принимать TCP-соединения от клиентов DNS Push Notification, отправляющих запросы на подписку на определённые имена и типы DNS-записей. После приёма запроса на подписку сервер будет сам отправлять клиенту уведомления об изменении указанных записей.

Клиент определяет наличие поддержки DNS Push Notification через отправку обычного DNS-запроса, проверяющего существование SRV-записи «_dns-push-tls._tcp.имя_зоны», которая указывает на DNS-серверы, обслуживающие подписки. Клиент также может подписаться на не существующую запись, и сервер должен уведомить клиента, если она появится в будущем. Уведомления отправляются только при наличии установленного с сервером TCP-соединения и не рассчитаны на отслеживание 24 часа в день 7 дней в неделю — подписка должна отменяться при неактивности (например, при переходе устройства в ждущий режим) и использоваться только при прямой необходимости в отслеживании изменений в live-режиме. Через установленный для Push-уведомлений TCP-канал также могут отправляться и обычные DSN-запросы.

Источник: [ссылка]

Создатель СУБД Redis передал сопровождение проекта сообществу

Сальвадор Санфилиппо (Salvatore Sanfilippo), создатель СУБД Redis, объявил, что он больше не будет заниматься сопровождением проекта и посвятит своё время чему-нибудь другому. По словам Сальвадора, последние годы его работа свелась с разбору сторонних предложений по улучшению и изменению кода, но это не то, чем он был хотел заниматься, так как ему больше по душе написание кода и создание чего-то нового, чем решение рутинных задач сопровождения.

Сальвадор останется в составе консультативного совета Redis Labs, но ограничиться генерацией идей. Разработка и сопровождение передаются в руки сообщества. Пост руководителя проекта передан Yossi Gottlieb и Oran Agra, которые помогали Сальвадору в последние годы, понимают его видение проекта, небезразличны к сохранению духа сообщества Redis, хорошо разбираются в коде и внутреннем устройстве Redis. Тем не менее, уход Сальвадора существенное потрясение для сообщества, так как он полностью контролировал все вопросы разработки и играл, по большому счёту, роль «великодушного пожизненного диктатора«, через которого проходили все коммиты и запросы на слияние, который решал как будут исправляться ошибки, какие новшества следует добавить и какие архитектурные изменения приемлемы.

Вопрос определения дальнейшей модели разработки и взаимодействия с сообществом предложено проработать новым сопровождающим, которые уже анонсировали новую структуру управления, в которую будет вовлечено сообщество. Новая структура проекта подразумевает расширение командной работы, которая позволит масштабировать процессы разработки и сопровождения. Планируется сделать проект открытым и дружелюбным для участников из сообщества, которым станет проще принимать более активное и значительное участие в разработке.

Предложенная модель управления включает небольшую группу ключевых разработчиков (core team), в которую будут избраны проявившие себя участники, хорошо знакомые с кодом, участвующие в разработке и понимающие задачи проекта. В настоящее время в Core Team вошли три разработчика из компании Redis Labs — Yossi Gottlieb и Oran Agra, занявшие пост лидеров проекта, а также Itamar Haber, занявший пост лидера сообщества. В ближайшее время планируется избрать в Core Team нескольких участников из сообщества, выбранных на основе их вклада в развитие проекта. Для принятия существенных решений, таких как фундаментальные изменения ядра Redis, добавление новых структур, изменение протокола сериализации и изменения, нарушающие совместимость, предпочтительным является достижение консенсуса между всеми участниками Core Team.

По мере роста сообщества перед Redis могут возникнуть новые потребности в расширении функциональности, но новые лидеры заявляют о сохранении таких основополагающих атрибутов проекта, как ориентация на эффективность и скорость работы, стремление к простоте, принцип «пусть меньше, но лучше» и выбор правильных решений по умолчанию.

Источник: [ссылка]

Релиз Firefox 78

Состоялся релиз web-браузера Firefox 78, а также мобильной версии Firefox 68.10 для платформы Android. Выпуск Firefox 78 отнесён к категории веток с длительным сроком поддержки (ESR), обновления для которых выпускаются в течение года. Кроме того, сформировано обновление прошлой ветки с длительным сроком поддержки 68.10.0 (в дальнейшем ожидается ещё два обновления 68.11 и 68.12). В ближайшее время на стадию бета-тестирования перейдёт ветка Firefox 79, релиз которой намечен на 28 июля.

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

  • Расширена сводная страница (Protections Dashboard) с отчётами об эффективности работы механизмов защиты от отслеживания перемещений, проверки компрометации учётных данных и управления паролями. В новом выпуске появилась возможность просмотреть статистику использованию скомпрометированных учётных данных, а также отследить возможные пересечения сохранённых паролей с известными утечками пользовательских баз. Проверка осуществляется через интеграцию с базой данных проекта haveibeenpwned.com, включающей сведения о 9.7 миллиардах учётных записей, похищенных в результате взломов 456 сайтов. Сводка предоставляется на странице «about:protections» или через меню, вызываемое через клик на значок щита в адресной строке (вместо Show Report теперь показывается Protections Dashboard).
  • В Uninstaller добавлена кнопка «Refresh Firefox«, позволяющая сбросить в исходное состояние настройки и удалить все дополнения без потери накопившихся данных. В случае проблем пользователи часто пытаются решить их переустановкой браузера. Кнопка Refresh позволит добиться подобного эффекта не потеряв закладки, историю посещений, сохранённые пароли, Cookie, подключённые словари и данные для автозаполнения форм (при нажатии кнопки создаётся новый профиль и в него переносятся указанные БД). После нажатия Refresh будут потеряны дополнения, темы оформления, сведения о правах доступа, подключённые поисковые движки, локальные DOM-хранилища, сертификаты, изменённые настройки, пользовательские стили (userChrome, userContent).
  • В показываемое для вкладок контекстное меню добавлены элементы для отмены закрытия нескольких вкладок, а также для закрытия вкладок справа от текущей и закрытия всех вкладок, кроме текущей.
  • Обеспечено отключение срабатывания хранителя экрана во время осуществления видеозвонков и конференций на базе WebRTC.
  • На платформе Windows для GPU Intel при любых разрешения экрана включена система композитинга WebRender, написанная на языке Rust и позволяющая добиться существенного увеличения скорости отрисовки и снижения нагрузки на CPU. WebRender выносит на сторону GPU операции отрисовки содержимого страницы, которые реализованы через выполняемые в GPU шейдеры. Ранее WebRender был включён на платформе Windows 10 для GPU Intel при использовании небольших экранных разрешений, а также на системах с APU AMD Raven Ridge, AMD Evergreen и на ноутбуках с видеокартами NVIDIA. В Linux WebRender пока активируется для карт Intel и AMD только в ночных сборках, и не поддерживается для карт NVIDIA. Для принудительного включения в about:config следует активировать настройки «gfx.webrender.all» и «gfx.webrender.enabled» или запустить Firefox с выставленной переменной окружения MOZ_WEBRENDER=1.
  • До 100% доведена доля пользователей из Великобритании, для которых на странице новой вкладки включено отображение контента, рекомендованного сервисом Pocket. Ранее подобные страницы показывалась только пользователям из США, Канады и Германии. Оплаченные спонсорами блоки показывается только в США и явно помечены как реклама. Связанная с подбором контента персонализация выполняется на стороне клиента и без передачи сведений о пользователе третьим лицам (в браузер загружается весь список рекомендованных ссылок на текущий день, который ранжируется на стороне пользователя, отталкиваясь от данных истории посещений). Для отключения рекомендованного Pocket контента предусмотрена настройка в конфигураторе (Firefox Home Content/Recommended by Pocket) и опция «browser.newtabpage.activity-stream.feeds.topsites» в about:config.
  • Включены патчи, влияющие на производительность и стабильность аппаратного ускорения декодирования видео при помощи VA-API (поддерживается только в окружениях на базе Wayland).
  • Повышены требования к системным компонентам Linux. Для запуска Firefox в Linux теперь требуется как минимум Glibc 2.17, libstdc++ 4.8.1 и GTK+ 3.14.
  • Следуя плану по прекращению поддержки устаревших криптоалгоритмов по умолчанию отключены все наборы шифров TLS на базе DHE (TLS_DHE_*, протокол обмена ключей Диффи — Хеллмана). Для снижения возможного негативного влияния от отключения DHE добавлено два новых набора шифров AES-GCM на базе SHA2.
  • Отключена поддержка протоколов TLS 1.0 и TLS 1.1. Для обращения к сайтам по защищённому каналу связи сервер должен предоставить поддержку как минимум TLS 1.2. По данным Google в настоящее время около 0.5% загрузок web-страниц продолжает осуществляться с использованием устаревших версий TLS. Отключение произведено в соответствии с рекомендациями IETF (Internet Engineering Task Force). Причиной отказа от поддержки TLS 1.0/1.1 является отсутствие поддержки современных шифров (например ECDHE и AEAD) и требование поддержки старых шифров, надёжность которых на современном этапе развития вычислительной техники поставлена под сомнение (например, требуется поддержка TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA, для проверки целостности и аутентификации используется MD5 и SHA-1). Вернуть возможность работы с устаревшими версиями TLS можно через настройку security.tls.version.enable-deprecated = true или при помощи кнопки на странице с ошибкой, выводимой при заходе на сайт со старым протоколом.
  • Существенно улучшено качество работы с экранными ридерами для людей с нарушением зрения (решились проблемы с позиционированием курсора, устранены подвисания, ускорена обработка очень больших таблиц и т.п.). Для пользователей с мигренью и эпилепсией сокращены анимационные эффекты, такие как подсвечивание вкладок и расширение поисковой панели.
  • Для предприятий в групповые политики добавлены новые правила для настройки внешних приложений-обработчиков, отключения режима картинка-в-картинке, обязательности задания мастер-пароля.
  • В JavaScript-движке SpiderMonkey обновлена подсистема обработки регулярных выражений, которая синхронизирована с реализацией из JavaScript-движка V8, применяемого в браузерах на основе проекта Сhromium. Изменение позволило реализовать поддержку следующих возможностей, связанных с регулярными выражениями:
    • Именованные группы позволяют связать сопоставленные регулярным выражением части строки с определёнными именами вместо порядковых номеров совпадений (например, вместо «/(d{4})-(d{2})-(d{2})/» можно указать «/(?‹year›d{4})-(?‹month›d{2})-(?‹day›d{2})/» и получить доступ к году не через result[1], а через result.groups.year).
    • Экранирование классов Unicode-символов добавляет конструкции p{…} и P{…}, например, p{Number} определяет все возможные знаки с изображением цифр (включая символы вида ①), p{Alphabetic} — буквы (в том числе иероглифы), p{Math} — математические символы и т.п.
    • Флаг dotAll приводит к срабатыванию маски «.» в том числе для символов перевода строки.
    • Режим Lookbehind позволяет определить в регулярном выражении, что один шаблон предшествует другому (например, сопоставить сумму в долларах без захвата знака доллара).
  • Реализованы псевдоклассы CSS :is() и :where() для привязки CSS-правил к набору селекторов. Например, вместо
         header p:hover, main p:hover, footer p:hover {...}  

    можно указать

         :is(header, main, footer) p:hover {...}  
  • Включены псевдоклассы CSS :read-only и :read-write для привязки к элементам форм (input или textarea), которые запрещено или разрешено редактировать.
  • Добавлена поддержка метода Intl.ListFormat() для создания локализованных списков (например, замены «or» на «или», «and» на «и»).
         const lf = new Intl.ListFormat('en');     lf.format(['Frank', 'Christine', 'Flora']);     // → 'Frank, Christine, and Flora'      // при локали "ru" будет 'Frank, Christine и Flora'   
  • В метод Intl.NumberFormat добавлена поддержка форматирования единиц измерения, валют, научных и компактных обозначений (например, «Intl.NumberFormat(‘en’, {style: ‘unit’, unit: ‘meter-per-second’}»);
  • В консоли для web-разработчиков обеспечено детализированное журналирование ошибок, связанных с Promise, включая сведения об именах, стеках и свойствах, что существенно упрощает разбор ошибок при использовании таких фреймворков, как Angular.
  • В отладчике JavaScript реализована возможность раскрытия сокращённых имён переменных на основе source-map при использовании точек журналирования (Log points), позволяющих в момент срабатывания метки сбрасывать в web-консоль информацию о номере строки в коде и значениях переменных.
  • В интерфейсе инспектирования сети добавлены сведения о расширениях и CORS-ограничениях (Cross-Origin Resource Sharing), которые могут блокировать запрос.

Кроме новшеств и исправления ошибок в Firefox 78 устранена серия уязвимостей, из которых несколько помечены как критические, т.е. могут привести к выполнению кода злоумышленника при открытии специально оформленных страниц. В настоящее время информация с подробностями об исправленных проблемах безопасности недоступна, ожидается, что перечень уязвимостей будет опубликован в течение нескольких часов.

Источник: [ссылка]

Релиз языка программирования Lua 5.4

После пяти лет разработки доступен релиз Lua 5.4, быстрого и компактного скриптового языка программирования, получившего большое распространение в качестве встраиваемого (например, для определения конфигурации или для написания расширений). Код интерпретатора Lua написан на языке Си и распространяется под лицензией MIT.

Lua комбинирует простой процедурный синтаксис с мощными возможностями описания данных через использование ассоциативных массивов и расширяемой семантики языка. В Lua используется динамическая типизация, языковые конструкции преобразуются в байт-код, выполняющийся поверх регистровой виртуальной машины с автоматическим сборщиком мусора. Сам интерпретатор оформлен в виде библиотеки, легко интегрируемой в проекты на языках Си и Си++.

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

  • Реализован новый режим работы сборщика мусора — «generational«, который дополнил собой ранее доступный инкрементальный режим сборки мусора. Новый режим подразумевает более частый запуск сокращённого обхода, охватывающего только недавно созданные объекты. Полный обход всех объектов выполняется только, если после сокращённого обхода не удалось добиться желаемых показателей потребления памяти. Подобный подход позволяет достигнуть более высокой производительности и уменьшить потребление памяти в ситуации хранения большого числа объектов, живущих короткое время.
  • Добавлена возможность определения постоянных переменных, определяемых с атрибутом «const». Подобные переменные могут быть назначены только один раз и после инициализации уже не могут быть изменены.
  • Добавлена поддержка переменных «to-be-closed«, которые назначаются при помощи атрибута «close» и напоминают постоянные локальные переменные (с атрибутом const), отличаясь от них тем, что значение закрывается (вызывается метод «__close») при любом выходе из области видимости, например, после нормального завершения блока, перехода при помощи break/goto/return или выхода при возникновении ошибки.
  • Тип «userdata«, предоставляющий возможность хранения в Lua-переменных любых Си-данных (представляет блок данных в памяти или содержит Си-указатель), теперь может содержать несколько значений (иметь несколько метатаблиц).
  • Представлена новая реализация функции для генерации псевдослучайных чисел — math.random.
  • Добавлена система предупреждений, которые определяются при помощи выражения warn и, в отличие от ошибок, не влияют на дальнейшее выполнение программы.
  • Добавлена отладочная информация об аргументах функций и значениях, возвращаемых в операторе «return».
  • Предложена новая семантика для перебора целых чисел в циклах «for«. Расчёт числа итераций производится до начала цикла, что позволяет избежать переполнения переменной и зацикливания. Если начальное значение больше ограничивающего, то выводится ошибка.
  • В функцию ‘string.gmatch‘ добавлен новый необязательный аргумент ‘init’, определяющий с какой позиции начать поиск (по умолчанию с 1 символа).
  • Добавлены новые функции ‘lua_resetthread‘ (сбрасывает поток, очищает весь стек вызовов и закрывает все «to-be-closed» переменные) и ‘coroutine.close‘ (закрывает сопрограмму и все связанные «to-be-closed» переменные).
  • Функции преобразования строк в числа перемещены в библиотеку «string».
  • Вызов функции выделения памяти теперь может завершиться неудачей в случае сокращения размера блока памяти.
  • В функцию ‘string.format‘ добавлена поддержка нового спецификатора формата ‘%p’ (указатель, возвращаемый lua_topointer).
  • В библиотеке utf8 обеспечена поддержка кодов символов с номерами до 2^31.

Источник: [ссылка]

Проект KDE завершил первую фазу миграции на GitLab

Объявлено о завершении первой фазы перевода разработки KDE на GitLab и начале использования данной платформы в повседневной практике на сайте invent.kde.org. Первая фаза миграции охватывала перевод всех репозиториев с кодом KDE и процессов рецензирования. На второй фазе планируется задействовать возможности непрерывной интеграции, а на третьей перейти на использование GitLab для управления решением проблем и планированием задач.

Предполагается, что использование GitLab позволит снизить барьер вхождения новых участников, сделает участие в развитии KDE более привычным и расширит возможности инструментов для разработки, сопровождения цикла разработки, непрерывной интеграции и рецензирования изменений. Ранее проектом применялась связка из Phabricator и cgit, которая воспринимается многими новыми разработчиками как непривычная. GitLab достаточно близок по возможностям к GitHub, является свободным ПО и уже применяется во многих смежных открытых проектах, таких как GNOME, Wayland, Debian и FreeDesktop.org.

Миграция была проведена поэтапно — вначале возможности GitLab были сопоставлены с потребностями разработчиков и запущено тестовое окружение в котором согласившиеся на эксперимент небольшие и активные проекты KDE могли опробовать новую инфраструктуру. С учётом полученных отзывов началась работа по устранению выявленных недостатков и подготовке инфраструктуры для перевода более крупных репозиториев и команд разработчиков. Совместно с GitLab была проведена работа по добавлению в свободную редакцию платформы (Community Edition) возможностей, которых недоставало сообществу KDE.

Проект насчитывает около 1200 репозиториев со своей спецификой, для автоматизации переноса которых разработчиками KDE были написаны утилиты для миграции данных с сохранением описаний, аватаров и индивидуальных настроек (например, использование защищённых веток и специфичных методов слияния). Также были портированы имеющиеся Git-обработчики (hook-и), применяемые для проверки соответствия кодировки файлов и иных параметров принятым в KDE требованиям, а также для автоматизации закрытия отчётов о проблемах в Bugzilla. Для того чтобы упростить навигацию по более чем тысяче репозиториев, репозитории и команды были разбиты на группы и распределены по своим категориям в GitLab (рабочий стол, утилиты, графика, звук, библиотеки, игры, системные компоненты, PIM, фреймворки и т.п.).

Источник: [ссылка]

Chrome, Firefox и Safari ограничат время жизни TLS-сертификатов 13 месяцами

Разработчики проекта Chromium внесли изменение, прекращающее доверие к TLS-сертификатам, время жизни которых превышает 398 дней (13 месяцев). Ограничение будет действовать только для сертификатов, выписанных начиная с 1 сентября 2020 года. Для полученных до 1 сентября сертификатов с длительным сроком действия доверие будет сохранено, но ограничено 825 днями (2.2 года, 1 сентября будут блокированы сертификаты, выданные до 1 марта 2018 года).

Попытка открытия в браузере сайта с сертификатом, не соответствующим упомянутым критериям, будет приводить к отображению ошибки «ERR_CERT_VALIDITY_TOO_LONG». Компании Apple и Mozilla приняли решение ввести аналогичное ограничение в Safari и Firefox. Изменение было выставлено на голосование участниками ассоциации CA/Browser Forum, но решение не было утверждено из-за несогласия удостоверяющих центров.

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

Источник: [ссылка]

Chrome, Firefox и Safari ограничат время жизни TLS-сертификатов 13 месяцами

Разработчики проекта Chromium внесли изменение, прекращающее доверие к TLS-сертификатам, время жизни которых превышает 398 дней (13 месяцев). Ограничение будет действовать только для сертификатов, выписанных начиная с 1 сентября 2020 года. Для полученных до 1 сентября сертификатов с длительным сроком действия доверие будет сохранено, но ограничено 825 днями (2.2 года, 1 сентября будут блокированы сертификаты, выданные до 1 марта 2018 года).

Попытка открытия в браузере сайта с сертификатом, не соответствующим упомянутым критериям, будет приводить к отображению ошибки «ERR_CERT_VALIDITY_TOO_LONG». Компании Apple и Mozilla приняли решение ввести аналогичное ограничение в Safari и Firefox. Изменение было выставлено на голосование участниками ассоциации CA/Browser Forum, но решение не было утверждено из-за несогласия удостоверяющих центров.

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

Источник: [ссылка]

Гвидо ван Россум предложил включить в Python операторы для сопоставления с образцом

Гвидо ван Россум (Guido van Rossum) представил на рассмотрение сообществом черновик спецификации для реализации в языке Python операторов для сопоставления с образцом (match и case). Следует отметить, что предложения по добавлению операторов сопоставления с образцом уже публиковались в 2001 и 2006 годах (pep-0275, pep-3103), но были отвергнуты в пользу оптимизации конструкции «if … elif … else» для составления цепочек сопоставления.

Новая реализация во многом напоминает оператор «match», предоставляемый в языках Scala, Rust и F#, который выполняет сравнение результата выполнения указанного выражения со списком образцов, перечисленных в блоках на основе оператора «case». В отличие от оператора «switch», доступного в языках Си, Java и JavaScript, выражения на основе «match» предлагают гораздо более широкую функциональность. Отмечается, что предложенные операторы позволят улучшить читаемость кода, упростят сопоставление произвольных Python-объектов и отладку, а также повысят надёжность кода благодаря возможности расширенной статической проверки типов.

  def http_error(status):      match status:          case 400:              return "Bad request"          case 401|403|404:              return "Not allowed"          case 418:              return "I'm a teapot"          case _:              return "Something else"  

Например, возможна распаковка объектов, кортежей, списков и произвольных последовательностей для привязки переменных на основе имеющихся значений. Допускается определение вложенных шаблонов, использование в шаблоне дополнительных условий «if», применение масок («[x, y, *rest]»), маппинга связок ключ/значение (например, {«bandwidth»: b, «latency»: l} для извлечения значений «bandwidth» и «latency» и словаря), извлечения подшаблонов (оператор «:=»), использования именованных констант в шаблоне. В классах возможна настройка поведения при сопоставлении при помощи метода «__match__()».

     from dataclasses import dataclass       @dataclass     class Point:         x: int         y: int       def whereis(point):         match point:             case Point(0, 0):                 print("Origin")             case Point(0, y):                 print(f"Y={y}")             case Point(x, 0):                 print(f"X={x}")             case Point():                 print("Somewhere else")             case _:                 print("Not a point")       match point:         case Point(x, y) if x == y:             print(f"Y=X at {x}")         case Point(x, y):             print(f"Not on the diagonal")         RED, GREEN, BLUE = 0, 1, 2     match color:         case .RED:             print("I see red!")         case .GREEN:             print("Grass is green")         case .BLU     E:             print("I'm feeling the blues :(")    

Для рецензирования подготовлен набор патчей с экспериментальной реализацией предложенной спецификации, но конечный вариант ещё обсуждается. Например, предлагается вместо выражения «case _:» для значения по умолчанию использовать ключевое слово «else:» или «default :», так как «_» в других контекстах применяется как временная переменная. Также вызывают вопросы внутренняя организация, основанная на трансляции новых выражений в байткод, аналогичный используемому для конструкций «if … elif … else», что не обеспечит желаемой производительности при обработке очень больших наборов сопоставлений.

Источник: [ссылка]

Релиз дистрибутива Linux Mint 20

Представлен релиз дистрибутива Linux Mint 20, перешедший на пакетную базу Ubuntu 20.04 LTS. Дистрибутив полностью совместим с Ubuntu, но существенно отличается подходом к организации интерфейса пользователя и подбором используемых по умолчанию приложений. Разработчики Linux Mint предоставляют десктоп-окружение, соответствующее классическим канонам организации рабочего стола, которое является более привычным для пользователей, не принимающих новые методы построения интерфейса GNOME 3. Для загрузки доступны DVD-сборки на базе оболочек MATE 1.24 (1.9 Гб), Cinnamon 4.6 (1.8 Гб) и Xfce 4.14 (1.8 Гб). Linux Mint 20 отнесён к выпускам с длительным сроком поддержи (LTS), обновления для которого будут формироваться до 2025 года.

Основные изменения в Linux Mint 20 (MATE, Cinnamon, Xfce):

  • В состав включены версии десктоп-окружений MATE 1.24 и Cinnamon 4.6, оформление и организация работы в которых продолжает развитие идей GNOME 2 — пользователю предлагается рабочий стол и панель с меню, областью быстрого запуска, перечнем открытых окон и системным лотком с запущенными апплетами. Cinnamon основан на GTK3+ и технологиях GNOME 3. Проект развивает оболочку GNOME Shell и оконный менеджер Mutter в направлении предоставления окружения в стиле GNOME 2 с более современным оформлением и задействованием элементов из GNOME Shell, дополняющих средства классического десктопа. MATE продолжает развитие кодовой базы GNOME 2.32 и полностью избавлен от пересечений с GNOME 3, что позволяет использовать традиционный рабочий стол GNOME 2 параллельно с рабочим столом GNOME 3. Редакция с рабочим столом Xfce как и в прошлой версии поставляется с Xfce 4.14.

    В Cinnamon 4.6 реализована поддержка дробного масштабирования, которая позволяет подобрать оптимальный размер элементов на экранах с высокой плотностью пикселей (HiDPI), например, можно увеличить выводимые элементы интерфейса не в 2 раза, а в 1.5.

    Проведена оптимизация производительности кода для обработки миниатюр в файловом менеджере Nemo. Генерация пиктограмм теперь производится асинхронно, а пиктограммы загружаются с более низким приоритетом по сравнению с навигацией по каталогам (идея в том, что приоритет отдаётся обработке контента, а загрузка пиктограмм выполняется по остаточному принципу, что позволяет заметно ускорить работу ценой более длительного отображения пиктограмм-заглушек).

    Переработан диалог настройки параметров мониторов. Добавлена возможность выбора частоты обновления экрана и поддержка назначения своих коэффициентов масштабирования для каждого монитора, что решает проблему с работой при одновременном подключении обычного и HiDPI монитора.

  • Прекращено формирование сборок для 32-разрядных систем x86. Как и Ubuntu дистрибутив теперь доступен только для 64-разрядных систем.
  • Из поставки исключены snap-пакеты и snapd, а также запрещена автоматическая установка snapd вместе с другими пакетами, устанавливаемыми через APT. При желании пользователь может установить snapd вручную, но его добавление с другими пакетами без ведома пользователя запрещено. Недовольство Linux Mint связано с навязыванием сервиса Snap Store и с потерей контроля над пакетами в случае их установки из snap. Разработчики не могут внести исправления в подобные пакеты, управлять их доставкой и проводить аудит изменений. Snapd выполняется в системе с правами root и представляет опасность в случае компрометации инфраструктуры.
  • В состав включена новая утилита Warpinator для обмена файлами между двумя компьютерами в локальной сети, использующая шифрование при передаче данных.
  • Предложен апплет для переключения между энергоэффективным GPU Intel и высокопроизводительным GPU NVIDIA в системах с гибридной графикой на базе технологии NVIDIA Optimus.

    Реализована полная поддержка профиля «по требованию» («On-Demand»), при включении которого по умолчанию для отрисовки в сеансе применяется GPU Intel, а в меню приложений предоставлена возможность запуска каждой программы с использованием GPU NVIDIA (в вызываемом через правый клик мыши контекстном меню показывается пункт «Run with NVIDIA GPU»). Для управления запуском на GPU NVIDIA из командной строки предложены утилиты nvidia-optimus-offload-glx и nvidia-optimus-offload-vulkan, позволяющие переключать на GNU NVIDIA отрисовку через GLX и Vulkan. Для загрузки без проприетарных драйверов NVIDIA в «Compatibility Mode» предусмотрена опция «nomodeset».

  • В апплет XappStatusIcon добавлена возможность обработки событий прокрутки колесом мыши и реализована новая функция, похожая на gtk_menu_popup(), упрощающая портирование приложений с GtkStatusIcon. Обеспечена поддержка API StatusNotifier (Qt и приложения Electron), libAppIndicator (индикаторы Ubuntu) и libAyatana (индикаторы Ayatana для Unity), что позволяет использовать XappStatusIcon как единый механизм для сворачивания в системный лоток, не требующий поддержки разных API на стороне рабочего стола. Изменение улучшило поддержку размещения в системном лотке индикаторов, приложений на базе платформы Electron и протокола xembed (GTK-технология размещения пиктограмм в системном лотке). XAppStatusIcon выносит отрисовку пиктограммы, всплывающей подсказки и метки на сторону апплета, и использует DBus для передачи информации через апплеты, а также событий о кликах. Отрисовка на стороне апплета предоставляет качественные пиктограммы любых размеров и решает проблемы с отображением.

    На использование XAppStatusIcon переведены апплеты Blueberry, mintupdate, mintreport, nm-applet, mate-power-manager, mate-media, redshift и rhythmbox, что позволило придать системному лотку целостный вид. Во всех редакциях (Cinnamon, MATE and Xfce) унифицированы многие пиктограммы в системном лотке, добавлены символьные пиктограммы и реализована поддержка экранов с высокой плотностью пикселей (HiDPI).

  • Продолжено усовершенствование приложений, развиваемых в рамках инициативы X-Apps, нацеленной на унификацию программного окружения в редакциях Linux Mint на базе разных рабочих столов. В приложениях X-Apps применены современные технологии (GTK3 для поддержки HiDPI, gsettings и т.п.), но сохранены традиционные элементы интерфейса, такие как панель инструментов и меню. Среди таких приложений: текстовый редактор Xed, менеджер фотографий Pix, просмотрщик документов Xreader, просмотрщик изображений Xviewer.
    • В текстовый редактор Xed (ответвление от Pluma/Gedit) добавлена поддержка объединения строк и удаления лидирующих пустых строк перед сохранением файла.
    • В Xviewer на панель добавлены кнопки для перехода в полноэкранный режим и показа широкоформатного слайд-шоу (diaporama). Обеспечено запоминание раскрытия окна на весь экран.
    • В просмотрщик документов Xreader (ответвление от Atril/Evince) на панель добавлена кнопка для вывода на печать.
  • Полностью переработан интерфейс Gdebi, утилиты для открытия и установки deb-пакетов.
  • В теме оформления Mint-Y предложена новая палитра, в которой за счёт манипуляций с оттенком и насыщенностью подобраны более яркие цвета, но без потери читаемости и комфорта. Предложены новые наборы цветов Pink и Aqua.
  • Добавлены новые жёлтые пиктограммы каталогов.
  • В интерфейсе приветствия входа в систему пользователю предложено выбрать цветовую схему.
  • В экран входа в систему (Slick Greeter) добавлена поддержка растягивания фонового изображения на несколько мониторов.
  • В Apturl произведена смена бэкенда с Synaptic на Aptdaemon.
  • В APT для новых устанавливаемых пакетов (не для обновлений) по умолчанию включена установка пакетов из категории рекомендованных (recommends).
  • При запуске live-сеанса под управлением VirtualBox обеспечено выставление разрешения экрана как минимум в 1024×768.
  • Выпуск поставляется с прошивками linux-firmware 1.187 и ядром Linux 5.4.

Источник: [ссылка]

Выпуск модуля LKRG 0.8 для защиты от эксплуатации уязвимостей в ядре Linux

Проект Openwall опубликовал выпуск модуля ядра LKRG 0.8 (Linux Kernel Runtime Guard), предназначенного для выявления и блокирования атак и нарушений целостности структур ядра. Например, модуль может защитить от несанкционированного внесения изменений в работающее ядро и попыток изменения полномочий пользовательских процессов (определение применения эксплоитов). Модуль подходит как для организации защиты от уже известных эксплоитов для ядра Linux (например, в ситуациях когда в системе проблематично обновить ядро), так и для противостояния эксплоитам для ещё неизвестных уязвимостей. Код проекта распространяется под лицензией GPLv2.

Среди изменений в новой версии:

  • Изменено позиционирование проекта LKRG, который теперь не разделяется на отдельные подсистемы для проверки целостности и определения применения эксплоитов, а преподносится как целостный продукт для выявления атак и различных нарушений целостности;
  • Обеспечена совместимость с ядрами Linux с 5.3 по 5.7, а также с ядрами, собранными с агрессивными оптимизациями GCC, без опций CONFIG_USB и CONFIG_STACKTRACE или с опцией CONFIG_UNWINDER_ORC, а также с ядрами, в которых отсутствуют перехватываемые LKRG функции, если без них можно обойтись;
  • При сборке обеспечена проверка некоторых обязательных настроек ядра CONFIG_* для формирования осмысленных сообщений об ошибках вместо неясных сбоев;
  • Добавлена поддержка ждущего (ACPI S3, suspend to RAM) и спящего (S4, suspend to disk) режимов;
  • В Makefile добавлена поддержка DKMS;
  • Реализована экспериментальная поддержка 32-разрядных платформ ARM (протестировано на Raspberry Pi 3 Model B). Ранее доступная поддержка AArch64 (ARM64) дополнена обеспечением совместимости с платой Raspberry Pi 4;
  • Добавлены новые обработчики (hook), в том числе обработчик вызова capable() для лучшего определения эксплоитов, манипулирующих «capabilities«, а не идентификаторами процессов (credentials);
  • Предложена новая логика определения попыток выхода из ограничений пространств имён (например, из контейнеров Docker);
  • На системах x86-64 обеспечена проверка и применение бита SMAP (Supervisor Mode Access Prevention), предназначенного для блокирования доступа к данным в пространстве пользователя из привилегированного кода, выполняемого на уровне ядра. Защита SMEP (Supervisor Mode Execution Prevention) была реализована ранее;
  • В процессе работы обеспечено размещение настроек LKRG в странице памяти, обычно доступной только для чтения;
  • Добавлены проверки, допускающие вывод важных сведений, таких как информация об адресах в ядре, только в логи с уровнем 4 и выше.
  • Повышена масштабируемость БД отслеживания процессов — вместо одного дерева RB, защищаемого одним spinlock, задействована хэш таблица из 512 деревьев RB, защищённая 512 блокировками чтения-записи;
  • Реализован и включён по умолчанию режим, при котором проверка целостности идентификаторов процесса часто выполняется только для текущей задачи, а также опционально для активируемых (waking up) задач. Для остальных задач, находящихся в состоянии сна или работающих без обращения контролируемому в LKRG API ядра, проверка выполняется реже.
  • Добавлены новые sysctl и параметры модуля для тонкой настройки LKRG;
  • Настройки по умолчанию изменены для достижения более взвешенного баланса между оперативностью выявления нарушений и эффективностью реакции с одной стороны, и влиянием на производительность и риском ложных срабатываний с другой;
  • Unit-файл systemd переработан для загрузки модуля LKRG на раннем этапе загрузки (для отключения модуля может использоваться параметр командной строки ядра);
  • Разработчик дистрибутива Whonix начал формирование готовых пакетов с DKMS для Debian, Whonix, Qubes и Kicksecure.

С учётом предложенных в новом выпуске оптимизаций снижение производительности при применении LKRG 0.8 оценивается на уровне 2.5% в режиме максимальной защиты и 2% при отключении некоторых проверок.

В недавно проведённом исследовании эффективности пакетов для выявления руткитов LKRG показал лучшие результаты, без ложных срабатываний определив 8 из 9 протестированных руткиков, работающих на уровне ядра (были выявлены руткиты Diamorphine, Honey Pot Bears, LilyOfTheValley, Nuk3 Gh0st, Puszek, Reptile, Rootfoo Linux Rootkit и Sutekh, но пропущен Keysniffer, который является модулем ядра с кейлоггером, а не руткитом в прямом смысле). Для сравнения пакеты AIDE, OSSEC и Rootkit Hunter выявили 2 руткита из 9, а Chkrootkit не выявили ни одного. При этом LKRG не поддерживает определение руткитов, размещаемых в пространстве пользователя, поэтому наибольшая эффективность достигается при использовании связки AIDE и LKRG, позволившей выявить 14 из 15 руткитов всех типов.

Проверка целостности в LKRG выполняется на основе сравнения хэшей, вычисляемых для наиболее важных областей памяти и структур данных ядра (IDT (Interrupt Descriptor Table), MSR, таблицы системных вызовов, все процедуры и функции, обработчики прерываний, списки загруженных модулей, содержимое секции .text модулей, атрибуты процессов и т.п.). Процедура проверки активируется как периодически по таймеру, так и при наступлении различных событий в ядре (например, при выполнении системных вызовов setuid, setreuid, fork, exit, execve, do_init_module и т.п.).

Определение возможного применения эксплоитов и блокирование атак производится на стадии до предоставления ядром доступа к ресурсам (например, до открытия файла), но после получения процессом несанкционированных полномочий (например, смена UID). При выявлении несанкционированного поведения процессов выполняется их принудительное завершение, чего достаточно для блокирования многих эксплоитов.

Источник: [ссылка]

Релиз минималистичного набора системных утилит BusyBox 1.32

Представлен релиз пакета BusyBox 1.32 с реализацией набора стандартных утилит UNIX, оформленных в виде единого исполняемого файла и оптимизированных для минимального потребления системных ресурсов при размере комплекта менее 1 Мб. Первый выпуск новой ветки 1.32 позиционируется как нестабильный, полная стабилизация будет обеспечена в версии 1.32.1, которая ожидается примерно через месяц. Код проекта распространяется под лицензией GPLv2.

Модульный характер BusyBox даёт возможность сформировать один унифицированный исполняемый файл, содержащий в себе произвольный набор реализованных в пакете утилит (каждая утилита доступна в форме символической ссылки на данный файл). Размер, состав и функциональность коллекции утилит можно варьировать в зависимости от потребностей и возможностей встраиваемой платформы, для которой осуществляется сборка. Пакет самодостаточный, при статической сборке с uclibc для создания рабочей системы поверх ядра Linux требуется лишь создать несколько файлов устройств в директории /dev и подготовить файлы конфигурации. По сравнению с прошлым выпуском 1.31 потребление оперативной памяти типовой сборкой BusyBox 1.32 увеличилось на 3590 байт (с 1011750 до 1015340 байт).

BusyBox является основным инструментом в борьбе с нарушением GPL в прошивках. Организации Software Freedom Conservancy (SFC) и Software Freedom Law Center (SFLC) от лица разработчиков BusyBox как через суд, так и путём заключения внесудебных соглашений неоднократно успешно воздействовала на компании, не предоставляющие доступ к исходному коду GPL-программ. В то же время автор BusyBox всячески возражает против такой защиты — считая что она ломает ему бизнес.

В версии BusyBox 1.32 выделяются следующие изменения:

  • Добавлена новая команда mim для запуска скиптов из заданного файла Mimfile (чем-то напоминает урезанную утилиту make);
  • В утилите find добавлена опция «-empty» для проверки пустых файлов;
  • В утилите wget расширен лимит на число перенаправлений и реализована поддержка проверки сертификатов TLS при сбооке с ENABLE_FEATURE_WGET_OPENSSL;
  • В grep добавлена корректная поддержка списка шаблонов (pattern_list) и добавлена опция «-R» (рекурсивная обрабтка содержимого каталога);
  • Решены проблемы, проявляющиеся при сборке в Clang 9 и устранены предупреждения компилятора;
  • Предложена большая порция исправлений в командных оболочках ash и hush, нацеленных на улучшение совместимости с другими оболочками. В ash и hush добавлена возможность автодополнения встроенных команд табуляцией. В ash стабилизированы новые встроенные команды.
  • В утилите fdisk появилась поддержка разделов HFS и HFS+;
  • В init улучшена обработка состояния гонки при поступлении сигналов;
  • В утилиту наглядного мониторинга за параметрами системы nmeter добавлен формат вывода «%NT» (выровненное время с нулями);
  • В taskset добавлена возможность обработки и вывода списка CPU (опция «-c»);
  • В tar изменено поведение опции «-a», которая вместо включения сжатия «lzma» теперь связана с автоопределением по расширению файла;
  • В udhcpc6 добавлена поддержка режима «stateless» для DHCPv6 (сервер отдаёт лишь параметры сети, без назначения адреса);
  • В nslookup обеспечена обработка ответов без записей RR и добавлена поддержка записей SRV;
  • В brctl добавлены новые команды «showmacs» и «showstp»;
  • В dhcpc добавлена поддержка параметра»relay server»;
  • В syslogd добавлена настройка для отображения времени с миллисекундной точностью;
  • В httpd при работе в режиме NOMMU разрешена установка иного домашнего каталога и обеспечена работа опции ‘-h’ при запуске фонового процесса;
  • В xargs налажена обработка аргументов, заключённых в кавычки, и обеспечено корректное поведение опции «-n»;
  • Исправлены недоработки в утилитах grep, top, dc, gzip, awk, bc, ntpd, pidof, stat, telnet, tftp, whois, unzip, chgrp, httpd, vi, route.

Кроме того, в прошлом месяце состоялся релиз Toybox 0.8.3, аналога BusyBox, развиваемого бывшим мэйнтейнером BusyBox и распространяемого под лицензией BSD. Основным назначением Toybox является предоставление производителям возможности использования минималистичного набора стандартных утилит без открытия исходных текстов модифицированных компонентов. По возможностям Toybox пока отстаёт от BusyBox, но уже реализовано 272 базовых команд (204 полностью и 68 частично) из 343 запланированных.

Из новшеств Toybox 0.8.3 можно отметить:

  • Добавлены новые команды rtcwake, blkdiscard, getopt и readelf;
  • В «make root» обеспечена возможность создание рабочего загрузочного окружения только на основе ядра Linux и утилит Toybox, которое может быть загружено при помощи собственного init-скрипта;
  • Добавлена начальная поддержка модулей с отдельными реализациями утилит, не входящими в основной состав ToyBox;
  • Командный интерпретатор toysh доведён до готовности на 80% (пока отсутствует поддержка функций, истории, управления терминалом, job-заданий, $((math)), шаблонов);
  • Добавлена поддержка дополнительных опций в различные утилиты, включая patch, cal, cp, mv, lsattr, chattr, ls, id, netcat и setsid.

Источник: [ссылка]