The OpenNET Project / Index page

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

01.04.2020 Выпуск пакетного фильтра nftables 0.9.4 (58 +14)
  Опубликован выпуск пакетного фильтра nftables 0.9.4, развивающегося в качестве замены iptables, ip6table, arptables и ebtables за счёт унификации интерфейсов фильтрации пакетов для IPv4, IPv6, ARP и сетевых мостов. В пакет nftables входят компоненты пакетного фильтра, работающие в пространстве пользователя, в то время как на уровне ядра работу обеспечивает подсистема nf_tables, входящая в состав ядра Linux начиная с выпуска 3.13. Необходимые для работы выпуска nftables 0.9.4 изменения включены в состав будущей ветки ядра Linux 5.6.

На уровне ядра предоставляется лишь общий интерфейс, не зависящий от конкретного протокола и предоставляющий базовые функции извлечения данных из пакетов, выполнения операций с данными и управления потоком. Непосредственно правила фильтрации и специфичные для протоколов обработчики компилируются в байткод в пространстве пользователя, после чего данный байткод загружается в ядро при помощи интерфейса Netlink и выполняется в ядре в специальной виртуальной машине, напоминающей BPF (Berkeley Packet Filters). Подобный подход позволяет значительно сократить размер кода фильтрации, работающего на уровне ядра и вынести все функции разбора правил и логики работы с протоколами в пространство пользователя.

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

  • Поддержка диапазонов в присоединениях (concatenation, определённые связки адресов и портов, упрощающие сопоставление). Например, для набора "whitelist", элементы которого являются присоединением, указание флага "interval" будет указывать на то, что набор может включать диапазоны в присоединении (для присоединения "ipv4_addr . ipv4_addr . inet_service" раньше можно было перечислять точные совпадения вида "192.168.10.35 . 192.68.11.123 . 80", а теперь можно указывать группы адресов "192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80"):
    
        table ip foo {
               set whitelist {
                       type ipv4_addr . ipv4_addr . inet_service
                       flags interval
                       elements = { 192.168.10.35-192.168.10.40 . 192.68.11.123-192.168.11.125 . 80 }
               }
    
               chain bar {
                       type filter hook prerouting priority filter; policy drop;
                       ip saddr . ip daddr . tcp dport @whitelist accept
               }
        }
    
  • В наборах и map-списках обеспечена возможность использования директивы "typeof", определяющей формат элемента при сопоставлении. Например:
    
    
         table ip foo {
                set whitelist {
                        typeof ip saddr
                        elements = { 192.168.10.35, 192.168.10.101, 192.168.10.135 }
                }
    
                chain bar {
                        type filter hook prerouting priority filter; policy drop;
                        ip daddr @whitelist accept
                }
         }
    
         table ip foo {
                map addr2mark {
                    typeof ip saddr : meta mark
                    elements = { 192.168.10.35 : 0x00000001, 192.168.10.135 : 0x00000002 }
                }
         }
    
  • Добавлена возможность использования присоединений в NAT-привязках, что позволяет указывать адрес и порт при определении NAT-преобразований на основе map-списков или именованных наборов:
    
          nft add rule ip nat pre dnat ip addr . port to ip saddr map { 1.1.1.1 : 2.2.2.2 . 30 }
    
     
          nft add map ip nat destinations { type ipv4_addr . inet_service : ipv4_addr . inet_service \\; }
          nft add rule ip nat pre dnat ip addr . port to ip saddr . tcp dport map @destinations
    
  • Поддержка аппаратного ускорения с выносом некоторых операций фильтрации на плечи сетевой карты. Ускорение включается через утилиту ethtool ("ethtool -K eth0 hw-tc-offload on"), после чего активируется в nftables для основной цепочки при помощи флага "offload". При использовании ядра Linux 5.6 поддерживается аппаратное ускорение для сопоставления полей заголовка и проверки входящего интерфейса в сочетании с приёмом, отбрасыванием, дублированием (dup) и перенаправлением (fwd) пакетов. В примере ниже операции отбрасывания пакетов, приходящих от адреса 192.168.30.20, выполняются на уровне сетевой карты, без передачи пакетов ядру:
    
         # cat file.nft
         table netdev x {
                chain y {
                    type filter hook ingress device eth0 priority 10; flags offload;
                    ip saddr 192.168.30.20 drop
                }
         }
         # nft -f file.nft
    
  • Улучшено информирование о месте ошибки в правилах.
    
         # nft delete rule ip y z handle 7
         Error: Could not process rule: No such file or directory
         delete rule ip y z handle 7
                        ^
    
         # nft delete rule ip x x handle 7
         Error: Could not process rule: No such file or directory
         delete rule ip x x handle 7
                                   ^
    
         # nft delete table twst
         Error: No such file or directory; did you mean table ‘test' in family ip?
         delete table twst
                      ^^^^
    

    В первом примере показано, что таблица "y" отсутствует в системе, во втором, что отсутствует обработчик "7", а в третьем, что выводится подсказка об опечатке при наборе имени таблицы.

  • Добавлена поддержка проверки slave-интерфейса через указание "meta sdif" или "meta sdifname":
    
            ... meta sdifname vrf1 ...
    
  • Добавлена поддержка операции сдвига вправо или влево. Например, для сдвига существующей метки пакета влево на 1 бит и установки меньшего бита в 1:
    
            ... meta mark set meta mark lshift 1 or 0x1 ...
    
  • Реализована опция "-V" для отображения расширенной информации о версии.
    
         # nft -V
           nftables v0.9.4 (Jive at Five)
              cli:          readline
              json:         yes
              minigmp:      no
              libxtables:   yes
    
  • Опции командной строки теперь обязательно должны указываться перед командами. Например, нужно указывать "nft -a list ruleset", а запуск "nft list ruleset -a" приведёт к выводу ошибки.

    1. OpenNews: Выпуск пакетного фильтра nftables 0.9.3
    2. OpenNews: В Debian 11 предлагается по умолчанию задействовать nftables и firewalld
    3. OpenNews: Разработчики Netfilter официально объявили инструментарий iptables устаревшим
    4. OpenNews: Для ядра Linux предложен новый пакетный фильтр bpfilter
    5. OpenNews: В состав ядра 4.18 одобрено включение нового пакетного фильтра bpfilter
Обсуждение (58 +14) | Тип: Программы |
01.04.2020 Huawei развивает протокол NEW IP, нацеленный на использование в сетях будущего (194 –35)
  Компания Huawei совместно с исследователями из Университетского колледжа Лондона ведёт разработку сетевого протокола NEW IP, который учитывает тенденции развития телекоммуникационных устройств будущего и повсеместное распространение устройств интернета вещей, систем дополненной реальности и голографических коммуникаций. Проект изначально позиционируется как международный, в котором могут принять участие любые исследователи и заинтересованные компании. Сообщается, что новый протокол передан на рассмотрение в Международный союз электросвязи (ITU), но он будет готов для тестирования не раньше 2021 года.

Протокол NEW IP предоставляет более эффективные механизмы адресации и управления трафиком, а также решает проблему организации взаимодействия разнотипных сетей в условиях роста фрагментации глобальной сети. Всё более актуальной становится проблема обмена информацией между разнородными сетями, такими как сети устройств интернета-вещей, промышленные, сотовые и спутниковые сети, в которых могут применяться собственные стеки протоколов.

Например, для IoT сетей желательно использование коротких адресов для экономии памяти и ресурсов, промышленные сети вообще избавляются от IP для повышения эффективности обмена данными, спутниковые сети не могут использовать фиксированную адресацию из-за постоянного перемещения узлов. Частично проблемы попытаются решить при помощи протокола 6LoWPAN (IPv6 over Low power Wireless Personal Area Networks), но без динамической адресации, он не настолько эффективен, как хотелось бы.

Второй решаемой в NEW IP проблемой является то, что IP ориентирован на идентификацию физических объектов в привязке к их местоположению, и не рассчитан на идентификацию виртуальных объектов, таких как контент и сервисы. Для абстрагирования сервисов от IP-адресов предлагаются различные механизмы маппинга, которые лишь усложняют систему и создают дополнительные угрозы приватности. Как решение для улучшения доставки контента развиваются архитектуры ICN (Information-Centric Networking), такие как NDN (Named Data Networking) и MobilityFirst, предлагающие использовать иерархическую адресацию, которые не решают проблему с доступном к мобильному (перемещаемому) контенту, создают дополнительную нагрузку на маршрутизаторы или не позволяют установить end-to-end соединения между мобильными пользователями.

Третьей задачей, которую призван решить NEW IP, является тонкое управление качеством сервиса. В будущих системах интерактивной коммуникации потребуются более гибкие механизмы управления пропускной способностью, требующие применения разных методов обработки в контексте отдельных сетевых пакетов.

Отмечаются три ключевые особенности NEW IP:

  • IP-адреса переменной длины, способствующие организации обмена данными между различными типами сетей (например, для взаимодействия устройств интернета вещей в домашней сети могут использоваться короткие адреса, а для обращения к глобальным ресурсам длинные). Не обязательность указания адреса источника или адреса назначения (например, для экономии ресурсов при отправке данных с датчика).
  • Допускается определение разной семантики адресов. Например, помимо классического формата IPv4/IPv6, можно использовать вместо адреса уникальные идентификаторы сервиса. Данные идентификаторы обеспечивают привязку на уровне обработчиков и сервисов, не привязываясь к конкретному местоположению серверов и устройств. Идентификаторы сервисов позволяют обойтись без DNS и маршрутизировать запрос к ближайшему обработчику, соответствующему указанному идентификатору. Например, датчики в умном доме могут отправлять статистику определённому сервису без определения его адреса в классическом понимании. Адресоваться могут как физические (компьютеры, смартфоны, датчики), так и виртуальные объекты (контент, сервисы).

    По сравнению с IPv4/IPv6 в плане обращения к сервисам в NEW IP отмечаются следующие преимущества: Более быстрое выполнение запроса за счёт прямого обращения по адресу сервиса без ожидания на определение адреса в DNS. Поддержка динамического развёртывания сервисов и контента - NEW IP адресует данные на основании принципа "что нужно", а не "где получить", что кардинально отличается от принятой в IP маршрутизации, основанной на знании точного местоположения (IP-адреса) ресурса. Построение сетей с оглядкой на информацию о сервисах, которая учитывается при расчёте таблиц маршрутизации.

  • Возможность определения произвольных полей в заголовке IP-пакета. Заголовок допускает прикрепление идентификаторов функций (FID, Function ID), применяемых для обработки содержимого пакета, а также привязываемых к функциям метаданных (MDI - Metadata Index и MD - Metadata). Например, в метаданных может быть определены требования к качеству сервиса, в соответствии с которыми при адресации по типу сервиса будет выбран обработчик, обеспечивающий максимальную пропускную способность.

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

