2016 год был как-то не очень богат на громкие события в мире Open Source. Тем не менее ряд действительно важных и, главное, знаковых моментов все же нужно отметить.
 

Linux 25 лет

Да, именно так! Проект, анонсированный как хобби 25 августа 1991 года, давно перестал быть просто увлечением и фактически изменил мир. И хотя среди настольных систем процент Linux невелик (по данным проекта w3schools.com, декабрь 2016-го — 5,6% + 4,73% Android, лидирующий среди мобильных устройств), эта ОС используется во многих дата-центрах, высоконагруженных проектах и служит основой банковских и корпоративных систем. Большинство веб-сайтов работают на серверах под управлением разных вариантов ОС. В течение многих лет Linux безраздельно доминирует в списке 500 ОС, используемых в суперкомпьютерах (497 из 500). Он стал основой мегапопулярной ОС для смартфонов и планшетников — Android OS. И конечно, идея оказала существенное влияние на сам процесс разработки ПО.

В декабре был анонсирован следующий релиз ядра 4.9, побивший рекорд в 16 150 non-merge-изменений, державшийся с 3.15 (13 722). Примерно 2388 забрала реализация шины Gerybus — проекта телефона, который позволит пользователям создавать свои собственные устройства при помощи модульных аппаратных блоков. Появились инструменты для диагностики и блокирования переполнений стека ядра (CONFIG_VMAP_STACK), алгоритм контроля перегрузки TCP от Google (Bottleneck Bandwidth), механизм квот и модуль генерации случайных чисел в netfilter, поддержка SELinux в OverlayFS и, конечно же, новые драйверы (2/3 объема). Кстати, в первый день нового года Торвальдс объявил о выходе 4.10-rc2, особых изменений там нет, что вполне естественно: у разработчиков тоже бывают корпоративы.

Еще один очень известный проект перешагнул 20-летний рубеж — KDE. Стартовал он в октябре 1996-го после анонса студента Маттиаса Эттриха (Matthias Ettrich): «Идея заключается не в том, чтобы создать графический интерфейс для полной UNIX-системы или системы-администратора. <...> Идея в том, чтобы создать графический интерфейс для конечного пользователя. Того, кто хочет работать в интернете с Linux, написать несколько писем и играть в некоторые интересные игры». Заметные вехи истории проекта можно узнать на сайте timeline.kde.org.

Статистика ОС по данным w3schools.com
Статистика ОС по данным w3schools.com
 

Microsoft и LF

Долгое время MS выступала против самой идеи открытого ПО. Многие помнят, как пятнадцать лет назад Стив Балмер, заменивший в руководстве Билла Гейтса, клеймил Linux и опенсорс-сообщество, называя их раковой опухолью: «Linux is a cancer that attaches itself in an intellectual property sense to everything it touches». Многочисленные спикеры корпорации рассказывали, что Linux — это плохо, это неправильно, это криво. Интересно, что за критикой других в MS забыли о своих перспективах, игнорируя мобильные устройства и пропихивая MS Office. В итоге 14-летнего срока пребывания Балмера акции Microsoft потеряли 40%, и это, очевидно, стало причиной того, что все изменилось.

Преемник Балмера, нынешний глава Microsoft Сатья Наделла, вовсю наводит мосты с опенсорс-сообществом, и агрессивная риторика исчезла. Появились опенсорс-проекты, активно развиваемые MS, а корпорация в своих высказываниях стала куда мягче. Компания начала сотрудничать с Red Hat и SUSE, анонсирован SQL Server 2016 для Linux, опубликованы исходные коды PowerShell, Visual Studio Code и JavaScript-движка Edge, открыта платформа .NET Core, кипит работа в GitHub. Летом 2016 года в Azure Marketplace появилась собственная сборка FreeBSD, а в Windows 10/2016 добавился bash и стали поддерживаться контейнеры. В марте 2016 года компания вступила в Eclipse Foundation, а фонд Apache Software Foundation на протяжении трех лет возглавляет сотрудник Microsoft Сэм Руби.

