seerozha (seerozha) wrote,
seerozha
seerozha

ИТ: Интервью настоящего программиста

Алексей Кузнецов, внёсший огромный вклад в развитие ядра Linux, ответил на вопросы читателей opennet.ru.

Последние 10 лет Алексей отстранился от публичных дел, но в конце 90-х и начале 2000-х годов входил в категорию наиболее значительных разработчиков ядра Linux и занимал c 2000 по 2003 год пост мэйнтейнера сетевой подсистемы Linux. В частности, Алексей довёл до полноценного вида сетевой стек Linux, переработал его для использования на многоядерных системах, доработал поддержку IPv6 и обеспечил средства для управления трафиком. После переработки IP-стека Алексей принялся за переделку поддержки протокола TCP. Результатом стал новый TCP-стек, представленный в ядре Linux 2.2 и до сих пор используемый повсеместно. Из подготовленных Алексеем инструментов наиболее известны наборы утилит iputils (ping, tracepath, tftpd, rarpd) и утилиты управления трафиком iproute2 (ip, tc, ss). С 2003 года Алексей занимается развитием продуктов виртуализации компании Parallels.






Разработка ядра

Как вы пришли к разработке ядра. Энтузиазм, производственная необходимость или требование работодателя? Почему вы приняли участие именно в разработке Linux, а не другого ядра с открытым исходным кодом?

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

Слышали слова: freebsd, netbsd. Про linux слышали только одно - это не работает. Не забывайте про историческое время - начало девяностых (молодежь про это уже ничего не знает), мы были беднее церковных крыс и благодарить судьбу можно было даже за то, что для посылки однострочного е-mail через модем - через uucp шлюз - через Курчатовский Институт не требовалось гербовой печати с подписью главного бухгалтера.

Был отправлен человек с ящиком дискет в CERN: вези все программы и OS, что найдешь, потом разберемся. Человек был физик с очень небольшим вычислительным уклоном и привез он такую гору мусора, что я в ней месяц разбирался. Так вот - исторический момент - freebsd был привезен полностью на огромном количестве дискет, но без сорсов. И не взлетел. Ну вот совсем никак. А вот linuх был всего на двух дискетах – boot & root. И почти взлетел!

Я увидел надпись Login: и даже успел сказать ему root и увидеть #. А вот дальше на все был один ответ: Segmentation Violation и что-то про uselib. Но мы не привыкли отступать. Здесь случился акт божественного провидения: undelete на одной из пустых дискет (парень почистил часть особо бесполезных дискет с тем, чтобы туда записать какие-то мануалы, но не успел) обнаружился файл "?inux.tgz".

Распаковка показала, что это похоже на сорс ядра linux. Методом пристального взгляда проблема была вычислена: boot оказался немножко новее root, и функция uselib работала не совсем так, как этого ожидал root. Далее я взял лопату и стал рыть от забора и до успеха. Помню смутно: пришлось отыскать клон gcc для msdos (DJGPP), подправить кернел и ухитриться скомпилировать его под msdos. Получить работающий linux. Но без библиотек и возможности что-либо скомпилировать кроме кернела.

Далее собственную libc в степени, достаточной для работы make, gcc, ld etc. пришлось НАПИСАТЬ самому. А все остальное: gcc, as, ld - используя DJGPP и его сорс. Нетрудно понять, что после всего этого я из физика-теоретика превратился в linux-хакера. И назад в науку дорогу уже не нашел.

Как получилось, что вы стали мэйнтейнером? Какой путь пришлось для этого пройти?

В то время я был просто очарован Интернетом: возможности протокола, открывающиеся перспективы просто сносили крышу. Будучи человеком увлекающимся, я практически забросил свою основную область деятельности (теоретическая физика) и полностью переключился на изучение того, что было к тому времени сделано и изобретено, на размышления, что и как это нужно сделать. Где-то к 1996 у меня был the grand plan. И linux дал возможность для воплощения этого плана.

Во-первых, но не это самое важное, поддержка сети в linux была практически в состоянии tabula rasa. А главное - люди, которые каким-то чудом собрались вокруг проекта. Открытые для инноваций, гибкие, талантливые - Алан Кокс, затем Педро Маркес, Дэвид Миллер. До 1996 года (Linux 2.0) я просто работал. Чинил баги, делал какие-то нужные и не очень вещи. Заработал какой-то авторитет.

Где-то к 1996 году стало ясно, что сеть находится в тупиковом состоянии. Алан Кокс, бывший в то время майнтейнером сетевой части linux, сделал гениальный ход: он устранился и дал дорогу молодым: Педро Маркесу, который сделал к тому времени начальную поддержку IPv6 и начал переписывать TCP. А я (будучи "молодым" не по возрасту, а по духу :-)) взял на себя более низкоуровневую часть. К несчастью, Педро проработал недолго - закончил университет и пропал где-то в катакомбах Cisco, но начало новой эпохи положил именно он. Вот с тех пор я и стал отвечать за всю низкоуровневую часть сетевого кода: с одной стороны границы было TCP, c другой - внутренности сетевых драйверов. До 1999 года TCP я глубоко не занимался.

