Linux
 

Linux

Продукт

Дистрибутивы на основе Linux имеют широкое применение в различных областях: от встраиваемых систем до суперкомпьютеров, надежно удерживают лидирующие позиции на рынке серверов, как правило в составе комплекса серверного программного обеспечения LAMP.

Дата премьеры системы: 25 августа 1991 г.

Содержание

Linux, GNU/Linux — общее название UNIX-подобных операционных систем на основе одноимённого ядра и собранных для него библиотек и системных программ, разработанных в рамках проекта GNU. Краткое название Linux распространено потому, что первой, наиболее популярной и единственной системной библиотекой, использовавшейся в системах на базе ядра Linux, была GNU C Library (glibc).

GNU/Linux работает на PC-совместимых системах семейства Intel x86, а также на IA-64, AMD64, PowerPC, ARM и многих других.

Основателем проекта "GNU" является Ричард Мэттью Столлман (Richard Matthew Stallman)

К операционной системе GNU/Linux также часто относят программы, дополняющие эту операционную систему, и прикладные программы, делающие её полноценной многофункциональной операционной средой.

Ядро Linux

На 2016 год ядро ОС Linux содержит более 19 млн строк кода. По данным исследования, проведённого по заказу Евросоюза, приблизительная стоимость разработки проекта, аналогичного современному ядру Linux, с нуля, могла бы превысить $1 млрд, по другим оценкам - более $3 млрд[1].

Ядро Linux и пингвин Tux, (2015)

Динамика роста базы кода (количество строк исходного кода) ядра

  • 0.0.1 - сентябрь 1991, 10 тыс. строк кода;
  • 1.0.0 - март 1994, 176 тыс. строк кода;
  • 1.2.0 - март 1995, 311 тыс. строк кода;
  • 2.0.0 - июнь 1996, 778 тыс. строк кода;
  • 2.2.0 - январь 1999, 1.8 млн. строк кода;
  • 2.4.0 - январь 2001, 3.4 млн. строк кода;
  • 2.6.0 - декабрь 2003, 5.9 млн. строк кода;
  • 2.6.28 - декабрь 2008, 10.2 млн. строк кода;
  • 2.6.35 - август 2010, 13.4 млн. строк кода;
  • 3.0 - август 2011, 14.6 млн. строк кода.
  • 3.5 - июль 2012, 15.5 млн. строк кода.
  • 3.10 - июль 2013, 15.8 млн. строк кода;
  • 3.16 - август 2014, 17.5 млн. строк кода.
  • 4.1 - июнь 2015, 19.5 млн. строк кода.
  • 4.7 - июль 2016, 21.7 млн. строк кода.

Прогресс развития ядра

  • Linux 0.0.1 - сентябрь 1991, первый публичный выпуск, поддерживающий только CPU i386 и загружающийся с дискеты;
  • Linux 0.12 - январь 1992, код начал распространяться под лицензией GPLv2;
  • Linux 0.95 - март 1992, обеспечена возможность запуска X Window System, реализована поддержка виртуальной памяти и раздела подкачки.
  • Linux 0.96-0.99 - 1992-1993, началась работа над сетевым стеком. Представлена файловая система Ext2, добавлена поддержка формата файлов ELF, представлены драйверы для звуковых карт и контроллеров SCSI, реализована загрузка модулей ядра и файловой системы /proc.
  • В 1992 году появились первые дистрибутивы SLS и Yggdrasil. Летом 1993 года были основаны проекты Slackware и Debian.
  • Linux 1.0 - март 1994, первый официально стабильный релиз;
  • Linux 1.2 - март 1995, существенное увеличение числа драйверов, поддержка платформ Alpha, MIPS и SPARC, расширение возможностей сетевого стека, появление пакетного фильтра, поддержка NFS;
  • Linux 2.0 - июнь 1996 года, поддержка многопроцессорных систем. Именно с ее подверсиями и связано победоносное шествие Linux по всему миру;
  • Март 1997, основан LKML, список рассылки разработчиков ядра Linux;
  • 1998 год, запущен первый попавший в список Top500 кластер на базе Linux, состоящий из 68 узлов с CPU Alpha;
  • Linux 2.2 - январь 1999, увеличена эффективность системы управления памятью, добавлена поддержка IPv6, реализован новый межсетевой экран, представлена новая звуковая подсистема;
  • Linux 2.4 - февраль 2001, обеспечена поддержка 8-процессорных систем и 64 Гб ОЗУ, файловая система Ext3, поддержка USB, ACPI;
  • Linux 2.6 - декабрь 2003, поддержка SELinux, средства автоматического тюнинга параметров ядра, sysfs, переработанная система управления памятью;
  • В 2005 году представлен гипервизор Xen, который открыл эру виртуализации;
  • В сентябре 2008 года сформирован первый релиз платформы Android, основанной на ядре Linux;
  • Linux 2.6.39 - очередной стабильный релиз операционной системы был выпущен 19 мая 2011 г.
  • В июле 2011 года после 10 лет развития ветки 2.6.x выполнен переход к нумерации 3.x.
  • В 2015 году состоялся выпуск ядра Linux 4.0.

Интересные факты о Linux

Уменьшение сроков обновления ядра

На выпуск ядра Linux 3.18 (релиз состоялся 7 декабря 2014 года) потребовалось 63 дня. Рекордно короткие сроки обновления принадлежат версии 3.16 (56 дней). Средний цикл разработки ядра в случае с версиями от 3.11 до 3.18 сократился до 66 дней с 70 дней на версиях с 3.3 по 3.10.

Ускорение темпов выхода обновлений

В ядре Linux 3.18 появились 11 379 изменений, тогда как абсолютным лидером по числу корректировок является версия 3.15 (13 722). Она же занимает первое место по скорости обновления: на этапе разработки ядро 3.15 получало каждый час в среднем 8,17 изменения против 7,53 у 3.18. При этом стоит учитывать, что ядро 3.15 создавалось около 70 дней.

Уменьшение размеров ядра

Более чем за два десятка лет ядро Linux наполнилось огромным количеством функций, что, безусловно, сказалось на его размере. Однако разработчики усиленно работают над тем, чтобы снизить системные требования Linux до минимума при наращивании функциональности. Промежуточным итогом такой работы является легкий дистрибутив Tiny Core размером 9 Мбайт. Эта ОС полностью загружается в память и работает из нее.

Обновление ядра в реальном времени

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

Какие бывают дистрибутивы GNU/Linux

Наиболее известными дистрибутивами Linux являются Arch Linux, CentOS, Debian, Fedora, Gentoo, Mandriva, Mint, openSUSE, Red Hat, Slackware, Ubuntu.

GNU/Linux

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

Среди существующих сборок можно выделить 3 линейки:

  1. Debian like дистрибутивы - основываются на Debian GNU/Linux. Для распространения программ используются DEB пакеты. Наиболее известные дистрибутивы: Gnu/Linux Debian, семейство дистрибутивов Ubuntu (Ubuntu, Kubuntu, Xubuntu), Xandros.
  2. Red Hat like дистрибутивы - основываются на Red Hat Linux. Для распространения программ используются RPM пакеты. Наиболее известные сборки: Red Hat Enterprise Linux, Fedora, Mandrake, Mandriva, ASPLinux, CentOS, OpenSUSE.
  3. Source Based дистрибутивы - основным способом установки программ в таких дистрибутивах является сборка из исходных кодов - Gentoo, Arch (частично).

Так же есть инструкции по сборке своего собственного дистрибутива - LFS (Linux from Scratch).

Кто разрабатывает дистрибутивы

Дистрибутивы GNU/Linux существенно различаются не только по особенностям организации разработки, но и по бизнес-модели. Так, например, семейство дистрибутивов Red Hat, выпускаемое одноимённой компанией, ориентированно исключительно на корпоративный рынок, что обуславливает разнообразие редакций внутри линейки, наличие различных программ коммерческой поддержки и сертификации. В противовес этому, существуют дистрибутивы и разрабатываемые преимущественно сообществом, например, Debian, поддержка инфраструктуры которых осуществляется за счет пожертвований членов сообщества и третьих лиц.

Вместе с тем, по данным The Linux Foundation, более 85% изменений в ядро Linux в 2006-2007 году вносились корпоративными разработчиками[2], при этом стоимость разработки «с нуля» только ядра Linux оценивается в $1,4 млрд., а типичного GNU/Linux-дистрибутива — в $10,8 млрд[3].

Популярность дистрибутивов

2011: Fedora опережает Ubuntu

Согласно исследованию сайта DistroWatch (ноябрь 2011 г), доля операционной системы Ubuntu, которая долгое время считалась самым популярным в мире дистрибутивом Linux, за последнее время заметно сократилась, и теперь Ubuntu опережают Fedora, Mint и openSUSE[4].

Mint сейчас занимает первое место в рейтинге DistroWatch, заметно опережая своих конкурентов – ее доля среди дистрибутивов Linux составила около 11%.

Доля Fedora и openSUSE составляет примерно по 6% рынка. Показатель Ubuntu в то же время опустился примерно до 4%. В 2005 г. Ubuntu занимала более 10% рынка операционных систем на основе Linux, однако с тех пор ее доля неуклонно снижалась.

Файл:Linux_дистрибутивы_(доли_рынка_2005-2011).png

По мнению экспертов, одной из причин заметного падения популярности Ubuntu может являться изменение пользовательского интерфейса в версии 11.04, которая вышла в апреле 2011 г. под кодовым названием Natty Narwhal: в этой версии была использована оболочка Unity, ранее применявшаяся в версии Ubuntu Netbook Edition.

Пользователи восприняли интерфейс Unity крайне неоднозначно, что вполне могло повлиять на их переход к альтернативным Ubuntu операционным системам, и, в частности, к клону Ubuntu - Linux Mint.

С 2010 года доля Ubuntu сократилась уже более чем на 47%, тогда как популярность Mint, основанной на дистрибутиве Ubuntu, выросла на 105%. Впрочем, DistroWatch отмечают, что, несмотря на общее падение доли Ubuntu, количество посещений страниц с этим дистрибутивом на DistroWatch почти удвоилось.

За 2011 год лидерами среди Linux-систем являлись Debian, Fedora, Mint, openSUSE и Ubuntu. Если Ubuntu и Debian в течение этого времени теряли популярность, то доли остальных трех систем выросли. Также авторы отчета отмечают общее увеличение количества закачек операционных систем на основе Linux на 21%, что говорит об увеличении популярности Linux в целом.

Популярность на корпоративном рынке

3 декабря 2014 года был опубликован отчет Enterprise End User Trends Report, в котором говорится о продолжающемся росте использования Linux компаниями по всему миру. Исследовательскую работу организация Linux Foundation подготовила совместно с аналитиками Yeoman Technology Group.[5]

В 2014 году количество предприятий и организаций, которые на базе Linux развернули новые приложения, сервисы и сетевую инфраструктуру, возросло до 79% от общего количества участников опроса. В 2011 году этот показатель составлял 65%. Число приверженцев Windows среди корпоративных пользователей за этот период сократилось с 45% до 36%.

Предприятия охотно внедряют Linux

Предприятия охотно внедряют Linux, отказываясь от Windows.

Стоит отметить, что в исследовании принимали участие достаточно большие компании с годовым оборотом от $500 млн и количеством сотрудников от 500. В частности, эксперты выслушали позиции представителей Morgan Stanley, Goldman Sachs, Bank of America, Bristol-Myers Squibb, NTT, Deutsche Bank, DreamWorks, ADP, Bank of New York и др.

Согласно результатам опроса, три четверти респондентов называют Linux приоритетной платформой для работы с облачными вычислениями. В пользу Windows проголосовали 24% опрошенных, за Unix — всего 2%.

78% компаний считают Linux самой безопасной операционной системой. Еще 17% участников опроса уверены, что этот продукт по крайней мере не уступает своим конкурентам. Лишь 2% предприятий сообщили о превосходстве других платформ над Linux в части информационной защиты.

Те компании, которые уже однажды сделали выбор в пользу Linux, продолжают придерживаться этого продукта. По словам 87% опрошенных, в 2014 году они установили Linux-серверы. 82% компаний намерены сделать то же самое в 2015 году.

При этом популярность Windows и Unix в корпоративной среде продолжает снижаться. К примеру, показатель по новым серверным проектам на базе Unix, о которых сообщается в отчете Enterprise End User Trends Report, уменьшился более чем вдвое — с 24% до 11%.

Linux нет равных среди тех пользователей, которым приходится решать критически важные задачи. Для них, по мнению 72% респондентов, подходит только Linux. В 2011 году такой же точки зрения придерживались 60% участников исследования.

2017

Обнаружена уязвимость

27 сентября 2017 года стало известно о выявлении уязвимости (CVE-2017-1000253) в реализации метода загрузки исполняемых файлов ELF в ядре Linux. Она позволяет добиться получения root-полномочий в системе. Уязвимость обнаружила компания Qualys.

Суть уязвимости в том, что исполняемый файл приложения, скомпилированного в режиме PIE (Position Independent Executable), может загружаться так, что часть информации из сегмента данных отразится на области памяти, выделенной под стек. Т.е. через манипуляции с неисполняемыми данными можно переписать часть содержимого стека. Атакующий может воспользоваться этой проблемой для повышения своих привилегий через манипуляции с находящимися в системе исполняемыми файлами с флагом SUID, собранными в режиме PIE[6].

Эксплуатация сводится к передаче в качестве аргумента в execve() строки, размером около 1.5 Гб, в результате чего PIE отражается в область памяти непосредственно ниже стека и становится применим метод атаки Stack Сlash. Вероятность такой раскладки оценивается в 1 из 17331, что позволяет добиться успешного стечения обстоятельств в среднем за пять часов, при интенсивности пробных запусков раз в секунду. Код для атаки очень близок к эксплоиту Linux_ldso_dynamic.c, опубликованному при анонсе Stack Сlash. При помощи вызова строковых операций, использующих стек, достигается пересечение со стеком PIE секции ".dynamic", после чего в ld.so инициируется загрузка собственной разделяемой библиотеки.

В ядре Linux проблема исправлена в апреле 2015 года без акцентирования на связь исправления с проблемами безопасности. Поэтому в LTS-ядра и пакеты с ядром некоторых дистрибутивов данное исправление не было перенесено. Уязвимости оказались подвержены все ветки RHEL/CentOS, но обновления уже включены в RHEL 7.4 и CentOS 1708, выпущены для прошлых веток RHEL 5.x, 6.x и 7.x.

Проблема устранена в Debian. В SUSE Linux Enterprise 12 GA, SP1, SP2 и SP3 проблема не проявляется. Подверженность уязвимости Ubuntu и ветки SUSE Linux Enterprise 11 уточняется. В качестве обходного пути блокирования уязвимости можно установить "sysctl vm.legacy_va_layout=1" для активации устаревшей раскладки mmap.

Вышел релиз 4.13

4 сентября 2017 года Линус Торвальдс представил релиз ядра Linux 4.13.

Среди заметных изменений:

  • встроенная реализация протокола TLS,
  • плагин для рандомизации порядка полей в структурах данных,
  • функциональность "lifetime hints" в VFS,
  • поддержка буферизованного ввода/вывода в неблокирующем режиме,
  • модуль для зонированных блочных устройств,
  • расширение лимита на число файлов в директории ext4,
  • поддержка привязки BPF-программ к сокетам,
  • средства оптимизации энергопотребления через прогнозирование следующего прерывания.