Но все равно 16 ноября 2016 года можно назвать историческим днем. Общественность была ошеломлена сообщением на конференции Microsoft Connect() 2016, что самый заклятый враг присоединился к консорциуму Linux Foundation, курирующему все вопросы, связанные с развитием Linux, причем сразу в статусе платинового члена. А это значит, что MS ежегодно будет оплачивать взнос в размере 500 тысяч долларов. Главный архитектор Azure Джон Госсман войдет в состав совета директоров Linux Foundation. Среди платиновых участников консорциума также Cisco, IBM, Fujitsu, HP, Huawei, Intel, Oracle, Samsung и другие.

 

Уязвимости в Linux

По данным ресурса cvedetails.com, с 1999 года в ядре Linux найдено 1563 уязвимости, из которых 216 — в 2016 году (86 в 2015-м). Большинство имеют статус Low и Local и не являются серьезными, некоторые будут работать только в определенных условиях. Список небольшой, но радоваться особо нечему, так как ядро — это не вся ОС. Дистрибутив содержит большое количество библиотек, приложений и утилит, в которых также находят уязвимости. Например, в последнее время многочисленными уязвимостями славится GStreamer. Печально, что о некоторых серьезных проблемах разработчики знали давно.

С 1999 года в ядре Linux найдено 1563 уязвимости
С 1999 года в ядре Linux найдено 1563 уязвимости

В начале года в ядре Linux обнаружили опасную уязвимость CVE-2016-0728, просуществовавшую с 2012 года и позволявшую повысить привилегии пользователя вплоть до root. Проблема заключалась в некорректной обработке ссылки на объект в функции работы со связкой ключей (join_session_keyring), и ей оказались подвержены все версии ядра Linux 3.8.x и выше и, соответственно, многие дистрибутивы Linux этого периода, включая устройства с Android, так как приложения в Google Play проверить сложно (кроме тех сборок, где отключен keyrings или включен SELinux, не позволяющий использовать уязвимость). Практически сразу появился эксплоит, занимающий всего 100 строк.

Не все уязвимости опасны
Не все уязвимости опасны

В октябре обнаружена самая известная уязвимость прошедшего года — CVE-2016-5195, которой оказались подвержены большинство современных дистрибутивов Linux. Более того, эксперты и исследователи сообщили, что она активно эксплуатировалась хакерами. Уязвимость относится к privilege escalation. Проблема связана с обработкой подсистемой памяти ядра механизма copy-on-write (COW), в итоге неавторизованный локальный пользователь может получить доступ к memory mappings с правом записи, хотя доступ должен быть ограничен только чтением (read-only), — то есть, говоря проще, получить доступ на запись к файлам root или системным. Самое печальное, что баг присутствует во всех дистрибутивах с ядром 2.6.22+ (почти десять лет) и известен разработчикам давно. Для проверки наличия уязвимости предложен эксплоит.

В канун нового года была закрыта уязвимость CVE-2016-8655, позволяющая пользователю (локальному и удаленному) выполнить код с правами root, выйти за пределы изолированных контейнеров или вызвать крах системы. Проблема порождена состоянием гонки в функции packet_set_ring() net/packet/af_packet.c и присутствует в ядре Linux 3.2-rc1 (август 2011 года). Представлен эксплоит для Ubuntu 14.04/16.04 c ядром Linux 4.4, который работал в том числе и при активных механизмах защиты SMEP/SMAP. Для атаки пользователь должен иметь полномочия по созданию сокетов AF_PACKET, которые по умолчанию недоступны в большинстве дистрибутивов Linux, но в Android такая возможность есть у процесса mediaserver, через который может быть проэксплуатирована уязвимость.

 

Nginx

По статистике Netcraft nginx завоевывает все большую популярность, показывая стабильный рост по всем показателям и занимая второе место по обслуживанию активных веб-сайтов. Среди 100 тысяч самых посещаемых сайтов половина работает на nginx. Его используют такие провайдеры, как CloudFlare, сервисы Yandex, Facebook и Instagram. В начале года вышла стабильная версия 1.10.0, в которую включены все нововведения, появившиеся в ветке 1.9: протокол HTTP/2, динамические модули, stream и многое другое. Переход в стабильную ветку означает, что они готовы к использованию в продакшене и, главное, что они доступны без пересборки. Версия 1.10 считается стабильной и уже есть в репозиториях дистрибутивов.

