Дмитрий Монахов: как найти свой первый баг в Linux

За время трудовой вахты на полях mainstream-kernel Дмитрий Монахов произвел как минимум 170 крупных коммитов в ядро Linux, связанных с логикой работы Ext4, XFS и других файловых систем. Про плюсы и минусы Linux, перспективы развития этой операционной системы и то, как новичку вписаться в сферу разработки свободного ПО, профессиональный кернел-хакер Linux из Москвы рассказал в своем интервью.

В качестве бонуса к основной теме нашего разговора мы попробуем также понять, зачем известных разработчиков в ФСБ заставляют писать на границе объяснительные насчет того, что они делали за границей.

О себе  — Мне 32 года, в отрасли системного программирования — почти 10 лет. Сейчас работаю в московском офисе компании Parallels.

Центральная область моей деятельности и интересов — ядро Linux. В основном ковыряю файловые системы, блочный уровень и «облачные» хранилища. Иногда для души занимаюсь совсем странными вещами, типа программирования под Android (когда потребовалось добавить поддержку ZRTP в Gtalk).

операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKMLДмитрий Монахов (Dmitry Monakhov), Lunux kernel developer, Parallels

Рабочее место

— ThinkPad, потому что у него есть trackpoint. Очень удобно, когда все пальцы всегда на клавиатуре. Обычная мышка или touchpad — это зло, ведь природа наделила нас пятью пальцами на каждой руке, нужно использовать их эффективно.Window manager: максимально адаптирован под консоль.

Почтовый клиент

— 99% коммуникации с людьми происходит через email, на который я ежедневно получаю порядка 500 писем. Поэтому использую emacs как удобную и расширяемую оболочку, а также notmuchmail.org — локальную базу данных для писем. При попадании в последнюю письмо индексируется, и на него можно навешивать любые теги (как в gmail, только лучше). Такая система требует начальных усилий в настройке, но впоследствии позволяет удобно масштабировать потоки входящей почты.

Языки и инструменты

— В начале карьеры хотел стать программистом C++. Тогда казалось, что системное программирование — это что-то слишком низкоуровневое и статичное. Для этого проштудировал уйму книг. Помню, как после прочтения «Modern C++ Design» Александреску приснилось, что я придумал способ, как описать весь мир с помощью templates. Сейчас «на плюсах» я практически не пишу, но знания не пропали.

Иногда приходится разбираться с «юзерспейсом» и мне нет разницы, на чем он написан — на c++ или java. В качестве редактора, как я уже говорил, у меня emacs. Для скриптов пользуюсь shell, но часто также выбираю python.

— То, что вы выбрали именно поддержку Linux, а не стали, например, коммитером в FreeBSD — это случайность или осознанный выбор?

— Для меня всё началось в институте, а тогда бытовало мнение что Linux и FreeBSD — это круто, но FreeBSD — это для серверов, а если хочешь музыку послушать или фильм посмотреть, то, конечно, удобнее Linux. Уже значительно позже, сталкиваясь с дизайном журналирования файловой системы (ФС) для FreeBSD, я понял, что Маршал Кирк МакКузик — гений. Правда, его гениальные решения слишком сложны для реальной жизни.

Про плюсы и минусы Linux  — Глядя на систему изнутри, в чём видите главные преимущества и недостатки современного Linux?

Сначала про преимущества.

Открытость первого типа. Любой может с лёгкостью стать частью этого сообщества. Открытость второго рода. Вся ваша работа будет видна как на ладони. Любой работодатель видит ваш вклад, опыт, возможности и предпочтения. Такой работодатель знает, что если молодому программисту интересно заниматься чем-то на волонтерских основаниях, то он, вероятно, будет не хуже делать сходную работу, получая при этом зарплату. Открытость третьего рода. Отсутствие стабильного kernel-API. У Windows есть стабильный API и закладки на обратную совместимость. В Linux интерфейсы время от времени изменяются, что с некоторыми шараханьями в итоге приводит к наиболее удачному решению — проверенному и выстраданному реальной жизнью. Что до недостатков, выделю два момента.