В версию принято более 14 тысяч исправлений от 1400 разработчиков, размер патча - 68 Мб (изменения затронули 10647 файлов, добавлено 824508 строк кода, удалено 228197 строк). Около 45% всех представленных в 4.13 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними подсистемами ядра[7].


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

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В виртуальную файловую систему и уровень блочных устройств добавлены признаки со сведениями о времени жизни данных ("lifetime hints"), которые могут быть привязаны к открытому файлу при помощи системного вызова fcntl(). Например, признак RWH_WRITE_LIFE_SHORT сигнализирует, что данные предназначены для хранения короткое время, а признак RWH_WRITE_LIFE_EXTREME указывает на то, что данные останутся навсегда. Устройство хранения может использовать данные признаки для оптимизации размещения данных с учётом ожидаемого времени их хранения. В настоящее время только драйвер NVMe учитывает эти сведения;
    • Поддержка буферизированного ввода/вывода на блочном уровне в неблокирующем режиме. Новая возможность позволяет улучшить поддержку асинхронного доступа в условиях, когда используется буферизированный ввод/вывод, и снижает риск возникновения задержки возврата управления из ядра при выполнении асинхронных операций (AIO) при помощи интерфейса Direct I/O;
    • Для Device Mapper реализован новый модуль dm-zoned, позволяющий создавать зонированные блочные устройства в которых применяются разные правила записи в различные части устройства. Например, зонирование записи применяется в устройствах c черепичной магнитной записью (Shingled Magnetic Recording, SMR), в которых запись производится с частичным перекрытием соседней дорожки и, как следствие, в рамках группы допускается лишь последовательное добавление данных, а любая перезапись приводит к необходимости перезаписи всей группы дорожек. Модуль dm-zoned даёт возможность представить подобное зонированное устройство как обычное блочное устройство, скрывая применяемые в процессе работы ограничения записи;
    • В файловой системе ext4 реализована опция "largedir", при указании которой увеличивается число файлов, которое может размещаться в одной директории. Без данной опции действует лимит на 10 млн файлов в одной директории, а при указании опции "largedir" лимит увеличивается до 2 миллиардов файлов. Опция подготовлена разработчиками кластерной файловой системы Lustre;
    • В ext4 добавлена возможность хранения расширенных атрибутов файлов (Xattr) в отдельных inode, что позволяет добиться хранения большего числа атрибутов для одного файла. Каждый атрибут теперь может содержать до 64 Кб информации. При выносе Xattr в отдельный inode также наблюдается увеличение эффективности кэширования. Дополнительно, в ext4 добавлена поддержка дедупликации расширенных атрибутов, позволяющая фактически хранить только одну копию атрибута, применённого к нескольким файлам;
    • В ext4 обеспечена возможность параллельного выполнения операций discard при монтировании с опцией '-o discard';
    • Добавлен механизм для более надёжного информирования приложений в пространстве пользователя об ошибках, возникающих в процессе выполнения операций отложенной записи (writeback);
    • В F2FS, развиваемой компанией Samsung высокопроизводительной файловой системе для Flash-накопителей, обеспечена поддержка дисковых квот;
    • В F2FS, UBIFS и Btrfs добавлена поддержка системного вызова statx() с реализацией более эффективного и функционального варианта stat(), возвращающего расширенную информацию о файле, включая время создания файла и специфичные для файловых систем флаги;
    • В XFS добавлена поддержка опций SEEK_HOLE и SEEK_DATA системного вызова lseek() для выявления пустых областей и блоков данных внутри файла;
    • В файловой системе OverlayFS добавлена поддержка индекса директории, позволяющая выполнять операции копирования между слоями без повреждения жестких ссылок. Подготовлена инфраструктура для экспорта OverlayFS через NFS;
    • Добавлена возможность повторного экспорта NFS-раздела поверх NFS;
    • Обеспечено использование по умолчанию протокола SMB 3 (Server Message Block) при обращении к файлам на серверах Samba и Windows при помощи CIFS;

  • Виртуализация и безопасность

    • Добавлена реализация протокола TLS на уровне ядра (KTLS), использование которой позволяет добиться существенного повышения производительности приложений, использующих HTTPS. Реализация выполнена в виде модуля ядра, предоставляющего новый тип сокетов AF_KTLS, которые можно использовать для передачи данных по протоколам TLS 1.2 для TCP и DTLS 1.2 для UDP с применением шифра AES GCM. Поддерживается прямая отправка файлов через установленное TLS-соединение при помощи вызова sendfile(). На графике ниже отражено проведённое инженерами Facebook сравнение задержек при использовании обработчика HTTPS на базе KTLS в ядре и библиотеки OpenSSL:
    • В состав системы сборки включен плагин к GCC для рандомизации раскладки структур данных, который на этапе сборки делает непредсказуемым следование полей в структурах и затрудняет проведение атак, базирующихся на знании раскладки структур в ядре. Плагин портирован из патчей проекта grsecurity;
    • В состав модуля AppArmor включен код обработки меток на процессы ("domain labeling"), разработанный и применяемый в Ubuntu. В будущих выпусках ожидается продолжение интеграции улучшений, разработанных командой Ubuntu для AppArmor и применяемых в проекте Snapd;
    • В подсистему SCSI добавлена поддержка cамошифруемых накопителей SSD (Self-Encrypting SSD), в которых устройство аппаратного шифрования встроено непосредственно в контроллер в соответствии со спецификацией Opal;
    • Добавлены дополнительные меры для определения во время компиляции и перехвата во время работы возможных переполнений буфера при выполнении строковых функций, определённых в заголовочном файле string.h. ** Реализация идентична режиму FORTIFY_SOURCE=1 в glibc, но также предоставляет средства и для контроля за размером буфера при операциях чтения, а не только при записи;
    • Реализована поддержка уровней безопасности хост-контроллера Thunderbolt, позволяющих задавать права доступа для подключаемых через данный интерфейс устройств (например, можно запретить прямой доступ к памяти через DMA или ограничить доступ только работой через Display Port и туннель USB);
    • Добавлены вызовы wait_for_random_bytes() и get_random_*_wait(), позволяющие убедиться, что генератор псевдослучайных чисел корректно инициализирован и получил достаточный объём энтропии;
    • В fscrypt добавлена поддержка алгоритма AES-128-CBC для шифрования содержимого файлов и AES-128-CBC-CTS для имён файлов (ранее поддерживались только AES-256-XTS и AES-256-CBC-CTS);
    • На 64-разрядных системах изменён метод генерации "канареечного слова" - технология защиты от переполнения стека, основанной на применении случайной последовательности, устанавливаемой в стек непосредственно перед адресом возврата. Младшие 8 бит канареечного слова теперь обнуляются. С одной стороны это на 8 бит снижает случайную энтропию, но с другой стороны позволяет защититься от получения значения канареечного слова, манипулируя переполнением Си-строк, для ограничения которых используется нулевой символ;

  • Сетевая подсистема

    • Обеспечена раздельная обработка sysctl tcp_sack, tcp_window_scaling и tcp_timestamps для каждого пространства имён сетевой подсистемы (network namespace);
    • В getsockopt() добавлена поддержка новой команды SO_PEERGROUPS, возвращающей список всех групп, в которые входит сокет;
    • Представлен тип BPF-программ - BPF_PROG_TYPE_SOCK_OPS, который позволяет организовать вызов BPF-программы на различных стадиях обработки сокетов и может применяться для корректировки параметров соединения, таких как размер буферов, начального окна, SYN/SYN-ACK RTO и т.п.

  • Память и системные сервисы

    • Добавлены средства прогнозирования следующего прерывания, которые позволяют повысить эффективность принятия решений, связанных с управлением питанием;
    • В утилиту perf добавлена опция "--smi-cost", позволяющая оценить затраты на обработку прерываний системного управления (SMI - System Management Interrupt, для выполнения кода в режиме SMM);
    • Инициатива по оформлению документации к ядру с использованием разметки reStructuredText (RST) и пакета Sphinx достигла важного рубежа - все ранее доступные шаблоны DocBook преобразованы в reStructuredText. Компоненты для поддержки DocBook удалены;
    • Для каждой BPF-программы теперь генерируется и назначается уникальный идентификатор, который может использоваться для получения файловых дескрипторов к объектам BPF из пространства пользователя;
    • Реализована первая стадия оптимизации процесса вытеснения в раздел подкачки больших страниц памяти (Transparent Huge-Pages). Если до сих пор первым этапом вытеснения в раздел подкачки было разбиение больших страниц на маленькие, то в ядре 4.13 подобное разбиение откладывается до момента распределения места в разделе подкачки и обработки кэша подкачки. Подобное изменение уменьшает конфликт блокировок и приводит к росту производительности примерно на 15%. В будущих ядрах разбиение больших страниц планируется отложить до момента фактической записи в раздел подкачки или чтения из него;
    • В файле /proc/cpuinfo в строке "cpu MHz" теперь выводится номинальная частота процессора, а не вычисленная текущая частота, которая может меняться при каждом запросе. Для оценки изменения текущей частоты рекомендуется использовать программы turbostat и cpupower, поставляемые в составе исходных текстов ядра;

  • Оборудование

    • Представлена подсистема драйверов "mux", позволяющая обеспечить поддержку контроллеров с мультиплексированием, управляющих работой сразу нескольких устройств;
    • Для архитектуры s390 реализованы пятиуровневые таблицы страниц памяти, которые позволяют адресовать до 16 эксабайт ОЗУ;
    • В DRM-драйвере (Direct Rendering Manager) Nouveau обеспечена поддержка средств стереоскопического и 3D вывода через HDMI и DisplayPort для карт NV50+ (G80+);
    • В DRM-драйвере AMDGPU добавлена ограниченная начальная поддержка GPU AMD Raven Ridge и внесена большая порция исправлений для поддержки GPU Radeon RX Vega. При этом, для указанных GPU пока не реализована поддержка DC (Display Core), т.е. отсутствуют компоненты для вывода на экран;
    • В DRM-драйвер для GPU Intel добавлена начальная поддержка грядущих процессоров на базе микроархитектур Intel Cannonlake и Intel Coffeelake. Улучшен процесс сброса GPU g4x и g33;
    • Добавлен драйвер vboxvideo для виртуального GPU VirtualBox, драйвер для которого раньше поставлялся в наборе VirtualBox Guest Additions, а теперь перенесён в основное ядро;
    • Добавлена поддержка звуковых кодеков Realtek ALC215, ALC285 и ALC289, Everest Semi ES8316, ZTE ZX AUD96P22;
    • Добавлена поддержка ARM-плат и SoC, включая Orange Pi Win, Orange Pi Zero Plus 2, Nano Pi NEO2, Orange Pi Prime, BeagleBone Blue, LeMaker Guitar Board, Linksys WRT3200ACM, Action Semi S500, Rockchip RV1108 и Bubblegum 96.

Вышла версия ядра Linux 4.12

3 июля 2017 года Линус Торвальдс объявил о выходе версии ядра Linux 4.12.

Это крупный апдейт ядра - добавлено более 1 млн строк кода. Большую часть его занимает поддержка видеокарт AMD Radeon RX Vega, драйвер для Intel Atom IPU и другие драйверы. Размер патча 89 МБ. В нем ~13 тыс. правок от 1,5 тыс. разработчиков[8].

Версия 4.12 получилась большой по нескольким причинам:

  • часть кода занимает поддержка видеокарт Radeon RX Vega от компании AMD.
  • дополнение - драйвер для Intel Atom IPU.

Добавлена модернизация для чипов POWER9, ARM и Nvidia, менеджер порта USB Type-C. Вдобавок разработчики провели стабилизацию ядра в форме рандомизации размещения адресного пространства ядра (KASLR), которая по умолчанию используется для систем x86.

Разработка версии 4.12 начата мая 2017 года. В этом релизе появились планировщики ввода/вывода Budget Fair Queueing (BFQ) и Kyber. Их задача – обеспечить доступ к данным в несколько потоков для многоядерных систем. Так завершено создание многоуровневой системы очередей.

В структуру API LivePatch, которая накладывает патчи на работающее ядро, добавлена гибридная модель обеспечения непротиворечивости. В этой модели мониторинга непротиворечивости анализ стека kPatch совмещен с механизмом оценки отдельных задач kGraft. Теперь в ядро без задержек можно вносить более сложные, чем раньше, патчи, даже если они касаются изменения функций или семантики данных.

Для Device Mapper создан модуль dm-integrity, он отвечает за эмуляцию блочного устройства. Создан фреймворк Trusted Execution Environment (TEE). С ним возможно создавать защищенное окружение на чипах ARM TrustZone.

Эксперт Positive Technologies обнаружил уязвимость в ядре

16 марта 2017 года Positive Technologies сообщила об устранении экспертом компании опасной уязвимости в ядре Linux.

Александр Попов, эксперт компании Positive Technologies, выявил уязвимость (CVE-2017-2636) в ядре Linux, которая позволяет локальному пользователю повысить привилегии в атакуемой системе или вызвать сбой в ее работе («отказ в обслуживании»). Эта проблема актуальна для большинства популярных дистрибутивов Linux, в том числе RHEL 6/7, Fedora, SUSE, Debian и Ubuntu.

Исследователь выявил ошибку типа «состояние гонки» (race condition) в драйвере n_hdlc, приводящую к двойному освобождению памяти ядра, что может быть использовано для повышения привилегий в операционной системе. Уязвимость оценена в 7.8 баллов по шкале CVSS v3.

« Для автоматической загрузки модуля n_hdlc злоумышленнику достаточно прав непривилегированного пользователя. Кроме того, для атаки не нужно специализированного аппаратного обеспечения. Уязвимость давняя, поэтому она широко распространена на рабочих станциях и серверах под управлением Linux.
»

Обнаруженная ошибка присутствует в ядре с 22 июня 2009 года и выявлена посредством тестирования системных вызовов Linux фаззером syzkaller. 28 февраля 2017 года исследователь сообщил об уязвимости на kernel.org, приложил прототип эксплойта и патч, который ее устраняет. 7 марта 2017 года состоялось публичное разглашение информации о CVE-2017-2636, после чего выпущены обновления безопасности. Защититься также можно с помощью специальных правил блокировки загрузки модулей ядра.

Пользователям необходимо установить последние обновления безопасности или вручную заблокировать уязвимый модуль.

2016

Ядро Linux подверглось опасности

5 октября 2016 Линус Торвальдс сообщил о создании в коде ядра Linux версии 4.8 программной возможности, «способной убить все ядро». Код попал в версию 4.8, поскольку сам Торвальдс не проверил работу сотрудника.

По этому поводу Торвальдс подверг жесткой критике версию ядра Linux 4.8, представленную им 2 октября 2016 года. Вредоносный код попал в ядро по вине разработчика Эндрю Мортона (Andrew Morton) - он неудачно исправил ошибку, действующую во версиях ядра от 3.15 и выше. Торвальдс высказал все, что думает о коллеге и сделал это весьма бесцеремонно[9].

По словам создателя Linux, Мортон некорректно использовал механизм отладки BUG_ON(), который использовал при работе с предрелизной версией ядра версии 4.8. Торвальдс принял ряд исправлений от Мортона непосредственно перед релизом версии 4.8 и признал часть собственной вины за ошибку, поскольку ему следовало обратить внимание на добавленные строки BUG_ON(). Он отметил, что разработки Мортона пользуются доверием, однако в этом случае код явно не подвергся тестированию, прежде чем его направили к Торвальдсу.

В резких выражениях Торвальдс пообещал изъять саму идею «идиотского» BUG_ON() из практики отладки и напомнил, что в 2002 году лично опубликовал руководство по использованию этого механизма, где пояснил, когда его не следует применять. Торвальдс заявил, что прежняя ошибка в ядре, кочевавшая из версии в версию, несравнимо менее ужасна, чем «убийство всего ядра».

Релиз ядра Linux 4.8

3 октября 2016 года Линус Торвальдс представил релиз ядра Linux 4.8. Среди заметных изменений: поддержка плагинов GCC в системе сборки, возможность запуска в контейнерах кода для других архитектур, интеграция механизма защиты PAX_USERCOPY, поддержка алгоритма контроля перегрузки TCP "New Vegas", увеличение производительности беспроводного стека, генератор псевдослучайных чисел.

