Differences between revisions 17 and 18
Revision 17 as of 2008-07-23 23:11:32
Size: 23953
Comment:
Revision 18 as of 2008-07-24 20:59:08
Size: 24099
Comment:
Deletions are marked like this. Additions are marked like this.
Line 3: Line 3:
Структура сообщества --- очень важная тема, поскольку в ней можно найти ответы на многие концептуально важные вопросы. Итак, открытый способ разработки --- это то, чем отличаются открытые продукты от закрытых с самого начала. Всё остальное --- это технология, напрямую зависящая от способа разработки. Открытый способ разработки плюс copyleft как способ лицензирования --- это основание для бизнеса. Иными словами, этим мы говорим, что всякий человек, который воспользовался нашей разработкой и привнёс туда какие-то свои инструменты и который хочет достичь чего-то на рынке, должен (поскольку изначально разработка ведется под копилефт-лицензией) организовать свой бизнес также на основе свободного софта. Лицензирование методом copyleft --- это гарантия, что любые успешные модификации нашего программного обеспечения будут опубликованы, и ими сможет воспользоваться каждый, а развитие программного продукта не прекратится, даже если человек модифицировал что-то исключительно ради заработка. Введение copyleft'a в лицензию приведёт к тому, что, распространяя свой продукт, человек должен будет давать свободный доступ к исходным текстам, и, стало быть, все эти улучшения окажутся в свободном доступе. Поэтому любой автор программного продукта может смело опубликовать его под свободной лицензией с copyleft, зная, что, какие бы улучшения не были в него привнесены, он может включить их в исходный код. В принципе, это приводит к возвращению к совместной разработке. Если какая-то компания вносит в продукт улучшения из чисто коммерческих соображений, она делает это не внутри своих структур, а открыто, потому что согласно лицензии ей необходимо опубликовать их. Такой подход делает распространение и улучшение программ быстрее и проще. Сейчас так происходит не везде, но, например, с IBM и SAMBA это так. Структура сообщества вокруг свободного программного обеспечения --- очень важная тема, поскольку именно рассматривая ее можно найти ответы на многие концептуально важные вопросы. Итак, открытый способ разработки --- это то, чем изначально отличаются открытые продукты от закрытых (правовладельческих). Всё остальное --- это технология, напрямую зависящая от способа разработки. Открытый способ разработки плюс copyleft как способ лицензирования --- это основание для бизнеса. Иными словами, этим мы говорим, что всякий человек, который воспользовался нашей разработкой и привнёс туда какие-то свои инструменты и который хочет достичь чего-то на рынке, должен (поскольку изначально разработка ведется под копилефт-лицензией) организовать свой бизнес также на основе свободного софта. Лицензирование методом copyleft --- это гарантия, что любые успешные модификации нашего программного обеспечения будут опубликованы, и ими сможет воспользоваться каждый, а развитие программного продукта не прекратится, даже если человек модифицировал что-то исключительно ради заработка. Введение copyleft'a в лицензию приведёт к тому, что, распространяя свой продукт, человек должен будет давать свободный доступ к исходным текстам, и, стало быть, все эти улучшения окажутся в свободном доступе. Поэтому любой автор программного продукта может смело опубликовать его под свободной лицензией с copyleft, зная, что, какие бы улучшения не были в него привнесены, он может включить их в исходный код. В принципе, это приводит к возвращению к совместной разработке. Если какая-то компания вносит в продукт улучшения из чисто коммерческих соображений, она делает это не внутри своих структур, а открыто, потому что согласно лицензии ей необходимо опубликовать их. Такой подход делает распространение и улучшение программ быстрее и проще. Сейчас так происходит не везде, но, например, с IBM и SAMBA это так.

Структура сообщества

Структура сообщества вокруг свободного программного обеспечения --- очень важная тема, поскольку именно рассматривая ее можно найти ответы на многие концептуально важные вопросы. Итак, открытый способ разработки --- это то, чем изначально отличаются открытые продукты от закрытых (правовладельческих). Всё остальное --- это технология, напрямую зависящая от способа разработки. Открытый способ разработки плюс copyleft как способ лицензирования --- это основание для бизнеса. Иными словами, этим мы говорим, что всякий человек, который воспользовался нашей разработкой и привнёс туда какие-то свои инструменты и который хочет достичь чего-то на рынке, должен (поскольку изначально разработка ведется под копилефт-лицензией) организовать свой бизнес также на основе свободного софта. Лицензирование методом copyleft --- это гарантия, что любые успешные модификации нашего программного обеспечения будут опубликованы, и ими сможет воспользоваться каждый, а развитие программного продукта не прекратится, даже если человек модифицировал что-то исключительно ради заработка. Введение copyleft'a в лицензию приведёт к тому, что, распространяя свой продукт, человек должен будет давать свободный доступ к исходным текстам, и, стало быть, все эти улучшения окажутся в свободном доступе. Поэтому любой автор программного продукта может смело опубликовать его под свободной лицензией с copyleft, зная, что, какие бы улучшения не были в него привнесены, он может включить их в исходный код. В принципе, это приводит к возвращению к совместной разработке. Если какая-то компания вносит в продукт улучшения из чисто коммерческих соображений, она делает это не внутри своих структур, а открыто, потому что согласно лицензии ей необходимо опубликовать их. Такой подход делает распространение и улучшение программ быстрее и проще. Сейчас так происходит не везде, но, например, с IBM и SAMBA это так.

