21 марта 2006 г.

Open Source — это не бесплатно!

Жаль, но существует очень мало программистов, которые действительно понимают, что такое движение open source, лицензия GPL и вообще, как все это работает и какую преследует цель.

Бытует мнение, что если программное обеспечение — open source, то это значит, что оно — бесплатно. К счастью, это не так. Open source — это не бесплатное программное обеспечение, это — продукты с открытым исходным кодом. Для многих это неочевидно, но это не одно и то же.

Open Source вовсе не запрещает получать деньги за программное обеспечение. Вы можете назначать какую угодно цену за предлагаемый вами продукт, в том числе, распространять его бесплатно. Open source требует другого.

Во-первых, исходные файлы продукта должны быть легко доступны. То есть, вы не можете скрывать исходные файлы от "покупателя".

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

В open source есть и другие требования, но эти — основные, для того, чтобы понять: "open source" продукт — это не значит "бесплатный"!

15 марта 2006 г.

О дяде Билли, GPL и Open Source

Наткнулся в сети на интервью с Биллом Гейтсом (CNET News.com, 25 июня, 2001):
"...экосистема, в которой сосуществует бесплатное и коммерческое ПО, а заказчики всегда могут выбрать, что им удобнее. (...) Та часть движения open source, которая называется GPL, нарушает этот цикл, а именно, исключает для коммерческой компании возможность использовать результаты какой-либо из этих работ или опираться на такую работу. (...) есть люди, которые вообще отказывают в праве на существование коммерческому ПО, т.е. не допускают создания вокруг коммерческого ПО рабочих мест и налогов. Их немного, но лицензия GPL разработана именно такими людьми. (...) Когда говорят об открытом исходном коде, часто имеют в виду GPL. Open source и GPL — это разные вещи."


Я не знаю, как выглядело "The Open Source Definition" в 2001 году, но то, что я вижу сейчас на www.opensource.org, а именно, "The Open Source Definition v1.9", вообще никак не противоречит GPLv2. Ни в одном пункте GPL нет противоречия правилам Open Source потому, что GPL — это одна из тех свободных лицензий, которые создавались на основе требований open source. Это первое.

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

Совсем другое дело, что коммерческие компании хотят продавать продукты с закрытым исходным кодом, но при этом хотят использовать код открытых разработок. Э, так не пойдет! Существуют совершенно конкретные решения этой проблемы. Например, можно не использовать код открытых проектов, а создать свой, используя лишь идею, — это возможно и не запрещено. Или, например, сегодня многие open source-проекты распространяются под "двойной лицензией": хочешь использовать проект бесплатно — твой продукт должен быть открытым (повторяю, "открытый" — не значит "бесплатный"); хочешь закрыть доступ к своему исходному коду и/или ограничить свободу распространения твоего продукта — купи коммерческую лицензию и наслаждайся.

Однако, ни Биллу Гейтсу, ни поддерживающим его лицам не выгодно рассматривать вопрос именно с этой стороны. Они специально питают дезинформацией умы пользователей/разработчиков, потому что идет целенаправленная информационная война против движения open source (а конкретно, Ричарда Столлмана). И эта война — обоюдная. Битва гигантов, так сказать, за господство в мире ИТ.

Я не против этой битвы, скорее даже — "за", хотя я еще не решил, на чьей я стороне. Однако, поражает количество разработчиков, которые даже не удосуживаются просто прочитать GPL (не говоря уже о том, чтобы действительно разобраться в вопросе), прежде чем высказывать своё мнение касательно open source. Легко использовать информацию, которую ляпнул сосед дядя Вася. А самому разобраться — просто лень?

3 марта 2006 г.

О парном программировании и рабочем пространстве

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

Читая некоторые книги и статьи по организации процесса и рабочего пространства (например, Спольски, Рейнвотер) натыкаюсь на заявления о том, что у каждого программиста должен быть отдельный кабинет или хотя бы закуток, в котором программист мог бы единолично предаваться процессу программирования. Спольски, например, не отрицает парного программирования, но настаивает на отдельных кабинетах. Некоторые авторы вообще против парного программирования.

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

На мой взгляд, разделение рабочего пространства на отдельные кабинеты снижает производительность и способствует отвлеканию от рабочего процесса: интернет, общение с друзьями по сети и пр. Да, в отдельном кабинете программист чувствует себя уверенно и, возможно, ощущает свою значимость, как специалиста. Но вселить в программиста уверенность и ощущение собственной значимости можно и другими способами, а в некоторых случаях, и вовсе не полезно :)

Конечно, нельзя сказать, что если программисты будут сидеть в одной комнате, то они не будут отвлекаться на "различную ерунду". Но, во-первых, они будут это делать значительно реже — это проверенный факт. А во-вторых, в отдельных кабинетах программист лишается, так сказать, коллективного разума или коллективной базы знаний. В отдельном кабинете просто невозможно встать и сказать "Люди, у меня проблема в том-то. Кто мне поможет ее решить?" Максимум, что можно сделать в отдельном кабинете, это задать вопрос по почте или организовать поход по другим кабинетам, задавая каждому один и тот же вопрос.

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

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