В эту версию принято более 13 тыс. исправлений от почти 1,5 тыс. разработчиков, размер патча - 41 Мб (изменения затронули 11303 файлов, добавлено 627751 строк кода, удалено 278958 строк). Около 39% всех представленных в 4.8 изменений связаны с драйверами устройств, примерно 21% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 5% - файловыми системами и 4% c внутренними подсистемами ядра[10].

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

Дисковая подсистема, ввод/вывод и файловые системы

  • В файловую систему XFS добавлена поддержка механизма обратного маппинга (rmap, reverse-mapping), позволяющего файловой системе определить владельца любого блока на устройстве хранения. В настоящее время практическая польза от reverse-mapping не видна, но в будущем данный механизм послужит основой для реализации таких возможностей, как reflink(), режим copy-on-write для данных, дедупликация, расширенные средства информирования о bad-блоках и дополнительные возможности для восстановления повреждений;
  • В Ext4 проведена работа по переводу средств шифрования разделов на криптографические функции штатной подсистемы ядра crypt;
  • В Btrfs кроме чистки кода и устранения ошибок добавлена переработанная реализация механизма отслеживания исчерпания свободного места на диске (ENOSPC, Error NO SPace), в которой заметно повышена отзывчивость и производительность;
  • В F2FS добавлены изменения, увеличивающие масштабируемость и снижающие нагрузку на CPU при выполнении операций обновления таблицы резервных inode при операциях записи. Добавлен ioctl для перемещения блоков данных между файлами;
  • В dm-raid появилась поддержка добавления дополнительных накопителей в RAID-массив (reshaping) и изменения уровня RAID;
  • Реализована возможность экспортирования по сети устройств хранения с интерфейсом NVM Express, используя протоколы, подобные RDMA;
  • В подсистему device-mapper добавлена поддержка применения механизма DAX для прямого доступа к низкоуровневым устройствам постоянной памяти;
  • В распределённую файловую систему OrangeFS (продолжение развития PVFS) добавлена возможность задействования кэша на базе dcache и кэша атрибутов на стороне ядра, что заметно ускоряет выполнение операций с мелкими файлами. Например, сборка coreutils без кэширования занимает 17 минут, а с кэшем - 6 минут 20 секунд;
  • В ФС Ceph добавлена полная поддержка пространств имён RADOS (Reliable Autonomic Distributed Object Store).
  • Поддержка технологии "transparent huge pages" в tmpfs, позволяющая оперировать страницами памяти большого размера;
  • В многослойной ФС Overlayfs проведена работа по обеспечению поддержки SELinux;
  • В ядро добавлена реализация простейшего сервера pNFS (Parallel NFS). Внесены оптимизации производительности в код NFS-клиента;

Сетевая подсистема

  • В TCP-стек добавлена поддержка алгоритма контроля перегрузки "New Vegas", который является модернизированным вариантом алгоритма Vegas и также оперирует задержками в доставке пакетов вместо информации о потере пакетов. Новый алгоритм оптимизирован для использования в крупных высокоскоростных сетях и ЦОД с каналами связи в 10 гигабит и выше;
  • В подсистеме mac80211 ("WiFi") вместо предоставляемых сетевым стеком дисциплин обработки очередей ожидающих отправки пакетов задействован алгоритм CoDel (Сontrolled Delay - управляемая задержка), который позволил существенно поднять производительность работы в беспроводных сетях;
  • Протокол RDS (Reliable Datagram Sockets), позволяющий создавать сокеты для надёжной передачи датаграмм поверх TCP-линков, расширен возможностью передачи сразу через несколько соединений TCP, что позволило добиться существенного увеличения максимальной производительности;
  • Сетевым драйверам предоставлена возможность загрузки BPF-программ для предварительной обработки входящих пакетов, до их помещения во внутренние структуры данных. Указанную возможность можно применять, например, для отбрасывания, изменения или перенаправления пакетов на ранней стадии их обработки, что позволяет увеличить производительность данных операций за счёт обхода вызова обработчиков ядра;
  • Добавлен драйвер с программной реализаций RDMA поверх Ethernet, позволяющий использовать протоколы InfiniBand Remote DMA с обычным сетевым стеком ядра;

Память и системные сервисы

  • Представлен механизм обновления таблиц ACPI из прошивок или через configfs;
  • Для подсистемы GPIO представлен новый ABI пространства пользователя для управления линиями ввода/вывода общего назначения. ABI основан на применении символьного устройства и заменяет собой давно устаревший интерфейс на базе sysfs;
  • Для архитектуры ARM64 добавлена возможность использования механизма kexec, позволяющего загрузить новый экземпляр ядра из уже работающего ядра Linux;
  • Представлен новый параметр командной строки printk.devkmsg, который может быть использован для управления отправкой данных в лог ядра из пространства пользователя через /dev/kmsg. Значение off отключает отправку из пространства пользователя, а числовое значение устанавливает лимит на интенсивность отправки данных;
  • Новая внутренняя подсистема обработки таймаутов, появление которой направлено на решение проблем с отзывчивостью (latency);
  • Добавлен фреймворк HDMI CEC (Consumer Electronics Control) позволяющий унифицировать управление устройствами, подключенными через HDMI, и управлять ими с одного пульта;
  • В систему сборки добавлена возможность использования плагинов GCC, которые могут применяться для дополнительного анализа или изменения кода во время компиляции. Например, уже реализована поддержка плагинов для тестирования покрытия кода (coverage testing) и вычисления цикломатической сложности;
  • Представлена новая система для форматирования документации к ядру, основанная на использовании в текстовых файлах разметки reStructuredText (RST) и пакета Sphinx. Новая система позволяет генерировать корректно оформленную документацию к ядру в форматах HTML, LaTeX, ePub и PDF. Документация к мультимедийным подсистемам и DRM уже переведена с DocBook на RST;

Виртуализация и безопасность

  • Усиление защиты операций копирования данных между ядром и пространством пользователя. В ядро включён вариант технологии PAX_USERCOPY, разработанной проектом grsecurity, добавляющий дополнительные проверки используемых при копировании диапазонов адресов для предотвращения обращения к областям памяти ядра вне границ буфера, выделенного для копирования;
  • Поддержка контейнеров с эмуляцией архитектуры, позволяющих запускать в изолированном контейнере код, собранный для аппаратных архитектур, отличных от архитектуры хост-системы. Например, на системах с архитектурой x86_64 теперь можно запустить контейнер с окружением для ARM64.
  • Генератор псевдослучайных чисел (/dev/random, /dev/urandom) заменён на новую, более высокопроизводительную, реализацию, основанную на использовании потокового шифра ChaCha20 и включающую наработку по решению проблем с масштабируемостью в условиях когда программам в пространстве пользователя требуются большие объёмы случайных чисел;
  • Для архитектуры x86_64 включена поддержка рандомизации адресного пространства ядра (KASLR, Kernel Address Space Layout Randomization). Расширено число типов регионов памяти ядра для которых применяется рандомизация. В SLUB memory allocator добавлена рандомизация списков свободных областей;
  • В подсистему crypto добавлен новый механизм согласования ключей (Key-agreement Protocol Primitives API - KPP), который может быть использован для реализации протоколов обмена ключами, таких как DH и ECDH;
  • Для IPv6 добавлена поддержка стандарта CALIPSO (Common Architecture Label IPv6 Security Option), который может быть использован для прикрепления связанных с безопасностью меток к пакетам, которые затем могут быть связаны с политиками SELinux и Smack;
  • В загружаемых модулях ядра обеспечена возможность использования портированного из grsecurity механизма защиты __ro_after_init (post-init read-only memory), позволяющего создавать доступные на чтение и запись области памяти, используемые только во время инициализации и переводимые в режим только для чтения после инициализации;
  • В состав включена инфраструктура Virtio vsock, позволяющая упростить обмен данными между хост-системой и работающими виртуальными машинами, благодаря применению обычных сокетов POSIX;

Оборудование

  • В драйвер AMDGPU добавлена поддержка технологии OverDrive для повышения производительности через разгон частоты GPU и памяти (допускается разгон до 20%). Также улучшена энергоэффективность для чипов Polaris и внесены улучшения, связанные с поддержкой технологий PowerPlay для снижения энергопотребления;
  • В DRM-драйвер (Direct Rendering Manager) Nouveau добавлена начальная поддержка видеокарт NVIDIA на базе GPU Pascal. Аппаратное ускорение пока поддерживаются только для чипов GP100 (GeForce GTX Titan). Для более новых карт (GP104/GeForce GTX 1000 и новее) предоставляются только базовые средства управления видеорежимами, так как для включения ускорения требуется верификация прошивки по цифровой подписи. Улучшено управление питанием для чипов GK20A и GM20B;
  • В DRM-драйвере Intel добавлена поддержка виртуального GPU GVT-g на системах с процессорами Broadwell и новее. По умолчанию включена поддержка компонентов BXT (Balanced Technology Extended).
  • В состав включен новый драйвер для GPU ARM Mali, в котором пока поддерживаются только GPU DP500, DP550 и DP650 и отсутствуют средства для задействования аппаратного ускорения 3D-операций;
  • Обеспечена поддержка 64-разрядного SoC BCM2837, используемого в Raspberry Pi 3. Также добавлена поддержка SoC Freescale i.MX7Solo, Qualcomm MDM9615, Renesas r8a7792 и Renesas r8a7796;
  • Добавлена поддержка свободного процессора "J-Core J2", VHDL (VHSIC Hardware Description Language) спецификации которого доступны под лицензией BSD.
  • По сравнению с прошлым выпуском обеспечена поддержка около 500 новых аппаратных компонентов, из которых 175 имеют интерфейсы PCIe/PCI или USB. В том числе:
  • В драйвере Ath10k появилась поддержка чипов Atheros QCA9888.
  • Добавлен драйвер intel-vbtn (Intel Virtual Button), который, например, необходим для работы кнопки включения питания на ноутбуке Dell XPS 13.
  • Появилась поддержка тачпадов Alps.
  • Добавлена поддержка DVB-тюнеров Sony HELENE и Hauppauge WinTV.
  • Добавлен драйвер для задействования EDAC (Error Detection and Correction) в процессорах Intel Core i 6000 (Skylake).

Релиз ядра Linux 4.7

25 июля 2016 года Линус Торвальдс представил релиз ядра Linux 4.7.

Среди наиболее заметных изменений:

  • распараллеливание проверок содержимого директорий,
  • более быстрый и точный механизм управления частотой CPU,
  • поддержка технологии UEFI Capsule для организации обновления прошивок,
  • серия улучшений в средствах трассировки и отладки,
  • поддержка виртуальных контроллеров USB-устройств в стеке USB/IP,
  • возможность привязки загрузки модулей ядра только из одной ФС,
  • поддержка разработанного для Android механизма sync_file.

В версию принято около 12 тыс. исправлений от примерно 1,5 тыс. разработчиков, размер патча - 34 МБ (изменения затронули 9744 файлов, добавлено 493490 строк кода, удалено 194974 строк). Около 47% всех представленных в 4.7 изменений связаны с драйверами устройств, примерно 19% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 5% - файловыми системами и 4% c внутренними подсистемами ядра[11].

Наиболее приметные изменения в ядре Linux 4.7

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В системе кэширования информации о путях в директориях, предназначенной для ускорения выполнения различных типовых проверок (например, можно проверить наличие файлов в директории без обращения к диску), реализована возможность выполнения нескольких параллельных проверок в одной директории. Поскольку кэш сам по себе работает достаточно быстро, поддержка распараллеливания не оказывает большого влияния на производительность для типовых нагрузок, но может привести к ускорению для сценариев работы, в которых имеет место большое число операций с одной директорией;
    • Разработанный для платформы Android механизм sync_file перемещён из экспериментальной секции staging в основное ядро. В отличие от традиционных барьеров на память (fences), напрямую привязываемых ядром к буферам и неподконтрольных из пространства пользователя, sync_file предоставляет API для обработки барьеров в пространстве пользователя, что значительно упрощает создание графических драйверов с компонентами в пространстве пользователя;
    • В XFS добавлена возможность настраиваемой обработки ошибок для проблем, связанных с метаданными. Режим обработки ошибок по умолчанию изменён с "повторять попытки вечно" на "повторять попытки до отмонтирования при сбое";
    • В BTRFS для функции renameat2 представлены операции RENAME_EXCHANGE для атомарного обмена путей и RENAME_WHITEOUT для использования в overlayfs. Добавлен новый ioctl для удаления устройства по его идентификатору (devid);
    • В CEPH добавлена поддержка использования нескольких файловых систем (нескольких пространств имён в одном кластере);
    • В EXT4 добавлена возможность прерывания операции readdir() для больших пустых директорий (директорий с большим числом очищенных блоков, в которых раньше было много файлов);
    • В NFS добавлена поддержка операции COPY, определённой в спецификации NFS v4.2, которая реализована через появившийся в ядре 4.5 системный вызов copy_file_range и позволят выполнить копирование без перемещения данных по сети от сервера к клиенту и возвращения от клиента на сервер;

  • Сетевая подсистема
    • В стек USB/IP, позволяющий организовать доступ к удалённым USB-устройствам поверх сети TCP/IP, добавлена поддержка создания виртуальных контроллеров USB-устройств. Новая возможность позволяет не только работать с реальными физическими USB-устройствами, но и пробрасывать виртуальные устройства. Например, можно реализовать эмулятор смартфона, который будет выглядеть для рабочего окружения разработчика как обычный смартфон, подключенный по USB;
    • В состав принят предложенный компанией Airbus патч, добавляющий в сетевой стек поддержку первой версии протокола HSR (High-availability Seamless Redundancy), предназначенного для создания отказоустойчивых сетей Ethernet;
    • Проведена работа по оптимизации TCP-стека для сокращения задержек в процессе обработки очень большого числа пакетов;
    • Повышена стойкость TCP-стека к syn-флуду. При тестировании изменения позволили увеличить производительность в условиях syn-флуда с 3.2 до 6 миллионов пакетов в секунду. Добавлена возможность ограничения интенсивности отправки ACK-пакетов в условия syn-флуда c указанием в пакетах случайных номеров последовательности;
    • Добавлена поддержка протокола GTP-U для туннелирования GPRS;

  • Память и системные сервисы
    • В систему динамического управления частотой процессора (cpufreq) добавлен новый механизм регулирования частоты - schedutil, в котором удалось добиться слаженной работы планировщика задач и средств управления питанием CPU. Schedutil отличается от ранее доступных регуляторов тем, что для принятия решения об изменении частоты он напрямую использует информацию от планировщика задач и может сразу обращаться к драйверам cpufreq для оперативного изменения частоты, мгновенно подгоняя параметры работы CPU к текущей нагрузке. Подобный подход позволяет избавиться от задержек при изменении частоты и сразу реагировать на изменение нагрузки. В ядро пока принята простейшая реализация schedutil, которую планируется расширить в следующих выпусках;
    • Поддержка механизма UEFI Capsule, предоставляющего средства для передачи бинарных наборов данных в прошивки EFI. После получения этих данных прошивка разбирает их и принимает решение по их дальнейшему использованию в зависимости от контекста. Наиболее частым применением UEFI Capsule является передача нового образа прошивки для обновления до новой версии при следующей загрузке. Запись данных осуществляется через устройство /dev/efi_capsule_loader;
    • В ftrace, фреймворк для отслеживания вызова функций, добавлена команда "hist", предоставляющая средства для построения гистограмм событий путём агрегирования информации о наступающих событиях в форме ключ-значение. При помощи новой возможности можно формировать произвольные сводные отчёты, например, узнать раскладку частоты выполнения системных вызовов или интенсивности чтения из файлов в разрезе выполняемых процессов;
    • В команду "perf trace" добавлена возможность вывода цепочек исполнения системных вызовов из пространства пользователя. Например, командой "trace --call-graph dwarf --filter-pids {pid}" можно отследить обращения к системному вызову recvmsg(), произведённые из процесса gnome-shell;
    • Добавлен новый тип программ BPF - BPF_PROG_TYPE_TRACEPOINT, которые можно прикреплять к точкам трассировки (tracepoint - вариант динамических printf(), выставляемых разработчиками программ для анализа поведения системы, к которым затем можно обращаться из LTTng, perf, SystemTap, ftrace). Таким образом, теперь можно собирать данные из точек трассировки и обрабатывать их в программе BPF, что является более быстрой альтернативой доступа к точкам трассировки через kprobes;
    • Программы BPF, использующие модули cls_bpf и act_bpf для управления трафиком, теперь могут напрямую получить доступ к содержимому сетевых пакетов, без применения специальных функций-загрузчиков. Подобный подход позволяет добиться существенного повышения производительности, но ценой возможной утечки данных ядра в пространство пользователя, что не воспринимается как проблема в силу того, что такие BPF-программы могут загружаться только привилегированным пользователем;
    • В /proc/PID/status добавлено новое поле, позволяющее узнать текущий umask процесса;
    • В состав ядра добавлена улучшенная реализация системы для определения состояния нехватки памяти в системе (OOM);
    • В системные вызовы preadv2() и pwritev2() добавлена поддержка флагов RWF_SYNC (сброс данных и метаданных из кэша на носитель после выполнения операции) и RWF_DSYNC (принудительный сброс на носитель только данных);
    • Добавлен механизм "device DAX", позволяющий организовать доступ к постоянной памяти через символьное устройство /dev/dax.X.Y, вместо привязки к системной памяти, что даёт возможность напрямую обращаться к постоянной памяти без необходимости размещения на ней файловой системы;
    • Добавлена новая библиотека хэширования (linux/stringhash.h), в которой устранены проблемы, наблюдаемые в ранее доступном коде хэширования строк;

  • Виртуализация и безопасность
    • Добавлен новый LSM-модуль LoadPin, который позволяет гарантировать, что все загруженные ядром файлы (модули ядра, прошивки, образы kexec и т.п.) получены из одной файловой системы. Модуль изначально был создан для Chrome OS и предназначен для обеспечения загрузки компонентов ядра только с криптографически верифицированного носителя (dm-verity), при этом верификация осуществляется сразу для всего раздела (доступен только на чтение), без необходимости проверки цифровых подписей для отдельных файлов;
    • Для архитектуры MIPS добавлена поддержка рандомизации адресного пространства (ASLR);
    • Добавлена новая опция для рандомизации списков освобождения памяти в slab memory allocator, что делает работу данной системы менее предсказуемой для атакующих;
    • В JIT-компиляторе BPF реализована техника "constant blinding", добавляющая дополнительный эшелон защиты от загрузки произвольных инструкций в адресной пространство ядра. Суть метода в применении к константам дополнительной операции XOR с непостоянным ключом, что не позволяет атакующему предсказать, какие именно фактические значения окажутся в памяти;
    • В SELinux добавлена возможность ограничения загрузки модулей ядра;

  • Оборудование
    • В драйвер AMDGPU добавлена поддержка GPU Radeon RX480, основанного на новой архитектуре Polaris;
    • Проведён рефакторинг DRM-драйвера (Direct Rendering Manager) для видеокарт Intel, добавлена поддержка управления цветом, решены проблемы с зависанием на Skylake GT3 и GT4;
    • Добавлены DRM-драйверы для графических подсистем SoC Allwinner A13, Mediatek MT8173 и Hisilicon Kirin;
    • В DRM-драйвер для видеокарт NVIDIA (Nouveau) добавлена поддержка GPU GM108 Maxwell и улучшена работа с датчиками температуры;
    • Для систем ARM64 добавлена поддержка архитектуры NUMA и возможности перехода в спящий режим (suspend-to-disk).
    • Добавлена поддержка расширения PCI Express DPC (Downstream Port Containment), предназначенного для локализации невосстановимых ошибок в оборудовании, прикреплённом через определённый порт;
    • По сравнению с прошлым выпуском обеспечена поддержка около 500 новых аппаратных компонентов, из которых 180 имеют интерфейсы PCIe/PCI или USB. Добавлены драйверы для игрового пульта Microsoft Xbox One Elite Controller, беспроводных чипов Intel 9260, Chelsio iSCSI Target Offload Controller. Представлены аудиокодеки Realteks ALC234, ALC274, ALC294, ALC700, ALC701 и ALC703, используемые в новых материнских платах для ноутбуков. Общее число поддерживаемых ядром драйверов составило 26300.
    • Латиноамериканский Фонд свободного ПО оперативно сформировал вариант полностью свободного ядра 4.7 - Linux-libre 4.7-gnu, очищенного от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В новом выпуске проведены операции по чистке блобов в драйверах radeon, i915 csr, mwifiex, brcmfmac, iwlwifi, ath10k testmode, rtl8xxxu wifi, hfi1 Infiniband и skylake audio. Из новых драйверов, содержащих блобы, отмечается только xhci-tegra.