Растиражированные в СМИ сведения о встроенных возможностях, обеспечивающих блокировку ресурсов, способствующих деанонимизации и вводящих обязательную аутентификацию, в доступной технической спецификации не упоминаются и, судя по всему, являются домыслами. Технически NEW IP лишь предоставляет больше гибкости при создании расширений, поддержка которых определяется производителями маршрутизаторов и программного обеспечения. В контексте возможности смены IP для обхода блокировок, блокировка по идентификатору сервиса может сравниться с блокировкой доменного имени в DNS.

  1. OpenNews: Компания Google развивает новый сетевой протокол QUIC
  2. OpenNews: Bloomberg заявил о возможном бэкдоре в оборудовании Huawei (опровергнуто)
  3. OpenNews: Google ограничит доступ Huawei к своим сервисам для Android
  4. OpenNews: Выпуск Commotion 1.0, свободной платформы для удобного развёртывания mesh-сетей
  5. OpenNews: RIPE выделил последний свободный блок IPv4
Обсуждение (194 –35) | Тип: К сведению | Интересно
31.03.2020 Выпуск Eclipse Theia 1.0, альтернативы редактору кода Visual Studio Code (175 +5)
  Организация Eclipse Foundation опубликовала первый стабильный выпуск редактора кода Eclipse Theia 1.0, созданного с целью предоставления по-настоящему открытой альтернативы проекту Visual Studio Code. Редактор изначально развивается с оглядкой на полноценное использование как в форме приложения для рабочего стола, так и для запуска в облаке с доступом через web-браузер. Код написан на языке TypeScript и распространятся под свободной лицензией EPLv2 (Eclipse Public License). Проект развивается при участии компаний IBM, Red Hat, Google, ARM, Ericsson, SAP и Arduino.

Основные особенности:

  • Использование одной общей кодовой базы для сборки настольного и web-вариантов.
  • Поддержка разработки на JavaScript, Java, Python и других языках, для которых имеются серверные обработчики на основе протокола LSP (Language Server Protocol), которые берут на себя операции, связанные с разбором семантики языка. Применение LSP позволяет использовать более 60 существующих обработчиков, подготовленных для редакторов кода Visual Studio Code, Nuclide и Atom, в которых также применяется LSP.
  • Разработку Theia курирует организация Eclipse Foundation, предоставляющая нейтральную площадку, независящую от решений отдельных компаний и действующую в интересах сообщества.
  • Проект спроектирован максимально модульным, позволяет расширять или менять любую функциональность через дополнения.
  • Имеется возможность создания IDE-подобных продуктов на базе Theia путём подключения необходимых дополнений через перечисление их в файле package.json.
  • Поддержка протокола VS Code Extension, позволяющего подключать расширения, разработанные для Visual Studio Code.
  • Интегрированный полноценный эмулятор терминала, который автоматически обновляет соединение в случае перезагрузки страницы в браузере, не теряя полной истории работы.
  • Гибкая компоновка элементов интерфейса. Экранная оболочка основана на фреймворке PhosphorJS, допускающем произвольные перемещения блоков (можно скрывать панели, изменять размер блоков и менять их местами).

Редактор построен на основе архитектуры фронтэнд/бэкенд, подразумевающей запуск двух процессов, один из которых отвечает за отрисовку интерфейса, а второй за внутреннюю логику. Процессы взаимодействуют с использованием HTTP при помощи JSON-RPC через WebSockets или REST API. Бэкенд использует платформу Node.js и при работе через Web запускается на внешнем сервере, а фронтэнд с интерфейсом загружается в браузере. В случае настольного приложения оба процесса запускаются локально, а для создания самодостаточно приложения применяется платформа Electron.

Из ключевых отличий от Visual Studio Code называется: более модульная архитектура, предоставляющая больше возможностей для модификации; изначальная ориентация на запуск не только на локальной системе, но и в облаке; разработка на нейтральной площадке. Стоит отметить, что полностью открытый вариант редактора Visual Studio Code также развивает проект VSCodium, который включает только свободные компоненты, избавлен от привязки к бренду Microsoft и почищен от кода для сбора телеметрии.

Напомним, что редактор Visual Studio Code построен с использованием наработок проекта Atom и платформы Electron, основанной на кодовой базе Chromium и Node.js. Редактор предоставляет встроенный отладчик, инструменты для работы с Git, средства рефакторинга, навигации по коду, автодополнения типовых конструкций и контекстной подсказки. Visual Studio Code развивается компанией Microsoft как открытый проект, доступный под лицензией MIT, но официально предоставляемые бинарные сборки не тождественны исходным текстам, так как включают компоненты для отслеживания действий в редакторе и отправки телеметрии. Сбор телеметрии объясняется проведением оптимизации интерфейса с учётом реального поведения разработчиков. Кроме того, бинарные сборки распространяются под отдельной несвободной лицензией.

  1. OpenNews: Доступен Jakarta EE 8, первый выпуск после передачи Java EE проекту Eclipse
  2. OpenNews: Выпуск интегрированной среды разработки Eclipse "Photon" с поддержкой языка Rust
  3. OpenNews: Компания Microsoft выпустила открытый редактор Visual Studio Code 1.0
  4. OpenNews: Первый релиз интегрированной среды разработки Eclipse Che
  5. OpenNews: Проект VSCodium развивает полностью открытый вариант редактора Visual Studio Code
Обсуждение (175 +5) | Тип: Программы |
31.03.2020 Fedora и CentOS запускают Git Forge. GitLab открывает 18 проприетарных возможностей (104 +5)
  Проекты CentOS и Fedora сообщили о решении по созданию сервиса совместной разработки Git Forge, который будет построен с использованием платформы GitLab. GitLab станет первичной платформой для взаимодействия с Git-репозиториями и для хостинга проектов, связанных с дистрибутивами CentOS и Fedora. Ранее применяемый сервис Pagure продолжит существовать, но будет передан на попечение сообществу, заинтересованному в продолжении разработки. Pagure будет выведен из-под сопровождения трудоустроенной в Red Hat команды CPE (Community Platform Engineering), занимающейся поддержанием инфраструктуры для разработки и публикации релизов Fedora и CentOS.

При оценке возможных решений для нового Git Forge рассматривались Pagure и Gitlab. На основании изучения около 300 отзывов и пожеланий от участников проектов Fedora, CentOS, RHEL и CPE, были сформированы требования к функциональности и сделан выбор в пользу Gitlab. Кроме типовых операций с репозиториями (слияние, создание форков, добавление кода и т.п.) среди ключевых требований были заявлены безопасность, удобство работы и стабильность платформы.

В число требований вошли такие возможности, как отправка push-запросов по HTTPS, средства ограничения доступа к веткам, поддержка приватных веток, разделение доступа внешних и внутренних пользователей (например, для работы над устранением уязвимостей во время эмбарго на раскрытие сведений о проблеме), привычность интерфейса, унификация подсистем для работы с сообщениями о проблемах, кодом, документацией и планированием новых возможностей, наличие средств для интеграции с IDE, поддержка типовых рабочих процессов.

Из возможностей GitLab, которые окончательно повлияли на принятие решения по выбору данной платформы, упомянуты поддержка подгрупп с выборочным доступом к репозиториям, возможность использования бота для автоматических слияний (требуется CentOS Stream для поддержании пакетов с ядром), наличие встроенных средств для планирования разработки, возможность использования готового SAAS-сервиса с гарантируемым уровнем доступности (позволит высвободить ресурсы на поддержание серверной инфраструктуры).

Решение уже вызвало критику среди разработчиков, связанную с тем, что решение было принято без предварительного широкого обсуждения. Также были высказаны опасения, что сервис не будет использовать свободную Comminity-редакцию GitLab. В частности, возможности, необходимые для реализации описанных в анонсе требований к Git Forge, доступны только в проприетарной версии GitLab Ultimate.

Критике также подверглось намерение воспользоваться предоставляемым компанией GitLab сервисом SAAS (приложение как сервис), вместо развёртывания GitLab на своих серверах, что выводит сервис из под контроля (например, невозможно быть уверенным, что все уязвимости в системе оперативно устраняются, должным образом поддерживается инфраструктура, в один прекрасный момент не будет навязана телеметрия и исключена диверсия со стороны персонала сторонней компании). Решение также не сочетается с основополагающими принципами Fedora, в которых определено, что проект должен отдавать предпочтения свободным альтернативам.

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

В число свободных переведены следующие функции:

  • Прикрепление связанных issue;
  • Экспорт issue из GitLab в CSV;
  • Режим планирования, упорядочивания и визуализации процесса разработки отдельных функциональных возможностей или релизов;
  • Встроенная сервисная служба для связывания участников проекта со сторонними лицами при помощи email;
  • Web-терминал для Web IDE;
  • Возможность синхронизации файлов для тестирования изменений в коде в web-терминале;
  • Средства управления дизайном, позволяющие загружать в issue макеты и ресурсы, используя issue как единую точку доступа ко всему, что требуется для разработки новой возможности;
  • Отчёты о качестве кода;
  • Поддержка пакетных менеджеров Conan (C/C++), Maven (Java), NPM (node.js) и NuGet (.NET);
  • Поддержка канареечных развёртываний, позволяющих установить новую версию приложения на небольшой части систем;
  • Инкрементальные распространения, позволяющие вначале доставить новые версии лишь для небольшого числа систем, постепенно доводя охват до 100%;
  • Флаги активации функциональности, дающие возможность поставлять проект в различных редакциях, динамически активируя определённые возможности;
  • Обзорный режим развёртываний, позволяющий оценить состояние каждого окружения непрерывной интеграции на базе Kubernetes;
  • Поддержка определения нескольких кластеров Kubernetes в конфигураторе (например, можно использовать отдельные кластеры Kubernetes для пробных внедрений и рабочих нагрузок);
  • Поддержка определения политик сетевой безопасности контейнеров, позволяющих разграничить доступ между подами Kubernetes.

Дополнительно можно отметить публикацию обновлений GitLab 12.9.1, 12.8.8 и 12.7.8 (Community Edition и Enterprise Edition), в которых устранена уязвимость. Проблема проявляется начиная с выпуска GitLab EE/CE 8.5 и позволяет прочитать содержимое любого локального файла при перемещении issue между проектами. Детали об уязвимости будут раскрыты через 30 дней.

  1. OpenNews: Фонд СПО планирует запустить новую платформу совместной разработки и хостинга кода
  2. OpenNews: Проект KDE внедряет GitLab. Разработка GitLab EE и CE перенесена в общий репозиторий
  3. OpenNews: Принадлежащий GitLab сервис Gitter использует методы скрытой идентификации пользователей
  4. OpenNews: Инцидент с СУБД проекта GitLab
  5. OpenNews: GitLab вводит сбор телеметрии для облачных и коммерческих продуктов (решение отложено)