Чрезвычайно важны коммуникационные навыки, то есть умение договариваться. Неважно, насколько ты крутой технарь, но если ты не можешь убедить других в том, что какая-то крупная фитча действительно нужна — её никогда не примут. В этом случае будешь подобно Балбир Ситху биться головой о стену, в худшем — можно кончить, как Ханс Райзер. Документация: отсутствие стабильного API делает невозможным существование печатной документации в классическом её понимании — а-ля WinAPI — вместо этого приходится постоянно смотреть исходники. Это не хорошо и не плохо, к такому стилю обучения и работы надо привыкнуть. Советы новичкам  — Нас читает много начинающих программистов. Что бы вы посоветовали тем из них, кто хочет сделать карьеру в Open Source и Linux?

— В OpenSource нужна общая живость ума и желание постоянно усваивать новую информацию. Если этого нет, то даже будучи в хорошей форме, есть вероятность профессионально «сдуться» через 3–5 лет. Для работы в рамках международного комьюнити необходима способность и желание активно учиться у коллег. Также важно умение договариваться с LKML. Это очень специфично для успешной карьеры в mainstream-kernel. Отсутствие этого — не катастрофа для любой крупной компании типа Google, но чтобы туда попасть, сначала нужно показать себя как признанного специалиста. Простой способ сделать это — взаимодействуя с LKML. Проводя аналогию, одни люди сдают сложные экзамены по всей строгости, тогда как другие получают такой же зачёт «автоматом». В этом преимущество кандидатов с богатым OpenSource-бэкграундом при штурме именитых коммерческих компаний.

Что касается умения «решать вопросы» в рамках «роевого обсуждения» LKML, это ещё один жизненно необходимый навык наподобие тайм-менеджмента или знания иностранного языка.

— Можете поведать более конкретный алгоритм для новичка, начинающего погружение в linux-dev?

— Джеймс Боттомли (техдиректор по серверной виртуализации компании Parallels, один из доверенных лиц основателя Linux Линуса Торвальдса.) специально читал лекцию по этому вопросу у нас в офисе. Существуют очень простые принципы, которые стоит соблюдать в этой открытой среде.

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

Перед отсылкой патча тщательно проверь его, никогда не спеши: ядро компилируется без ошибок + ./checkpatch.pl my_patch.patch. Обращай внимание на комментарии. Будь готов делать запрашиваемые изменения. Если маинтейнер не взял твой патч, значит по каким-то причинам он кажется не убедительным. Пойми в чём дело и в следующей версии патча укажи в change-log, что изменения внесены в ответ на замечания «имярека». Как и в жизни, мнение некоторых VIP-персон более весомо, чем мнение других. К примеру, если Ал Виро и Эндрю Мортон что-то попросили исправить, их мнение не получится игнорировать — проще сделать так, как они просят. В обсуждении не переходить на личности и оскорбления. Никогда! В жизни и так слишком много невротиков. Публичное оскорбление в чужой адрес не сделает твой код лучше, а нашу жизнь — проще. Не ленись, проявляй терпение (это дополнение к правилу 2). Некоторые фитчи требуют многих версий патчей и бесконечных инкрементальных улучшений. Иногда это число обновлений значительно больше десяти. Как найти свой первый баг в Linux?

#git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git. Компилируйте ядро со всеми включенными модулями. Пишите скрипт, который случайным образом будет загружать и выгружать эти модули. Запускаете скрипт (для надёжности несколько в параллель) и ждете OOPS-а. Разбираетесь с падением. Обычно такие ошибки довольно просты (например, не проверяется код ошибки или не удаляются ресурсы) — это именно то, с чего максимально комфортно сделать свой первый шаг в мир Linux абсолютному большинству новичков.  — Молодые программеры всерьёз интересуются Linux, но многих пугает и останавливает то, что системное программирование под эту ОС — это не самое коммерчески востребованное направление в софтдеве. Легко ли найти работу такому программисту в наших краях?

— Заниматься OpenSource-программированием выгодно по причине открытости второго рода, о котором я уже упомянул. Когда молодой специалист виден для потенциального работодателя на уровне кода, ему не нужно самому искать работу. Будьте уверены, работодатель сам пришлёт предложение, если он делает крутые вещи.

К сожалению, у нас нет собственной Кремниевой долины. Да, в России не так много компаний, где требуются специалисты по linux-kernel. Тем не менее, и у нас наблюдается дефицит специалистов. Проблема стоит настолько остро, что ведущие специалисты из Parallels читают лекции на физтехе, таким образом воспитывая недостающие для себя кадры. Кроме того, можно искать гранты или зарабатывать примерно так.