АНБ США считает пользователей Linux «экстремистами»

В июле 2016 года стало известно, что Агентство национальной безопасности (АНБ) США называет «экстремистами» читателей журнала Linux Journal, а также пользователей Tor и Tails Linux, следует из файлов программного обеспечения XKeyscore, которое агенты используют для слежки за людьми, сообщает Techspot[12].

Релиз ядра Linux 4.5

14 марта 2016 года Линус Торвальдс представил релиз ядра Linux 4.5[13].

Среди наиболее заметных изменений:

  • системный вызов copy_file_range для ускорения копирования данных между файлами,
  • поддержка технологии управления питанием Powerplay для GPU Radeon,
  • улучшение распределения свободного пространства в Btrfs,
  • реализация квот проектов в ext4,
  • поддержка сборки с включением детектора неопределённого поведения, поддержка прямой коррекции ошибок в dm-verity,
  • стабилизация новой унифицированной иерархии cgroup,
  • подключение BPF-балансировщиков для UDP-сокетов в режиме SO_REUSEPORT,
  • увеличение масштабируемости epoll для многопоточных приложений.

В эту версию принято около 13 тыс. исправлений от почти 1500 разработчиков, размер патча - 70 Мб (изменения затронули 11589 файлов, добавлено 1146727 строк кода, удалено 854589 строк). Около 45% всех представленных в 4.5 изменений связаны с драйверами устройств, примерно 17% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 14% связано с сетевым стеком, 4% - файловыми системами и 3% c внутренними подсистемами ядра.

Наиболее интересные, для пользователей, изменения в ядре Linux 4.5:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Новый системный вызов copy_file_range, позволяющий ускорить выполнение операций копирования данных из одного файла в другой файл с выполнением операции только на стороне ядра, без предварительного чтения данных в память процесса в пространстве пользователя, что избавляет от частого переключения контекста между ядром и пространством пользователя. Тем не менее, в обычных условиях использование copy_file_range лишь немного быстрее обычной команды "cp", так как основное время уходит на ввод/вывод с накопителя.

Совсем иная ситуация с применением copy_file_range для файлов на разделах NFS. Так как копирование в NFS приводит к необходимости перемещения данных по сети с сервера к клиенту и возвращения от клиента на сервер, исключение из этой цепочки клиента позволяет существенно ускорить процесс. Поддержка copy_file_range уже доступна для NFSv4.2. В будущих выпусках поддержка ускорения копирования будет реализована для Btrfs и специализированных устройств хранения, также будут преодолены текущие ограничение, такие как действия только в рамках одной точки монтирования и одного суперблока, а также невозможность ускорения копирования данных внутри одного файла.

    • В Btrfs решены проблемы с масштабируемостью обработки свободного дискового пространства. Вместо использования кэша свободных блоков, становящегося узким местом на больших и нагруженных файловых системах (более 30 Тб), реализован новый экспериментальный метод представления кэша свободного дискового пространства, который лишен ограничений с масштабируемостью и не требует обновления после каждого изменения в ФС. Для включения новой реализации при монтировании следует указать опцию "-o space_cache=v2", после первого монтирования с которой файловая система будет переведена на новую реализацию кэша (старые ядра смогут только читать данные, для возвращения для них возможности записи следует вернуть старый вариант кэша через монтирование с опцией "-o clear_cache,space_cache=v1");
    • В модуль dm-verity (device-mapper verity), предназначенный для проверки целостности хранимых блоков данных по криптографическим хэшам (например, используется для верификации загрузки в платформе Android), добавлена поддержка кодов прямой коррекции ошибок (FEC, Forwarded Error Correction, помехоустойчивое кодирование), которые позволяют не только выявить повреждения, но и восстановить исходное состояние блоков данных;
    • В файловой системе ext4 реализована поддержка квот проектов ("project quota"). Файлы могут быть привязаны к отдельным "проектам" для которых применяются иные квоты, отличающиеся от общих системных квот.
    • В XFS добавлена проверка корректности всех записей в логе по контрольным суммам, выполняемая в процессе восстановления информации по логу. Реализация ioctl-команд XFS XFS_IOC_FSSETXATTR и XFS_IOC_FSGETXATTR, позволяющих запрашивать и устанавливать различные дополнительные атрибуты файлов (только синхронная запись, запрет изменения, только дополнение, запрет создание символических ссылок на файл, не включение в бэкапы, запрет дефрагментации и т.п.), перемещена на уровень VFS и унифицирована для использования в других ФС (например, уже существует реализация для ext4).
    • В файловой системе Ceph появилась поддержка асинхронного ввода/вывода и формата размещения файлов CEPH_FEATURE_FS_FILE_LAYOUT_V2 ;
    • В подсистему FUSE добавлена поддержка опций SEEK_HOLE и SEEK_DATA системного вызова lseek() для выявления пустых областей и блоков данных внутри файла;
    • В подсистему libnvdimm (работа с NVM-памятью) добавлен слой для управления сбойными блоками, адаптированный из кода MD RAID;
    • В VFAT добавлена поддержка управления резервированием пустых областей через вызов fallocate();
    • В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлен ioctl F2FS_IOC_DEFRAGMENT для выборочной дефрагментации файлов и опция монтирования data_flush для сброса буферов перед фиксацией изменений;
    • В MD RAID5 добавлена возможность горячего подключения и отключения дисков для хранения журнала;

  • Сетевая подсистема

    • Произведена оптимизация производительности работы режима SO_REUSEPORT для UDP-сокетов. Опция SO_REUSEPORT позволяет сразу нескольким слушающим сокетам подключиться к одному порту для приёма соединений с распределением поступающих запросов одновременно по всем подключенным через SO_REUSEPORT сокетам, что упрощает создание многопоточных серверных приложений. В новой версии ядра для UDP добавлены две дополнительные опции: SO_ATTACH_REUSEPORT_CBPF и SO_ATTACH_REUSEPORT_EBPF, позволяющие определить BPF-программу (классическую или расширенную), выполняющую функции диспетчера, принимающего решения какому сокету из группы REUSEPORT передать обработку пакета. Кроме того, увеличена скорость выбора сокета SO_REUSEPORT для входящих пакетов. При выполнении теста на сервере с 48 ядрами CPU с 10 гигабитным линком, скорость распределения между 10 сокетами возросла на 18%, 20 - на 14% и 40 - на 13%;
    • В cgroup memory controller добавлена возможность учёта в едином пуле потребления памяти структурами данных, связанными с работой сокетов, анонимной памятью и кэше страниц памяти, позволяя учитывать состояние потребителей памяти в процессе распределения и лимитирования памяти в группе. Например, при нехватке памяти, может быть приостановлено выделение памяти на сетевые структуры. При желании можно вывести связанною с сокетами память из под действия общей системы лимитирования памяти (cgroup.memory=nosocket).
    • Добавлена поддержка опции SOCK_DESTROY, позволяющей системному администратору принудительно закрыть TCP-соединение через интерфейс "netlink socket diag", инициируя операцию TCP ABORT с отправкой другой стороне RST-уведомления о завершении соединения;
    • В nftables добавлена поддержка перенаправления и дублирования пакетов netdev, например, для быстрого проброса пакетов с одного интерфейса на другой или между входным/выходным буфером одного интерфейса. Также добавлена поддержка изменения данных в пакете (mangling packet payload) с автоматической корректировкой контрольной суммы и возможность учёта в правилах счётчика байт или пакетов;
    • Добавлен модуль "clsact" с реализацией обобщённого метода построения очереди сетевых пакетов;

  • Память и системные сервисы

    • Обеспечена возможность сборки ядра в GCC 4.9+ с включённой опцией "-fsanitize=undefined", активирующей отладочный режим UBSAN (Undefined Behavior Sanitizer) с реализацией детектора неопределенного поведения, добавляющего в скомпилированный код дополнительные проверки для выявления во время выполнения программы ситуаций, когда поведение программы становится неопределенным (зависит от реализации компилятора) из-за ошибки программиста. Например, к неопределённому поведению относится использование нестатических переменных до их инициализации, деление целых чисел на ноль, переполнения целочисленных знаковых типов, разыменование указателей NULL, проблемы с выравниванием указателей и т.п.
    • В системный вызов madvise, предоставляющий средства для оптимизации управления памятью процесса, добавлена поддержка флага MADV_FREE, который дополняет уже имеющийся флаг MADV_DONTNEED, через который ядру можно загодя сообщить о готовящемся освобождении блока памяти, т.е. о том, что этот блок уже не нужен и может использоваться ядром. В случае использования MADV_DONTNEED последующее обращении к блоку приведёт к генерации "page fault", выделению и обнулению страниц памяти или к повторному маппингу файла в память. MADV_FREE отличается тем, что только помечает блок доступным для освобождения, но не освобождает сразу, что позволяет вернуть его без генерации "page fault", если обращение произошло до его фактического использования ядром;
    • В вызов epoll добавлена поддержка флага EPOLLEXCLUSIVE, решающего проблемы с масштабируемостью в многопоточных приложениях. В обычных условиях при создании нескольких файловых дескрипторов epoll (epfds) для совместно обрабатываемых событий генерация события приведёт к информированию всех epfds. Флаг EPOLLEXCLUSIVE позволят привязать событие к отдельному файловому дескриптору и информировать только связанный с ним поток, что значительно повышает эффективность в программах с большим числом epfds. Например, перевод платформы Enduro/X на EPOLLEXCLUSIVE уменьшил время прохождения тестового задания с 860 до 24 секунд;
    • Интерфейс cgroup v2 переведён в разряд официально поддерживаемых и более не скрыт в категории экспериментальных разработок. В рамках cgroup v2 предлагается единая унифицированная иерархия cgroup (Cgroup unified hierarchy), пришедшая на смену гибкой, но не получившей практического применения, поддержке произвольного числа иерархий cgroup, определяющих применение правил к группам процессов (например, одна иерархия для распределения ресурсов CPU, а другая для регулирования потребления памяти). Изначально применяемый подход приводил к трудностям организации взаимодействия между обработчиками разных иерархий и к дополнительным затратам ресурсов ядра при применении правил для процесса, упоминаемого в разных иерархиях. Унифицированная иерархия cgroup теперь может монтироваться при указании типа файловой системы "cgroup2". К сожалению контроллер CPU пока не вошёл в релиз, поддержка ограничивается контроллерами памяти и ввода/вывода;
    • Поддержка принудительной блокировки файлов (Mandatory file locking) переведена в разряд опциональных возможностей и требует явного включения в файле конфигурации. В будущем реализацию принудительной блокировки файлов планируется удалить из ядра. Суть принудительной блокировки файлов в том, что ядро автоматически запрещает запись в файл, если этот файл уже отрыт другим процессом на чтение, и запрещает чтение и запись, если файл открыт на запись. В отличие от повсеместно применяемой совместной схемы установки блокировок на файлы, принудительная блокировка почти не используется, а реализация имеет ряд нерешённых проблем;
    • Многочисленные улучшения в утилите perf.

  • Виртуализация и безопасность

    • Добавлена защита от приведения устройств с проблемными прошивками в нерабочее состояние после очистки конфигурации UEFI в результате удаления содержимого директории /sys/firmware/efi/efivars, например, после запуска "rm -rf /" под пользователем root. В новой версии ряд переменных в /sys/firmware/efi/efivars защищён от удаления;
    • В User-Mode Linux добавлена поддержка системного вызова seccomp();
    • В файл конфигурации ядра добавлена новая опция CONFIG_IO_STRICT_DEVMEM (отключена по умолчанию), позволяющая блокировать доступ к областям памяти /dev/mem, связанных с работой драйверов устройств;
    • Внесены улучшения в реализацию TPM/TPM2 (Trusted Platform Module);
    • В Smack добавлена проверка 'file receive', позволяющая определить права доступа к сокету в привязке к процессу, а не к i-node;
    • Возможность увеличения диапазона случайных значений, используемых при работе системы рандомизации адресного пространства (ASLR). Вместо заданных в коде значений параметры рандомизации теперь можно менять через /proc/sys/vm/mmap_rnd_bits и /proc/sys/vm/mmap_rnd_compat_bits, что может использоваться для усиления безопасности, но чревато проблемами с распределением больших блоков памяти;
    • Возможность лимитирования числа неименованных каналов (pipe), которые может создать один пользователь. Указанная возможность позволяет защититься от атак, в результате которых пользователь может израсходовать всю доступную память через открытие большого числа неименованных каналов, данные в которых остаются никогда не прочитаны;

  • Оборудование

    • В драйвер AMDGPU добавлена экспериментальная поддержка технологии динамического управления питанием Powerplay. Powerplay позволяет решить проблему с посредственной производительностью GPU Radeon в Linux, вызванную тем, что по умолчанию GPU запускается в режиме низкого энергопотребления, не позволяющего добиться максимальной производительности. Powerplay динамически отслеживает нагрузку на графическую подсистему и при необходимости повышает тактовую частоту GPU, переводя его в режим максимальной производительности. В настоящее время поддержка Powerplay реализована для GPU Tonga и Fiji, а также для интегрированных APU Carrizo и Stoney, использование нового драйвера AMDGPU с которыми демонстрирует существенное увеличение производительности. Из-за необходимости дополнительной стабилизации и тестирования кода режим Powerplay пока отключен по умолчанию, для включения следует передать ядру параметр "amdgpu.powerplay=1";
    • Из драйвера Radeon полностью удалена поддержка переключения видеорежимов в пространстве пользователя (UMS), для управления видеорежимами теперь можно использовать только KMS;
    • Расширены возможности DRM-драйвера для видеокарт Intel: добавлена поддержка будущего поколения чипов Kabylake, идущего на смену Skylake;
    • Расширены возможности DRM-драйвера для видеокарт NVIDIA (Nouveau): представлена возможность изменения скорости для шины PCI Express;
    • Включена новая версия Media controller API, позволяющая улучшить поддержку расширенных устройств Video4Linux (например, радио и TV) и дающая возможность использовать функциональность мультимедиа контроллера в других подсистемах, таких как DVB, ALSA и IIO;
    • Обновлена реализация проекта по обеспечению создания универсальных многоплатформенных ARM-сборок, позволяющих использовать одну сборку ядра для загрузки на различных ARM-процессорах ARMv6 и ARMv7. В новой версии отмечается включение наработок по рефакторингу ARM-сборок и добавление новых подсистем для улучшения абстрагирования от особенностей каждой платформы.
    • Поддержка новых ARM-плат: Sigma Designs Tango4, Raspberry Pi 2 (BCM2836), Rockchip RK3228, Freescale LS1043a, LogicPD DM3730, Cosmic+ M4 (Freescale Vybrid);
    • Поддержка USB-контроллеров Mediatek MT65xx, Renesas USB3.0, Renesas R-Car 3 USB 2.0 PHYs, Hisilicon hi6220 USB PHYs;
    • Поддержка криптографических ускорителей Rockchip и Intel C3xxx, C3xxxvf, C62x, C62xvf;
    • Поддержка звуковых карт Imagination Technologies, звуковых сопроцессоров AMD и кодеков Cirrus Logic CS47L24, Rockchip rk3036 Inno, Dialog Semiconductor DA7217/DA7218, Texas Instruments pcm3168a, Realtec RT5616/5659;