Обсуждение (104 +5) | Тип: Тема для размышления |
30.03.2020 Выпуск Linux-дистрибутива openEuler 20.03, развиваемого компанией Huawei (116 +7)
  Компания Huawei представила Linux-дистрибутив openEuler 20.03, который стал первым выпуском, который будет сопровождаться в рамках длительного цикла поддержки (LTS). Обновления пакетов для openEuler 20.03 будут выпускаться до 31 марта 2024 года. Репозитории и установочные iso-образы (x86_64 и aarch64) доступны для свободной загрузки с предоставлением исходных текстов пакетов. Исходные тексты специфичных для дистрибутива компонентов размещены в сервисе Gitee.

openEuler базируется на наработках коммерческого дистрибутива EulerOS, который является ответвлением от пакетной базы CentOS и оптимизирован для использования на серверах с процессорами ARM64. Применяемые в дистрибутиве EulerOS методы защиты сертифицированы Министерством общественной безопасности КНР, а также признаны соответствующими требованиям CC EAL4+ (Германия), NIST CAVP (США) и CC EAL2+ (США). EulerOS является одной из пяти операционных систем (EulerOS, macOS, Solaris, HP-UX и IBM AIX) и единственным дистрибутивом Linux, сертифицированных комитетом Opengroup на соответствие стандарту UNIX 03.

Отличия openEuler от CentOS довольно существенны и не ограничиваются проведением ребрендинга. Например, в openEuler поставляется модифицированное ядро Linux 4.19, systemd 243, bash 5.0 и рабочий стол на основе GNOME 3.30. Внесено много специфичных для ARM64 оптимизаций, часть которых уже передана в основные кодовые базы ядра Linux, GCC, OpenJDK и Docker.

Среди заявленных преимуществ openEuler:

  • Ориентация на достижение максимальной производительности на многоядерных системах и высокий параллелизм обработки запросов. Оптимизация механизма управления файловым кэшем дала возможность избавиться от лишних блокировок и поднять число параллельно обрабатываемых запросов в Nginx на 15%.
  • Интегрированная библиотека KAE, позволяющая использовать аппаратные ускорители Hisilicon Kunpeng для ускорения производительности различных алгоритмов (криптографические операции, регулярные выражения, сжатие и т.п.) от 10% до 100%.
  • Упрощённый инструментарий управления изолированными контейнерами iSulad, сетевой конфигуратор clibcni и runtime lcr (Lightweight Container Runtime, совместим с OCI, но в отличие от runc написан на Си и использует gRPC). При использовании легковесных контейнеров iSulad отмечается ускорение запуска контейнеров до 35% и снижение потребления памяти до 68%.
  • Оптимизированная сборка OpenJDK, демонстрирующая увеличение производительности на 20% за счёт модернизированной системы управления памятью и применения расширенных оптимизаций при компиляции.
  • Система автоматической оптимизации настроек A-Tune, использующая методы машинного обучения для тюнинга параметров работы системы. По тестам Huawei автоматическая оптимизация настроек в зависимости от сценария использования системы демонстрирует увеличение эффективности до 30%.
  • Поддержка различных аппаратных архитектур, таких как процессоры Kunpeng и x86 (в будущем ожидается увеличения числа поддерживаемых архитектур).

Компания Huawei также объявила о появлении четырёх коммерческих редакций openEuler - Kylin Server OS, iSoft Server OS, deepinEuler и EulixOS Server, подготовленных сторонними производителями Kylinsoft, iSoft, Uniontech и ISCAS (Institute of Software Chinese Academy of Sciences), которые подключились к работе сообщества, развивающего openEuler. Компания Huawei изначально преподносит openEuler как открытый совместный проект, развиваемый при участии сообщества. В настоящее время уже приступили к работе курирующие openEuler технический комитет, комитет обеспечения безопасности и общественный секретариат.

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

  1. OpenNews: Huawei опубликовал новый Linux-дистрибутив openEuler
  2. OpenNews: Компания Huawei предложила новую ФС EROFS для ядра Linux
  3. OpenNews: Google ограничит доступ Huawei к своим сервисам для Android
  4. OpenNews: Huawei анонсировал операционную систему Harmony
  5. OpenNews: Компания Huawei начала предустановку Deepin Linux на ноутбуки
Обсуждение (116 +7) | Тип: Программы |
30.03.2020 Доступен VPN WireGuard 1.0.0 (50 +35)
  Представлен знаковый выпуск VPN WireGuard 1.0.0, который отметил собой поставку компонентов WireGuard в основном составе ядра Linux 5.6 и стабилизацию разработки. Включённый в состав ядра Linux код прошёл дополнительный аудит безопасности, выполненный независимой фирмой, специализирующейся на подобных проверках. Аудит не выявил каких-либо проблем.

Так как WireGuard теперь развивается в основном составе ядра Linux, для дистрибутивов и пользователей, продолжающих использование старых версий ядра, подготовлен репозиторий wireguard-linux-compat.git. Репозиторий включает бэкпортированный код WireGuard и слой compat.h для обеспечения совместимости со старыми ядрами. Отмечается, что пока есть возможность разработчиков и потребность у пользователей обособленный вариант патчей будет поддерживаться в рабочем виде. В текущем виде обособленный вариант WireGuard может использоваться с ядрами из Ubuntu 20.04 и Debian 10 "Buster", а также доступен в виде патчей для ядер Linux 5.4 и 5.5. Дистрибутивы, применяющие самые свежие ядра, такие как Arch, Gentoo и Fedora 32, получат возможность использования WireGuard вместе с обновлением ядра 5.6.

Основной процесс разработки теперь ведётся в репозитории wireguard-linux.git, включающем полное дерево ядра Linux с изменениями от проекта Wireguard. Патчи из данного репозитория будут рецензироваться для включения в основное ядро и регулярно переноситься в ветки net/net-next. Разработка запускаемых в пространстве пользователя утилит и скриптов, таких как wg и wg-quick, ведётся в репозитории wireguard-tools.git, который можно использовать для создания пакетов в дистрибутивах.

Напомним, что VPN WireGuard реализован на основе современных методов шифрования, обеспечивает очень высокую производительность, прост в использовании, лишён усложнений и хорошо зарекомендовал себя в ряде крупных внедрений, обрабатывающих большие объёмы трафика. Проект развивается с 2015 года, прошёл аудит и формальную верификацию применяемых методов шифрования. Поддержка WireGuard уже интегрирована в NetworkManager и systemd, а патчи для ядра входят в базовый состав дистрибутивов Debian Unstable, Mageia, Alpine, Arch, Gentoo, OpenWrt, NixOS, Subgraph и ALT.

В WireGuard применяется концепция маршрутизации по ключам шифрования, которая подразумевает привязку к каждому сетевому интерфейсу закрытого ключа и применение для связывания открытых ключей. Обмен открытыми ключами для установки соединения производится по аналогии с SSH. Для согласования ключей и соединения без запуска отдельного демона в пространстве пользователя применяется механизм Noise_IK из Noise Protocol Framework, похожий на поддержание authorized_keys в SSH. Передача данных осуществляется через инкапсуляцию в пакеты UDP. Поддерживается смена IP-адреса VPN-сервера (роуминг) без разрыва соединения с автоматической перенастройкой клиента.

Для шифрования используется потоковый шифр ChaCha20 и алгоритм аутентификации сообщений (MAC) Poly1305, разработанные Дэниелом Бернштейном (Daniel J. Bernstein), Таней Ланге (Tanja Lange) и Питером Швабе (Peter Schwabe). ChaCha20 и Poly1305 позиционируются как более быстрые и безопасные аналоги AES-256-CTR и HMAC, программная реализация которых позволяет добиться фиксированного времени выполнения без задействования специальной аппаратной поддержки. Для генерации совместного секретного ключа применяется протокол Диффи-Хеллмана на эллиптических кривых в реализации Curve25519, также предложенной Дэниелом Бернштейном. Для хеширования используются алгоритм BLAKE2s (RFC7693).

При старом тестировании производительности WireGuard продемонстрировал в 3.9 раза более высокую пропускную способность и в 3.8 раз более высокую отзывчивость, по сравнению с OpenVPN (256-bit AES c HMAC-SHA2-256). По сравнению с IPsec (256-bit ChaCha20+Poly1305 и AES-256-GCM-128) в WireGuard наблюдается небольшое опережение по производительности (13-18%) и снижение задержек (21-23%). Размещённые на сайте проекта результаты тестирования охватывают старую обособленную реализацию WireGuard и отмечены как недостаточно качественные. Со времени проведения тестов код WireGuard и IPsec был дополнительно оптимизирован и теперь работает быстрее. Более полное тестирование, охватывающее интегрированную в ядро реализацию, пока не проведено. Тем не менее, отмечается, что WireGuard в некоторых ситуациях по-прежнему обгоняет IPsec в силу многопоточности, в то время как OpenVPN остаётся очень медленным.


  1. OpenNews: Релиз ядра Linux 5.6
  2. OpenNews: Разработчики VPN WireGuard представили новую криптографическую библиотеку Zinc
  3. OpenNews: Cloudflare опубликовал реализацию VPN WireGuard на языке Rust
  4. OpenNews: WireGuard и andOTP удалены из Google Play из-за ссылок на приём пожертвований
  5. OpenNews: VPN WireGuard принят в ветку net-next и намечен для включения в ядро Linux 5.6
Обсуждение (50 +35) | Тип: Программы |
30.03.2020 Выпуск Kubernetes 1.18, системы управления кластером изолированных контейнеров (25 +7)
  Опубликован релиз платформы оркестровки контейнеров Kubernetes 1.18, позволяющей как единым целым управлять кластером из изолированных контейнеров и предоставляющей механизмы для развёртывания, сопровождения и масштабирования выполняемых в контейнерах приложений. Проект изначально был создан компанией Google, но затем переведён на независимую площадку, курируемую организацией Linux Foundation. Платформа позиционируется как развиваемое сообществом универсальное решение, не привязанное к отдельным системам и способное работать с любыми приложениями в любых облачных окружениях. Код Kubernetes написан на языке Go и распространяется под лицензией Apache 2.0.

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