Как происходило взаимодействие с другими разработчиками ядра?

Через обмен e-mail. Патч публиковался в linux-kernel (затем - netdev). Если он не вызывал возражений, maintainer его прикладывал к своему дереву, затем пересылал Торвальдсу. Если были возражения - патч переделывался. А бывало и так, что патч отвергался целиком и кто-то совершенно другой делал то же самое совершенно по-другому.

Затем Дэвид Миллер организовал CVS для сетевой части и для своего собственного проекта (ultrasparc port). После этого взаимодействие стало более цивилизованным, но суть поменялась незначительно.

Чем было вызвано решение сменить область деятельности и покинуть арену разработки ядра?

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

Чем вы занимаетесь сейчас?

После TCP-стека я охладел и увлекся новым проектом в недрах Parallels. Я переделывал миграцию контейнеров Parallels Virtuozzo Containers. Занимался портированием контейнеров на Itanium. Это был изначально мертвый (малый интерес рынка), но технически невероятно интересный для меня проект. Потом был перенос контейнеров в линейный формат, совместимый с виртуальными машинами Parallels Server. Это трудно описать, просто потому что замысел и состоял в том, что никакого внешнего эффекта быть не должно, только контейнеры должны работать лучше. Некоторое время даже занимался Parallels Desktop для Mac, отдыхал от Linux.

Сейчас я занимаюсь Parallels Cloud Server, если точнее, то входящим в его состав Parallels Cloud Storage. Parallels Cloud Server представляет собой гибрид платформы для виртуализации (гипервизоры + контейнеры) с распределенным облачным хранилищем (именно Storage вызывает особый интерес у рынка) . «Гибридизация» снижает время простоя из-за отказов оборудования, упрощает поддержку и администрирование серверов, а также позволяет создавать эффективные и высокодоступные виртуальные серверы с очень хорошими показателями аптайма.

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

Лично я с ним никогда не встречался. Более того, избегал прямого общения с ним даже по е-mail. Я всегда имел промежуточное звено: сначала Алан Кокс, затем Дэвид Миллер. Линус считал меня "arrogant" (по словарю: заносчивый, высокомерный, надменный, самонадеянный, преувеличивающий свои возможности). Возможно, он употреблял в отношении меня и более крепкие эпитеты, но те, кто мне это передавал, могли просто щадить мое самолюбие. И он был прав: я считал и считаю его самовлюбленным малообразованным пингвином. И с большой склонностью к халтурным решениям, уж извините. Посмотрите на страшные куски кода, логика которых дожила до настоящего времени (inode.c, buffer.c), уродливый неработающий scheduler, который прожил десять лет.

Но не поймите меня неправильно. Я уважаю Линуса безмерно: во-первых, это харизматичный лидер, который умеет делать невозможное - управлять толпой анархистов самого разного интеллектуального уровня, многие из которых считают его идиотом; и не превратиться при этом в африканского царька. А главное, это человек, который видит на годы вперед. И это было ясно уже к 2000му году, когда linux, несмотря на все сделанные глупости, отвратительную архитектуру и ужасное качество кода, стал уверенно обходить и freebsd, и коммерческие unixы. Поэтому я всегда внимательно его слушал, а глупости, которые он говорил, особенно внимательно. Такой вот парадокс.

Возьмите классическую управленческую проблему. Когда назрела необходимость переключиться на какую-то VCS, Линус отверг CVS по понятным причинам, а svn, mercurial etc. - под совершенно надуманными предлогами. Вместо этого был взят bitkeeper, система с уродливейшей архитектурой, да еще и закрытой. И не бесплатной! Да еще и невероятно неэффективной. Кстати, это была еще одна из причин моего ухода: на компьютерах, которые были мне доступны, один однострочный коммит занимал почти час, а многие операции были вообще невозможно выполнить за конечное время. К тому же на гигабайт памяти у меня и денег просто не было.

Глупость? Непотизм? Не знаю. Но посмотрите на конечный результат: все уже и забыли про этот злосчастный bitkeeper, а есть git, который, безусловно, является лучшей распределенной VCS всех времен и народов. Вот это и называется гениальностью. Человек увидел бриллиант в куче навоза. Навоз со временем рассосался - бриллиант остался. А я бриллианта там не видел, вот так.

Дальше ...

Tags: linux, ИТ, программирование
Subscribe
  • Post a new comment

    Error

    default userpic

    Your IP address will be recorded 

    When you submit the form an invisible reCAPTCHA check will be performed.
    You must follow the Privacy Policy and Google Terms of use.
  • 4 comments