© 2005, Илья Шпаньков.
Кроме неоспоримых достоинств, у традиционного коммерческого способа разработки программного обеспечения есть и недостатки. В наше время создавать новый продукт с нуля - непозволительная роскошь. Вместо того чтобы заниматься собственными уникальными идеями, программисты вынуждены решать рутинные задачи и в который раз изобретать велосипед; сроки разработки при этом катастрофически растут. Куда разумнее использовать готовые компоненты от сторонних разработчиков, но тогда встаёт вопрос лицензионных отчислений. Нередко они выливаются в ощутимые суммы, и молодой проект немедленно сталкивается с достаточно ощутимыми финансовыми затратами.
В процессе разработки всплывает ещё одна проблема: необходимость тестирования и отладки программы. Собственными силами это делать долго, непродуктивно и просто скучно. Но и оставить "на потом" эту работу нельзя: даже самая гениальная идея может погибнуть в пучине мелких недочётов и недоработок. Придётся нанимать штат тестеров. И даже продажа готового продукта, как ни парадоксально, тоже требует постоянных вложений.
Для крупных организаций всё это не проблема, но для начинающих компаний, состоящих зачастую из нескольких молодых людей с головами, полными идей, но пустыми карманами, эти затраты могут стать непреодолимой преградой на пути к славе и заслуженному благосостоянию. В последнее время много говорят о таком выходе: разработку можно вести по принципам, принятым в мире свободного программного обеспечения.
Теоретически всё просто: отлавливаете из океана свободного софта необходимые компоненты, собираете их в одно целое, вносите свои изменения или добавляете те самые собственные уникальные решения и получаете требуемый результат в короткие сроки и практически даром. Казалось бы, при таких выгодных условиях мы должны сейчас наблюдать лавинообразный переход разработчиков всего мира на "свободные рельсы", но на практике этого не происходит.
Чаще всего при рассмотрении принципов свободной разработки в качестве будущей модели для собственного проекта возникает несколько вопросов. Первый (и главный): как же продавать то, что доступно всем? Может быть, деньги - и зло, но без них жить тоже не получается, поэтому резонно надеяться на некоторое вознаграждение за свой труд. Вдобавок, как уследить за конкурентами, если код моей программы открыт? Они используют мои уникальные решения в своих продуктах, востребованность моих программ снизится, и потенциальная прибыль - вслед за ней. И вообще, если все, кому не лень, смогут изменять мой код по собственному усмотрению и распространять от своего имени, то как я сохраню за собой законные права автора?
Вопросы серьёзные, но на самом деле не всё так грустно. В мире свободного программного обеспечения отнюдь не царит анархия. Несмотря на сравнительную молодость, сообщество разработчиков и пользователей свободного софта сформировало вполне чёткие правила игры, нарушение которых так же противозаконно, как и в мире коммерческого ПО. Любая, даже самая небольшая программа, защищена одной из многочисленных свободных лицензий, самая распространённая из которых - стандартная общественная лицензия GNU. Тысячи компаний и индивидуальных разработчиков, миллионы пользователей ежедневно работают со свободным ПО и при этом нет никакой неразберихи и уж тем более анархии.
Как так выходит? Всё очень просто. В основе порядка, царящего в мире свободного программного обеспечения, лежат несколько принципов. Три главных такие: свобода, открытость и авторское право. Первые два достаточно широко обсуждаются в околокомпьютерной прессе, третий же - авторское право - часто незаслуженно забывается. Более того, по каким-то непонятным причинам бытует ошибочное мнение, что принципы свободной разработки противоречат соблюдению авторских прав. На самом деле, именно авторское право является гарантом получения реальными создателями всех положенных благ и играет стабилизирующую роль для двух других принципов - свободы и открытости.
Давайте рассмотрим каждый из трех главных принципов подробнее.
Свобода
Это основной принцип, название которого даже вошло в сам термин "свободное программное обеспечение". Согласно ему, каждый может свободно выполнять, копировать, изменять и распространять программное обеспечение. При этом ни сам автор, ни пользователи или распространители программы не имеют права хоть каким-то образом ограничивать применение к ней данных действий.
Идея сделать программное обеспечение свободным родилась не на пустом месте. Несколько десятилетий назад, когда компьютеры были такими большими и дорогими, что позволить себе их приобретение могли лишь крупные организации, программы представляли интерес лишь для тех, кто с ними работал, и без ограничений кочевали из одной научной лаборатории в другую. Разработчики, занимающиеся различными проектами, могли не делать одну и ту же работу дважды, а использовать наработки коллег и экономить время и средства. Это устраивало всех, пока компьютерная техника не стала доступна более широким слоям населения. Программное обеспечение стало товаром и приобрело все стандартные свойства последнего.
Впрочем, у программ есть и уникальные черты. Разработка (или, иными словами, изготовление, производство) программы требует определённых затрат, а вот тиражирование или копирование цифрового кода при современном уровне развития техники практически ничего не стоит. Написанную однажды программу можно бесконечно долго "клонировать", с неё не убудет, она не испортится и не исчезнет. Кроме того, само "производство" программ больше напоминает эволюционный процесс: при разработке почти всегда используется уже созданный ранее код.
На некоторых рынках свободное программное обеспечение уже занимает существенную долю. Его разработкой и использованием занимаются тысячи компаний различного масштаба. Они смогли решить для себя те вопросы, которые обсуждались в начале статьи, и, вероятно, не считают, что свобода программного обеспечения плохо сочетается с коммерческой деятельностью. Иски и судебные тяжбы по поводу заимствования одними разработчиками кода других редки (компания SCO, пару лет назад принявшаяся шумно обвинять разработчиков Linux в плагиате, так пока и не смогла подкрепить обвинения доказательствами, и дело, похоже, заглохло).
Примеряя к своему проекту принцип свободного распространения ПО, не стоит забывать одну важную вещь: эта свобода - не односторонняя. Отдавая плоды своего труда сообществу, вы не только ничего не теряете, но и получаете право использовать разработки других членов сообщества, а этот багаж во много раз превосходит ваш вклад. Другими словами, делясь малым, вы получаете взамен несоизмеримо больше. Это позволяет в короткие сроки и без каких-либо серьёзных затрат дополнить ваш собственный программный продукт новыми функциями и свойствами, на самостоятельную разработку которых у вас ушло бы немало времени. При этом индивидуальность вашего ПО не нарушается: согласно принципу свободы, вы вправе вносить любые изменения в полученный от сообщества код. И это ещё один плюс в пользу свободного софта: при коммерческом способе разработки вы можете купить право на использование сторонних компонентов, но будете вынуждены подгонять собственный код под особенности чужих разработок - вносить изменения в них зачастую запрещено.
Ещё один важный момент. Разрешая другим участникам рынка пользоваться вашими наработками, вы, тем самым, автоматически получаете огромный штат сторонних разработчиков. Все изменения и улучшения, сделанные другими программистами в вашем коде, вы свободно можете добавлять к собственному продукту. Свобода не имеет ничего общего с анархией, и на страже ваших интересов стоит лицензия GPL, согласно которой никто не вправе ограничивать распространение своего ПО, если при его создании использовалось свободное программное обеспечение (в данном случае ваше). Любой, кто воспользовался вашим кодом и сделал в нём какие-то изменения, обязан вернуть в сообщество (то есть вам) результаты своего труда. Нарушение этого правила уже относится к противозаконным действиям. Парадоксально, но, выбирая принципы свободной разработки, вы не столько отдаёте, сколько получаете! Вопреки сложившемуся мнению, свободное программное обеспечение делают не романтики и филантропы, а вполне прагматичные люди, которые умеют считать деньги и ценят своё время.
Кстати, о деньгах. "Свободное" не значит "бесплатное" (в английском языке путаницу вызывает слово "free", которое означает и свободу, и бесплатность; в русском языке это разные слова, но объяснять разницу между ними почему-то всё равно приходится). Принципы свободного распределения софта отнюдь не исключают возможность его продажи. Более того, продажа свободных программ практически ничем не отличается от аналогичных действий с коммерческим софтом. И в том, и в другом случае пользователь покупает не код как таковой, а готовое решение, отвечающее запросам покупателя. Другими словами, мы оплачиваем труд разработчиков, которые потратили время и силы на создание некоего изделия. При этом сам программный код является лишь строительным материалом (зачастую не единственным), из которого состоит конечный продукт. Единственное отличие от коммерческого способа - возможность бесплатного получения этого самого строительного материала. Пользователь свободного ПО волен выбирать: получить программу бесплатно и самостоятельно подгонять её под собственные задачи, осуществляя интеграцию с уже установленным на компьютере ПО, производя исправления в случае обнаружения ошибок, изучая принципы работы и доступные возможности программы, или оплатить услуги авторов программы по записи на носитель, доставке в ваш регион, технической поддержке, предоставлению справочного руководства и решению проблем, неизбежно возникающих в процессе работы с программой. При этом возможность бесплатного получения программы позволяет сохранять в рамках приличия стоимость вышеперечисленных услуг: пользователь будет покупать ПО, если его собственные затраты времени и денег на аналогичные действия будут превышать оплату услуг разработчиков. В случае с коммерческим софтом пользователь вынужден покупать ПО на тех условиях, которые выгодны разработчику, что часто приводит к желанию последнего получить сверхприбыль без особых на то оснований.
Открытость
Этот принцип имеет много общего со свободой, но на самом деле, это не совсем одно и то же. Речь идёт об открытости исходных кодов программного обеспечения, возможности сколь угодно глубокого их изучения и модификации.
Нередко причиной закрытости кода программ становится желание разработчиков сохранить в тайне собственные программные технологии или, если речь идёт о драйверах, конструктивные особенности выпускаемых данной компанией устройств. Оправданий множество, и они часто имеют право на существование. Бывает, что компания-разработчик открывает исходные коды своего продукта для ограниченного круга лиц, но сам продукт при этом остаётся коммерческим и не подлежит свободному распространению. Получается, что исходники могут быть открыты (хотя бы и с некоторыми ограничениями), но программа остаётся несвободной, и наоборот, свободно распространяемые программы могут не иметь открытых исходников. "Свобода" и "открытость" описывают различные принципы работы с программным обеспечением.
Какие же преимущества даёт принцип открытости пользователям и разработчикам? Для пользователей это - гарантия честности производителя и безопасности использования программ. Если код открыт, то теоретически есть возможность проверить, что в него не встроены какие-нибудь "шпионские" закладки. Используя в работе ПО с закрытым кодом, приходится верить на слово производителю программы. Но как можно доверять человеку, который изначально от тебя что-то скрывает? Величина выплаченных сумм за приобретение "супернадёжного" ПО совершенно не гарантирует этой самой надёжности. Кроме того, предлагая пользователю открытый код своей программы, разработчик менее всего склонен подсовывать некачественный "товар": если вы можете спокойно пройти на кухню и посмотреть, из каких ингредиентов готовится блюдо, ни один повар не рискнёт использовать подпорченные продукты.
Cвою выгоду из открытости извлекает и сам разработчик. Открытость кода зачастую позволяет производителю более оперативно получать сообщения об обнаруженных ошибках и, следовательно, исправлять их в максимально полном объёме и короткие сроки. По сути, каждый пользователь автоматически становится бета-тестером продукта и благодаря открытому коду не только может самостоятельно исправить найденный баг (при соответствующей квалификации), но и сообщить способ решения проблемы собственно разработчику. Точно так же сторонние программисты, использующие продукт в своих проектах, смогут самостоятельно вносить улучшения и исправления в его код, экономя разработчику время и деньги.
Но, пожалуй, одним из главных преимуществ, которое достигается сочетанием свободности распространения и открытости кода, является возможность заимствования уже готовых элементов для создания собственных программных продуктов. Получая от других разработчиков исходный код, вы можете вносить в него любые изменения для достижения наилучших результатов для вашего проекта. Как правило, сегодня большинство функций, необходимых любому современному программному продукту, уже реализовано и довольно успешно, так зачем начинать всё с начала? Гораздо разумнее взять то, что уже есть, и добавить к нему свои собственные идеи. Это быстро, удобно и продуктивно. Это позволяет значительно ускорить весь процесс создания конечного продукта, а также существенно удешевить его, затратив минимум человеко-часов отнюдь не копеечного труда программистов.
Естественно, как вы можете пользоваться наработками других разработчиков, так и они станут заимствовать ваш код для своих программных продуктов. Это страшный сон для любой коммерческой компании, привыкшей хранить свои секреты в строжайшей тайне. Рушится вся система, теряются все преимущества перед конкурентами, а ожидаемые прибыли от продаж уникального ПО стремительно растворяются в мечтах, так и не став реальностью. Но погодите отчаиваться. Если ваш конкурент взял ваш код и дополнил его своими разработками, то... вы можете использовать его обновлённый вариант в полном объёме для дальнейшего совершенствования опять же своего проекта согласно принципам свободного ПО. И этот взаимообмен может продолжаться бесконечно, а каждый его участник будет добавлять в продукт новые функции. В конце концов, если даже ваши продукты будут абсолютно идентичны (что маловероятно), вы просто станете совместно разрабатывать одну и ту же программу. И у вас, и у вашего конкурента будет своя клиентская база, поступающие от продажи продукта прибыли будут меньше, чем вы рассчитывали, но ведь и доводили проект "до ума" вы не самостоятельно, а с помощью конкурента! Он, как ваш "коллега", получит свою долю прибыли. На самом деле, полной идентичности ПО практически не встречается, каждый из конкурирующих проектов будет обладать некоторыми особенностями, позволяющими точнее ориентироваться на определённую долю рынка. И здесь ваши прибыли напрямую будут зависеть не столько от программного кода, сколько от грамотного маркетинга, а это, согласитесь, совсем другая история.
Вышеописанный процесс является именно заимствованием, ни о каком присвоении (воровстве, другим словом) кода не может быть и речи. Никто ни у кого не может украсть его разработку, так как на страже ваших интересов стоит...
Авторское право
Общедоступный - совсем не означает "ничей". Свободное программное обеспечение развивается отнюдь не в условиях анархии, и ни один программист не может сказать, что "этот код создан мной", если на самом деле это не так. Если углубиться в исходные коды любой свободной программы, то можно обнаружить текстовый файл, в котором подробно указано, кто, когда и что конкретно добавлял в программу. Этот список ведётся с самого первого дня существования программного продукта. Нередко те, кто начинали разработку, уже давно заняты в других проектах, но их имя по-прежнему сохраняется в исходниках. Поэтому никто никогда не сможет присвоить себе славу автора, таковым не являясь.
Для чего это делается? Причин несколько. Это удобно. Если в коде обнаружена ошибка, то логичней всего сказать о ней тому, кто этот код писал. Если код "именной", то уменьшается возможность внедрения в программу вредоносных добавок, авторы которых не любят себя афишировать. Внося в различные программы свои добавления и указывая свои личные данные, программисты тем самым создают своеобразный портфолио, который может оказаться весьма полезным при устройстве на работу. Также ставя свою "подпись", программист, тем самым, стимулирует самого себя на создание качественного кода: никому не хочется, чтобы над его работой кто-нибудь посмеялся, обнаружив откровенные ляпы или неаккуратность. Конечно, данная практика не ведёт напрямую к получению денег за то, что твоим кодом кто-то пользуется, но, как уже было сказано выше, в мире свободного ПО продают не код, а готовые решения, созданные с применением кода.
Впрочем, авторское право действует в мире свободного ПО не совсем так, как это принято в коммерческой среде. Во время своего появления ещё в докомпьютерную эпоху оно стояло на страже того, что какое-либо авторское изделие не будет копироваться, использоваться или изменяться без контроля со стороны самого автора. Свободное же авторское право лишь сохраняет авторство без последующих ограничений. Более того, в начале становления движения за свободное программное обеспечение появился термин "copyleft" - "авторское лево", смысл которого и заключался в том, что никто не имел права каким-либо способом ограничивать свободное распространение ПО. Таким образом, одновременное сосуществование обоих понятий в мире свободного программного обеспечения позволяет соблюдать авторство, но при этом не допускает нарушения принципов свободы распространения и использования.
На первый взгляд может показаться, что авторское право в условиях свободного ПО становится бесполезным. На самом деле это не так. Если отказаться от авторства, то сочетание свободы распространения и открытости кода приведёт именно к анархии, при которой каждый будет "тянуть одеяло" на себя, пытаясь выдать за собственные успехи достижения своих коллег. Никто не будет в ответе за качество программных продуктов, ведь в случае обнаружения ошибок или "закладок" некому будет предъявить претензии. Пусть и в слегка изменённом виде, но авторское право не только неплохо уживается со свободой и открытостью, но и служит своеобразным стабилизатором, не позволяя процессу разработки, распространения и использования свободного ПО превратиться в хаотичное перераспределение программного кода между участниками рынка.
Заключение
Конечно, разработка по принципам свободного ПО не является панацеей от всех бед и совершенно не претендует на звание "единственно верной". Каждый человек, начиная новый проект, должен взвесить все "за" и "против", чтобы выбрать тот способ работы, который окажется наиболее практичным и целесообразным в данном конкретном случае. Принцип свободности, безусловно, обладает многими положительными чертами, но и многолетнюю историю традиционной коммерческой разработки тоже не стоит забывать: не исключено, что именно такой способ окажется наиболее прибыльным. Целью же данной статьи было объяснение основных принципов Free Software, позволяющих использовать в работе иные, не доступные при традиционной разработке ПО, ресурсы. По большому счёту, любой производственный процесс, одним из видов которого является создание программного обеспечения, имеет одну главную цель: приносить его участникам вполне заслуженное вознаграждение, как моральное, неизбежно порождаемое созидательным характером труда, так и финансовое, позволяющее интегрировать участников процесса в жизнь окружающего общества на достойном уровне.
Четвертьвековой опыт развития свободного ПО доказывает, что данной цели можно достигать не только благодаря традиционным коммерческим схемам разработки, но и используя принципы свободы и открытости программного обеспечения.
Источник: Журнал "Компьютерра" (Опубликовано 6 октября 2005 г.)
Раздел: Библиотека, Разное | Добавлено 2 декабря 2005 г.