Привет, Хабр! На связи Олег Сивченко @OlegSivchenko редактор направления «Компьютерная литература».
Наша первая статья в корпоративном блоге вызвала ваш огромный интерес (+122) и оживлённое обсуждение с участием 30 пользователей (считая нас). На наш взгляд, вас заинтересовал вопрос авторских черновиков и доработки их до полноценных рукописей. Развивая тему, связанную со свободным ПО, хочу рассказать вам сразу о трёх наших знаковых книгах, посвящённых операционной системе Linux. Эти книги написал легендарный харьковский программист Олег Иванович Цилюрик (1951 — 2024), к сожалению, не дождавшийся выхода в свет 2-го издания своей книги «Linux и Go. Эффективное низкоуровневое программирование» (оглавление). Opus Magnum, принадлежащий его перу и вышедший у нас в марте 2023 года, называется «Расширения ядра Linux. Драйверы и модули» (оглавление). Кроме того, мы выпустили экзотический и по-своему незаменимый труд Олега Ивановича, который называется «Сети Linux. Модели и приложения» (оглавление), посвящённый настройке, эксплуатации и внутренней организации оверлейной сети Yggdrasil (октябрь 2023). Эта книга очень хорошо вписалась по духу и уровню в разрабатываемую нишу кибербезопасности, и, судя по отзывам на маркетплейсах, незаменима в нашу эпоху не столь свободного Интернета. Наконец, Олег Иванович самоотверженно справился с переводом одной книги O’Reilly —«Изучаем eBPF: программирование ядра Linux для улучшения безопасности, сетевых функций и наблюдаемости», вышедшей у нас в июле 2024 года. Давайте расскажу о двух из этих книг немного подробнее.
Погоня за мустангом
Ценителям низкоуровневного и системного программирования наверняка известна «каштановая» серия O’Reilly, обложки которой выдержаны в винтажной эстетике американского Дикого Запада. Эти книги, несмотря на свою сложность и узкоспециализированность, долгое время оставались приоритетной целью для российских издателей, так как материал этих книг не устаревает годами. Особое место в этой серии занимает «Linux Device Drivers 3rd Edition» Джонатана Корбета, Алессандро Рубини и их соавторов, вышедшая в 2006 году.
В конце 2021 — начале 2022 года я анализировал целесообразность перевода этого классического труда и искал зацепки, которые указывали бы на наличие официального русского перевода или планов на обновление этого издания (Корбет продолжает активно писать статьи на сайте lwn.net). Так я и набрёл на рукопись Олега Ивановича «Практикум: модули ядра Linux», до сих пор выложенную здесь. Не прошло и недели, как мы с ним списались, законтачились и перешли к сути.
Авторы, желающие с нами работать, присылают для предварительного обсуждения три файла:
1) Авторский раздел. Это рассказ о себе, своих технических интересах, проектах, планах, о том, что вы хотите написать, как видите вашу целевую аудиторию и как готовы продвигать и развивать вашу потенциальную книгу
2) План-проспект. В сущности, это максимально подробное (для ориентировочного) оглавление будущей книги с примерной разбивкой на страницы, позволяющее нам оценит масштаб той рукописи, с которой придётся работать редактору, а также понять, насколько детально сам автор видит ту книгу, за которую берётся.
3) Пример авторского текста. Чтобы мы представляли, насколько легко, профессионально и красиво автор излагает мысли, на какой текст мы можем рассчитывать.
Третий пункт при знакомстве с Олегом Ивановичем превратился в формальность — ведь он мог показать целые книги. При этом, рассказывая о себе, он не преминул отметить, что ранее работал с питерскими издательствами и был соавтором книги по QNX/UNIX, выходившей в издательстве «Символ-Плюс» в 2006 году. Вот какой картинкой он проиллюстрировал свой литературный опыт, присовокупив у ней: «Научный редактор переводной компьютерной литературы издательства Символ-Плюс, Спб, на протяжении около 6 лет».

