28 сентября

Что нового в ядре Linux

Настройка LinuxПрограммированиеСистемное программированиеRustРазработка под Linux
Перевод
Автор оригинала: Steven Vaughan-Nichols

image


После всех этих лет, разработчики ядра Linux продолжают внедрять новшества. Новые версии будут быстрее и стабильнее.


Linux работает практически на всем: все 500 из 500 самых быстрых суперкомпьютеров мира; большинство общедоступных облаков, даже Microsoft Azure; и 74 процента смартфонов. Действительно, благодаря Android, Linux является самой популярной операционной системой для конечных пользователей, чуть обойдя Windows на 4 процента (39% против 35%).


Итак, что же будет дальше с Linux? После освещения Linux на протяжении всех 29 лет его истории и зная практически любого, кто хоть как-то связан с разработкой Linux, включая Линуса Торвальдса, я думаю, что у меня есть ответ на этот вопрос.


Недавние улучшения ядра Linux


Самое большое недавнее улучшение – и ничто другое даже близко не стоит – это то, что Linux теперь станет платформой для виртуальных частных сетей (VPN). Хотя Linux, во многом благодаря OpenVPN, долгое время был важным игроком в сфере VPN, добавление WireGuard, революционного подхода к VPN, меняет всё.


Торвальдсу очень, очень нравится WireGuard, вот что он писал: «Могу ли я еще раз заявить о своей любви к нему и надеяться на то, что в скором времени он будет объединен с ядром?». Чего хочет Линус, то он и получает. WireGuard был объединен с ядром Linux 5.6 в марте 2020 года.


Почему он так важен? WireGuard обладает редким качеством в надежности программы: его код чист и прост. Кроме того, он поддерживает передовые технологии криптографии: Noise Protocol Framework, Curve25519, ChaCha20, Poly1305, BLAKE2, SipHash24 и HKDF.


Что еще более важно для пользователей, так это то, что он намного быстрее своих конкурентов. Эталонные тесты показали, что WireGuard быстрее OpenVPN более чем в два раза. Кроме того, он кроссплатформенный, так что вы можете запустить его на Linux сервере, а ваши клиенты могут быть на Windows, macOS, BSD, iOS, Android, и конечно же на Linux.


Ядро Linux 5.6 также может похвастаться и другими значительными улучшениями. Особо выделим то, что для 32-х разрядных систем, Linux решил свою проблему «конца времени». Видите ли, во вторник 19 января 2038 года в 03:14:08 по Гринвичу (GMT, также известное как Всемирное координированное время) наступит конец света.


Случится то, что значение времени в 32-х разрядных операционных системах на основе UNIX, таких, как Linux и старых версий macOS, исчерпает 32-х битные числа. После этого, отсчёт времени пойдет в обратную сторону с отрицательными числами. А Вы думали, что ошибка 2000 года была страшной!


Всё началось с того, что UNIX, отец Linux, датирует начало времени в секундах от 1 января 1970 года 00:00:00 GMT. Проблема была в том, что UNIX начиналась как 32-х разрядная операционная система, которая хранила время в виде одного 32-х разрядного целого числа со знаком. Это много секунд, но этого недостаточно. Исправление позволяет даже 32-х разрядному Linux использовать 64-х разрядные числа. Конечно это только задерживает проблему до воскресенья 4 декабря 29227702659 года 5:30:08 GMT, но меня это вполне устраивает.


Android и Linux синхронизируются


Все кто обращают внимание на операционные системы знают, что Android это специализированный дистрибутив Linux для мобильных устройств. Но возможно мало кто знает, что на протяжении многих лет, Android был форком Linux. Даже сейчас, спустя 10 лет после того, как разработчики Android и ядра Linux cнова начали работать вместе и хорошо взаимодействовать друг с другом, они не совсем идут «нога в ногу». Но это меняется.