Выпуск Kubernetes 1.18 включает 38 изменений и улучшений, из которых 15 переведены в статус стабильных, а 11 в статус бета. 12 новый изменений предложены в статусе альфа. При подготовке новой версии равные усилия были направлены как на доработку различной функциональности и стабилизацию экспериментальных возможностей, так и на добавление новых разработок. Основные изменения:

  • Kubectl
    • Добавлена альфа-версия команды "kubectl debug", которая позволяет упростить отладку в подах, с помощью запуска эфемерных контейнеров с инструментами для отладки.
    • Объявлена стабильной команда "kubectl diff", позволяющая посмотреть, что изменится в кластере, если применить манифест.
    • Убраны все генераторы команды "kubectl run", кроме генератора запуска одиночного пода.
    • Изменили флаг "--dry-run", в зависимости от его значения (client, server и none) пробное исполнение команды выполняется на стороне клиента или сервера.
    • Код kubectl выделен в отдельный репозиторий. Это позволило отделить kubectl от внутренних зависимостей kubernetes и облегчило импорт кода в сторонние проекты.
  • Ingress
    • Началось изменение API group для Ingress на networking.v1beta1.
    • Добавлены новые поля:
      • pathType, позволяющее указать каким способом будет сравниваться путь в запросе
      • IngressClassName - замена аннотации kubernetes.io/ingress.class, которая объявлена deprecated. В этом поле указывается название специального объекта InressClass
    • Добавлен объект IngressClass, в котором указывается название ингресс контроллера, его дополнительные параметры и признак использования его по умолчанию
  • Service
    • Добавлено поле AppProtocol, в котором можно указать какой протокол использует приложение
    • Переведён в статус бета и включён по умолчанию EndpointSlicesAPI, который является более функциональной заменой обычных Endpoints.
  • Сеть
  • Постоянные диски. Объявлена стабильной следующая функциональность:
  • Конфигурирование приложения
    • В объекты ConfigMap и Secret добавлено новое поле "immutable". Установка значение поля в true запрещает изменение объекта.
  • Планировщик
    • Добавлена возможность создавать дополнительные профили для kube-scheduler. Если раньше требовалось запускать дополнительные отдельные планировщики для реализации нестандартных алгоритмов распределения подов, то теперь появилась возможность создать дополнительные наборы настроек для стандартного планировщика и указать его название в том же поле пода ".spec.schedulerName". Статус - альфа.
    • Taint Based Eviction объявлена стабильной
  • Масштабирование
    • Добавлена возможность указать в манифесте HPA степень агрессивности при изменении количества запущенных подов, то есть при увеличении нагрузки запускать сразу в N раз больше экземпляров (instance).
  • Kubelet
    • Topology Manager получил статус бета. Функция включает NUMA-распределение, что позволяет избежать деградации производительности на мультисокетных системах.
    • Статус бета получила функция PodOverhead, позволяющая указать в RuntimeClass дополнительное количество ресурсов, необходимое для запуска пода.
    • Расширена поддержка HugePages, в альфа статусе добавлена изоляция на уровне контейнера и поддержка нескольких размеров hugepages.
    • Удален endpoint для метрик /metrics/resource/v1alpha1, вместо него используется /metrics/resource
  • API
    • Окончательно убрали возможность использовать устаревшие API group apps/v1beta1 и extensions/v1beta1.
    • ServerSide Apply повышен до статуса бета2. Это улучшение переносит манипуляцию объектами из kubectl в API-сервер. Авторы улучшения утверждают, что это позволит починить множество существующих ошибок, которые невозможно исправлить в текущей ситуации. Также они добавили раздел ".metadata.managedFields", в котором предлагают хранить историю изменений объекта, с указанием кто, когда и что именно изменил.
    • Объявлен стабильным CertificateSigningRequest API.
  • Поддержка платформы Windows.

  1. OpenNews: Опубликован план окончания поддержки CoreOS Container Linux
  2. OpenNews: Docker продал компании Mirantis часть бизнеса, связанного с платформой Docker Enterprise
  3. OpenNews: Выпуск Cilium 1.4, сетевой системы для Linux-контейнеров, основанной на BPF
  4. OpenNews: В Kubernetes 1.13 устранена критическая уязвимость, позволяющая поднять свои привилегии
  5. OpenNews: Amazon открыл код легковесной платформы виртуализации Firecracker
30.03.2020 Релиз ядра Linux 5.6 (138 +48)
  После двух месяцев разработки Линус Торвальдс представил релиз ядра Linux 5.6. Среди наиболее заметных изменений: интеграция VPN-интерфейса WireGuard, поддержка USB4, пространства имён для времени, возможность создания обработчиков перегрузки TCP при помощи BPF, начальная поддержка MultiPath TCP, избавление ядра от проблемы 2038 года, механизм "bootconfig", ФС ZoneFS.