Релиз ядра Linux 4.4

11 января 2016 года Линус Торвальдс анонсировал релиз ядра Linux 4.4[14].

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

  • использование Direct I/O и AIO для смонтированных в loop-режиме ФС,
  • устойчивый к сбоям RAID5 с дополнительным журналированием,
  • поддержка поллинга для блочных устройств,
  • драйвер для SSD-накопителей Open-Channel на основе памяти NVM,
  • работа слушающих TCP-сокетов в неблокирующем режиме,
  • модернизированный системный вызов mlock2(),
  • поддержка 3D в виртуальном GPU virtio-gpu,
  • возможность запуска программ eBPF непривилегированными пользователями,
  • поддержка постоянно работающих eBPF-программ,
  • механизм определения потери TCP-пакетов RACK,
  • KMS-драйвер для Raspberry Pi,
  • xconfig переведён на Qt5.

В эту версию принято около 13 тыс. исправлений от 1548 разработчиков, размер патча - 49 МБ (изменения затронули 10606 файлов, добавлено 714106 строк кода, удалено 471010 строк). Около 44% всех изменений, представленных в 4.4, связаны с драйверами устройств. Примерно 16% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 15% связано с сетевым стеком, 4% - файловыми системами и 3% внутренними подсистемами ядра.

12.9% изменений внесли сотрудники компании Intel, 5.2% - Samsung, 5.1% - Red Hat, 3.5% - Atmel, 3.5% - Linaro, 2.3% - IBM, 2.1% - Google, 2.0% - SUSE, 1.8% - ARM, 1.6% - Texas Instruments, 1.6% - Freescale, 1.4% - AMD, 1.3% - Oracle.

Латиноамериканский Фонд свободного ПО опубликовал полностью свободный вариант ядра 4.4 - Linux-libre 4.4-gnu, очищенный от элементов прошивок и драйверов, содержащих несвободные компоненты или участки кода, область применения которых ограничена производителем. В этом выпуске проведены операции по чистке блобов в драйверах qed, fdp, nfcmrvl, rtl8xxxu и rohm_bu21023, улучшен код чистки блобов в загрузчике микрокода, удалён драйвер ft1000.

Наиболее интересные, по мнению экспертов, модификации в ядре Linux 4.4:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Для файловых систем, примонтированных в режиме "loopback" (монтирование из файла с использованием блочного устройства loop), реализована возможность использования прямых (Direct I/O) и асинхронных (AIO) операций ввода/вывода при чтении и записи в файл, связанный с loop-устройством. Использование Direct I/O при обращении к файлу с образом ФС позволяет избежать двойного кэширования, существенно сокращает потребление памяти и уменьшает число переключений контекста;
    • В подсистему MD интегрированы наработки компании Facebook по увеличению живучести программного RAID5 в случае краха системы. В частности, реализован режим журналирования RAID5, при котором на отдельном носителе (SSD или NVRAM) создаётся специальный журнал. Записываемые в RAID данные вначале сохраняются в журнале, а затем разносятся по входящим в RAID-массив дискам. Журнал позволяет гарантировать целостное состояние RAID в ситуациях неожиданного отключения питания, даже если RAID находился в деградированном состоянии. Если питание будет прервано на стадии когда составляющие транзакцию данные были записаны лишь на часть дисков, повреждения данных можно избежать так как вся информация о транзакции отражена в журнале. Журнал также позволяет повысить производительность некоторых операций и сократить задержки, но данные оптимизации пока не включены в состав ядра;
    • Поддержка поллинга ввода/вывода для блочных устройств (I/O polling). Поллинг позволяет уменьшить нагрузку на систему при использовании высокопроизводительных устройств за счёт периодического опроса состояния вместо генерации прерываний. Как следствие, в определённых ситуациях включение поллинга позволяет существенно повысить пропускную способность и сократить задержки ввода/вывода. Включение производится через запись 1 в /sys/block/DEV/queue/io_poll. В настоящее время поддерживается только режим O_DIRECT, а реализация помечена как экспериментальная и предназначенная для тестирования;
    • Реализована спецификация LightNVM, расширяющая драйвер NVM поддержкой SSD-накопителей, допускающих низкоуровневый прямой доступ к физическому носителю (например, первое поколение Open-Channel SSD-накопителей на основе памяти NVM). Для таких устройств ядро берёт на себя функции низкоуровневого управления хранилищем, которые в обычном Flash выполняются на уровне контроллера (FTL, Flash Translation Layer). LightNVM обеспечивает такие операции как управление размещением данных, сборка мусора и организация параллельного доступа. Функции управления сбойными блоками, атомарность ввода/вывода и размещение метаданных по-прежнему выполняются чипом накопителя;
    • В клиент NFS добавлена поддержка операции CLONE, определённой в спецификации NFSv4.2 и позволяющей организовать быстрое копирование файлов, используя ioctl NFS_IOC_CLONE, реализованный по аналогии с BTRFS_IOC_CLONE;
    • В Btrfs добавлена отладочная опция монтирования "fragment", установка которой приводит к излишней фрагментации данных и метаданных. Для RAID0/10/5/6 реализован фильтр балансировки разнесения групп блоков по дискам, позволяющий выборочно ребалансировать только блоки, не разнесённые на достаточное число устройств;
    • В XFS добавлено отдельное накопление статистики для каждой файловой системы (/sys/fs/xfs/BLOCK/stats/stats) и реализован специальный файл /sys/fs/xfs/BLOCK/stats/stats_clear для очистки статистики. Глобальная статистика доступа в /proc и продублирована в /sys/fs/xfs/stats/stats;
    • В CIFS реализована возможность выполнения операции копирования на стороне сервера (copy offload, CopyChunk) при копировании данных между разными разделами (share), размещёнными на одном сервере (ранее CopyChunk применялся только при копировании внутри одного раздела). Операция копирования на стороне сервера не требует перемещения данных по сети и производится до ста раз быстрее;
    • В CIFS добавлены опции монтирования "nopersistenthandles" и "persistenthandles", управляющие включением расширений "persistent handles", предоставляющих средства для повышения доступности открытых файловых дескрипторов в кластерных конфигурациях. Также добавлена опция "resilienthandles", позволяющая снизить вероятность потери данных в случае сбоя при подключении к серверам без поддержки "persistent handles";
    • Для блочных устройств представлен интерфейс Persistent Reservations, позволяющий зарезервировать за определённой системой область в совместно используемых хранилищах;

  • Сетевая подсистема
    • Обработка слушающих TCP-сокетов (listen) полностью избавлена от установки блокировок (lockless). Тесты показывают, что после задействования неблокирующего режима производительность слушающих сокетов увеличилась на 2-3 порядка (!), например, один слушающий сокет теперь способен обработать 3.5 млн SYN-пакетов в секунду;
    • В setsockopt() добавлена поддержка флага SO_INCOMING_CPU и расширена логика выбора CPU при использовании SO_REUSEPORT. SO_INCOMING_CPU позволяет организовать обработку в текущем процессе только тех пакетов, которые до этого были обработаны сетевым стеком на том же CPU. Закрепление привязанных к одному CPU RX-очередей и обработчиков слушающих сокетов позволяет более эффективно использовать процессорный кэш;
    • Добавлен RACK - новый механизм определения потери TCP-пакетов, который в отличие от штатного метода определения факта потери пакета, отталкивается от времени передачи, а не последовательности прихода пакетов. Суть работы RACK в том, что при получении ACK-подтверждения для пакета, любые неподтверждённые пакеты, отправленные как минимум на RTT (round-trip time) раньше подтверждённого пакета, считаются потерянными и потребуют повторной отправки. Новый алгоритм уже протестирован в инфраструктуре Google и будет предложен для утверждения в качестве стандарта IETF;

  • Память и системные сервисы
    • Возможность загрузки программ eBPF непривилегированными пользователями для их использования в качестве фильтров для сокетов. Ранее из соображений безопасности доступ к системному вызову ebpf() был открыт только пользователю root. В текущей версии ядра код проверки корректности загружаемых программ был значительно улучшен и непривилегированным пользователям дана возможность запуска ограниченных по функциональности программ eBPF, которые могут использоваться для создания простых сетевых фильтров. Возможности eBPF по трассировке, классификации трафика и манипуляциям с данными ядра по-прежнему доступны только для root. Для запрета обращения к системному вызову ebpf() из непривилегированных процессов добавлен sysctl kernel.unprivileged_bpf_disabled;
    • Возможность постоянного выполнения eBPF-программ и сопоставлений (Persistent eBPF maps/progs), продолжающих работу и после завершения процесса, инициировавшего их выполнение. Объекты выполняемого eBPF размещаются в области /sys/fs/bpf/ и могут совместно использоваться несколькими процессами. Например, таким способом удобно создавать классификаторы и обработчики трафика;
    • Добавлен фреймворк "devfreq cooling" для управления температурным режимом устройств, позволяющий при наличии соответствующей аппаратной поддержки перевести перегревающееся устройство в режим пониженного энергопотребления для удержания температуры в заданных границах;
    • Добавлен системный вызов mlock2(), расширяющий возможности системного вызова mlock() поддержкой дополнительного аргумента, позволяющего задействовать новый режим блокировки VM_LOCKONFAULT, при котором страницы памяти в указанном диапазоне будут закреплены в ОЗУ не сразу, а только после возникновения page fault (обращение к невыделенным страницам памяти);
    • Изменено содержимое файлов "stat", размещённых в поддиректории каждого процесса в /proc (например, /proc/123/stat). Поле wchan (30 столбец), которое содержало абсолютный адрес, по которому был заблокирован процесс, могло использоваться злоумышленниками для получения важной информации о ядре. Отныне данное поле переведено в разряд флагов: содержит ноль для выполняемых процессов и единицу для заблокированных;
    • Многочисленные улучшения в утилите perf. Например, perf теперь может собирать и загружать программы eBPF для решения задач мониторинга производительности и трассировки событий;
    • Добавлен модуль userio с реализацией протокола, позволяющего в пространстве пользователя эмулировать устройства с последовательным портом ввода/вывода, такие как тачпады;
    • Для систем x86 добавлен параметр конфигурации CONFIG_DEBUG_WX, при включении которого ядро будет выдавать предупреждения о маппинге секций памяти, одновременно помеченных доступными на запись и выполнение;
    • Графический конфигуратор xconfig портирован на Qt5. Поддержка сборки xconfig с Qt3 прекращена;

  • Виртуализация и безопасность
    • В KVM и VFIO добавлена возможность обработки аппаратных прерываний в гостевой системе без проброса через прослойку, работающую на стороне хоста - прерывания от устройств PCI передаются напрямую в vCPU;
    • Вложенная виртуализация в KVM теперь поддерживает VPID по аналогии с PCID, но для vCPU;

В KVM добавлена поддержка разбиения кода контролера прерываний, при которой LAPIC реализуется в ядре, а IOAPIC/PIC/PIT в пространстве пользователя, что уменьшает подверженность гипервизора некоторым типам атак;

    • В драйвер VMware balloon, позволяющий исключить дублирование идентичных областей памяти в разных виртуальных окружениях, добавлена возможность манипулирования страницами памяти размером 2 Мб, что значительно уменьшает накладные расходы на стороне гипервизора и гостевой системы при выполнении операций связывания (ballooning) и разделения (unballooning) общей памяти;
    • Поддержка аппаратных генераторов случайных чисел ST Microelectronics;
    • В ptrace добавлена поддержка формирования дампа задействованных для процесса фильтров seccomp (PTRACE_SECCOMP_GET_FILTER);

  • Оборудование
    • Устройство virtio-gpu (виртуальный GPU), развиваемое в рамках проекта Virgil, расширено поддержкой 3D-операций, что позволит задействовать OpenGL и средства 3D-ускорения в виртуальных окружениях на базе QEMU и KVM без эксклюзивного проброса видеокарты в гостевую систему. Virtio-gpu позволяет организовать 3D-рендеринг внутри гостевых систем с задействованием GPU хост-системы, но при этом виртуальный GPU работает независимо от физического GPU хост-системы;
    • Добавлена подсистема для поддержки устройств широтно-импульсной модуляции (PWM, Pulse-width modulator) и реализована поддержка PWM-контроллеров Renesas R-Car, Marvell Berlin, Broadcom BCM7038 и MediaTek PWM;

