Предисловие Почему была написана эта книга? На вечеринках люди больше не смотрят на меня непонимающими глазами, когда я говорю, что занимаюсь разработкой свободных программ. "Програмы с открытыми исходниками?— Наподобии Linux'а?" - спрашивают они. Я энергично киваю головой в знак согласия. "Совершенно верно! Это - именно то, чем я занимаюсь." Хорошо что я перестал находиться за гранью понимания. Раньше следующий вопрос было легко угадать: "Как ты делаешь на этом деньги?". Отвечая на этот вопрос, я подводил итог устройства экономики свободного ПО: что существуют организации в чьих интересах поддерживать существование определенного програмного продукта, но в тоже время они не заинтересованы в продаже копий, они лишь хотят убедится что програмное обеспечение доступно, и регулярно обновляется, как инструмент, а не как производимый товар. Ситуация поменялась, помимо денег людей стали интересовать другие вопросы. Финансовая сторона программного обеспечения с открытыми исходными текстами Термины "программы с открытыми исходными текстами" (aнг. "open source software") и "свободные программы" (анг. "free software") в русском всегда синонимы; В английском же слово "free" (рус. "свободный") , также означает "бесплатный", но бесплатность еще не означает свободу распространения, поэтому значение зависит от контекста. Различия между бесплатным и свободным ПО более подробно рассмотрены автором в соответствующей главе . перестала быть загадкой, и многие люди не занимающиеся программированием стали понимать, или по крайней мере перестали удивляться тому, что есть люди для которых это является основной работой. Вместо этого, все чаще и чаще я стал слышать другой вопрос: "А как это устроено?" На тот момент у меня не было в запасе подходящего ответа, и чем сильнее я пытался найти его, тем больше я осознавал всю сложность затронутой темы. Ведение открытого проекта не очень похоже на ведение бизнеса (представьте себе, что вам приходится постоянно обсуждать развитие вашего продукта с группой добровольцев, с большинством из которых вы никогда не встречались!) По ряду причин оно не похоже на управление обычной некоммерческой или государственной организацией. Оно немного схоже с каждой из них, но я постепенно пришел к заключению, что свободное ПО это "вещь в себе". Ведение открытого проекта можно сравнить со множеством различных проектов и найти подобие, но ни одному он не будет равен полностью. Более того, даже предположение о том, что свободный програмный проект можно вести уже само по себе натяжка. Свободный програмный проект может быть начат, на него могут оказывать влияние заинтересованые стороны, зачастую довольно сильно. Но активы такого проекта не могут стать собственностью какого-либо единственного владельца, и до тех пор пока где-то, —где угодно—, есть люди заинтересованые в его продолжении, он не может быть закрыт по желанию одной стороны. У каждого есть бесконечная власть и каждый бессилен. Это создает интересную динамику. Вот почему я решил написать эту книгу. Свободные програмные проекты эволюционировали в отдельную культуру, этос, в котором свобода создания программного обеспечения, выполняющего функции необходимые одному из участников группы, стала цетральной догмой, но при этом эта свобода не приводит к тому, что группа превращается в кучку индивидуумов поглощенных своей частью кода, а рождает сотрудничество, скрепленное коллективным энтузиазмом. Несомненно, умение сотрудничать само по себе является одним из самых высокоценимых навыков в разработке свободного ПО. Управлять таким проектом - значит вступить в некое подобие гипертрофированного общества взаимодействия, в котором у каждого есть возможность не только работать с другими, но и придумывать новые эффективные пути совместной работы, что может пренести ощутимые преимущества создаваемому программному обеспечению. В этой книге сделана попытка описать способы, которыми может быть достигнуто подобное взаимодействие. Она - не полна, но начало положено. Качественное свободное програмное обеспечение уже является достойной целью, и я надеюсь читатели, ищущие путь к достижению этой цели, найдут полезным материал этой книги. Помимо этого, я также надеюсь передать хотя бы часть того безграничного удовольствия полученного от работы с командой мотивированых разработчиков свободного ПО, и того удивительно прямого взаимодействия с пользователями, которое так поощряется в подобных проектах. Участвовать в успешном свободном проекте захватывающе интересно, это и заставляет крутиться колеса всего мира разработки открытого ПО. Для кого написана эта книга? Эта книга предназначена для разработчиков и мененджеров, собирающихся создать свободный проект, а также для тех кто, уже начал таковой, но не знает, что делать дальше. Книга будет полезна и желающим просто поучаствовать в открытом проекте, но никогда не делавшим этого раньше. Читатель не обязан быть программистом, но понимание основных терминов разработки ПО, таких как исходный код, компиляторы и програмные патчи, желательно. Предыдущий опыт со свободным програмным обеспечением в качестве разработчика или пользователя не требуется. Те кто уже работал с таким ПО, вероятно найдут некоторые части этой книги несколько тривиальными и возможно пожелают их пропустить. Так как опыт читателей в этом вопросе разнится достаточно широко, я постарался озаглавить каждый раздел самым очевидным способом и предупреждать читателей о том какие разделы можно пропустить. Источники Большая часть материала для этой книги появилась в результе пятилетней работы над проектом Subversion. (). Subversion - это система контроля версий с открытым исходным кодом, написаная с нуля чтобы заменить CVS, и стать новым стандартом de facto среди систем контроля версий в собществе разработчиков свободного программного обеспечения. Проект был начат моим работодателем, организацией CollabNet (), в начале 2000, и слава богу, что CollabNet с самого начала поняли каким образом нужно руководить проектом, чтобы создать в нем рабочую атмосферу благоприятствующую совместной распределенной работе. Уже с самого начала к нам присоединилось множество разработчиков добровольцев; сейчас над проектом работают около пятидесяти человек и лишь немногие из них - сотрудники CollabNet. Subversion по многим параметрам подходит как классический пример проекта с открытым исходным кодом. Я использовал материалы этого проекта чаще чем первоначально ожидал. Отчасти это было продиктовано удобством: как только мне нужен был пример определенного явления, я мог припомнить какой-нибудь случай с Subversion. Но кроме удобства это давало нужную степень достоверности. Хотя я и вовлечен (с разной степень вовлеченности) в другие свбодные проекты и общаюсь с друзьями и знакомыми, работающими над еще большим количеством подобных проектов, но когда пишешь для печати, быстро понимаешь что все утверждения и высказывания должны быть подкреплены фактами. Мне не хотелось утверждать что-либо о событиях в других проектах основываясь лишь на том что я мог прочесть в общедоступных архивах их рассылок. Если бы кто-то попробовал судить таким образом о Subversion, я уверен, он оказался бы прав в половине случаев и ошибался бы про другую половину. Так что, черпая вдохновение или примеры из проектов, с которыми у меня не было прямого взаимодействия, я сперва пытался поговорить с осведомленным человеком оттуда, с кем-либо, чьему разъяснению ситуации я бы мог доверять. Subversion была основной моей работой в течении последних пяти лет, но помимо этого я участвовал в различных проектах свободного ПО в течении двенадцати лет. Другие проекты повлиявшие на эту книгу: GNU Emacs - проект текстового редактора Free Software Foundation, в котором я занимался поддержкой нескольких небольших пакетов. Concurrent Versions System (CVS), над которой я интенсивно работал в 1994–1995 годах вместе с Джимом Блэнди, но с тех пор возвращался туда только время от времени. Группа проектов с открытыми исходными текстами известная как Apache Software Foundation, в особенности Apache Portable Runtime (APR) и Apache HTTP Server. OpenOffice.org, Berkeley Database от организации Sleepycat, и MySQL Database; Я не учасвствовал в этих проектах лично, но следил за ними и в некоторых случаях разговаривал с людьми оттуда. GNU Debugger (GDB) (аналогично). The Debian Project (аналогично). Это далеко не полный список конечно же. Как и большенство программистов, занимающихся открытым ПО, я присматриваю вполглаза за многими различными проектами, просто чтобы быть в курсе событий. Я не буду их все здесь перечислять, но они упомянуты в тексте. Благодарности На написание этой книги ушло в четыре раза больше времени, чем я ожидал, и большую часть времени мне казалось будто здоровый рояль висит над моей головой куда бы я не ни пошёл. Без помощи со стороны столь многих людей, я бы никогда не смог закончить все это и сохранить здравый рассудок. Энди Орам, мой редактор в O'Reilly, был мечтой писателя. Он не только не понаслышке знает о свободном ПО (он посоветовал многие темы), но еще и обладает редким даром угадывать, что ты имел в виду и находить нужный способ выразить это. Работать с ним было большой честью. Спасибо также Чаку Топорек, который сразу отыскал Энди. Брайан Фитзпатрик просматривал почти весь материал по мере написания книги, что не только сделало её лучше, но и заставляло меня продолжать писать, когда мне хотелось быть где угодно, лишь бы не за компьютером. Бэн Коллинс-Сассмэн и Майк Пилато тоже приглядывали за моими успехами и всегда были рады пообсуждать, иногда подолгу, любую тему, над которой я в то время работал. Они же заметили, когда я немного притормозил и вовремя легонько подтолкнули. Спасибо вам. Биелла Коллман занималась своей диссертацией одновременно с тем как я писал эту книгу. Ей известно, что значит сидеть и писать каждый день, она послужила мне и вдохновляющим примером, и сочувствующим слушателем. Также как антрополог она обладает особым взглядом на некоторые вещи в движении свободного ПО, что позволило ей дать мне некоторые идеи и ссылки на литературу, которые я использовал для книги. Алекс Голаб, еще один антрополог связанный с миром свободного ПО, занятый написанием диссертации в то время, очень сильно поддерживал меня с самого начала и это здорово помогло. Мика Андерсон, по виду которого и не скажешь, что писательская деятельность может так подавлять, был тем человеком, который вызывал у меня желание писать из-за зависти. Он всегда был готов поддержать по дружески, поговорить и (один раз точно) оказать техническую помощь. Спасибо, Мика! Джон Троубридж и Сэндер Страйкер, вдохновляли и помогали мне—их обширный опыт в свободном ПО обеспечил меня материалом, который я бы не нашел больше нигде. Спасибо Грегу Стейну не только за дружбу и переодические ободрения, но и за то что показал проекту Subversion важность ревизий кода в формировании общества разработчиков. Спасибо также Браину Белендорфу, который тактично вбил в наши головы всю важность публичных дискуссий. Я надеюсь этот принцип нашел отражение в книге. Спасибо, Бенжамину "Мако" Хилл и Сету Шону, за диалоги о свободном ПО и его политике; Заку Урлокеру и Луис Сурэз-Поттс за то что нашли время для интервью, несмотря на плотный график; Шейну из Shashcode рассылки за то что позволил его цитировать; и Хаггену Со за невероятно полезное сравнение хостингов. Спасибо Алле Дехтяр, Полине, и Соне за непрерывную и терпеливую поддержку. Я очень рад, что больше не должен раньше прерывать (или скорее тщетно пытаться прерывать) наше общение по вечерам и идти домой работать над "Книгой". Спасибо Джеку Рипенингу за дружбу, беседы, и за постоянное упрямство не принимать результаты быстрого неправильного анализа, когда есть сложный, но правильный. Я очень надеюсь, что кое-что из его опыта, как в разработке програмного обеспечения, так и в индустрии в целом, нашло отражение в этой книге. CollabNet были исключительно великодушны, разрешив мне работать по гибкому графику, чтобы писать книгу, и не жаловались, даже когда сроки вышли за рамки запланированных. Я не знаю всех хитростей того, как менеджмент приходит к таким решениям, но подозреваю Сэндя Клут и позже Махеш Мурфи, были как то связаны с этим — - мои благодарности им обоим. Вся команда разработчиков Subversion была для меня вдохновением в течение последних пяти лет, и большую часть того, что написано в этой книге я изучил работая с этими людьми. Я не буду благодарить их здесь всех по имени, потому что их слишком много, но я наказываю любому читателю, который случайно встретит одного из них немедленно угостить выпивкой — я собираюсь сделать тоже самое. Множество раз я напыщено говорил с Рейчэлл Сколлон о состоянии книги, она всегда слушала и каким-то образом ей удавалось заставить проблемы казаться менее значительными, чем они были до разговора. Это очень помогло — огромное спасибо. Спасибо (еще раз) Ноэлу Тайлору, которого должно быть удивило, почему я захотел опять взяться за книгу, учитывая сколько я жаловался в прошлый раз. Его дружба помогла музыке и хорошей компании не исчезнуть из жизни даже в самые занятые времена. Спасибо также Мэтью Дин и Дорэти Самтлибин, друзьям и долгострадающим партнерам по музыке, которые поняли причины моего отсутствия на репетициях. Меган Дженнинкс, постоянно поддерживала меня и искренне заинтересовалась темой книги, хотя та и не была ей знакома — это так дает силы неуверенному писателю. Спасибо, друг. У меня было четыре знающих и старательных рецензента: Йоав Шапира, Эндрю Стеллман, Даванум Сринивас и Бен Хайд. Если бы я мог учесть все их великолепные пожелания, эта книга была бы еще лучше. Время не позволило реализовать все, но то что было сделано, дало книге многое. Если еще и остались ошибки, то они принадлежат мне. Мои родители, Франсис и Генри, были невероятно добры как всегда, и так как эта книга менее технична чем предыдущая я надуюсь они найдут ее более читабельной. И наконец хочу побагладарить тех кому эта книга посвящена, Карен Андерхилл и Джима Блэнди. Дружба Карен и ее понимание, означали для меня все, не только во время написания этой книги, но и за последние семь лет. Без ее помощи эта книга никогда бы не состоялась. Это касается и Джима, настоящего друга и хакера хакеров, первым показавшего мне мир свободного ПО, как птица которая научила самолеты летать. Дисклеймер Идеи и мнения, высказанные в этой книге, являются моими собственными. Они могут не соответствовать взглядам CollabNet или проекта Subversion.