Реклама в Telegram-каналах DzikPic и dev.by теперь дешевле. Узнать подробности 👨🏻‍💻
Support us

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

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

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

To Open Source or Not?

О себе

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

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

    Дмитрий Монахов (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, я понял, что Маршал Кирк МакКузик (Один из пионеров движения BSD. — Прим. dev.by.) — гений. Правда, его гениальные решения слишком сложны для реальной жизни.

Про плюсы и минусы Linux

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

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

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

Что до недостатков, выделю два момента. 

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

Советы новичкам


— Нас читает много начинающих программистов. Что бы вы посоветовали тем из них, кто хочет сделать карьеру в Open Source и Linux?

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

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

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

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

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

Как найти свой первый баг в Linux?

 

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

— Молодые программеры всерьёз интересуются Linux, но многих пугает и останавливает то, что системное программирование под эту ОС — это не самое коммерчески востребованное направление в софтдеве. Легко ли найти работу такому программисту в наших краях? 

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

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

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

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

Три урока Дмитрия Монахова

Про кашу в голове

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

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

 

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

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

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

 

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

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

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

Чего ждать от 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, потому что все данные в ней и так в памяти.

Секрет — в балансе

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

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

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

Иллюстрации: www.techdrivein.com, Google+, Дмитрий Монахов

Новый рекламный формат в наших телеграм-каналах.

Купить 500 символов за $150

Читайте также
Хуже Windows. Linux стала рекордсменом по росту числа вредоносов
Хуже Windows. Linux стала рекордсменом по росту числа вредоносов
Хуже Windows. Linux стала рекордсменом по росту числа вредоносов
Разработчик Ubuntu уходит из России
Разработчик Ubuntu уходит из России
Разработчик Ubuntu уходит из России
1 комментарий
Ел суп на собеседовании, а еще — пельмешки. Рекрутеры и разрабочики рассказывают о казусах на интервью
Ел суп на собеседовании, а еще — пельмешки. Рекрутеры и разрабочики рассказывают о казусах на интервью
dev.ua
Ел суп на собеседовании, а еще — пельмешки. Рекрутеры и разрабочики рассказывают о казусах на интервью
Google: разработчики Linux «латают дыры» быстрее Google, Apple и Microsoft
Google: разработчики Linux «латают дыры» быстрее Google, Apple и Microsoft
Google: разработчики Linux «латают дыры» быстрее Google, Apple и Microsoft

Хотите сообщить важную новость? Пишите в Telegram-бот

Главные события и полезные ссылки в нашем Telegram-канале

Обсуждение
Комментируйте без ограничений

Релоцировались? Теперь вы можете комментировать без верификации аккаунта.

Комментариев пока нет.