В новую версию принято 13702 исправлений от 1810 разработчиков, размер патча - 40 Мб (изменения затронули 11577 файлов, добавлено 610012 строк кода, удалено 294828 строк). Около 45% всех представленных в 5.6 изменений связаны с драйверами устройств, примерно 15% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - c файловыми системами и 3% c внутренними подсистемами ядра.

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

  • Сетевая подсистема
    • Добавлена реализация VPN-интерфейса WireGuard, который реализован на основе современных методов шифрования (ChaCha20, Poly1305, Curve25519, BLAKE2s), прост в использовании, лишён усложнений, хорошо зарекомендовал себя в ряде крупных внедрений и обеспечивает очень высокую производительность (в 3,9 раз опережает OpenVPN по пропускной способности). В WireGuard применяется концепция маршрутизации по ключам шифрования, которая подразумевает привязку к каждому сетевому интерфейсу закрытого ключа и применение для связывания открытых ключей. Обмен открытыми ключами для установки соединения производится по аналогии с SSH. Необходимые для работы WireGuard криптографические примитивы были перенесены из библиотеки Zinc в состав штатного Crypto API и включены в состав ядра 5.5.
    • Началась интеграция компонентов, необходимых для поддержки MPTCP (MultiPath TCP), расширения протокола TCP для организации работы TCP-соединения с доставкой пакетов одновременно по нескольким маршрутам через разные сетевые интерфейсы, привязанные к разным IP-адресам. Для сетевых приложений подобное агрегированное соединение выглядит как обычное TCP-соединение, а вся логика разделения потоков выполняется силами MPTCP. Multipath TCP может использоваться как для расширения пропускной способности, так и для увеличения надёжности. Например, MPTCP можно применять для организации передачи данных на смартфоне с использованием одновременно линков WiFi и 4G или для сокращения расходов за счёт подключения сервера с использованием нескольких дешёвых линков вместо одного дорогого.
    • Добавлена поддержка дисциплины обработки сетевых очередей sch_ets (Enhanced Transmission Selection, IEEE 802.1Qaz), предоставляющей возможность распределения пропускной способности между разными классами трафика. Если нагрузка на определённый класс трафика ниже предоставленной пропускной способности, то ETS позволяет другим классам трафика использовать доступную (неиспользованную) пропускную способность. Qdisc sch_ets настраивается как дисциплина PRIO и использует классы трафика для определения строгих и совместно используемых ограничений пропускной способности. Работает ETS как комбинация дисциплин PRIO и DRR - при наличии жёстко ограниченных классов трафика используется PRIO, но если в очереди трафика нет, работает как DRR.
    • Добавлен новый тип BPF-программ BPF_PROG_TYPE_STRUCT_OPS, позволяющий реализовывать обработчики функций ядра через BPF. В настоящее время указанную возможность уже можно использовать для реализации алгоритмов контроля перегрузки TCP в виде BPF-программ. В качестве примера предложена BPF-программа с реализацией алгоритма DCTCP.
    • В ядро приняты изменения, переводящие инструментарий ethtool с ioctl() на использование интерфейса netlink. Новый интерфейс упрощает добавление расширений, улучшает обработку ошибок, позволяет отправлять уведомления при изменении состояния, упрощает взаимодействие между ядром и пространством пользователя и сокращает число синхронизируемых именованных списков.
    • Добавлена реализация алгоритма управления сетевыми очередями FQ-PIE (Flow Queue PIE), нацеленного на снижение негативного влияния промежуточной буферизации пакетов на граничном сетевом оборудовании (bufferbloat). FQ-PIE демонстрирует высокую эффективность при использовании в системах с кабельными модемами.
  • Дисковая подсистема, ввод/вывод и файловые системы
    • Для файловой системы Btrfs добавлена асинхронная реализация операции DISCARD (пометка освобождённых блоков, которые уже можно не хранить физически). Изначально операции DISCARD выполнялись синхронно, что могло приводить к проседанию производительности из-за ожидания завершения соответствующих команд накопителями. Асинхронная реализация позволяет не ждать завершения DISCARD накопителем и выполнять данную операцию в фоне.
    • В XFS проведена чистка кода, в котором использовались старые 32-разрядные счётчики времени (тип time_t заменён на time64_t), приводящие к проблеме 2038 года. Устранены ошибки и повреждения памяти, всплывавшие на 32-разрядых платформах. Переработан код для работы с расширенными атрибутами.
    • В файловую систему ext4 внесены оптимизации производительности, связанные c обработкой блокировки inode при операциях чтения и записи. Повышена производительность перезаписи в режиме прямого ввода/вывода (Direct I/O). Для упрощения диагностики проблем обеспечено сохранение в суперблоке первого и последнего кодов ошибок.
    • В файловой системе F2FS реализована возможность хранения данных в сжатом виде. Для отдельного файла или каталога сжатие может быть включено при помощи команды "chattr +c file" или "chattr +c dir; touch dir/file". Для сжатия всего раздела в утилите mount можно использовать опцию "-o compress_extension=ext".
    • В состав ядра принята файловая система ZoneFS, упрощающая низкоуровневую работу с зонированными устройствами хранения. Под зонированными накопителями подразумеваются устройства на жёстких магнитных дисках или NVMe SSD, пространство для хранения в которых разбито на зоны, составляющие группы блоков или секторов, в которые допускается лишь последовательное добавление данных с обновлением целиком всей группы блоков. ФС ZoneFS разработана компанией Western Digital и связывает каждую зону в накопителе с отдельным файлом, который можно использовать для хранения данных в raw-режиме без манипуляции на уровне секторов и блоков, т.е. позволяет приложениям использовать файловый API вместо прямого обращения к блочному устройству при помощи ioctl.
    • В NFS отключено по умолчанию монтирование разделов поверх UDP. Добавлена поддержка определённой в спецификации NFS 4.2 возможности прямого копирования файлов между серверами. Добавлена новая опция монтирования "softreval", в случае отказа сервера допускающая использование прокэшированных значений атрибутов. Например, при указании данной опции после недоступности сервера сохраняется возможность перемещения по путям в NFS-разделе и обращения к информации, которая осела в кэше.
    • Проведена оптимизация производительности механизма fs-verity, применяемого для контроля целостности и проверки подлинности отдельных файлов. Повышена скорость последовательного чтения, благодаря применению хеш-дерева Меркла. Оптимизирована производительнлсть FS_IOC_ENABLE_VERITY в условиях отсутствия данных в кэше (применено упреждающее чтение страниц с данными).
  • Виртуализация и безопасность
    • Объявлена устаревшей возможность отключения модуля SELinux во время работы, а в будущем выгрузка уже активированного SELinux будет запрещена. Для отключения SELinux потребуется передать параметр "selinux=0" в командной строке ядра.
    • Добавлена поддержка пространств имён для времени (time namespaces), позволяющих привязать к контейнеру состояние системных часов (CLOCK_REALTIME, CLOCK_MONOTONIC, CLOCK_BOOTTIME), использовать в контейнере своё время и при миграции контейнера на другой хост обеспечить неизменность показаний CLOCK_MONOTONIC и CLOCK_BOOTTIME (учесть время после загрузки с учётом или без учёта нахождения в спящем режиме).
    • Удалён блокируемый пул /dev/random. Поведение /dev/random приближено к /dev/urandom в плане предотвращения блокирования энтропии после инициализации пула.
    • В основной состав ядра включён драйвер, позволяющий гостевым системам, работающим под управлением VirtualBox, монтировать каталоги, экспортируемые хост-окружением (VirtualBox Shared Folder).
    • В подсистему BPF добавлен набор патчей (BPF dispatcher), в условиях применения механизма Retpoline для защиты от атак класса Spectre V2 позволяющий повысить эффективность вызова BPF-программ при наступлении привязанных к ним событий (например, даёт возможнось ускорить вызов XDP-обработчиков при поступлении сетевого пакета).
    • Добавлен драйвер для поддержки встроенных в APU AMD окружений TEE (Trusted Execution Environment).
  • Память и системные сервисы
    • В BPF добавлена поддержка глобальных функций. Разработка ведётся в рамках инициативы по добавлению поддержи библиотек функций, которые можно подключать в программах BPF. Следующим шагом станет поддержка динамических расширений, позволяющих загружать глобальные функции, в том числе для замены существующих глобальных функций во время их использования. В подсистеме BPF также добавлена поддержка варианта операции map (используется для сохранения постоянных данных), поддерживающего выполнение в пакетном режиме.
    • Добавлено устройство "cpu_cooling" позволяющее охлаждать перегретый CPU путём перевода его в состояние простоя (idle) на короткие промежутки времени.
    • Добавлен системный вызов openat2(), предлагающий набор дополнительных флагов для ограничения разрешения файлового пути (запрет пересечения точек монтирования, символических ссылок, magic-ссылок (/proc/PID/fd), компонентов "../").
    • Для разнородных систем на базе архитектуры big.LITTLE, комбинирующих в одном чипе мощные и менее производительные энергоэффективные ядра CPU, при выполнении задач реального времени обеспечено выставление параметра uclamp_min (появившийся в ядре 5.3 механизм закрепления нагрузки). Указанный параметр гарантирует, что задача будет размещена планировщиком на ядре CPU, имеющем достаточно производительности.
    • Ядро избавлено от проблемы 2038 года. Заменены последние остающиеся обработчики, в которых для счётчика эпохального времени использовался 32-разрядный (signed int) тип time_t, который с учётом отсчёта от 1970 года должен переполниться в 2038 году.
    • Продолжено усовершенствование интерфейса асинхронного ввода/вывода io_uring, в котором обеспечена поддержка новых операций: IORING_OP_FALLOCATE (резервирование пустых областей), IORING_OP_OPENAT, IORING_OP_OPENAT2, IORING_OP_CLOSE (открытие и закрытие файлов), IORING_OP_FILES_UPDATE (добавление и удаление файлов из списка быстрого доступа), IORING_OP_STATX (запрос информации о файле), IORING_OP_READ, IORING_OP_WRITE (упрощённые аналоги IORING_OP_READV и IORING_OP_WRITEV), IORING_OP_FADVISE, IORING_OP_MADVISE (асинхронные варианты вызовов posix_fadvise и madvise), IORING_OP_SEND, IORING_OP_RECV (отправка и приём сетевых данных), IORING_OP_EPOLL_CTL (выполнение операций над файловыми дескрипторами epoll).
    • Добавлен системный вызов pidfd_getfd(), дающий возможность процессу извлечь из другого процесса файловый дескриптор открытого файла.
    • Реализован механизм "bootconfig", позволяющий помимо опций командной строки определять параметры работы ядра через файл с настройками. Для добавления подобных файлов в образ initramfs предложена утилита bootconfig. Указанная возможность может применяться, например, для настройки kprobes во время загрузки.
    • Переработан механизм ожидания записи и чтения данных в неименованных каналах (pipe). Изменение позволило ускорить выполнение таких задач, как распараллеленная сборка больших проектов. При этом оптмизация может привести к состоянию гонки в GNU make из-за ошибки в выпуске 4.2.1, которая устранена в версии 4.3.
    • В prctl() добавлен флаг PR_SET_IO_FLUSHER, который может применяться для пометки процессов, занимающихся высвобождением памяти, для которых не следует применять ограничения в ситуации нехватки памяти в системе.
    • На основе применяемой в Android системы распределения памяти ION реализована подсистема dma-buf heaps, позволяющая управлять выделением DMA-буферов для совместного использования областей памяти драйверами, приложениями и различными подсистемами.
  • Аппаратные архитектуры
    • Добавлена поддержка расширения E0PD, появившегося в ARMv8.5 и позволяющего реализовать защиту от атак, связанных со спекулятивным выполнением инструкций в CPU. Защита на базе E0PD приводит к меньшим накладным расходам, чем защита KPTI (Kernel Page Table Isolation).
    • Для систем на базе архитектуры ARMv8.5 добавлена поддержка инструкции RNG, предоставляющей доступ к аппаратному генератору псевдослучайных чисел. В ядре инструкция RNG задействована для формирования энтропии при инициализации предоставляемого ядром генератора псевдослучайных чисел.
    • Удалена поддержка расширений MPX (Memory Protection Extensions), добавленная в ядре 3.19 и позволяющая организовать проверку указателей на соблюдение границ областей памяти. Указанная технология не получила распространения в компиляторах и была удалена из GCC.
    • Для архитектуры RISC-V реализована поддержка отладочного инструмента KASan (Kernel address sanitizer), обеспечивающего выявление ошибок при работе с памятью.
  • Оборудование
    • Реализована поддержка спецификации USB 4.0, которая основана на протоколе Thunderbolt 3 и обеспечивает пропускную способность до 40 Гбит/с, сохраняя обратную совместимость с USB 2.0 и USB 3.2. По аналогии с Thunderbolt интерфейс USB 4.0 позволяет туннелировать различные протоколы поверх одного кабеля с разъёмом Type-C, включая PCIe, Display Port и USB 3.x, а также программные реализации протоколов, например, для организации сетевых линков между хостами. Реализация основана на уже входящем в ядро Linux драйвере Thunderbolt и адаптирует его для работы с хостами и устройствами, совместимыми с USB4. Изменения также добавляют поддержку устройств Thunderbolt 3 в программную реализацию менеджера соединений (Connection Manager), который отвечает за создание туннелей для подключения нескольких устройств через один разъём.
    • В драйвер amdgpu добавлена начальная поддержка технологии защиты от копирования HDCP 2.x (High-bandwidth Digital Content Protection). Добавлена поддержка ASIC-чипа AMD Pollock, основанного на Raven 2. Реализована возможность сброса GPU для семейств Renoir и Navi.
    • В DRM-драйвер для видеокарт Intel добавлена поддержка DSI VDSC для чипов на базе микроархитектуры Ice Lake и Tiger Lake, реализован LMEM mmap (device local memory), улучшен парсинг VBT (Video BIOS Table), реализована поддержка HDCP 2.2 для чипов Coffee Lake.
    • Продолжена работа по унификации кода драйвера amdkfd (для дискретных GPU, таких как Fiji, Tonga, Polaris) с драйвером amdgpu.
    • Переработан драйвер k10temp, в котором появилась поддержка вывода параметров напряжения и силы тока для CPU AMD Zen, а также расширенных сведений c датчиков температуры, применяемых в CPU Zen и Zen 2.
    • В драйвере nouveau добавлена поддержка режима верифицированной загрузки прошивки для GPU NVIDIA на базе микроархитектуры Turing (GeForce RTX 2000), что позволило включить поддержку 3D-ускорения для данных карт (требуется загрузка официальных прошивок с цифровой подписью NVIDIA). Добавлена поддержка графического движка TU10x. Решены проблемы с HD Audio.
    • Добавлена поддержка сжатия данных при передаче через DisplayPort MST (Multi-Stream Transport).
    • Добавлен новый драйвер "ath11k" для беспроводных чипов Qualcomm с поддержкой 802.11ax. Драйвер основан на стеке mac80211 и поддерживает режимы точки доступа, рабочей станции и узла Mesh-сети.
    • Через sysfs предоставлен доступ к читаемым показаниям датчиков температуры, используемых на современных жёстких дисках и SSD.
    • Внесены существенные изменения в звуковую систему ALSA, нацеленные на избавление кода от проблемы 2038 года (уход от использования 32-разрядного типа time_t в интерфейсах snd_pcm_mmap_status и snd_pcm_mmap_control). Добавлена поддержка новых звуковых кодеков Qualcomm WCD9340/WCD9341, Realtek RT700, RT711, RT715, RT1308, Ingenic JZ4770.
    • Добавлены драйверы для LCD-панелей Logic PD 28, Jimax8729d MIPI-DSI, igenic JZ4770, Sony acx424AKP, Leadtek LTK500HD1829, Xinpeng XPP055C272, AUO B116XAK01, GiantPlus GPM940B0, BOE NV140FHM-N49, Satoz SAT050AT40H12R2, Sharp LS020B1DD01D.
    • Добавлена поддержка ARM-плат и платформ Gen1 Amazon Echo (OMAP3630-based), Samsung Galaxy S III mini (GT-I8190), Allwinner Emlid Neutis, Libre Computer ALL-H3-IT, PineH64 Model B, Aibretech Amlogic GX PC, Armada SolidRun Clearfog GTR, NXPGateworks GW59xx, Tolino Shine 3 eBook reader, Embedded Artists COM (i.MX7ULP), SolidRun Clearfog CX/ITX и HoneyComb (LX2160A), Google Coral Edge TPU (i.MX8MQ), Rockchip Radxa Dalang Carrier, Radxa Rock Pi N10, VMARC RK3399Pro SOM ST Ericsson HREF520, Inforce 6640, SC7180 IDP, Atmel/Microchip AM9X60 (ARM926 SoC, Kizboxmini), ST stm32mp15, AM3703/AM3715/DM3725, ST Ericsson ab8505, Unisoc SC9863A, Qualcomm SC7180. Добавлена поддержка PCIe-контроллера, применяемого в Raspberry Pi 4.