Книга первая. Linux и Go
Олег Иванович оказался остроумным, блестяще эрудированным и по-хорошему напористым собеседником, легко распознавшим глубину моего интереса к его рукописи по модулям ядра. Но он быстро перевёл разговор в очень интересовавшую его тогда тему переписывания некоторых функций и системных вызовов ядра с С на Golang, акцентируя моё внимание на том, что сам Брайан Керниган участвовал в подготовке широко известной книги «Язык программирования Go» в соавторстве с Донованом. Мы немного поговорили о том, не включить ли в подобную книгу базовый курс по Go, а также не затронуть ли попытки внедрения Rust в ядро Linux, но Олег Иванович гнул свою линию и сформулировал тему книги в плане-проспекте так:
«Использовать многопроцессорные (многоядерные) архитектуры «в лоб» под свои проекты, за исключением чисто серверных приложений массового доступа — отнюдь не простая задача. Она может решаться при разработке проекта на языке Go, техника чего и излагается на экспериментальном материале в книге. Автор работает в этой тематике больше 15 лет.
Практическая значимость книги
Освоить язык Go.
Проектировать параллельно выполняющиеся приложения и проекты.
Добиться экстремально высокой вычислительной продуктивности.
Преимущества (скорее, особенности)
Детальное описание инструментария Go в Linux для быстрого и лёгкого развёртывания для работ;
Акцент на параллельном и многопроцессорном использовании, чему в остальных изданиях уделяется внимание только как одному из проходных аспектов.

Основные темы, рассмотренные в книге:
Настройка и развёртывание экосистемы Go
Синтаксис Go
Интеграция С и Go
Многопроцессорная обработка
Стандарт POSIX
Элементы функционального программирования
Особенно вас заинтересует подборка примеров, которой Олег Иванович посвятил 9 главу, где он рассматривает, в частности, вычисление π, вычисления неограниченно высокой точности и расчёт параметров выпуклых многоугольников в 2D. Также отмечу главу 13, в которой дано скоростное сравнение C и Golang на примере известных алгоритмов: числа Фибоначчи, пузырьковая сортировка, ханойская башня и решето Эратосфена. То внимание, которое Олег Иванович уделял параллельным и многопроцессорным вычислениям, даже побудило меня обосновать (и мы ведь издали!) актуальность перевода другой эпичной опенсорсной книги «Параллельное программирование — так ли это сложно?» уважаемого Пола Маккини из города Бивертон, штат Орегон, с которым мы также впоследствии списались лично. Однако, это тема для отдельного поста.
Олег Иванович ссылался на то, что ему нужно подучить Rust, чтобы, возможно, рассмотреть примеры Rust в сравнении с Golang в каком-то из следующих изданий книги… да, не сложилось, но всем бы нам такой горизонт планирования в 70+.
Книга вторая. Расширения ядра Linux

Что касается книги «Расширения ядра Linux. Драйверы и модули» — Олег Иванович по достоинству оценил заданную мной планку «Мы с вами пишем LDD4 или даже лучше». Получилось 688 страниц (по версии ядра 5.15). Олег Иванович не скупился на подробные приложения. Более ранняя основа этой книги, уходящая корнями ещё в 2003 год, создавалась практически параллельно с Корбетом и впервые была оформлена в качестве корпоративного курса повышения квалификации для компании GlobalLogic. Наиболее ценная часть этой книги, на мой взгляд – глава 5, «Внутренние API ядра», выносящая работу Цилюрика на один уровень с «Linux API» Майкла Керриска. Олег Иванович детально и последовательно разбирает системные вызовы, мьютексы, блокировки, вытеснение, прерывания, синхронизацию, управление временем. Не менее уникальна глава 6, в которой Олег Иванович разобрал работу с периферийными устройствами, описал взаимодействие с аппаратными портами, а также поделился опытом об управлении через шины PCI и USB. Внешние интерфейсы ядра рассмотрены в главе 4.
Олег Иванович придирчиво просматривал каждую главу уже на этапе вёрстки, чтобы убедиться, что мы не перепутали код и дамп, вручную выделял жирным шрифтом нужные строки, дебажил какие-то старые включения, которые в версии ядра 5+ начинали необъяснимо отказывать. Всё это время мы с ним были на связи в ТГ, то и дело сваливаясь в обсуждение неуставных тем. Выяснилось, что Олег Иванович поимённо помнил ключевых молодчиков из команды Питера Блада. Также он рассказал мне о творчестве и гражданской позиции немыслимо талантливого и жуткого Михаила Елизарова, а ещё — о разностной и аналитической машинах Чарльза Бэббиджа, прототип одной из которых украсил обложку этой книги.
Преждевременное заключение
На последнем этапе нашего общения он просил меня найти человека, который мог бы продолжить вести его форум о Linux и Unix, главная страница которого сейчас выглядит так:

У меня лежит ещё один его черновик, о C++ и стандартной библиотеке шаблонов (STL). Мы откладывали этот проект, так как Олег Иванович хотел для начала закончить имеющиеся дела и подучить C++23.
Человек не может успеть всего. Мы с ним успели немало, но он останется для меня по-античному могучим стариком-философом, предел которого не просматривается даже в телескоп.
Plesser
Я общался с Олегом в начале 2000-х, мы тогда знакомились с qnx....