Джонатан Корбет, разработчик ядра Linux и писатель, сказал в своем ежегодном отчете по ядру Linux следующее: «последнее стабильное ядро находится на пути к тому, чтобы стать частью общего образа системы Android, а затем они будут отслеживать стабильные обновления. Это будет означать, что они будут гораздо ближе к современному уровню техники».


Для Вас это может показаться неважным, но это важно, и вот почему. Сегодня прежде чем Linux окажется на этом новом, стильном Android-телефоне, который у Вас в руках, он проходит три отдельных, трудоемких этапа. Сначала Google берет ядро Linux с долгосрочной поддержкой (LTS) и добавляет в него специфичный для Android код, для того что бы сделать общее ядро Android. Затем Google отправляет его производителю систем на кристалле (SoC), например, Qualcomm. OEM-производитель адаптирует ядро под конкретную SoC и чипсет. Наконец адаптированное общее ядро Android (SoC ядро), передается производителю смартфона. Производитель уже добавляет свои доморощенные, проприетарные драйверы для дисплея, камеры и Wi-Fi/сотового модема. В результате получается ядро устройства – это то, что у Вас на телефоне.


Попутно каждый телефон вбирает в себя, буквально, миллионы строк кода ядра, не являющиеся частью стандартного дистрибутива. Во многом это драйверы устройств, потому что, каждый смартфон или планшет на Android поставляется со своим набором драйверов. Вот почему так сложно сделать по-настоящему универсальный дистрибутив для Android-смартфона, такой как операционная система /e/. Каков результат? В этом стильном, новом телефоне, который у Вас в кармане, установлено ядро Linux, которому уже 2 года. Благодаря этим древним ядрам, LTS-ядра Linux теперь поставляются с шестилетней поддержкой.


Google и поставщики не больше стремятся, чем Вы бы хотели, перенести исправления безопасности на пыльные, старые ядра. Поэтому Google, совместно с сообществом разработчиков, пытается привести поставляемые версии Android, в соответствие с основными текущими ядрами Linux.


Конечно это займет некоторое время, но пара вечных проблем Android – отказ разработчиков Linux поддерживать стабильный двоичный интерфейс приложения (ABI) и столь же твердый отказ производителей оборудования открыть исходные коды своих драйверов – остаются с нами и по сей день. ABI определяет как программа взаимодействует с оборудованием, когда Вы не знаете как работать с ним на уровне кода приложения. Разработчики открытого исходного кода хотят работать на уровне API, в то время как производители оборудования довольно часто хотят оставить свои устройства в виде таинственного черного ящика, доступ к которому возможен только через ABI. Несмотря на это мы наконец-то приблизились к ускорению интеграции Linux в производственный конвейер Android, а это означает, что Android будет более безопасным из коробки.


eBPF: Межсетевой экран, который стал отладчиком Linux


Корбет также рассказал о росте интереса к расширенному фильтру пакетов Беркли (eBPF), используемого как мощный инструмент отладки ядра Linux. Вы спросите, как такое могло произойти? Смотрите.


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


Вы можете запустить eBPF в ответ на действия в tracepoints, kprobes и perf-событиях. Это позволяет Вам отлаживать проблемы ядра и выполнять анализ производительности. Более того, поскольку eBPF программы могут иметь доступ к структурам данных ядра, Вы можете писать, добавлять и тестировать новый отладочный код без перекомпиляции ядра. Для занятых разработчиков это большая экономия времени. Теперь системные администраторы и программисты, не входящие в круг тех, кто работает непосредственно с ядром Linux, начинают использовать возможности eBPF.


Rust становится вторым языком программирования Linux


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


На виртуальной конференции «2020 Linux Plumbers Conference», где ведущие разработчики ядра Linux обсуждают будущее Linux, говорилось о введении Rust в качестве второго языка ядра. Rust – это системный язык программирования высокого уровня, спонсируемый Mozilla, являющейся материнской компанией Firefox. Верите Вы или нет, но эта идея получает широкую поддержку. Хотя сам Торвальдс уверен в том, что Linux не будет написан на Rust. Однако ведь цель не в этом. Никто не собирается переписывать на Rust, 25 миллионов строк ядра, написанных на Си.