Добавлен KMS-драйвер vc4 с поддержкой GPU Broadcom VideoCore 4, используемых в Raspberry Pi. Драйвер ограничен переключением видеорежимов на уровне ядра и управлении курсором, но пока не поддерживает 3D и управление питанием;

    • Расширены возможности DRM-драйвера для видеокарт Intel: поддержка HPD (Hot Plug Detect) и загрузчик прошивок, специфичных для движков GuC;
    • Расширены возможности DRM-драйвера для видеокарт NVIDIA (Nouveau): улучшены средства управления частотой GPU, расширена поддержка GPU GK20A (Kepler) и GK107 (GeForce 600);
    • Расширены возможности DRM-драйвера для видеокарт AMD (Radeon и amdgpu): поддержка платформы AMD Stoney Ridge. В amdgpu по умолчаннию включён планировщик GPU, улучшена поддержка GPU AMD Carrizo, Tonga и Fiji, реализованы новые опкоды AtomBIOS;
    • Поддержка SoC Broadcom Northstar Plus;
    • Поддержка сетевых адаптеров: Texas Instruments DP83848, Hisilicon Network, Allwinner A10 CAN, Broadcom Cygnus, Broadcom NetXtreme-C/E 10/25/40/50 gigabit Ethernet, Microchip ENC424J600 ethernet, Mellanox Technologies Spectrum Ethernet, QLogic QED 25/40/100Gb Ethernet, Realtek RTL8XXXU, Intel Fields Peak NFC и Marvell NFC-over-I2C/SPI.

2015

Так просто взломать Linux?

17 декабря 2015 издание Lifehacker сообщило [15] об уязвимости Linux.

Двое исследователей из политехнического университета Валенсии обнаружили уязвимость в ОС. Они выявили критическую уязвимость в загрузчике GRUB для Linux. Она позволяет обойти блокировку загрузки системы паролем и получить полный доступ к консоли[16].

Для этого необходимо физически находиться за компьютером и 28 раз нажать клавишу Backspace в поле имени или пароля. После этого компьютер перезагрузится и запустит Grub rescue shell. Отсюда можно получить доступ к файловой системе Linux, скопировать файлы на флэш-носитель или с нее внести вирус в систему.

Патч исправления этой ошибки уже создан. Выпустили его сами исследователи. Его можно установить для Ubuntu, Red Hat и Debian. Издание рекомендовало пользователям: посмотреть на проблему безопасности Linux с точки зрения "физического" вторжения в систему, т.е. если сетевую безопасность и защиту кода разработчики Linux обеспечили так или иначе, то ограничить доступ к машинам людей, мыслящих неординарно, у них пока не получилось.

Релиз ядра Linux 4.3

2 ноября 2105 года Линус Торвальдс анонсировал релиз ядра Linux 4.3[17].

Среди наиболее заметных изменений:

  • удаление обособленного драйвера ФС ext3,
  • отключение поддержки режима VM86,
  • средства для наследования capabilities,
  • включение по умолчанию сборки с IPv6,
  • реализация виртуальных таблиц маршрутизации, сетевой планировщик "overflow",
  • возможность обработки page fault в пространстве пользователя,
  • дополнительная защита от fork-бомб,
  • фреймворки для разработки драйверов NVMEM и MOST,
  • зависимость от openssl-devel при сборке с поддержкой верификации модулей по цифровым подписям.

В эту версию принято около 11 тысяч исправлений от полутора тысяч разработчиков, размер патча - 42 Мб (изменения затронули 10388 файлов, добавлено 643628 строк кода, удалено -333888 строк). Около 48% всех представленных в 4.3 изменений связаны с драйверами устройств, примерно 18% изменений имеют отношение к обновлению кода специфичного для аппаратной архитектуры, 11% связано с сетевым стеком, 3% - файловыми системами и 4% - внутренними подсистемами ядра.

Модификации:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • Из состава ядра исключён драйвер ext3, так как он является дублирующим - функции работы с разделами ext3 имеются в драйвере ext4, который полностью обратно совместим с прошлым поколением ФС и может использоваться в качестве прозрачной замены драйвера ext3;
    • Параметр discard_max_bytes теперь доступен на запись, что позволяет ограничивать максимальный размер операций discard для блочного устройства. Опция даёт возможность увеличить отзывчивость в условиях обилия крупных discard-операций за счёт их разбиения на более мелкие;
    • Для файловой системы F2FS реализован ioctl F2FS_GARBAGE_COLLECT для внепланового вызова операции сборки мусора из пространства пользователя;
    • Большая порция незначительных исправлений для файловых систем Btrfs, ext4 и XFS; Из улучшений Btrfs можно выделить реализацию флага BTRFS_RBIO_REBUILD_MISSING для RAID 5/6 и поддержку контроллеров blkio. В ext4 и xfs отмечены только исправления.

  • Память и системные сервисы

    • Осуществлено блокирование поддержки устаревшего 16-разрядного виртуального режима адресации VM86, в условиях, когда значение vm.mmap_min_addr не равно нулю. Разработчики столкнулись с дилеммой: с одной стороны режим VM86 может быть использован для совершения атак и его сохранение негативно повлияет на безопасность, но с другой стороны VM86 востребован для работы DOS-эмуляторов, т.е. подпадает под один из главных принципов разработки ядра - сохранение неизменности программных интерфейсов для приложений пространства пользователя. В итоге, было достигнуто компромиссное решение: блокировать работу VM86 только при установке ненулевых значений нижнего лимита маппинга памяти (vm.mmap_min_addr), при которых DOS-эмуляторы заведомо неработоспособны. Так как vm.mmap_min_addr по умолчанию установлен в 4096, то для большинства конфигураций VM86 будет отключен. При необходимости запуска DOS-эмулятора, пользователи должны установить vm.mmap_min_addr в ноль и тогда VM86 будет автоматически активирован.
    • В состав ядра принят API userfaultfd для реализации обработчиков обращений к невыделенным страницам памяти (page faults) в пространстве пользователя. Обработка "page faults" в пространстве пользователя необходима для оптимизации выполнения live-миграции гостевых окружений KVM без остановки работы гостевой системы. Для ускорения миграции гостевое окружение может быть переключено на новый хост c оставлением рабочей памяти на старом хосте. При обращении к ещё не перенесённой памяти в новом окружении будет сгенерирован "page fault", на основании которого специальный обработчик в пространстве пользователя загрузит отсутствующий блок памяти по сети и разместит в адресном пространстве гостевой системы. Подобный подход позволит обойтись без реализации протокола live-миграции на стороне ядра.
    • Возможность прикрепления eBPF-обработчиков к контрольным проверкам uprobes (userspace probes), используемым для анализа поведения выполняемых в пространстве пользователя приложений. Указанная возможность позволяет применять BPF для трассировки кода в пространстве пользователя.
    • В состав набора исходных текстов ядра включена библиотека libbpf, предоставляющая средства для работы со скриптами BPF. В настоящее время библиотека уже задействована в утилите perf;
    • В cgroups добавлен механизм "PIDs controller" для противодействия наводнению системы процессами (защита от fork-бомб). PIDs controller даёт возможность задать лимит на максимальное число процессов в группе, при превышении которого блокируется создание новых задач через вызовы fork() и clone();
    • Для архитектуры MIPS реализована поддержка системы контрольных проверок uprobes (userspace probes);
    • Реализованы средства для отслеживания редко используемых (idle) страниц памяти, что может применяться для оптимизации распределения памяти между контейнерами и виртуальными машинами;
    • Добавлен новый системный вызов membarrier() для установки барьеров на память для всех работающих в системе потоков;

  • Виртуализация и безопасность

    • Возможность наследования capabilities дочерними процессами, запускаемыми через execve(). Основная идея в предоставлении привилегированным процессам, работающим не под пользователем root, возможности запускать другие программы, передавая им ограниченный набор расширенных прав. Для включения наследования применяется маска PR_CAP_AMBIENT, указываемая для подлежащих наследованию capabilities;
    • В ptrace() добавлена новая операция PTRACE_O_SUSPEND_SECCOMP, позволяющая заморозить выполнение фильтров seccomp, что может применяться для заморозки процессов, находящихся в режиме seccomp. Операция доступна только для процессов с привилегиями CAP_SYS_ADMIN в первичном пространстве идентификаторов процессов;
    • В подсистему Smack добавлена возможность привязки меток к адресам IPv6;
    • В подсистему SELinux добавлена поддержка проверки вызовов ioctl() в разрезе отдельных команд;
    • Правила аудита теперь могут привязываться к процессам на основе привязки к запущенному исполняемому файлу;
    • Реализована поддержка режима "privileged access never", доступного в новых процессорах ARM/ARM64 и позволяющего ограничить доступ кода, работающего на уровне ядра, к адресам в пространстве пользователя;
    • В proc добавлен новый файл /proc/kpagecgroup, который содержит информацию о привязке cgroups к страницам физической памяти;
    • Верификация модулей по цифровым подписям переведена на формат PKCS#7, что требует наличия openssl-devel при сборке ядра с поддержкой цифровых подписей;

  • Сетевая подсистема

    • Ядро теперь по умолчанию собирается со встроенной поддержкой IPv6 (ранее IPv6 собирался в виде модуля ядра), что привело к увеличению размера базовой сборки ядра на 270Кб;
    • В сетевую подсистему добавлена поддержка инфраструктуры для создания легковесных туннелей "lwtunnel", реализующих технику инкапсуляции потока без использования отдельного сетевого интерфейса и связанных с ним накладных расходов;
    • Начальная поддержка виртуальных таблиц маршрутизации VRF (Virtual Routing and Forwarding), позволяющих организовать работу нескольких доменов маршрутизации на одной системе. Например, VRF можно использовать для создания изолированных контейнеров с отдельными таблицами маршрутизации;
    • В подсистему Open vSwitch добавлен модуль для взаимодействия с механизмом ядра по отслеживанию состояния соединений (conntrack);
    • Добавлена возможность ILA (Identifier Locator Addressing), предназначенная для организации обращения к задачам, мигрирующим с одной машины на другую. Суть метода в присвоении каждой задаче уникального идентификатора, не привязанного к конкретному местоположению в сети, но ассоциированного с определённым адресом IPv6;
    • Новый сетевой планировщик "overflow" для распределения нагрузки в условиях виртуализации серверов. Суть алгоритма в направлении сетевых соединений к серверу с наибольшим весом и переходом к следующему серверу при достижении заданного для текущего узла лимита активных сетевых соединений.

  • Оборудование

    • В ветку staging добавлена новая подсистема MOST (Media Oriented Systems Transport), предоставляющая средства для создания сетевых и мультимедийных драйверов на основании спецификаций MOST, развиваемых для автомобильных систем;
    • Добавлен NVMEM Framework (Non Volatile Memory layer), предоставляющий API для разработки драйверов для устройств постоянной памяти, таких как eeprom и efuses;
    • Расширены возможности DRM-драйвера для видеокарт Intel: включена по умолчанию поддержка чипов Gen9 (Skylake), которая признана стабильной;
    • Расширены возможности DRM-драйвера для видеокарт NVIDIA (Nouveau): выполнена внутренняя переработка и чистка кода, улучшены средства управления питанием для GPU GT200, добавлена начальная поддержка GM20B (Tegra X1);
    • Расширены возможности DRM-драйвера для видеокарт AMD (Radeon): начальная поддержка AMD Radeon R9 Fury (Fiji), решены проблемы с Maxwell DisplayPort;
    • В DRM-драйвер vmwgfx для систем виртуализации VMware добавлена возможность использования OpenGL 3.3 в гостевых системах (раннее поддерживался OpenGL 2.1);
    • Для архитектуры s390 реализована поддержка режима "fake NUMA", позволяющая представить крупную систему в форме набора эмулируемых узлов NUMA, упрощающих партицирование нагрузки;
    • Поддержка криптографических акселераторов Allwinner Security System и Intel DH895xCC;
    • Поддержка звуковых кодеков Cirrus Logic CS4349, Realtek ALC298 и STI SAS;
    • Поддержка отечественной DVB-S2/T2/C2-платы NetUP Universal DVB CI.

Вышел релиз ядра Linux 4.2

30 августа 2015 года Линус Торвальдс анонсировал релиз ядра Linux 4.2[18].

Среди заметных изменений:

  • интеграция драйвера AMDGPU,
  • поддержка стекового подключения LSM-модулей,
  • новый метод формирования энтропии для генератора псевдослучайных чисел,
  • новый классификатор пакетов Flower,
  • оптимизация ассемблерного кода для архитектуры x86,
  • поддержка туннелей GENEVE,
  • средства шифрования в F2FS,
  • драйвер virtio-gpu с реализацией виртуального GPU,
  • подсистема libnvdimm.

В эту версию принято около 13 тыс. исправлений от 1569 разработчиков, размер патча - 64 Мб (в два раза больше, чем патч с ядром 4.1. Изменения затронули 10926 файлов, добавлено 1081330 строк кода, удалено 282089 строк). Около 42% всех изменений, представленных в 4.2, связаны с драйверами устройств, примерно 20% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - с файловыми системами и 4% c внутренними подсистемами ядра.