К тому же следует учесть, что критерий «популярно» — не всегда значит «хорошо» в долгосрочном плане. Для примера, веб-программирование или андроид-программирование сейчас чрезвычайно популярны и востребованы, но это не значит, что тебе будут платить за это огромные деньги. В Индии и Китае достаточно народу, чтобы выполнить эту относительно простую работу за минимальную плату. Более того, массовое обучение и подготовка новых программистов — государственная стратегия в этих странах, поэтому самое интересное отечественных девелоперов ждёт ещё впереди. В этом плане сложность вхождения в данную специализацию — отчасти эффективная защита твоего актива от демпинга азиатов с его последующей девальвацией.

И, наконец, как бы странно это ни звучало из моих уст, нужно хорошо учиться. Фундаментальные знания по физике и математике ещё ни кому не помешали. Человек, который может представить волновую функцию электрона в твёрдом теле, будет также способен придумать иерархию локов в сложной системе (будь-то linux kernel или user-space приложение).

Три урока Дмитрия Монахова Про кашу в голове

— Я начинал свою карьеру как QA-инженер. И однажды заметил, что счетчик slab-объектов не сходится. Решил разобраться, в чём дело, для чего стал смотреть в код (тогда для меня это было очень трудоёмкое занятие). В результате понял, что на одном из неочевидных путей освобождения объекта его счётчик не обновляется. Забил баг. За memory-management тогда отвечал Андрей Савочкин. Он попытался прочитать, что я там понаписал (вся переписка велась на английском, с которым у меня тогда были большие проблемы), в итоге ничего не понял и попросил объяснить лично. А дальше я в течении получаса по кругу объяснял Андрею и Кириллу Коротаеву мою мысль, при этом путая термины, нарушая логику. После чего Андрей констатировал, что у «этого парня в голове каша». Я же, уверенный в собственной правоте, вернулся на своё место, громко ругая несправедливый мир вокруг.

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

«Нода больше не нужна»

— Как-то получил задачу покопаться с багом на кастомерской ноде. Нода была боевая, но я об этом в пылу как-то забыл. Зашел туда по ssh удалённо и стал её ронять, чтобы насобирать stack-trace-ов. Кастомер забеспокоился и связался с нашим саппортом, который так очень интеллигентно спрашивает у меня, не делаю ли я сейчас случайно что-то на той ноде, а то там какие-то странные падения прямо одно за другим. На что я, уже получив все нужные дампы, гордо отвечаю: «Уже нет, нода больше не нужна!»

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

«Сломанные барьеры»

— Несколько лет назад Крис Мэйсон (экс-директор отдела разработки ядра Linux в Oracle, основатель Btrfs.) прислал своё знаменитое письмо, в котором объяснял, что барьеры в большинстве существующих файловых систем «сломаны», приложив простенький тест. Этот тест оказался настолько суровым, что fsck, запущенный после него, нагенерил миллионы ошибок и, не выдержав, «падал» с segfault .

Десятки тысяч любопытных, запустившие демо-тест, ещё долго материли эту на редкость разрушительную и убедительную демонстрацию очень тонкой академической концепции. Если у нас всё было настолько «сломано», непонятно, как мы вообще умудрялись пользоваться таким ядром. Отсюда мораль: если выбираешь между убедительностью демонстрации своей правоты перед скептически настроенной аудиторией-консерваторов и человеколюбием, лучше не забывать о последнем, выбирая первое.

операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKML

Чего ждать от Linux  — Каким, на ваш взгляд, будет Linux ближайшего будущего, если смотреть на него скрозь призму сегодняшних проектов?

— Моя специализация — это файловые системы, поэтому постараюсь описать, чего стоит ожидать в этой сфере. В индустрии бытует мнение, что разработка ФС с нуля — это весьма дорого и очень долго. Поэтому компания, затевающая разработку своей ФС — это либо идиоты, либо богачи, а потому могут себе это позволить (Microsoft, Google, Oracle и т.д.). Но начавшийся несколько лет назад бум «облачных» технологий опьянил рынок. Поэтому очень многие принялись за разработку собственного сloud storage или cloud fs.

В целом идея построить «облачное» хранилище или ФС — это попытки объединить тысячи компьютеров в один кластер, который гарантирует надёжность на 99.99999 процента. Отсюда вытекают множество интересных научных и чисто технологических задач.