Использование Rust, языка системного уровня, внутри ядра, было предложено Джошем Триплеттом, ведущим специалистом по языку Rust, и Ником Десолнерсом, инженером Google. Почему Rust? Потому что он гораздо безопаснее, чем Си, особенно когда дело доходит до работы с памятью.


Как пояснил Райан Левик, главный защитник облачных разработчиков Microsoft, «Rust полностью безопасен для памяти». Если принять во внимание, что примерно две трети проблем безопасности могут быть вызваны плохой работой с памятью, то это довольно серьезное улучшение. Кроме того, Райан Левик говорит, что «Rust предотвращает эти проблемы, как правило, без добавления каких-либо накладных расходов во время выполнения».


Торвальдс видит в этом свои преимущества. Хотя он поощряет медленный, но неуклонный подход к внедрению Rust в Linux, он также сказал, что использование интерфейсов Rust для драйверов и других программ, не связанных с ядром, имеет смысл: «Я убежден что это произойдет. Это может быть и не Rust, но может случиться так, что у нас будут разные модели для написания подобных вещей, и Си не будет единственной».


Пока разработчики ядра медленно двигаются вперед, другие разработчики дистрибутивов Linux, не теряя времени, приняли Rust. Amazon Web Services (AWS) объявила, что ее только что выпущенный Bottlerocket Linux для контейнеров в основном написан на Rust.


Подобно Microsoft и Firefox, если назвать еще две компании, включающие Rust в свои планы разработки, AWS нравится Rust за его функции защиты памяти. Самарта Чандрашекар, менеджер по продукту AWS, сказала, что это «помогает обеспечить безопасность потоков и предотвратить ошибки, связанные с памятью, например, переполнение буфера, которое может привести к уязвимостям в безопасности».


Забегая вперед становится ясно, что Rust скоро будет играть важную роль как в разработке ядра Linux, так и в разработке дистрибутивов. Кто бы мог подумать, что Си будет хоть немного вытеснен в этой области программирования?


Ядро Linux 6.0 и выше


К концу этого года появится Linux 6.0. Но не стоит сильно обращать внимание на это число. В свое время, Торвальдс сказал о выпуске 5.0 следующее: «Я хотел бы отметить (ещё раз), что мы не делаем функциональные релизы, и что 5.0 не означает ничего большего, чем то, что числа 4.х стали такими большими, что у меня не хватает пальцев на руках и ногах, чтобы сосчитать их».


Забегая вперед можно сказать, что Linux версии 6.0, как и большинство предыдущих релизов, будет состоять из новых и улучшенных драйверов оборудования. Однако все заметят одно перспективное изменение: Linux наконец-то будет поддерживать набор инструкций AMD и Intel FSGSBASE. Хорошо, если вы и вправду не заядлый разработчик, то я только что Вас потерял. В общем, если коротко, то Ваша машина будет работать гораздо быстрее под управлением Linux, поддерживающим этот набор команд.


Вы можете резонно спросить меня, насколько быстрее? Я отвечу, ранние тесты производительности, проводимые на бета-версии ядра Linux 5.9, показали значительное улучшение ввода/вывода. С Redis, хранилищем структур данных в памяти, которое часто используется как база данных, прирост производительности составил более 50 процентов. Что не так уж и плохо!


Итак, все сводится к тому, что Linux продолжает улучшать свою скорость и безопасность. И как это ни удивительно, Linux продолжает расширять свои рынки благодаря недавно интегрированной WireGuard VPN.


Кто знает, возможно, 2021 год станет годом рабочего стола Linux? В конце концов, 2020 год был годом Linux на рабочем столе Windows.

Теги:linuxlinux kernelrust
Хабы: Настройка Linux Программирование Системное программирование Rust Разработка под Linux
+57
27k 62
Комментарии 58
Лучшие публикации за сутки

Минуточку внимания

Разместить