Разработчики отметили изменения:

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В F2FS, развиваемую компанией Samsung высокопроизводительную файловую систему для Flash-накопителей, добавлена возможность шифрования на уровне отдельных файлов и поддержка операций FALLOC_FL_ZERO_RANGE и FALLOC_FL_COLLAPSE_RANGE для управления резервированием пустых областей через вызов fallocate();
    • В ext4 добавлена поддержка опции FALLOC_FL_INSERT_RANGE, позволяющей осуществить подстановку обнулённого блока в существующий файл через вызов fallocate();
    • В XFS появилась возможность использования интерфейса DAX для прямого доступа к устройствам постоянной памяти (persistent-memory) в обход страничного кэша (полезно для NVDIMM);
    • В Btrfs обновлена реализация квот для подразделов. Расширена связанная с Btrfs информация в sysfs;
    • В файловую систему CIFS добавлена экспериментальная поддержка протокола SMB 3.1.1;
    • В модуле dm-cache, предназначенном для ускорения доступа к жестким дискам через применение кэширования на SSD-накопителях, добавлена поддержка SMQ-кэширования (stochastic-multi-queue), решающего проблемы с большим потреблением памяти при кэшировании с привлечением нескольких очередей (multi-queue);
    • В libata улучшена поддержка NCQ (Native Command Queuing) TRIM. Для включения и отключения NCQ TRIM представлены параметры ncqtrim и noncqtrim;

  • Память и системные сервисы
    • Код выборки по именам файлов переработан для исключения рекурсии, что позволило сократить нагрузку на стек, повысить надёжность работы сложных систем хранения и убрать лимит на глубину вложенных символических ссылок;
    • В подсистему профилирования perf добавлена поддержка функциональности PEBSv3 (Precise Event-Based Sampling), присутствующей в новых процессорах Intel. Улучшена поддержка возможностей Intel PT (аппаратный трассировщик CPU) и Intel CQM (мониторинг качества утилизации кэша). Значительно расширены возможности утилиты perf: в 'perf top' реализована возможность динамического включения/выключения событий, в 'perf probe' добавлена поддержка глобальных масок имён функций и возможность сбора данных о всех аргументах функций, проведена подготовка к внедрению многопоточного варианта команды 'perf report';
    • В систему обработки данных от термодатчиков, добавлен новый power-allocator, сочетающий раздельную обработку параметров нагрева отдельных элементов с попыткой поддержания общей температуры системы в заданных границах;
    • Многочисленные оптимизации и переработки ассемблерного кода для архитектуры x86 (в дальнейшем часть кода планируют переписать на Си). Переработан и реструктуризирован код для взаимодействия с модулями операций с плавающей запятой (FPU);
    • Добавлена новая подсистема ядра "libnvdimm", предоставляющая различные методы доступа к массивам энергонезависимой памяти (NVM, non-volatile memory), сочетающей производительность ОЗУ с возможностью постоянного хранения содержимого. Для процессора энергонезависимая память выглядит как обычное ОЗУ (отображается в пространство системной памяти в виде больших регионов физической памяти), но при этом данные не теряются после прекращения подачи энергии. Для записи данных в NVM-память представлены функции memremap_pmem(), memcpy_to_pmem() и wmb_pmem(). Обеспечена возможность представления регионов NVM-памяти в качестве отдельных виртуальных устройств. Через модуль "BTT" (block translation table) реализован слой для атомарного посекторного доступа к NVM-массивам, представленным в форме блочных устройств;
    • Изменён подход к монтированию псевдо-ФС sysfs и /proc. Поддиректории для точек монтирования (например, /sys/debug) теперь специально помечены и монтирование допускается только в них. Добавлены средства для контроля соответствия флагов для уже примонтированных и новых экземпляров псевдо-ФС (для монтирования в контейнерах);
    • Добавлена поддержка появившихся в спецификации UEFI 2.5 таблиц ESRT (EFI System Resource Table), которые необходимы для работы утилиты fwupdate для организации обновления системных прошивок на новом оборудовании;

  • Виртуализация и безопасность
    • Добавлен новый код формирования энтропии для генератора псевдослучайных чисел, основанный на учёте отклонения времени повторного исполнения определённого набора инструкций на CPU (CPU execution time jitter), которое зависит от множества внутренних факторов и непредсказуемо без физического контроля над CPU. Новый код решает проблему с недостаточным числом источников энтропии на встраиваемых устройствах;
    • В гипервизор KVM добавлена поддержка множественных адресных пространств и режима системного управления (SMM, System Management Mode). Данные возможности позволяют реализовать поддержку режима верифицированной загрузки (Secure Boot) для гостевых систем;
    • Реализована возможность стековой организации модулей LSM (Linux Security Modules), позволяющей выстраивать цепочки обработчиков, задействуя сразу несколько модулей. Например, теперь можно подключить специализированные LSM-модули в качестве надстройки поверх таких систем, как SELinux, Smack, TOMOYO и AppArmor.
    • Реализовано устройство virtio-gpu (виртуальный GPU), развиваемое в рамках проекта Virgil. Драйвер предоставляет средства управления видеорежимами для гостевых систем KVM/QEMU с поддержкой VirtIO. В настоящее время драйвером пока поддерживается только возможность ускорения 2D-графики, поддержка 3D/OpenGL появится в дальнейшем;

  • Сетевая подсистема
    • Добавлен новый классификатор пакетов "Flower", который позволяет классифицировать пакеты на основе настраиваемой комбинации ключей и масок пакетов;
    • Интегрирована поддержка туннелей GENEVE (Generic Network Virtualization Encapsulation);
    • В подсистему netfilter добавлена поддержка классификации пакетов по времени их поступления (ingress-time);

В сокетах Unix-domain обеспечена поддержка системного вызова splice();

    • Добавлен алгоритм контроля перегрузки (congestion-control), учитывающий отклонение величины ожидания (Delay-gradient);

  • Оборудование
    • В состав ядра принят код драйвера AMDGPU, разработанного для воплощения в жизнь новой стратегии продвижения драйверов для графических процессоров компании AMD, в рамках которой модуль ядра является полностью открытым, а проприетарный драйвер Catalyst будет включать лишь набор проприетарных библиотек, реализующих фирменные варианты OpenGL, OpenCL и т.п. Добавленный в ядро драйвер отвечает за поддержку GPU на основе GCN, начиная с R9 285 "Tonga" (семейство Volcanic Islands) и более новых;
    • Возвращена поддержка архитектуры Renesas H8/300, которая несколько лет назад была исключена из ядра из-за заброшенного состояния и отсутствия сопровождающего. Новая реализация переписана и избавлена от ранее наблюдаемых ошибок;
    • Расширены возможности драйверов для видеокарт Intel, NVIDIA (Nouveau) и AMD (Radeon): В Radeon добавлена поддержка блоков кодирования видео VCE1. В драйвер Intel добавлена начальная поддержка новых SoC Intel Atom Broxton с GPU Intel Gen 9 (Skylake). В Nouveau отмечены только исправления ошибок;
    • Поддержка ARM SoC Freescale i.MX7D, HiSilicon hi6220 и ZTE ZX296702;
    • Поддержка SATA-контроллеров Broadcom STB AHCI и CEVA AHCI;
    • Поддержка третьего поколения блоков управления памятью для процессоров ARM;
    • Поддержка беспроводных мышей Logitech M560 и контроллеров движения Sony;
    • Поддержка беспроводных чипов Mediatek MT7601U и Atmel WILC1000, а также сетевых контроллеров Cavium ThunderX, Mellanox Technologies ConnectX-4, Texas Instruments DP83867 Gigabit PHY, Cavium LiquidIO и Unisys visornic.

Вышел пре-релиз Linux 4.2-RC1

7 июля 2015 года Линус Торвальдс анонсировал кандидата в релиз очередной версии ядра Linux[19].

Разработчик отметил Linux 4.2-RC1 как самый крупный релиз по количеству строк кода.

«Если вы оцениваете размер как количество изменённых строк, то это действительно самый большой rc [release candidate], который мы когда-либо создавали: добавлено более миллиона строк (и около четверти миллиона строк было удалено), — написал Линус в рассылке. - Довольно необычная ситуация, когда единственный драйвер составляет почти половину всего rc1 по количеству новых строк».

Значимая часть добавленных строк — фрагмент драйвера для видеокарт AMD. По словам Торвальдса, он составил 41 % от всего патча ядра (до версии Linux 4.2-RC1).

Предыдущий рекордсмен по количеству новых строк в ядре релиз Linux 3.11rc1, куда добавили распределённую файловую систему Lustre.

Вышел релиз Linux 4.1

21 июня 2015 года Линус Торвальдс представил релиз ядра Linux — 4.1[20].

«После очень тихой недели после выпуска 4.1-rc8 представлен финальный релиз 4.1. Не знаю, была эта неделя тихой по той причине, что действительно не проблем (стучу по дереву), или же люди проявили тактичность к моему отпуску — вне зависимости от причин я это оценил. Не похоже, что цикл релизов 4.1 был трудным, так что давайте надеяться, что дополнительная неделя его ожидания сделала релиз лучше. Это будет здорово, учитывая, что 4.1 станет релизом с длительной поддержкой (LTS)», - написал создатель ОС Linux в своем обращении к сообществу.

Линус Торвальдс, 2014

Среди значимых изменений в ядре Linux 4.1 можно выделить:

  • существенные улучшения в производительности для некоторого оборудования;
  • улучшения в энергопотреблении для некоторого железа Intel (в драйвере Intel DRM);
  • поддержка ACPI для 64-битной архитектуры ARM (AArch64);
  • поддержка ускорения для GeForce GTX 750 в видеодрайвере Nouveau;
  • поддержка Intel XenGT vGPU для ускорения графики в гостевых системах, использующих виртуализацию Xen (поддержка для KVM в процесс реализации);
  • поддержка Radeon DisplayPort MST;
  • шифрование файловой системы ext4 (сделано специалистами Google для Android);
  • улучшенная поддержка массивов RAID 5 и 6 в MD RAID;
  • улучшенная поддержка ноутбуков от крупных производителей (в том числе, лучшая поддержка Chromebook Pixel 2);
  • улучшения в поддержке микроархитектуры Intel Skylake (сама она появится позже в этом году).

Торвальдс анонсировал ядро Linux версии 4.0.

13 апреля 2015 года Линус Торвальдс представил релиз ядра Linux 4.0.

Среди наиболее заметных улучшений:

  • интеграция базовых компонентов для обновления ядра Linux без перезагрузки,
  • поддержка нескольких слоёв на чтение в overlayfs,
  • реализация механизма для выявления ошибок работы с памятью,
  • поддержка энергонезависимой памяти (NVM),
  • возможность привязки к хостам алгоритмов контроля перегрузки,
  • возможность установки меток на сетевые пакеты в модулях Smack,
  • добавление в ext4 опции lazytime.

Номер версии 4.0 вместо ожидаемого 3.20 присвоен после голосования, в котором приняли участие более 31 тысячи участников сообщества, из которых 56% посчитали - настало время выпуска версии 4.0. Переход к нумерации 4.x действие формальное, обусловлено лишь эстетическими соображениями. Этот выпуск ядра оказался как нельзя лучшим претендентом на смену нумерации. Репозиторий приблизился к отметке в 500 тыс. коммитов и преодолел рубеж в 4 млн объектов. С выпуском ядра 3.0 преодолены рубежи в 250 тысяч коммитов и 2 млн объектов в Git.

С точки зрения функциональности выпуск 4.0 не содержит кардинальных изменений или нарушений совместимости и не выделяется среди других выпусков, плавно продолжая развитие действующей программной основы. Цикл разработки принёс меньше значимых изменений, нежели в предыдущих выпусках (10 тыс изменений против 12.5 тысяч в ядре 3.19). Последняя смена нумерации проведена в 2011 году, когда в ветке 2.6.x накопилось 39 релизов, на подготовку которых потрачено 10 лет.

В новую версию принято более 10 тысяч исправлений от 1403 разработчиков, размер патча - 34 Мб (изменения затронули 9489 файлов, добавлено 509084 строк кода, удалено 327296 строк). Около 45% всех изменений, представленных в 4.0, связаны с драйверами устройств, примерно 16% изменений имеют отношение к обновлению кода специфичного для аппаратных архитектур, 12% связано с сетевым стеком, 4% - файловыми системами и 4% c внутренними подсистемами ядра.

11.6% изменений внесены сотрудниками компании Intel, 7% - Red Hat, 4.6% - SUSE, 4.0% - Linaro, 3.6% - Samsung, 2.2% - IBM, 1.6% - Freescale, 1.5% - Google, 1.4% - AMD, 1.4% - Texas Instruments, 1.4% - Oracle, 1.2% - Qualcomm, 1.2% - ARM.

Наиболее интересные новшества:

  • Память и системные сервисы
    • Интеграция базовой инфраструктуры, предоставляющей универсальный API для горячего наложения патчей на ядро. Код подготовлен в результате сотрудничества разработчиков SUSE и Red Hat, которые согласились задействовать данный API в реализациях систем обновления ядра без перезагрузки - kPatch и kGraft. В текущем виде, добавленный в ядро код позволяет создавать простые патчи для горячего устранения некоторых типов уязвимостей, но пока не может быть использован для более сложных изменений, так как не предоставляет средств для обеспечения непротиворечивости. Подробнее об особенностях добавленной в ядро инфраструктуры и отличиях kPatch от kGraft можно прочитать в ранее опубликованном анонсе.
    • Приняты патчи для поддержки энергонезависимой памяти (NVM, non-volatile memory), сочетающей производительность ОЗУ с возможностью постоянного хранения содержимого.
    • В состав исходных текстов ядра включена подборка вспомогательных скриптов scripts/gdb, упрощающих отладку с использованием GDB;
    • Представлен новый отладочный механизм KASan (Kernel address sanitizer), который позволяет выявлять ошибки работы с памятью и факты некорректного обращения к памяти, такие как помещение кода в области памяти, не предназначенные для подобных манипуляций. Применение KASan пока ограничено архитектурой x86_64;
    • Ядро теперь может быть собрано для запуска нитей RCU grace-period-handling с использованием системы приоритетов режима реального времени, что может оказаться полезным для выскоконагруженных систем;
    • Удалён ранее объявленный устаревшим системный вызов remap_file_pages(), вместо которого добавлена заглушка, симулирующая его функциональность через использование нескольких виртуальных областей памяти, что позволило сохранить работоспособность приложений, использующих данный системный вызов;
    • В механизм pstore, позволяющий сохранить отладочную информацию о причине краха в области памяти, не теряемые между перезагрузками, добавлена реализация специального файла /dev/pmsg0, позволяющего помещать в хранилище информацию из пространства пользователя.
    • Реализация шины I2O перемещена в директорию staging в связи с планами по исключению в будущем подсистемы I2O из состава ядра;

  • Дисковая подсистема, ввод/вывод и файловые системы
    • В OverlayFS добавлена возможность использования более одного слоя, доступного только на чтение;
    • Для файловых систем реализована поддержка опции монтирования lazytime, которая даёт возможность отследить время обращения к файлам, но не приводит к возникновению большого числа паразитных операций записи в ФС. Основное отличие от "atime" состоит в том, что время доступа сохраняется в inode, хранящихся в оперативной памяти, и сбрасываемых на диск только при возникновении явных условий или истечения достаточно длительного таймаута (раз в 24 часа). Таким образом для работающих программ возвращается всегда точный atime, но на диске сведения сохраняются с большой задержкой. Данный режим пока доступен только для ФС ext4;
    • Реализация блочного сервера pNFS, позволяющего NFS-клиентам подключаться к совместно используемым дискам с применением блочного ввода/вывода вместо операций чтения и записи NFS. Поддержка нового режима пока реализована только для файловой системы XFS;
    • Поддержка в pNFS слоя Flexible File Layout, позволяющем сохранять метаданные отдельно от содержимого файлов. Например, метаданные могут отдаваться с использованием NFSv4.1, а содержимое файлов при помощи протокола, предоставляемого хранилищем;
    • В файловую систему Btrfs принята часть подготовленных компанией Facebook изменений, направленных на более грамотную обработку ситуаций исчерпания свободного дискового пространства. В Btrfs также внесена порция исправлений и чисток, большинство из которых связаны с обеспечением работы RAID 5/6;
    • В dm-crypt внесены оптимизации для увеличения масштабируемости, которые позволили поднять производительность на крупных нагруженных системах.
    • В файловой системе ubifs, предназначенной для использования на Flash-накопителях, обеспечена поддержка блочного слоя blk-mq (multiqueue block layer) с многоуровневой моделью очередей, рассчитанного на организацию многопоточного доступа к данным на многоядерных системах и позволяющего эффективно использовать возможности современных SSD-накопителей. В ubifs также добавлена поддержка расширенных атрибутов "security.*";

  • Виртуализация и безопасность
    • Подсистема Open vSwitch теперь генерирует собственные идентификаторы потока ("flow IDs"), которые используются для идентификации сетевых потоков в пространстве пользователя, что может привести к увеличению производительности до 40%;
    • Подсистема Virtio (Virtual I/O Device) приведена в соответствие к недавно принятому стандарту virtio 1.0;
    • Модулям безопасности Smack предоставлена возможность взаимодействовать с системой netfilter через установку меток на проходящие через фильтр пакеты.
    • Код механизма межпроцессного взаимодействия Binder, созданный для платформы Android, снабжён хуками для применения политик SELinux;

  • Сетевая подсистема
    • В подсистеме управления трафиком добавлена поддержка фильтров, написанных с использованием языка виртуальной машины eBPF;
    • В сетевом стеке обеспечена поддержка применения для определённых хостов специфичных алгоритмов контроля перегрузки (congestion-control) с привязкой через таблицу маршрутизации;
    • В реализации сетевого протокола TIPC (Transparent Inter-process Communication), предназначенного для организации межпроцессного взаимодействия в кластере, обеспечена поддержка изолированных пространств имён (namespace);

  • Оборудование
    • Прекращена поддержка запуска 32-разрядных исполняемых файлов HP-UX на архитектуре PA-RISC;
    • В драйвер Radeon добавлена поддержка передачи аудиоданных через интерфейс DisplayPort и решены проблемы с производительностью GPU AMD семейства Hawaii (R9 290 и R9 290X). В состав также включены патчи для улучшения управления системой охлаждения GPU на основе GCN, которые приводят к ощутимому снижению уровня шума для GPU за счёт снижения частоты вращения вентилятора;
    • Расширены возможности драйверов для видеокарт Intel, включая начальную поддержку оборудования Intel Skylake;
    • В Nouveau произведено слияние с драйвером для видеоподсистем NVIDIA, используемых в SoC на базе процессоров ARM. Добавлены средства для управления частотой GPU GK20A (Tegra K1);
    • В подсистему LED добавлен новый класс устройств, позволяющий использовать светодиоды в режиме "вспышки" (как в фотокамере);
    • Поддержка звуковых карт Studio Evolution SE6X;
    • Поддержка сетевых контроллеров Rockchip SoC RK3288 10/100/1000 Ethernet, HISILICON P04 Ethernet, TI Keystone NETCP Ethernet, Kvaser USBcan II CAN, PEAK PCAN-USB/USB Pro CAN-FD.
    • Поддержка SCSI-контроллеров Qualcomm UFS PHY;
    • Поддержка USB-контроллеров Rockchip USB2 PHY и NXP ISP1761;
    • В Video4Linux добавлена поддержка устройств захвата видео TI AM437x VPFE, декодеров Philips RC5/RC6 и USB-камер Touptek.
    • Поддержка плат Intel Quark X1000, процессоров MIPS, построенных на базе архитектуры MIPS32 R6, процессоров IBM s/390 z13, одноплатных ПК Artesyn MVME2500, Conexant Digicolor SoC, NVIDIA Tegra132 SoC, Freescale LS2085A SoC и Mediatek MT65xx & MT81xx ARMv8 SoC.