Мы подобрались к вопросам о том, что такое GNU/Linux и как его используют. Все элементы системы, будь то приложение, ядро или что-то другое, разрабатываются отдельным человеком или даже отдельной командой разработчиков, и это фактически единственная возможность для подобных разработок. Таким образом, у каждого такого элемента есть некий автор. Может сложиться впечатление, что дистрибутив --- это набор разрозненных программных продуктов, непонятным образом собранных вместе. То есть, какие-то люди разрабатывают собственно GNU/Linux, и совсем другие люди занимаются разработкой программ. На самом деле, дистрибутив можно рассматривать как метапродукт, который подчиняется тем же законам сообщества, которым подчиняется отдельный продукт.

Итак, существуют несколько человек (иногда даже только один), образующие основную группу разработчиков (core team). Это, как правило, те люди, которые большую часть времени тратят на то, чтобы разрабатывать этот продукт. Кстати, часто члены основной группы разработчиков живут в разных странах. Иногда они зарабатывают этими разработками деньги, иногда это дело жизни. Если бы этим всё и ограничивалось, то ситуация бы ничем не отличалась от той, что имела место в связи с правовладельческими продуктами, потому что любой такой продукт разрабатывается только такой командой. Кстати, функция основной группы разработчиков шире, чем функция разработчиков правовладельческого продукта, поскольку они занимаются ещё и стратегическим планированием.

В отличие от разработчиков правовладельческого продукта мы рассчитываем на совместную разработку, на привлечение к сообществу любых людей, в том числе тех, которые не могут уделять разработке нашего продукта всё своё время. Тем не менее, в сообщество входят и профессиональные программисты, перед ними периодически возникает задача внести в наш продукт какие-то изменения, допустим, исправление ошибок или внедрение новых возможностей. Тогда к проекту подключаются добровольцы, которых может быть достаточно много (это зависит от популярности проекта). Если Вы исправили ошибку, и основная группа разработчиков это приняла, Вы уже разработчик. Эти люди заинтересованы в программном продукте, имеют пользовательскую квалификацию и квалификацию разработчика, имеют ресурс на участие в сообществе. Откуда у вас ресурс, что вами двигало --- это важно для исследователя, но не регламентировано. Если вы включили свои модификации в upstream, т.е. в общий исходный код, то Вам огромное спасибо от разработчиков и пользователей. Таких людей больше, но никаких дополнительных обязательств у них нет. С другой стороны, они достаточно мотивированны, и если кто-то однажды принял участие в модификации продукта, вполне вероятно, что он сделает это снова, а дальше его и в основную группу разработчиков могут принять.

Рассмотрим теперь роль пользователей в сообществе. Обратите внимание, что их ещё больше, чем разработчиков. Это необходимо по нескольким причинам. Так, любой разработчик имеет опыт и как пользователь, и как разработчик, и он знает, как работает та или иная часть программного продукта, даже если она никак не документирована. Однако в такой форме продукт очень плохо функционирует. На пользователей никаких обязанностей не накладывается, единственное, что надо иметь в виду - пользователь хорош тогда, когда он активен. Например, если несколько пользователей заявляют разработчику, что им неудобно пользоваться программным продуктом, то социальное чувство заставит разработчика задуматься над тем, как сделать, чтобы им было тоже удобно. Далее, часто документация бывает неполной, и пользователю нужен совет разработчика. Наконец, при нахождении ошибок хорошо было бы о них сообщить, чтобы их могли исправить.

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

Дистрибутив

Дистрибутив --- это тоже программный продукт, только очень большой. Он собирается из частей, которые находятся в интернете под свободными лицензиями. Специфика дистрибутива в том, что он многокомпонентен. Если мы пишем программу совместно, там может быть 30 мегабайт исходного кода, там может быть много модулей, но если мы возьмём программу поменьше, то это всё равно единое целое, с единым представлением, как следует программировать, документировать и т.д. Дистрибутив GNU/Linux --- это набор программных продуктов, (их там несколько тысяч) сделанных, как минимум, сотнями групп разработчиков, никак не связанных друг с другом. Поэтому функции разработчика дистрибутива можно сформулировать следующим образом: определение политики развития и целевая разработка программных продуктов, которые сообществу не очень нужны. Кстати, здесь и ответ на вопрос, откуда берутся деньги. Один из неплохих источников --- заказная доработка.

