9b02a3c3

Краткая история разработки сетевой подсистемы Линукса.


Разработка совершенно новой реализации стека tcp/ip, сравнимого по возможностям и производительности с существующими реализациями была нелегкой задачей. Отказ от переноса существующей реализации был сделан в тот момент, когда существовала некоторая неясность, не станут ли существующие реализации отягощены ограничениями авторских прав в связи с судебным делом, начатым U.S.L. Кроме того, существовал значительный энтузиазм сделать все по-своему и лучше, чем делалось ранее.

Первым добровольцем, возглавившим разработку сетевой подсистемы был Росс Биро (Ross Biro <biro@yggdrasil.com>). Росс написал простую и неполную, но уже пригодную к использованию систему, дополненную драйвером для сетевой карты ethernet WD-8003. Этого было достаточно, чтобы многие могли экспериментировать и тестировать новую систему, а некоторые даже смогли с ее помощью подключить свои машины к интернету. Давление, которое сообщество разработчиков Линукса, оказывало на разработчиков сетевой подсистемы было весьма большим и в определенный момент вынудило Росса отказаться от руководства проектом. Но его усилия по начальной организации проекта и взятая ответственность за создание чего-либо работоспособного в сложных условиях стали катализатором для всех дальнейших работ и заложили основы современного успеха.

Орест Збровски (Orest Zborowski <obz@Kodak.COM>) написал первый вариант интерфейса BSD sockets. Это был значительный шаг вперед, так как это позволило переносить многие существовавшие сетевые приложения без серьезных модификаций.

Примерно в это-же время Лоуренс Калхейн (Laurence Culhane <loz@holmes.demon.co.uk>) разработал первый драйвер поддержки протокола SLIP. Это позволило многим, не имеющим доступа к локальным ethernet-сетям, экспериментировать с новым программным обеспечением. И снова, некоторым удалось с помощью этого драйвера подключить свои машины к интернету. Это дало многим ощущение возможностей, которые будет иметь Линукс с полной сетевой поддержкой и увеличило число людей, экспериментирующих с сетевой подсистемой.

Еще одним из активных разработчиков был Фред ван Кемпен (Fred van Kempen <waltje@uwalt.nl.mugnet.org>). После краткого периода неопределенности, последовавшего за уходом Росса, Фред принял на себя руководство проектом, без особой конкуренции. У Фреда были свои планы развития сетевой подсистемы Линукса, и он направил основную работу именно в этих направлениях. Под его руководством были написаны программы, названные NET-2 (в отличие от NET -- программ, написанных Россом), которые многие смогли продуктивно использовать. Кроме того, Фред внес много предложений по новым разработкам, таким как динамический интерфейс устройства, поддержка протокола Amateur Radio AX.25 и модульная структура сетевой подсистемы. NET-2 использовался большим количеством людей, которое постоянно увеличивалось по мере того, как распространялась информация о работоспособности этой системы. В тот момент новая реализация все еще выпускалась как набор исправлений к обычному ядру и не включалось в основное выпускаемое ядро. NET-FAQ и NET-2-HOWTO описывали достаточно сложную процедуру, которая требовалась, чтобы заставить сетевую подсистему работать. Фред уделял основное внимание новым разработкам, что отнимало основную часть времени. В то же время пользователям требовалась надежная система, которая устроила бы по крайней мере 80% пользователей. Так же, как и в случае с Россом, пользователи стали оказывать на разработчиков давление.

Алан Кокс (Alan Cox <iialan@www.uk.linux.org>) предложил решить возникшие проблемы следующим образом. Он предложил взять на себя отладку кода NET-2 до состояния стабильной и надежной работы, которая бы устроила большинство пользователей. При этом давление на Фреда уменьшилось бы и позволило бы ему продолжить свою работу. Алан взялся за работу и через некоторое время выпустил первую версию сетевой подсистемы NET-2D (от NET-2-Debugged). Она устойчиво работала на большинстве машин, и удовлетворяла большинство пользователей. У Алана были свои взгляды на то, как должен развиваться проект и это привело к большому количеству дискуссий о том, как развивать NET-2. В результате сложилось два подхода среди разработчиков сетевой подсистемы -- первый -- "сперва работоспособность, затем доводка" и второй -- "доводка в процессе разработки". Линус Торвальдс (Linus Torvalds) выступил в качестве арбитра и поддержал Алана, включив его код в стандартное выпускаемое ядро. Фред оказался в сложной ситуации. Все его дальнейшие разработки лишались большого количества тестеров, а это означало замедление прогресса. Фред работал еще некоторое время, а затем Алан стал новым лидером команды разработчиков сетевой подсистемы.

Дональд Беккер (Donald Becker <becker@cesdis.gsfc.nasa.gov>) занялся программированием нижнего уровня сетевой подсистемы и написал огромное количество драйверов ethernet-карт. Почти все драйвера, включенные в текущие версии ядра написаны Дональдом. В написании драйверов участвовали и другие, но работа Дональда была столь продуктивной, что заслуживает особого упоминания.

Алан продолжал улучшать NET-2D, параллельно занимаясь проблемами, не указанными явно в списке первоочередных. К тому моменту, когда версии основного ядра 1.3.* достигли состояния зрелости, сетевая подсистема переросла в версию 3 -- NET-3, на базе которой основана текущая реализация сетевой поддержки в Линуксе. Алан работал над многими частями сетевой подсистемы и с помощью многих других развивал ее по многим направлениям. Алан разработал динамические сетевые устройства и первые реализации протоколов AX.25 и IPX. Параллельно Алан продолжал дорабатывать остальной код и продолжает заниматься этим и сейчас.

Поддержка PPP была написана Майклом Коллахэном (Michael Callahan <callahan@maths.ox.ac.uk>) и Элом Лонгйиаром (Al Longyear <longyear@netcom.com>). Это также имело огромное значение, так как значительно увеличило число пользователей Линукса.

Джонатан Нейлор (Jonathon Naylor <jsn@cs.nott.ac.uk>) значительно улучшил поддержку AX.25, добавив поддержку протоколов NetRom и Rose. Поддержка AX.25/NetRom/Rose имела очень большое значение, поскольку ни одна операционная система кроме Линукса не имела встроенной поддержки этих протоколов.

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



Содержание раздела