Nginx стабильно показывает рост популярности
Nginx стабильно показывает рост популярности

Протоколу HTTP/1.1, который сегодня использует большинство веб-серверов, уже 20 лет. Он стандартизирован в RFC 2068 в 1997-м, принят окончательно в 1999 году. Но ситуация с тех пор сильно изменилась. Объемы загружаемой информации увеличились, выросло количество объектов на каждой странице (картинки, JS, CSS), появились мобильные устройства, подключающиеся в том числе и по узким каналам, логика приложений перешла с серверов на клиентскую часть. Вопрос быстрой загрузки страниц снова стал актуальным. Но в HTTP/1.1 каждая картинка или скрипт открывает свое соединение, а браузер, получив новую ссылку, отправляет еще один запрос и ждет, пока загрузится вся страница.

Протокол HTTP/2 стандартизирован в начале 2015 года, в отличие от HTTP/1.1 он является бинарным, сервер открывает только одно соединение, сжимает заголовки и может отправлять данные, которые еще не запрошены клиентом. По разным оценкам при использовании HTTP/2 скорость открытия страниц увеличивается в среднем на 15–50%. На сегодня более 8% сайтов уже используют новую версию протокола, причем примерно 50% из них подаются через CloudFlare. Некоторое время параллельно HTTP/2 Google продвигала свою версию SPDY, но на сегодня корпорация отказалась от его поддержки в пользу HTTP/2.

В августе 2015-го уже появился патч для nginx, в Apache он добавился в версии 2.4.17 практически параллельно в модуле mod_http2. Официально патч включен с версии 1.9.5, но в дистрибутивах часто собирался без его поддержки (нужно было пересобирать с --with-http_v2_module --with-http_ssl_module). Чтобы включить HTTP/2, достаточно установить на сайте поддержку HTTPS и дописать в конфиг всего одну директиву:

listen 443 ssl http2;

Вторая важная новость — появление динамических модулей, которые компилируются как отдельные so-файлы и подгружаются по мере необходимости при работе nginx. До этого в дистрибутивах предлагалось несколько пакетов nginx, собранных с разными параметрами. Это было неудобно и мантейнерам, и админам. При появлении обновлений для модуля приходилось ждать пакета или пересобирать все самостоятельно. При этом часть функциональности, вшитой в nginx, не использовалась. С версии nginx-1.9.11 не придется заново компилировать nginx каждый раз при добавлении нужной функциональности или обновлении модуля.

Модули можно собрать в отдельные пакеты со своими зависимостями, которые доустанавливать и обновлять по мере необходимости, а веб-сервер настроить точно на нужные функции, без лишнего. Для добавления модуля в качестве динамического вместо --add-module следует использовать --add-dynamic-module. Хотя отмечается, что не каждый статический модуль можно и нужно конвертировать в динамический. Другие инструкции для сборки можно найти в документации. Собранные модули обычно находятся в подкаталоге modules в папке установки nginx и подключаются директивой

load_module modules/ngx_http_geoip_module.so;

Два новых модуля позволят использовать nginx более эффективно. Модуль stream (ngx_stream_core_module, ngx_stream_proxy_module), анонсированный в 1.9.0 и получавший обновления всю ветку 1.9, предназначен для проксирования и балансировки TCP- и UDP-трафика и UNIX-сокетов. С его появлением nginx может не только обслуживать веб-сайты, но и, например, пробрасывать DNS- или MySQL-запросы. То есть нет необходимости использовать для этих целей дополнительные приложения.

server {
    listen 53 udp;
    proxy_responses 1;
    proxy_timeout 20s;
    proxy_pass ns1.example.org:53;
}

Поддерживается ограничение скорости, round-robin, подключение на альтернативный сервер, когда основной не отвечает, и многое другое.