Рассмотрим сообщество с позиции разработчика. В принципе, программные продукты и без нас разрабатываются, и мы можем зайти на сайт и их скачать. Проблема в том, что нежелательно скачивать бинарные файлы (это приходится делать в двух случаях: если вы совсем не разбираетесь в GNU/Linux, а вам необходимо запустить такую программу, или если этот продукт распространяется вообще без исходного кода). Скачивать бинарные файлы не стоит по трём причинам:

  • Технологическая несовместимость. Эта программа может просто не заработать в этой системе.
  • И в случае с бинарным файлом, и нет у нас в результате скачана программа (правда, в одном случае мы платим, в другом --- нет). А если нашлась ошибка, с бинарным файлом мы сделать ничего не сможем.
  • Программа может работать нормально, но нарушать какую-то дисциплину, установленную core team. Вы её установите, и всё может начать работать некорректно.

Кто будет заниматься всем этим, то есть отслеживанием новых версий, сборкой программных продуктов из исходных версий в соответствии с политикой дистрибутива, адаптацией (в случае, если есть какие-то ошибки)? Ментейнер, то есть человек, который играет роль разработчика по отношению к дистрибутиву. Он берёт программу из интернета (причём в исходных текстах), чтобы проверить на предмет отсутствия ошибок, на предмет соответствия политике дистрибутива, изготовляет из него бинарную версию и взаимодействует с пользователем. Он отличается от разработчика тем, что он хорошо разбирается в данном программном продукте, который он собрал и адаптировал к использованию в дистрибутиве.

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

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

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

  • Информационная связность. Иными словами, интернет. Не должно быть никаких препятствий на пути распространении информации, причём как самого програмного продукта, так и информации о нём.
  • Информационная структурированность. Речь о том, что информации должно быть не просто много, но она должна быть хорошо структурирована, чтобы человек мог подключиться к проекту с минимальными затратами. При этом необходимо понимать, что в понятие информационной структурированности включается как чисто техническая информация для разработчиков, так и пользовательская документация. С другой стороны, структурированность не является основной целью, и не всегда её удаётся поддерживать на должном уровне. В эту же категорию входят интерактивные ресурсы --- обратная связь по ошибкам, списки рассылки, форумы. Их существование необходимо для того, чтобы пользователь, у которого есть вопрос, знал, кому и как его задать.
  • Технологические преимущества. Смысл в том, чтобы человеку из команды был удобно не просто компилировать, а компилировать в соответствии с принятой дисциплиной. То есть, необходимо предоставить сборочные сервера, механизмы сборки, ведение учёта изменений, версионирование... Иными словами, предоставить то, что облегчит ему жизнь в сообществе. Предположим, мы скачали какую-то программу на языке С, в ней 100 файлов. Она была разработана, скажем, под Solaris'ом, там всё замечательно работает. А мы хотим скомпилировать её под GNU/Linux, поскольку других подобных программ нет. В какой-то момент она вообще не запускается, вы выясняете, какие нужны библиотеки, компиляторы... В итоге собрали, сказали makeinstall, но в Solaris'e программы находятся в /opt/progname/, и мы вынуждены всё удалить, и дальше уже начинаем вносить изменения, чтобы она направляла файлы в правильные места и их там искала. Потом оказывается, что есть какая-то ошибка, которая в Solaris'е не проявляется. Наконец, наступил момент, когда программа работает нормально, а через 2 недели выходит новая версия... Чтобы избежать подобной ситуации, необходимо помнить следующее: любые изменения необходимо протоколировать (для этого существуют специальные программы diff и patch: первая показывает различия между старым и новым файлом, вторая заменяет содержание старого файла на содержание нового), кроме того, недурно указать, что нужно для сброчного окружения. И только после этого можете спокойно это собирать. При новой версии применяете к тексту программы старые изменения, если они применятся, автор не подумал, что там была ошибка, если они не применятся, Вам нужно посмотреть, что там изменилось, это называется "накатить патчи", и стало уже лучше. Осталось сказать, что делать это лучше на отдельном компьютере, чтобы избежать возможных нежелательных изменений библиотек на своей компьютере. Отметим, что ALTLinux всё это предоставляет.


Сведения о ресурсах

Готовность (%)

Продолжительность (ак. ч.)

Подготовка (календ. ч.)

Полный текст (раб. д.)

Предварительные знания

Level

Maintainer

Start date

End date

50

1

1

1

1

ConstantinYershow, ОльгаТочилкина, VsevolodKrishchenko


CategoryLectures CategoryPspo CategoryMpgu CategoryUneex

PspoClasses/080716/04CommunityStructure (last edited 2008-10-04 11:01:04 by VsevolodKrishchenko)