Например, как распределить кусочки данных по серверам, чтобы в случае пожара в дата-центре не потерять данные? В сравнении с традиционной ФС дизайн «облачной» (кластерной) ФС похож на усложнение системы при переходе с UP на SMP-дизайн. Все институты, связанные с информатикой в области залива Сан-Франциско, генерируют тонны статей на эту горячую тему. Из их недр и родился проект Cepth, но пока он слишком сложен, потому как дизайнеры пытаются построить универсальную систему общего назначения. Поэтому я не верю, что Cepth дорастёт до состояния «продакшн» в ближайшие пять лет. С другой стороны, разработка «облачных» хранилищ для «узких задач» позволяет сосредоточиться на обозримом числе параметров. Потому я ожидаю большое количество подобных узкоспециализированных решений в ближайшем будущем.

— Какие технологии ФС в Linux станут ключевыми в ближайшие пять лет?

— Производители «железа» постоянно радуют, при этом не дают нам спокойно жить. И вот почему.

Во-первых, SMR — это новая технология записи на традиционных HDD, которая позволяет повысить их емкость на 20–30% (привет 8-террабайтным дискам). Звучит вроде бы красиво, но такие диски не позволяют произвольную перезапись. А это значит, что у всех традиционных ФС — большие проблемы. У дизайнеров есть примерно 1–2 года для устранения этих проблем.

Во-вторых, Non-volatile memory (NVM) — это быстрая энергонезависимая память, которая рано или поздно выйдет на рынок. И Linux kernel нужно успеть научиться с ней эффективно работать. А именно: придумать и написать ФС конкретно для работы с ней. Есть целый ряд нестандартных тонкостей, к примеру, такой ФС не нужен PageCache, потому что все данные в ней и так в памяти.

Секрет — в балансе  — Программирование для вас — это способ самовыражения, метод заработка денег, источник удовольствия?

— Прежде всего, это интересная работа, от которой получаешь море удовольствия. Иногда всё надоедает, но на этот случай есть друзья и спорт.

Любому трудоголику (типа меня) лучше поздно, чем никогда понять очень важную истину: если не будешь переключаться и отвлекаться даже от самой любимой работы, это может плохо закончиться. Секрет здоровой и счастливой жизни — в правильном балансе интересов.

— Если говорить об обществе, каков он этот «правильный баланс»?

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

Демократия позволяет не чувствовать свое государство чужим, активно участвуя в его жизни, улучшая и развивая его. В качестве аналогии — несколько лет назад я загорелся идеей приватных телефонных звонков. Как результат прикрутил ZRTP к gtalk на Андроид. В процессе разбирательств обнаружил и помог исправить страшную дыру в реализации ZRTP, которая приводила к полной дешифровке разговора, чем страшно горжусь. Впрочем, через некоторое время после устранения этих багов Google самолично перешла уже на закрытый протокол. Кстати, для тех, кто хочет пользоваться надежной связью, используйте Jitsi (на компьютере) и CSipSimple/LinPhone на Андроид. Никогда не пользуйтесь закрытым Skype, потому что любое закрытое решение, равно как закрытое общество — это всегда потенциальная опасность или злого умысла.

И вообще, посмотреть, «что там нагородили внутри» — всегда полезное и интересное занятие применительно не только к софту. Помню, в процессе попыток улучшить APG (gpg клиент для Андроид) c ужасом выяснил, что расшифрованное сообщение там сохраняется во «временный» файл, который может вообще-то храниться вечно. Поэтому не бойтесь и в риале задавать острые вопросы, самолично погружаться в основы законотворчества и проявлять конструктивную инициативу в рамках закона, ведь будущее всегда в наших общих руках.

Вместо послесловия: записки на полях Многие люди моего поколения считают, что люди из ИТ — ограниченные своим компьютером и на интернетах зацикленные. Дескать, они редко выходят из своих затемненных помещений, витая в мире идеализированно-виртуальных абстракций. Но практический опыт давно подсказывает мне, что все обстоит несколько иначе. Айтишники не только разносторонни, но и часто весьма пассионарны, в том числе и за пределами основной работы. Дмитрий Монахов здесь — не исключение.

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

# 1. В 2013 году член предвыборного штаба Навального Дмитрий Монахов был избит ОМОНОом во время митинга сторонников оппозиционера Алексея Навального на Манежной площади. После избиения Дмитрий подал жалобу в СК и прошел медицинское освидетельствование, в котором было зафиксировано сотрясение мозга и множественные гематомы. СК опросил сотрудников ОМОНа и выяснил, что в тот день они наносили Дмитрию Монахову «расслабляющие удары».