Новый модуль ngx_http_slice_module, появившийся в 1.9.8, позволяет разбить большие запросы на фрагменты, которые будут кешироваться независимо. Модуль подразумевает использование двух параметров: slice — размер фрагмента (его нужно подбирать для каждого сайта) и proxy_set_header — указывает этот размер в заголовке Range.

location / {
    slice 1m;
    proxy_cache cache;
    proxy_cache_key $uri$is_args$args$slice_range;
    proxy_set_header Range $slice_range;
    proxy_cache_valid 200 206 8h;
    proxy_pass http://localhost:8080;
}
Модуль для работы HTTP/2 в nginx
Модуль для работы HTTP/2 в nginx
 

Wayland

Графическая подсистема X Window System разработана в MIT в далеком 1984 году, самое популярное обновление X11 было в 1987-м, а в то время графика на мониторах была скорее излишеством, чем повседневностью. И несмотря на довольно солидный возврат и многие изменения, современные разработки сохраняют совместимость с предыдущими версиями (устаревшие API, X Logical Font Descriptor, растеризация Glyph, расширения XShape, XVideo и так далее), а значит, и все архитектурные недостатки с точки зрения современных интерфейсов. Многие адаптации к современным реалиям в Х выполнены благодаря выносу части кода в ядро или библиотеки. В результате код несколько раз копируется, и все это работает медленно, не очень надежно и, главное, не устраивает функционально.

На смену X11 продвигается новый протокол Wayland и развиваемый параллельно композитный сервер Weston, обеспечивающий работу в пользовательских окружениях. Хотя в качестве последнего может быть любой другой, поддерживающий протокол Wayland. Клиенты Wayland самостоятельно выполняют отрисовку окон, передавая информацию об этом композитному серверу, формирующему из буферов отдельных приложений рабочий стол с учетом перекрытия окон, прозрачности и прочих установок. Это позволяет избежать двойной буферизации при использовании высокоуровневых библиотек, таких как GTK+ и Qt, берущих на себя задачу компоновки содержимого окон. Прямая работа c Wayland уже есть в GTK3+, Qt 5, Clutter и EFL (Enlightenment Foundation Library). В настоящее время заявили о поддержке Wayland разработчики Enlightenment, GNOME, KDE и некоторые другие. Ведется работа в Firefox, LibreOffice, Android.

Несмотря на то что версия 1.0.0 вышла более четырех лет назад (в октябре 2012-го), в официальных релизах дистрибутивов Linux Wayland пока не встречается. Первыми заявили о переходе в Fedora 23, но затем релиз был перенесен до 24, и вот наконец вышедший в ноябре 2016-го Fedora 25 с GNOME 3.22 получил поддержку Wayland. Хотя в качестве опции оставлен X.Org. Причина и в том, что Wayland пока что оптимизирован только для встроенных видеокарт, драйверов ни для видеокарт Nvidia (экспериментальная функция), ни для AMD пока нет.

Canonical отказалась от Wayland в пользу аналогичной разработки Mir. Текущий релиз — 0.24.1 от сентября 2016 года, но процесс идет очень медленно. Хотя традиционно многие новинки, появляющиеся в Fedora, перекочевывают в остальные дистрибутивы (как это случилось в systemd). Посмотрим.

В Fedora 25 в качестве графической подсистемы используется Wayland
В Fedora 25 в качестве графической подсистемы используется Wayland
 

Итоги

Несомненно, год прошел под знаком Open Source. Многие проекты сделали шаг вперед. И хотя флагман ОС Linux не занял доминирующее положение на рынке настольных ОС, никто не собирается сдаваться. Об этом сказал сам Линус на конференции Embedded Linux: «Я, конечно же, хотел, чтобы Linux захватил и этот мир, но, как оказалось, эту область захватить очень сложно. Я по-прежнему работаю над этим. Прошло уже 25 лет. Я могу потратить на это еще столько же. Я добьюсь своего долгой осадой».

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    0 комментариев
    Межтекстовые Отзывы
    Посмотреть все комментарии