В создании Linux лидируют индивидуальные разработчики и Intel

Согласно отчету начала 2015 года Linux Foundation под заголовком Linux Kernel Development: «Разработка ядра Linux: насколько быстро она ведется, кто этим занимается, что они делают и кто это спонсирует», 19,4% всех разработок ядра Linux с сентября 2013 г., выполнили индивидуальные разработчики, но все остальное создано корпоративными программистами.

В первом ряду сотрудники Intel, за которыми числится 10,5% кода Linux. Процессорный гигант вытеснил с первого места Red Hat, чей показатель составил 8,4%. При этом количество участников разработки поднялось с 1266 при создании Linux 3.11 до 1458 при выпуске Linux 3.18.

За Intel идут Red Hat — 8,4%, Linaro — 5,6%, Samsung — 4,4%, IBM — 3,2% и SUSE — 3%. В целом, как констатирует отчет Linux Foundation, «больше 80% всех разработок ядра с очевидностью принадлежит программистам, которым платят за их работу»[21].

Упомянутый отчет охватывает завершенные работы по ядру Linux вплоть до версии 3.18 с упором на релизы с 3.11 по 3.18. Приглядевшись к компаниям, внесшим вклад в разработки, можно заметить, что в центре внимания сообщества разработчиков ядра остается x86 Linux. Однако присутствие в списке компаний Linaro и Samsung показывает, что платформы ARM и Android начинают отнимать заметную долю труда программистов.

В ядро внесли свой вклад в общей сложности больше 4 тыс. разработчиков от 200 компаний. Половина из них были вовлечены в эту работу впервые. Хотя эта цифра кажется большой (так оно и есть), Foundation также констатирует, что «основную долю работы выполняет сравнительно небольшое число людей. В каждом конкретном цикле разработок примерно треть участников внесла лишь по единственному патчу». С релиза 2.6.11 первый десяток ведущих разработчиков внес 36 664 изменения — 8,2% общего числа. Первая тридцатка разработчиков внесла чуть больше 17% всего кода.

Особое впечатление производит тот факт, что сообщество по разработке ядра Linux интегрирует предлагаемые патчи со средней скоростью 7,71 патча в час. Не в день, а именно в час. А среднее количество дней, затрачиваемых на создание релиза, уменьшилось с прошлогодних 70 дней до 66.

Со времени выпуска в апреле 2013 г. ядра Linux версии 3.10 в Linux добавилось много новых функций.

Среди них, в частности, можно упомянуть опцию O_TMPFILE для создания временных файлов; поддержку протокола NFS 4.2; поддержку виртуализации на архитектуре ARM64 с использованием Xen и KVM; технологию zswap сжатого swap-кэширования; поддержку использования GPU-движков рендеринга независимо от графического дисплея; поддержку блоковым уровнем ядра нескольких очередей запросов для ускорения операций ввода-вывода при использовании высокопроизводительных дисков; сетевой экран nftables, призванный со временем заменить iptables; EDF-планировщик режима реального времени с приоритетом задач, требующих более раннего завершения; множество усовершенствований в выполнении сетевых задач; основательную переработку подсистемы cgroups; поддержку «file sealing» (ограничение числа допустимых операций над файлом)* для безопасных коммуникаций между процессами; и многослойную файловую систему overlayfs, объединяющую другие файловые системы в одну. Ко всему этому конечно надо добавить сотни новых драйверов и тысячи исправлений.

Объем вклада неоплачиваемых разработчиков год за годом медленно падает. Он составлял 14,6% в 2012 г., 13,6% в 2013 г. и ныне 11,8%.

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

В то же время чуть больше половины новых участников разработки ядра Linux уже работают в какой-то компании. Особенно это относится к Intel, которая поставляет новых разработчиков Linux втрое больше остальных. Но и Samsung, IBM, Google и Huawai тоже помогают своим программистам влиться в ряды разработчиков ядра Linux.

Linux Foundation также выяснил, что контролем кода ядра Linux, как правило, занимаются в компаниях. Больше всего этой работой занимается Red Hat с долей 18,8%, за ней следует сам Linux Foundation с 14,8%, далее Intel — 12,2%, Linaro — 9,3%, Google — 5,8% и Samsung — 5,2%.

Во время выступления на конференции Linux Collaboration Summit в феврале 2015 года исполнительный директор Linux Foundation Джим Землин (Jim Zemlin) заявил, что Linux постоянно привлекает новых разработчиков и программистов. По словам Землина, с сентября 2013 года по февраль 2015-го более 96 тыс. изменений в ядро Linux внесли 4169 индивидуальных разработчиков, половина из которых сделали это впервые[22] .

2014: Linux 3.8

В новое ядро интегрирована более глубокая поддержка аппаратных возможностей компьютеров и оптимизирована работа драйверов. Среди отличительных особенностей Linux 3.8 указывается, что в нём больше не поддерживаются процессоры 386-DX/SX. В то же время добавлена поддержка горячего подключения/отключения базового CPU для архитектуры x86.

Серьезным видоизменениям подверглись файловые системы ядра. К примеру, в Ext4 добавлена поддержка inline-хранения данных; для Btrfs реализована поддержка быстрой замены диска; для XFS появился новый механизм обеспечения целостности хранимых в журнале метаданных, а также добавлена новая виртуальная файловая система `efivars`, предназначенная для доступа к загрузочным переменным UEFI. Состав ядра дополнила разработанная компанией Samsung файловая система F2FS, ориентированная для использования на флэш-памяти.

Обеспечена поддержка пространств имён для непривилегированных пользователей, которая в прошлых выпусках ядра была доступна только для пользователей с правами `root`. Существенной переработке подверглась система для учёта и ограничения потребления ядром памяти, расходуемой в процессе обеспечения работы заданного набора процессов, привязанных к группе контроля.

Ядро Linux 3.8 получило ускоренную обработку криптографических операций (например, ускорены шифры camellia,cast5, serpent, twofish, cast6) с использованием набора команд AVX на новых процессорах Intel. На аппаратном уровне в ядро осуществлена интеграция нового 2D-драйвера для платформ Tegra 2 и Tegra 3, а также существенно расширен список поддерживаемых звуковых устройств. Заявлена улучшенная производительность сетевых драйверов, которые используются для виртуализации, а также значительно расширен спектр поддерживаемых устройств.

Всего же в новую версию принято около 11 тыс. исправлений от более чем 1200 разработчиков, размер патча — 42 Мб (изменения затронули 11 701 файла, добавлено 577 870 строк кода, удалено 352 678 строк). Около 44% всех представленных в 3.8 изменений связаны с драйверами устройств, примерно 25% изменений имеют отношение к обновлению кода, специфичного для аппаратных архитектур (основная масса изменений касается платформ на основе ARM), 11% связано с сетевым стеком, 3% — с файловыми системами и 4% c внутренними подсистемами ядра.

2013: Linux 3.11

В августе 2013 года создатель Linux Линус Торвальдс (Linus Torvalds) объявил, что до релиз очередной версии 3.11 остались считанные недели. Версия выходит на рынок спустя 22 года после появления Linux в открытом доступе, чему Торвальдс посвятил отдельный пост в своем блоге[23] на Google+, иронизируя в связи с важной датой:

«Добрый день всем, кто использует Linux – Я делаю (бесплатную) операционную систему (это только хобби, несмотря на то, что она большая и профессиональная) для 486+ AT клонов и всё такое прочее. Несмотря на то, что это длится с 1991 года, она всё ещё не готова. Я буду рад любому фидбэку по поводу того, что вам нравится или не нравится в Linux 3.11-rc7», - написал Торвальдс.

В этом отрывке Торвальдс недвусмысленно провел параллель с первым постом, которым он сообщил миру о создании Linux в 1991 году, тогда он написал буквально следующее:

«Всем привет, кто использует minix – Я делаю (бесплатную) операционную систему (это только хобби, не такую большую и профессиональную как gnu) для 386(486) AT клонов», - такое сообщение появилось сети 26 августа 1991 года.

Версия ядра Linux 3.11 имеет кодовое имя Linux for Workgroups (Linux для рабочих групп). Интересно, что 20 лет назад Microsoft также выпускала операционную систему с подобным названием - Windows 3.11 for Workgroups. Одной из главных особенностей нового ядра должна стать поддержка графических чипов AMD Radeon.

2012: Microsoft подключается к разработке

3 апреля 2012 года организация Linux Foundation объявила о выходе очередной версии отчета Linux Kernel Development: How Fast It is Going, Who is Doing It, What They are Doing and Who is Sponsoring It. Он выходит приблизительно на ежегодной основе и дает представление о ходе работ по разработке ядра Linux, в частности, с момента выхода предыдущей версии в декабре 2010 года, начиная с релиза 2.6.36 до 3.2.

Пожалуй, самым неожиданным (или наоборот, предсказуемым) событием стало непосредственное участие Microsoft в работах над созданием ядра Linux. Вчерашний непримиримый враг свободно распространяемого ПО, некогда называвший Linux «раковой опухолью», впервые пошел на такой шаг. Более того, в настоящий момент корпорация занимает 17 место в списке компаний, оказавших наибольшую поддержку разработке Linux. На ум приходит известная пословица: не можешь победить врага – возглавь его.

В двадцатку крупнейших контрибуторов ядра Linux вошла и российская компания Parallels. В течение последнего года ее специалисты работали над включением в ядро исходного кода контейнеров серверной виртуализации. В том или ином виде они используются в большинстве «мега-облаков» уровня Google, Facebook и др. По сравнению с гипервизорами (виртуальными машинами) контейнеры дают большую плотность виртуальных сред на физический сервер и обеспечивают почти нативное быстродействие запущенных в них приложений.

Первую десятку оказавших поддержку компаний составляют Red Hat, Intel, Novell, IBM, Texas Instruments, Broadcom, Nokia, Samsung, Oracle и Google (в порядке убывания мест в рейтинге). В приведенном списке особое внимание на себя обращает Nokia – сторонник мобильной платформы Microsoft Windows Phone. Финский производитель телефонов занимает даже более высокое седьмое место, чем известные апологеты Linux – Oracle и Google. Все это позволяет с уверенностью говорить, что Linux приобрела статус индустриальной ОС в корпоративном и мобильном сегменте. Достаточно вспомнить Android, KVM, Xen, облачные вычисления.

С момента начала создания подобного рода отчетов в 2005 году в создании Linux приняли участие около 800 различных компаний и свыше 7800 разработчиков. После выхода последнего отчета – более 1000 разработчиков из примерно 200 компаний. В то же время три четверти всех работ выполнили специалисты, чей труд оплачивался на коммерческой основе.

1996: Появление талисмана в виде пингвина

В 1996 году в результате соревнования выбран официальный талисман Linux-ядра - пингвин Tux. Имя Tux расшифровывается как Torvalds UniX. Нарисовал пингвина Ларри Ивинг (Larry Ewing) из Института научных вычислений университета А&М.

1991: Линус Торвальдс сообщает о завершении прототипа новой ОС Linux

25 августа 1991 г. 21-летний студент Хельсинкского университета Линус Торвальдс (Linus Torvalds) в новостной usenet-группе comp.os.minix сообщил о том, что завершил создание рабочего прототипа новой операционной системы Linux, для которой отмечено завершение портировния bash 1.08 и gcc 1.40. На работу ушло пять месяцев. С этого дня принято отсчитывать историю развития самой известной ОС с открытым кодом.

Линус Торвальдс

Первый публичный выпуск ядра Linux представлен 17 сентября 1991 года. Ядро 0.0.1 имело размер 62 Кб в сжатом виде и содержало около 10 тыс. строк исходного кода.

Ядро Linux создано под впечатлением от операционной системы MINIX, которая не устраивала Линуса ограниченной лицензией. Впоследствии, когда Linux стал известным проектом, недоброжелатели пытались обвинить Линуса в прямом копировании кода некоторых подсистем MINIX. Нападение отразил Эндрю Таненбаум, автор MINIX - он поручил одному из студентов провести детальное сравнение кода Minix и первых публичных версий Linux. Результаты исследования показали наличие четырёх несущественных совпадений блоков кода, обусловленных требованиями POSIX и ANSI C.

В начале Линус думал назвать ядро Freax, от слов «free», «freak» и X (Unix). Но имя «Linux» ядро получило при участии Ари Лемке (Ari Lemmke), который по просьбе Линуса выложил ядро на FTP-сервер университета, назвав директорию с архивом не «freax», как просил Торвальдс, а «linux».

Предприимчивый делец Вильям Делло Крок (William Della Croce) сумел зарегистрировать торговую марку Linux и хотел со временем собирать отчисления, но позднее передумал и передал все права на торговую марку Линусу.

Примечания

  1. Ядру Linux исполнилось 25 лет
  2. http://www.cnews.ru/news/top/index.shtml?2008/04/07/295779
  3. http://www.cnews.ru/news/top/index.shtml?2008/10/27/324781
  4. Ubuntu доигралась: лидерство среди Linux утеряно
  5. Linux Foundation finds enterprise Linux growing at Windows' expense
  6. Локальная уязвимость в ядре Linux, позволяющая получить root-доступ
  7. Релиз ядра Linux 4.13
  8. Вышло «историческое» обновление ядра Linux
  9. В новый Linux попала ошибка, «способная убить все ядро»
  10. Релиз ядра Linux 4.8
  11. Релиз ядра Linux 4.7
  12. АНБ считает пользователей Linux «экстремистами»
  13. Релиз ядра Linux 4.5
  14. Релиз ядра Linux 4.4
  15. You Can Break Into a Linux System by Pressing Backspace 28 Times. Here’s How to Fix It
  16. Ещё никогда не было так просто взломать Linux
  17. Релиз ядра Linux 4.3
  18. Релиз ядра Linux 4.2
  19. Предварительный релиз ядра Linux 4.2-RC1 стал рекордным по количеству новых строк
  20. Linux 4.1 — новый LTS-релиз ядра свободной операционной системы
  21. Кто сегодня пишет Linux? Капиталисты
  22. 7 Linux Facts That Will Surprise You
  23. https://plus.google.com/+LinusTorvalds/posts

Ссылки