СК опросило сотрудников и выяснило что они наносили мне «расслабляющие удары» и спокойно потеряли дело. pic.twitter.com/UvtiJgEiLm— Dmitry Monakhov (@dmtrmon) 17 декабря 2014

В 2014 году дело со всеми документами этого инцидента было утеряно, в силу чего расследование было прекращено.

# 2. Спустя год, в августе 2014 Дмитрий Монахов в одиночку вышел на Красную площадь с протестом против, по его словам, «участия российских войск в войне в Украине». Монахов непреклонно доказывал подошедшему наряду полиции, что это одиночный пикет, и он имеет на него полное право согласно Конституции РФ.

.@dmtrmon was released from jail today, having served his 2 weeks' sentence for protesting Putin’s war. @crisgardobal pic.twitter.com/jWPcat4qP4— Ystri Ya (@ystriya) 12 сентября 2014

Задержали. Что предъявят пока сами не знают— Dmitry Monakhov (@dmtrmon) 28 августа 2014

Пока я сидел в спецприемнике Родина нагрела меня на 20000руб pic.twitter.com/aa8SFTQcj2— Dmitry Monakhov (@dmtrmon) 16 сентября 2014

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

Дмитрий Монахов, манежка, операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKML

Дмитрий Монахов, манежка, операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKML

Дмитрий Монахов, манежка, операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKML

Дмитрий Монахов, манежка, операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKML

Дмитрий Монахов, манежка, операционные системы, интервью с разработчиками, Linux, Линукс, интервью с разработчиками, kernel, Дмитрий Монахов, LKML

Родина поздравила с днем программиста выдав справку с номером 2^10+1, а коллеги пирожным. Красота! pic.twitter.com/dZC4cS4rE1— Dmitry Monakhov (@dmtrmon) 12 сентября 2014

# 3. Вылетая за приделы Российской Федерации на самые разные мероприятия и конференции связанные с Linux, Дмитрий Монахов неоднократно задерживался на российской стороне границы (при въезде в РФ) с требованием дать письменное объяснение «о целях своего пребывания за рубежом и причинах возвращения в Россию».

ДОКАТИЛИСЬ: вчера по возвращению на родину на погран контроле фсбшник хотел чтоб я написал объяснительную о том зачем я летал за границу— Dmitry Monakhov (@dmtrmon) 29 Март 2014

После того как я достал диктофон и попросил его предствится и объяснить что происходит. фсбшник позвал на подмогу второго коллегу :)— Dmitry Monakhov (@dmtrmon) 29 Март 2014

В присутствии второго коллеги гбшник спросил с какой целью я вернулся в Россию? Я ответил что я приехал домой и намерен выспатся.— Dmitry Monakhov (@dmtrmon) 29 Март 2014

Видимо посмотрев на эту фотку ФСБ решило что я летал в лагерь подготовки боевиков http://t.co/DwOEGLzJxE— Dmitry Monakhov (@dmtrmon) 29 Март 2014

***

Забавно читать эти простые, и в тоже время такие по-детски искренние объяснения 29-летнего системного разработчика Дмитрия Монахова, написанные им на российской таможне о «желании просто вернуться домой и для начала выспаться», завизированные согласно протоколу солидными государственными печатями пограничной службы с двуглавыми имперскими орлами.

Это государство ведь тоже понять можно — поди разберись, вот так сразу с кондачка в этой длинной истории егоных «коммитов». И вообще, кто за всеми этими «аутсорсерами» стоит, деньги исправно американские им платит, и куда это они туда-сюда все первым классом летают? Чего ради все эти пулл-реквесты с американских «айпи» сюда к нам приходят? Смотри ведь, как прямо под носом этот свой Open Source развели тут, а потом на Красную площадь возмущенные люди выходят.

Откладывая в сторону это пухлое дело московского линукс-хакера, в уме крутились все эти тревожные айтишные словечки типа «смена режима» или «откат системы». Назойливая как муха мысль преследовала, пока одевал китель: «Не прозевать бы с этими хакерами чего серьёзного, ой не прозевать бы». Но внезапное окончание рабочего дня не дало додумать эту важную государственную мысль до предела.

© dev.by, 2014

© Blogerator