Одновременно латиноамериканский Фонд свободного ПО сформировал вариант полностью свободного ядра 5.6 - Linux-libre 5.6-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске отключена загрузка блобов в драйверах для AMD TEE, ATH11K и Mediatek SCP. Обновлён код чистки блобов в драйверах и подсистемах AMD PSP, amdgpu и nouveau.

  1. OpenNews: Релиз ядра Linux 5.2
  2. OpenNews: VPN WireGuard принят в ветку net-next и намечен для включения в ядро Linux 5.6
  3. OpenNews: Релиз ядра Linux 5.3
  4. OpenNews: Релиз ядра Linux 5.4
  5. OpenNews: Релиз ядра Linux 5.5
Обсуждение (138 +48) | Тип: Программы | Интересно
29.03.2020 Компания Cloudflare подготовила патчи, кардинально ускоряющие дисковое шифрование в Linux (137 +68)
  Разработчики из компании Cloudflare рассказали о проведении работы по оптимизации производительности дискового шифрования в ядре Linux. В результате были подготовлены патчи для подсистемы dm-crypt и Crypto API, позволившие в синтетическом тесте более чем в два раза поднять пропускную способности при чтении и записи, а также в два раза снизить задержки. При тестировании на реальном оборудовании накладные расходы от шифрования удалось снизить практически до уровня, наблюдаемого при работе с диском без применения шифрования данных.

Cloudflare использует dm-crypt для шифрования данных на накопителях, используемых при кэшировании контента в CDN-сети. Dm-crypt работает на уровне блочного устройства и выполняет шифрование запросов ввода/вывода на запись и расшифровку запросов на чтение, выступая в роли прослойки между блочным устройством и драйвером файловой системы.

Для оценки производительности dm-crypt при помощи пакета Flexible I/O tester было произведено измерение скорости работы с шифрованными и незашифрованными разделами на RAM-диске, размещённом в ОЗУ для исключения флуктуаций производительности дисков и фокусировании на производительность кода. Для незашифрованных разделов производительность чтения и записи держалась на уровне 1126 MB/s, но при включении шифрования скорость снизилась в 7 раз и составила 147 MB/s.

Вначале возникло подозрение в использовании неэффективных алгоритмов в криптосистеме ядра. Но в тестах использовался наиболее быстрый алгоритм aes-xts с 256 ключом шифрования, производительность которого при выполнении "cryptsetup benchmark" более чем в два раза выше, чем полученный при тестировании RAM-диска результат. Эксперименты с флагами dm-crypt для тюнинга производительности не дали результата: при использовании флага "--perf-same_cpu_crypt" производительность даже уменьшилась до 136 MB/s, а при указании флага "--perf-submit_from_crypt_cpus" возросла лишь до 166 MB/s.

Более глубокий разбор логики работы показал, что dm-crypt не так прост как кажется - при поступлении от драйвера ФС запроса на запись, dm-crypt не обрабатывает его сразу, а помещает в очередь "kcryptd", которая разбирается не сразу, а при наступлении удобного момента. Из очереди запрос отправляется в Linux Crypto API для выполнения шифрования. Но так как Crypto API использует асинхронную модель выполнения, шифрование также производится не сразу, а минуя ещё одну очередь. После завершения шифрования dm-crypt может пытаться выполнить сортировку ожидающих запросов на запись, используя дерево поиска red-black. В конце отдельный поток ядра опять с определённой задержкой подхватывает накопившиеся запросы ввода/вывода и отправляет их в стек блочного устройства.

При чтении вначале dm-crypt добавляет в очередь "kcryptd_io" запрос на получение данных с накопителя. Через какое-то время данные становятся доступны и помещаются в очередь "kcryptd" для расшифровки. Kcryptd отправляет запрос в Linux Crypto API, которые расшифровывает информацию в асинхронном режиме. Запросы не всегда проходят по всем очередям, но в худшем сценарии запрос на запись оседает в очередях до 4 раз, а запрос на чтение до 3 раз. Каждое попадание в очередь приводит к возникновению задержек, которые и являются ключевой причиной значительного снижения производительности dm-crypt.

Применение очередей обусловлено необходимостью работы в условиях возникновения прерываний. В 2005 году, когда была реализована текущая модель работы dm-crypt на основе очередей, Crypto API ещё не был асинхронным. После перевода Crypto API на асинхронную модель выполнения стала применяться, по сути, двойная защита. Очереди также вводились для экономии потребления стека ядра, но после его увеличения в 2014 году данные оптимизации потеряли актуальность. Дополнительная очередь "kcryptd_io" была введена для преодоления узкого места, приводящего к ожиданию выделения памяти при поступлении большого числа запросов. В 2015 году дополнительно была введена фаза сортировки, так как запросы шифрования на многопроцессорных системах могли завершаться, не соблюдая порядок отправки (вместо последовательного доступа к диску, осуществлялся доступ в случайном порядке, а также неэффективно работал планировщик CFQ). В настоящее время при использовании SSD-накопителей сортировка потеряла смысл, а планировщик CFQ уже не используется в ядре.

Учитывая то, что современные накопители стали быстрее и умнее, система распределения ресурсов в ядре Linux была пересмотрена, а некоторые подсистемы переработаны, инженеры Cloudflare добавили в dm-crypt новый режим работы, избавленный от использования лишних очередей и асинхронных вызовов. Режим включается отдельным флагом "force_inline" и приводит dm-crypt к форме простого прокси, шифрующего и расшифровывающего поступающие запросы. Взаимодействие с Crypto API было оптимизировано явным выбором алгоритмов шифрования, работающих в синхронном режиме и не использующих очереди запросов. Для синхронной работы с Crypto API был предложен модуль, позволяющий использовать FPU/AES-NI для ускорения и напрямую пробрасывающий запросы шифрования и расшифровки.

В итоге удалось при тестировании RAM-диска более чем в два раза поднять производительность dm-crypt - производительность возросла с 294 MB/s (2 x 147 MB/s) до 640 MB/s, что очень близко к производительности голого шифрования (696 MB/s).

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

  1. OpenNews: Выпуск Cryptsetup 2.3 с поддержкой шифрованных разделов BitLocker
  2. OpenNews: Проблема с потерей данных на SSD при использовании ядра Linux 5.1, LVM и dm-crypt
  3. OpenNews: Google представил механизм Adiantum для быстрого шифрования накопителей
  4. OpenNews: Спецслужбы Франции опубликовали защищённый дистрибутив CLIP OS
  5. OpenNews: Значительное обновление файловой системы Bcachefs
Обсуждение (137 +68) | Тип: К сведению |
29.03.2020 Первый выпуск OpenRGB, инструментария для управления устройствами c RGB-подсветкой (46 +35)
  После года разработки опубликован первый выпуск проекта OpenRGB, нацеленного на предоставление универсального открытого инструментария для управления устройствами с цветной подсветкой, позволяющего обойтись без установки официальных проприетарных приложений, завязанных на конкретного производителя и, как правило, поставляемых только для Windows. Код написан на C/C++ и распространяется под лицензией GPLv2. Программа мультиплатформенная и доступна для Linux и Windows.

Пакет поддерживает материнские платы ASUS, Gigabyte, ASRock и MSI с RGB-подсистемой для подсветки корпуса, модули памяти с подсветкой от ASUS, Corsair и HyperX, графические карты ASUS Aura и Gigabyte Aorus, различные контроллеры светодиодных лент (ThermalTake, Corsair, NZXT Hue+), светящиеся кулеры, мыши, клавиатуры, наушники и аксессуары Razer с подсветкой. Информация о протоколе взаимодействия с устройствами в основном получена через проведение обратного инжиниринга проприетарных драйверов и приложений.

Проект вначале развивался под именем OpenAuraSDK и был сфокусирован на реализации протокола ASUS Aura, но затем был расширен на другие категории устройств. Поддержка Aura уже доведена до полноценного вида и охватывает различные поколения RGB-контроллеров Aura, применяемых в разных платформах на базе CPU Intel и AMD, а также совместимые контроллеры, такие как G.Skill Trident Z.

Для взаимодействия с оборудованием в большинстве случаев достаточно использования i2c-dev или управления через USB (предложены udev-правила). Для работы с RGB-контроллерами материнских плат Aura/ASRock требуется применение патча для ядра Linux. Для периферийных устройств Razer используется драйвер OpenRazer (пакет openrazer-dkms-drivers в Debian/Ubuntu).

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

  1. OpenNews: Выпуск системы управления цветностью colord 1.0.0
  2. OpenNews: В GIMP появилась поддержка цветовых профилей ICC v4 и продолжается перевод на GEGL
  3. OpenNews: Открытый цветовой стандарт как ответ на монополию Pantone
Обсуждение (46 +35) | Тип: Программы |
28.03.2020 Collabora развивает надстройку для работы OpenCL и OpenGL поверх DirectX (69 +14)
  Компания Collabora представила новый Gallium-драйвер для Mesa, реализующий прослойку для организации работы API OpenCL 1.2 и OpenGL 3.3 поверх драйверов с поддержкой DirectX 12 (D3D12). Код опубликован под лицензией MIT.

Предложенный драйвер позволяет использовать Mesa на устройствах, изначально не поддерживающих OpenCL и OpenGL, а также в качестве стартовой позиции для портирования OpenGL/OpenCL-приложений для работы поверх D3D12. Для производителей GPU подсистема даёт возможность предоставить поддержку OpenCL и OpenGL, при наличии драйверов только с поддержкой D3D12.

Из ближайших планов отмечается достижение полного прохождения тестов на совместимость OpenCL 1.2 и OpenGL 3.3, проверка совместимости с приложениями и включение наработок в основной состав Mesa. Разработка ведётся совместно с инженерами Microsoft, развивающими открытый инструментарий D3D11On12 для перевода игр с D3D11 на D3D12 и библиотеку D3D12TranslationLayer, реализующую типовые графические примитивы поверх D3D12.

Реализация включает Gallium-драйвер, компилятор OpenCL, OpenCL runtime и компилятор шейдеров NIR-to-DXIL, преобразующий применяемое в Mesa промежуточное представление шейдеров NIR в бинарный формат DXIL (DirectX Intermediate Language), поддерживаемый в DirectX 12 и основанный на биткоде LLVM 3.7 (DirectX Shader Compiler от Microsoft, по сути, расширенный форк LLVM 3.7). Компилятор OpenCL подготовлен на основе наработок проекта LLVM и инструментария SPIRV-LLVM.

Исходные тексты с расширениями OpenCL компилируются при помощи clang в промежуточный псевдокод LLVM (LLVM IR), который затем преобразуется в промежуточное представление OpenCL-ядер в формате SPIR-V. Ядра в представлении SPIR-V передаются в Mesa, транслируются в формат NIR, оптимизируются и передаются в NIR-to-DXIL для генерации вычислительных шейдеров в формате DXIL, пригодном для выполнения на GPU c использованием runtime на базе DirectX 12. Вместо Clover, применяемой в Mesa реализации OpenCL, предложен новый OpenCL runtime, допускающий больше прямых преобразований в API DirectX 12.

OpenCL и OpenGL драйверы подготовлены с использованием предоставляемого в Mesa интерфейса Gallium, позволяющего при создании драйверов не углубляться в специфичные для OpenGL детали и транслировать вызовы OpenGL, в сущности, более близкие к графическим примитивам, которыми оперируют современные GPU. Gallium-драйвер, принимает команды OpenGL и при привлечении транслятора NIR-to-DXIL формирует буферы команд, которые исполняются на GPU, используя драйвер D3D12.

  1. OpenNews: Компания Collabora представила окружение для запуска Android-приложений в Linux
  2. OpenNews: Компания Collabora развивает Zink, реализацию OpenGL поверх API Vulkan
  3. OpenNews: Компания Collabora представила графический драйвер kms_swrast
  4. OpenNews: DirectX Shader Compiler портирован для Linux и macOS
  5. OpenNews: Выпуск DXVK 1.6, реализации Direct3D 9/10/11 поверх API Vulkan
Обсуждение (69 +14) | Тип: Программы |
28.03.2020 Суд предписал OSS выплатить 300 тысяч долларов Брюсу Перенсу по итогам разбирательства с Grsecurity (80 +31)
  После отклонения апелляции на состоявшемся в пятницу итоговом судебном заседании все стороны согласились прекратить разбирательство. Компания Open Source Security Inc (OSS), которая развивает проект Grsecurity, решила не подавать ходатайство о проведении повторных слушаний с участием расширенной судебной коллегии, а также не эскалировать разбирательство с привлечением суда более высокой инстанции. Судья выдал предписание OSS выплатить Брюсу Перенсу 300 тысяч долларов для погашения судебных издержек. Выплата будет произведена страховой компанией American Insurance Group, которая при возобновлении дела в 2018 году выступила гарантом на стороне проигравшей стороны.

Изначально назначенная в первом разбирательстве сумма в 260 тысяч долларов увеличилась до 300 тысяч за счёт дополнительных судебных издержек на оплату юристов при рассмотрении апелляций. Из представителей Перенса юридическая компания O’Melveny & Myers LLP получит $262303.62 за первое разбирательство и $2210.36 за апелляцию, а организации Electronic Frontier Foundation будет выплачено $34474.35 (гонорары) и $1011.67 (расходы) за участие в рассмотрении апелляции.

Напомним, что в 2017 году Брюс Перенс (один из авторов определения Open Source, соучредитель организации OSI (Open Source Initiative), создатель пакета BusyBox и один из первых лидеров проекта Debian) опубликовал в своём блоге заметку, в которой раскритиковал ограничение доступа к наработкам Grsecurity и предостерёг от покупки платной версии из-за возможного нарушения лицензии GPLv2. Разработчик Grsecurity не согласился с подобной трактовкой и подал в суд на Брюса Перенса, обвинив его в публикации ложных заявлений под видом фактов и злоупотреблении своим положением в сообществе для умышленного нанесения вреда бизнесу компании Open Source Security. Суд отклонил претензии, указав, что публикация в блоге Перенса носит характер личного мнения, основанного на известных фактах, и не направлена на нанесение предумышленного ущерба истцу.

При этом судебное разбирательство не затрагивало непосредственно вопрос возможного нарушения GPL при применении ограничивающих условий при распространении патчей Grsecurity (расторжение договора в случае передачи патчей третьим лицам). Брюс Перенс считает, что нарушением GPL является сам факт создания дополнительных условий в договоре. В случае патчей Grsecurity, рассматривается не самодостаточный GPL-продукт, имущественные права на который находятся в одних руках, а производная от ядра Linux работа, которая также затрагивает и права разработчиков ядра. Патчи Grsecurity не могут существовать по отдельности без ядра и неразрывно с ним связаны, что соответствует критериям производного продукта. Подписание договора на предоставление доступа к патчам Grsecurity приводит к нарушению GPLv2, так как компания Open Source Security не имеет права распространять производный продукт от ядра Linux с дополнительными условиями без получения согласия от разработчиков ядра.

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

  1. OpenNews: Апелляционный суд подтвердил правоту Брюса Перенса в разбирательстве с Grsecurity
  2. OpenNews: Grsecurity возможно нарушает лицензию GPL в своих попытках остановить перенос кода в ядро Linux
  3. OpenNews: Разработчики Grsecurity подали судебный иск против Брюса Перенса
  4. OpenNews: Новый виток судебного разбирательства между Grsecurity и Брюсом Перенсом
  5. OpenNews: Суд взыскал 259 тысяч долларов с компании, разрабатывающей Grsecurity
Обсуждение (80 +31) | Тип: Тема для размышления |
27.03.2020 AMD воспользовался DMCA для борьбы с утечкой внутренней документации по GPU Navi и Arden (136 +26)
  Компания AMD воспользовалась действующим в США Законом об авторском праве в цифровую эпоху (DMCA) для удаления из GitHub сведений о внутренней архитектуре GPU Navi и Arden, полученных в результате утечки информации. В GitHub направлено два требования об удалении пяти репозиториев (копии AMD-navi-GPU-HARDWARE-SOURCE), содержащих данные, нарушающие интеллектуальную собственность AMD. В заявлении указано, что репозитории содержат не подлежащие разглашению исходные тексты (описания аппаратных блоков на языке Verilog), "украденные" из компании и связанные как с уже производимыми GPU Navi 10 и Navi 21 (Radeon RX 5000), так и с ещё находящимся в разработке GPU Arden, который будет применяться в Xbox Series X.

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

Источник утечки сообщил, что это лишь часть полученных в результате утечки данных, и, если он не найдёт покупателя для оставшейся информации, то опубликует в online и весь остальной код. Утверждается, что рассматриваемые исходные тексты были найдены на взломанном компьютере в ноябре прошлого года (через эксплуатацию уязвимости был получен доступ к компьютеру с архивом документов). Создатель удалённых репозиториев утверждает, что не стал сообщать AMD о выявленной бреши, так как изначально был уверен, что AMD вместо того, чтобы признать ошибку, попытается подать на него в суд.

  1. OpenNews: GitHub опубликовал отчёт о блокировках в 2019 году
  2. OpenNews: Apple безуспешно пытается противостоять утечке кода iBoot на GitHub
  3. OpenNews: DMCA использован для удаления из списка блокировки рекламы Easylist
  4. OpenNews: Создатель вредоносного ПО блокировал отчёт о проблеме под предлогом нарушения авторских прав
  5. OpenNews: MPAA добилась блокировки на GitHub программы для просмотра видео через BitTorrent
Обсуждение (136 +26) | Тип: К сведению |
26.03.2020 Проект KDE представил окружение Plasma Bigscreen для телевизоров (111 +27)
  Разработчики KDE представили первый тестовый выпуск специализированного пользовательского окружения Plasma Bigscreen, которое может использоваться в качестве платформы для телеприставок и умных телевизоров. Первый тестовый загрузочный образ подготовлен (1.9 Гб) для плат Raspberry Pi 4. Сборка основана на ARM Linux и пакетах от проекта KDE Neon.

Интерфейс пользователя, специально оптимизированный для больших экранов и управления без клавиатуры, дополнен применением системы голосового управления и виртуальным голосовым помощником, построенным на основе наработок проекта Mycroft. В частности, для управления голосом применяется голосовой интерфейс Selene и связанный с ним бэкенд, который можно запустить на своём сервере. Для распознавания речи может использоваться движок Google STT или Mozilla DeepSpeech.

Кроме голоса управление работой окружения также может осуществляться при помощи пультов дистанционного управления, в том числе штатного пульта от телевизора. Поддержка пультов реализована при помощи библиотеки libCEC, позволяющей использовать шину Consumer Electronics Control для управления устройствами, подключёнными через HDMI. Поддерживается режим симуляции манипулятора мышь через пульт и использование встроенных в пульты микрофонов для передачи голосовых команд. Кроме телевизионных пультов можно использовать USB/Bluetooth пульты, такие как WeChip G20 / W2, а также работать при подключении обычных клавиатуры, мыши и микрофона.

Платформа поддерживает как запуск специально подготовленных мультимедийных приложений Mycroft, так и традиционных настольных программ KDE, собранных для окружения Bigscreen. Для доступа к установленным программам и загрузки дополнительных программ предложен новый специализированный интерфейс, рассчитанный на удалённое управление голосом или пультом ДУ. Проектом запущен собственный каталог приложений apps.plasma-bigscreen.org (в РФ недоступен, так как размещён на IP-адресе, заблокированном Роскомнадзором). Для навигации по глобальной сети применяется web-браузер Aura на основе Chromium.

Основные особенности платформы:

  • Простота расширения. Умный помощник Mycroft манипулирует "навыками" ("skills"), позволяющими привязывать к голосовым командам выполнение определённых задач. Например, навык "погода" получает данные о погоде и позволяет информировать об этом пользователя, а навык "готовка" позволяет получать сведения о кулинарных рецептах и помогать пользователю в приготовлении блюд. Проект Mycroft уже предоставляет коллекцию типовых навыков, для разработки которых может применяться графический фреймворк на базе Qt и библиотеки Kirigami. Любой разработчик может подготовить свой навык для платформы, используя Python и QML.
  • Код является свободным и доступным в исходных текстах. Производители могут создавать умные устройства на базе Plasma Bigscreen, распространять производные работы и вносить изменения на своё усмотрение, не ограничиваясь рамками, свойственными проприетарным TV-окружениям.
  • Превращение традиционного рабочего пространства Plasma в форму, которой можно управлять с обычного пульта ДУ, даёт возможность дизайнерам интерфейса KDE экспериментировать с новыми подходами компоновки интерфейса приложений и методами взаимодействия с пользователем, упрощающими управление, сидя на диване.
  • Голосовое управление. Комфортное управление голосом оборачивается опасностью нарушения конфиденциальности и утечки на внешние серверы записей фоновых разговоров, не связанных с голосовыми командами. Для решения этой проблемы в Bigscreen используется открытый голосовой помощник Mycroft, доступный для аудита и развёртывания на своих мощностях. В предложенном тестовом выпуске осуществляется подключение к домашнему серверу Mycroft, который по умолчанию использует Google STT, передающий анонимизированные голосовые данные в Google. При желании пользователь может поменять бэкенд и в том числе использовать локальные сервисы на базе Mozilla Deepspeech или вообще отключить функцию распознавания голосовых команд.
  • Проект создан и поддерживается зарекомендовавшим себя сообществом разработчиков KDE.



  1. OpenNews: План разработки мобильной платформы KDE Plasma Mobile
  2. OpenNews: Проект KDE представил мобильную платформу Plasma Mobile
  3. OpenNews: KDE сосредоточит внимание на поддержке Wayland, унификации и доставке приложений
  4. OpenNews: Релиз рабочего стола KDE Plasma 5.18
  5. OpenNews: Выпуск мобильной платформы KDE Plasma Active 4
Обсуждение (111 +27) | Тип: Программы | Интересно
26.03.2020 Релиз набора компиляторов LLVM 10.0 (61 +18)
  После шести месяцев разработки представлен релиз проекта LLVM 10.0 - GCC-совместимого инструментария (компиляторы, оптимизаторы и генераторы кода), компилирующего программы в промежуточный биткод RISC-подобных виртуальных инструкций (низкоуровневая виртуальная машина с многоуровневой системой оптимизаций). Сгенерированный псевдокод может быть преобразован при помощи JIT-компилятора в машинные инструкции непосредственно в момент выполнения программы.

Из новых возможностей LLVM 10.0 отмечается поддержка концепций C++ (C++ Concepts), прекращение запуска Clang в форме отдельного процесса, поддержка проверок CFG (control flow guard) для Windows и поддержка новых возможностей CPU.

Улучшения в Clang 10.0:

  • Добавлена поддержка "концепции", расширения шаблонов C++, которое вошло в состав стандарта C++20 (включается флагом -std=c++2a). Концепции позволяют определить набор требований к параметрам шаблона, которые во время компиляции ограничивают набор аргументов, которые могут приниматься в качестве параметров шаблона. Концепции можно применять для того, чтобы избежать логических несоответствий между свойствами типов данных, используемых внутри шаблона, и свойствами типов данных входных параметров.
    
       template<typename T>
       concept EqualityComparable = requires(T a, T b) {
           { a == b } -> std::boolean;
           { a != b } -> std::boolean;
       };
    
  • По умолчанию прекращён запуск отдельного процесса ("clang -cc1"), в котором выполняется компиляция. Компиляция теперь выполняется в основном процессе, а для восстановления старого поведения можно использовать опцию "-fno-integrated-cc1".
  • Новые режимы диагностики:
    • "-Wc99-designator" и "-Wreorder-init-list" - предупреждают об использовании инициализаторов C99 в режиме C++ в случаях, когда они корректны в C99, но не подходят для C++20.
    • "-Wsizeof-array-div" - отлавливает такие ситуации, как "int arr[10]; ...sizeof(arr) / sizeof(short)..." (должно быть "sizeof(arr) / sizeof(int)").
    • "-Wxor-used-as-po" - предупреждает об использовании таких конструкций, как применение оператора "^" (xor) в операциях, которые можно спутать с возведением в степень (2 ^ 16).
    • "-Wfinal-dtor-non-final-class" - предупреждает о классах, не помеченных спецификатором "final", но имеющих деструктор c признаком "final".
    • "-Wtautological-bitwise-compare" - группа предупреждений для диагностики тавтологического сравнения битовой операции и константы, а также для выявления всегда истинных сравнений, в которых битовая операция OR применяется к неотрицательному числу.
    • "-Wbitwise-conditional-parentheses" предупреждает о проблемах при смешивании логических операторов AND ("&") и OR ("|") c условным оператором ("?:").
    • "-Wmisleading-indentation" - аналог одноимённой проверки из GCC, предупреждающей о выражениях, выделенных отступом, будто они входят в блок if/else/for/while, но на самом деле в данный блок не входящих.
    • При указании "-Wextra" обеспечено включение проверки "-Wdeprecated-copy", предупреждающей об использовании конструкторов "move" и "copy" в классах с явным определением деструктора.
    • Расширены проверки "-Wtautological-overlap-compare", "-Wsizeof-pointer-div", "-Wtautological-compare", "-Wrange-loop-analysis".
    • Отключены по умолчанию проверки "-Wbitwise-op-parentheses" и "-Wlogical-op-parentheses".
  • В коде на С и С++ арифметические операции с указателями разрешены только в массивах. Детектор неопределённого поведения (Undefined Behavior Sanitizer) в режиме "-fsanitize=pointer-overflow" теперь отлавливает такие случаи, как добавление ненулевого смещения к указателю со значением null или образование нулевого указателя при вычитании целого числа из ненулевого указателя.
  • Режим "-fsanitize=implicit-conversion" (Implicit Conversion Sanitizer) адаптирован для выявления проблем с операциями инкремента и декремента для типов с битовым размером меньшим, чем у типа "int".
  • При выборе целевых x86-архитектур "-march=skylake-avx512", "-march=icelake-client", "-march=icelake-server", "-march=cascadelake" и "-march=cooperlake" по умолчанию в векторизированном коде прекращено использование 512-разрядных регистров zmm, за исключением их прямого указания в исходных текстах. Причиной является снижение частоты CPU при выполнении 512-разрядных операций, что может негативно сказываться на общей производительности. Для изменения нового поведения предусмотрена опция "-mprefer-vector-width=512".
  • Поведение флага "-flax-vector-conversions" приближено к GCC: запрещены неявные векторные битовые преобразования между целочисленными векторами и векторами с плавающей точкой. Для исключения данного ограничения предлагается использовать флаг "-flax-vector-conversions=all", который используется по умолчанию.
  • Улучшена поддержка CPU MIPS семейства Octeon. В список допустимых типов CPU добавлен "octeon+".
  • При сборке в промежуточный код WebAssembly обеспечен автоматический вызов оптимизатора wasm-opt, при его наличии в системе.
  • Для систем на базе архитектуры RISC-V в условных блоках ассемблерных inline-вставок разрешено использование регистров, хранящих значения с плавающей запятой.
  • Добавлены новые флаги компилятора: "-fgnuc-version" для задания значения версии для "__GNUC__" и подобных макросов; "-fmacro-prefix-map=OLD=NEW" для замены префикса каталогов OLD на NEW в таких макросах, как "__FILE__"; "-fpatchable-function-entry=N[,M]" для генерации определённого числа инструкций NOP перед и после точкой входа в функцию. Для RISC-V добавлена поддержка флагов "-ffixed-xX", "-mcmodel=medany" и "-mcmodel=medlow".
  • Добавлена поддержка атрибута '__attribute__((target("branch-protection=...")))', действие которого аналогично опции -mbranch-protection.
  • На платформе Windows при указании флага "-cfguard" реализована подстановка проверок целостности потока выполнения (Control Flow Guard) при непрямых вызовах функций. Для отключения подстановки проверок можно использовать флаг "-cfguard-nochecks" или модификатор "__declspec(guard(nocf))".
  • Поведение атрибута gnu_inline приближено к GCC, в случаях, когда он используется без ключевого слова "extern".
  • Расширены возможности, связанные с поддержкой OpenCL и CUDA. Добавлена поддержка новых возможностей OpenMP 5.0.
  • В утилиту clang-format добавлена опция Standard, позволяющая определить версию стандарта C++, применяемую при разборе и форматировании кода (Latest, Auto, c++03, c++11, c++14, c++17, c++20).
  • В статический анализатор добавлены новые проверки: alpha.cplusplus.PlacementNew для определения достаточного места в хранилище, fuchsia.HandleChecker для выявления утечек, связанных с обработчиками Fuchsia, security.insecureAPI.decodeValueOfObjCType для определения потенциальных переполнений буфера при использовании [NSCoder decodeValueOfObjCType:at:].
  • В детекторе неопределённого поведения (UBSan, Undefined Behavior Sanitizer) расширены проверки переполнения указателей, которые теперь отлавливают применение ненулевых смещений к указателям NULL или получение в результате добавления смещения указателя со значением NULL.
  • В linter clang-tidy добавлена большая порция новых проверок.



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

  • Во фреймворк Attributor добавлены новые межпроцедурные оптимизации и анализаторы. Обеспечено прогнозирование состояния 19 различных атрибутов, включая 12 атрибутов 12 LLVM IR и 7 абстрактных атрибутов, таких как живучесть (liveness).
  • Добавлены новые встроенные в компилятор матричные математические функции (Intrinsics), которые при компиляции заменяются на эффективные векторные инструкции.
  • Внесены многочисленные улучшения в бэкенды для архитектур X86, AArch64, ARM, SystemZ, MIPS, AMDGPU и PowerPC. Добавлена поддержка CPU Cortex-A65, Cortex-A65AE, Neoverse E1 и Neoverse N1. Для ARMv8.1-M оптимизирован процесс генерации кода (например, появилась поддержка циклов с минимальными накладными расходами) и добавлена поддержка автовекторизации с использованием расширения MVE. Улучшена поддержка CPU MIPS Octeon. Для PowerPC включена векторизация математических подпрограмм с использованием библиотеки MASSV (Mathematical Acceleration SubSystem), улучшена генерация кода и оптимизирован доступ к памяти из циклов. Для x86 изменена обработка векторных типов v2i32, v4i16, v2i16, v8i8, v4i8 и v2i8.
  • Улучшен генератор кода для WebAssembly. Добавлена поддержка TLS (Thread-Local Storage) и инструкции atomic.fence. Значительно расширена поддержка SIMD. В объектных файлах WebAssembly добавлена возможность использования сигнатур функций с несколькими значениями.
  • При обработке циклов задействован анализатор MemorySSA, позволяющий определять зависимости между различными операциями с памятью. MemorySSA позволяет добиться сокращения времени компиляции и выполнения кода или может использоваться вместо AliasSetTracker без потери в производительности.
  • В отладчике LLDB значительно улучшена поддержка формата DWARF v5. Улучшена поддержка сборки с MinGW и добавлена начальная возможность отладки исполняемых файлов Windows для архитектур ARM и ARM64. Добавлены описания опций, предлагаемых при автодополнении ввода нажатием табуляции.
  • Расширены возможности компоновщика LLD. Улучшена поддержка формата ELF, в том числе обеспечена полная совместимость glob-шаблонов с компоновщиком GNU, добавлена поддержка сжатых отладочных секций ".zdebug", добавлено свойство PT_GNU_PROPERTY для определения секции .note.gnu.property (может использоваться в будущих ядрах Linux), реализованы режимы "-z noseparate-code", "-z separate-code" и "-z separate-loadable-segments". Улучшена поддержка MinGW и WebAssembly.

  1. OpenNews: Релиз набора компиляторов LLVM 9.0
  2. OpenNews: Разработчики из Google предложили разработать свою libc для LLVM
  3. OpenNews: В знак несогласия с новым кодексом поведения LLVM покинул один из ведущих разработчиков
  4. OpenNews: Экспериментальная поддержка пересборки ядра Linux в Clang с механизмом защиты CFI
  5. OpenNews: Релиз набора компиляторов GCC 9
Обсуждение (61 +18) | Тип: Программы |
<< Предыдущая страница (позже)
Следующая страница (раньше) >>



Спонсоры:
Слёрм
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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