Первое сообщество сторонников обмена программами
Ричард Столлман: «Пользователи должны иметь право свободно изменять программы в соответствии со своими нуждами и свободно обмениваться программами, поскольку взаимопомощь — основа общества» |
Попав в 1971 году в лабораторию искусственного интеллекта (AI Lab) Массачусетского технологического института, я оказался вовлечен в сообщество сторонников свободного обмена программами, существовавшего уже долгие годы. Свободный обмен программами не ограничивался тогда рамками только нашего сообщества; он существовал столь же долго, как и сами компьютеры, а обмениваться рецептами люди стали с момента возникновения кулинарии. Однако мы делали в этом направлении больше многих.
В AI Lab использовалась операционная система разделения времени, получившая название ITS (Incompatible Time-sharing System), которую хакеры* лаборатории спроектировали и написали на языке ассемблера для Digital PDP-10, одного из важнейших компьютеров нашей эпохи. Как участник этого сообщества, как хакер AI Lab, я должен был развивать эту ОС дальше.
Мы не называли наши программы «свободно распространяемыми» (free software), поскольку тогда этого термина попросту не существовало, но суть была той же. Если специалисты другого университета или какой-либо компании хотели перенести или использовать программу, мы были готовы им ее предоставить. Если кто-то другой использовал неизвестную нам и интересную программу, мы всегда могли попросить ее исходные тексты, чтобы почитать, изменить или позаимствовать фрагменты для новой программы.
Крах сообщества
В начале 80-х, когда Digital прекратила выпуск компьютеров серии PDP-10, ситуация резко изменилась. Архитектуру этих машин, казавшуюся в 60-х элегантной и мощной, невозможно было естественным образом расширить для поддержки больших адресных пространств, появление которых стало возможным в 80-х. Это означало, что практически все программы, созданные для ITS, оказались непригодными.
Сообщество хакеров AI Lab распалось незадолго до этого. В 1981 году образовалась новая компания Symbolics, куда перешли практически все хакеры лаборатории, и поредевшее сообщество существовать дальше не могло. (Эти события описаны в книге «Хакеры» Стива Леви, дающей ясную картину жизни сообщества в его лучшие времена). Когда в 1982 году лаборатория приобрела новую PDP-10, руководство решило вместо ITC использовать коммерческую операционную систему, разработанную в самой Digital.
Современные для той эпохи компьютеры, такие как VAX или 68020, имели свои собственные операционные системы, но ни одну из них нельзя было отнести к категории свободно распространяемых: вы подписывали соглашение о неразглашении даже приобретая исполняемую копию системы.
То есть первое, что вы делали, решив воспользоваться компьютером — это обещали отказать в помощи своему соседу. Взаимопомощь категорически воспрещалась. Правило, которым руководствовались владельцы коммерческого ПО, звучало так: «Если вы поделились программой со своим соседом — вы пират. Если вы хотите что-либо в ней изменить — обращайтесь к нам».
Вывод о том, что социальный уклад коммерческого ПО, то есть уклад, который запрещает вам делиться или обмениваться программами, антиобщественен, неэтичен, попросту несправедлив, некоторым из читателей может показаться абсурдным. Но как еще можно назвать уклад, базирующийся на разделении общества и осознанно оставляющую пользователей без помощи? Читатели, которым данный вывод кажется абсурдным, могут принять социальный уклад коммерческого ПО как данность или оценивать ее с позиций компаний, предлагающих коммерческие программы. Сторонники данного подхода долго и упорно убеждали людей в том, что такой подход является единственно возможным. Когда поставщики коммерческого ПО говорят о «соблюдении своих прав» или «необходимости остановить пиратство», на самом деле это всего лишь прикрытие их действительных намерений. По сути, за всеми этими лозунгами скрывается ряд предположений, правомерность которых никаким сомнениям не подвергается; предполагается, что общественность примет эти предположения как само собой разумеющееся. Давайте разберемся.
Первое предположение состоит в том, что программные компании имеют несомненное естественное право собственности на свое программное обеспечение и, как следствие, власть над всеми своими пользователями. (Если бы это было естественным правом, тогда вне зависимости от того, какой вред оно бы ни несло, мы не могли бы против этого протестовать). Интересно отметить тот факт, что Конституция США и правовые традиции опровергают эту точку зрения; авторское право не является естественным правом, а является искусственно созданной, навязанной правительством монополией, которая ограничивает естественное право пользователей на копирование программ. Еще одно предположение заключается в том, что единственная важная характеристика любой программы — то, какую работу она вам позволяет выполнять; то есть мы, пользователи компьютеров, не должны заботиться о том, в каком именно обществе оно позволяет нам жить.
Третье предположение — мы никогда не получим полезную программу, если не согласимся на то, что разработчик имеет власть над всеми пользователями ее программы. Это предположение казалось правдоподобным до тех пор, пока движение за свободно распространяемые программы не продемонстрировало, что мы можем получить достаточно полезное ПО, не заковывая при этом себя в цепи рабства.
Если мы не принимаем эти предположения за истину и рассматриваем эти проблемы, исходя из общепринятой морали, при этом на первое место ставя интересы пользователей, мы придем к совсем иным выводам. Пользователи должны иметь право свободно изменять программы в соответствии со своими нуждами и свободно обмениваться программами, поскольку взаимопомощь — основа общества. На этих страницах не так много места, чтобы я мог подробно изложить обоснование такой точки зрения, поэтому я отсылаю вас на мою Web-страницу (http://www.gnu.org/philosophy/why-free.html).
Жесткий моральный выбор
С распадом моего сообщества, вести прежний образ жизни стало невозможно. Я столкнулся с проблемой морального выбора.
Самое простое решение — присоединиться к миру собственнического ПО, подписывая соглашения о неразглашении и обещая отказать в помощи своим коллегам-хакерам. Скорее всего, я бы создавал программы, которые распространялись бы в соответствии с соглашениями о неразглашении, вынуждая других людей предательски поступать по отношению к своим коллегам.
Так я смог бы зарабатывать деньги и, возможно, писать программы в свое удовольствие. Но я знал, что в конце карьеры, оглянувшись на пройденный путь и поняв, что многие годы я строил стены, разделявшие людей, я бы осознал, что потратил свою жизнь на то, чтобы этот мир стал хуже, чем был.
К тому времени мне пришлось испытать на себе действие соглашения о неразглашении, когда один из программистов отказался предоставить мне и AI Lab исходные тексты управляющей программы для принтера. (Из-за отсутствия в ней определенных возможностей мы практически не могли пользоваться принтером). Поэтому я не мог признать законность соглашений о неразглашении. Я был ужасно разозлен, когда тот программист отказался поделиться с нами текстами; я не мог изменить свои позиции и поступить также с кем-то другим.
Был еще один выход — прямой, но неприятный. Оставить программирование. В этом случае я не смог бы употребить свои знания и опыт во зло, но тогда они пошли бы прахом. Никто не смог бы обвинить меня в том, что я служу разделению общества и способствую ограничению прав пользователей, но это бы происходило все равно, пусть и без моего участия.
Поэтому я искал способ, при котором как программист мог бы делать что-то полезное. И я спросил себя, существует ли программа или программы, которые я мог бы написать и при этом способствовать возрождению своего сообщества?
Ответ был очевиден: первое, что требовалось — это операционная система. С помощью операционной системы можно делать очень многое; без нее вы вообще не можете работать на компьютере. Обладая свободно распространяемой операционной системой, мы могли бы снова обрести сообщество сотрудничающих друг с другом хакеров — и пригласить всех в нем участвовать. И каждый мог бы использовать свой компьютер не присоединясь к заговору молчания, чтобы оградиться от своих друзей.
Поскольку мне уже приходилось принимать участие в разработке операционной системы, необходимые навыки у меня были. И хотя я не мог быть полностью уверен в успехе, я взялся за это дело. Я решил создать систему, совместимую с Unix, чтобы она была переносимой, и чтобы пользователи Unix могли бы легко на нее перейти. Название GNU было выбрано для нее в соответствии с хакерской традицией как рекурсивный акроним выражения «GNU?s Not Unix» («GNU — это не Unix»).
Операционная система — это не только ядро, которого достаточно для работы других программ. В 70-х годах каждая операционная система включала в себя командные процессоры, ассемблеры, компиляторы, интерпретаторы, отладчики, текстовые редакторы, мейлеры и многое другое. Все это было в ITS, Multics, VMS и Unix. Все это должно было входить в состав и операционной системы GNU. Позже, я услышал слова, приписываемые Хилелу**.
Если я не живу для себя, то кто будет жить для меня?
Если я живу только для себя, кто я такой?
Если не теперь, то когда?
Свободно распространяемое как лишенное ограничений
Термин «свободно распространяемое ПО» иногда толкуют превратно — он никак не связан с ценой. Он говорит только о свободе. Ниже приводится определение свободно распространяемого ПО. Программа является свободно распространяемой для вас, конкретного пользователя, если:
- вы имеете неограниченное право использовать программу для любой цели;
- вы имеете неограниченное право менять программу, адаптируя ее к своим требованиям (чтобы реализовать это право на практике, необходим доступ к исходным текстам, поскольку изменить программу, не меняя при этом исходных текстов, крайне затруднительно);
- вы имеете неограниченное право распространять копии программы, как бесплатно, так и за деньги;
- вы имеете неограниченное право распространять измененные версии программы, так чтобы могло воспользоваться сообщество вашими усовершенствованиями.
Поскольку термин «свободно распространяемое» говорит о свободе, а не о цене, ничто не мешает вам продавать подобное ПО. Свобода продавать копии имеет критическое значение: наборы свободно распространяемых программ, продаваемых на компактах-дисках, важны для сообщества, а их продажа является важным способом получения средств на дальнейшую разработку свободно распространяемого ПО. Следовательно, программы, которые нельзя включить в подобные наборы, свободно распространяемыми не являются.
Из-за двусмысленности термина «свободно распространяемые» долгое время продолжался поиск альтернативы, но приемлемого варианта никто так и не нашел. В английском языке слова имеют намного больше значений и оттенков смысла, чем в любом другом языке, но в нем нет слова, которое означало бы свободу в значении неограниченность, пожалуй, самым близким по смыслу является слово «unfettered» (нестесненный). Такие варианты, как «liberated» (освобожденный) и «freedom» (независимый) и «open» (открытый) либо имеют немного иной смысл, либо какие-то иные недостатки.
Программное обеспечение GNU и система GNU
Создание целостной системы — очень большой проект. Чтобы осуществить его, я решил там, где это возможно, использовать уже имеющиеся свободно распространяемые программные компоненты. К примеру, в самом начале в качестве основного средства форматирования текста я применял TeX; а несколькими годами позже вместо того, чтобы написать еще одну оконную систему, я воспользовался X Window System.
Поэтому система GNU — это не то же самое, что и набор всех программных компонентов GNU. В состав системы GNU входят программы, которые были созданы вне рамок проекта, разработаны иными людьми и написаны при реализации иных проектов для иных целей, но которые, тем не менее, мы смогли использовать, поскольку они также являются свободно распространяемым ПО.
Начало проектаВ январе 1984 года я ушел из Массачусетского технологического института и взялся за разработку программного обеспечения GNU. Это решение было вынужденным, поскольку я не хотел, чтобы институт мог повлиять на условия распространения GNU. Если бы я остался в штате, MIT имел бы права собственности на результаты моей работы и мог бы навязать свои условия распространения, даже объединить созданные программы в коммерческий пакет. Я не хотел проделать огромную работу только затем, чтобы бессильно признать, что не могу ею воспользоваться для достижения поставленной цели: создания нового сообщества, поддерживающего идею свободного обмена программами.
Однако профессор Винстон, ставший руководителем AI Lab, разрешил мне по-прежнему работать на оборудовании лаборатории.
Первые шагиНезадолго до начала Проекта GNU я услышал о Free University Computer Kit, также известном как VUCK (голландское слово ?свобода? начинается с буквы V). Это компилятор, способный работать со многими языками, в том числе Си и Паскаль, и создавать исполняемые модули, которые можно было исполнять на машинах самого разного типа. Я обратился к автору компилятора, с просьбой разрешить мне использовать его для реализации своего проекта.
Он прислал мне язвительный ответ, заявив, что университет свободный, а компилятор — нет. Поэтому я решил, что первой программой, которую я создам в рамках Проекта GNU, станет многоязычный, многоплатформенный компилятор.
Надеясь избежать необходимости самому писать весь компилятор, я взял за основу исходные тексты компилятора для Pastel — многоплатформенного компилятора, разработанного в лаборатории Lowrence Livermore Laboratory. Он поддерживал и был написан на расширенной версии языка Паскаль, предназначенной для системного программирования. Я добавил интерфейс Си и начал переносить его на компьютер Motorola 68000. Однако мне пришлось отказаться от последнего решения после того, как я выяснил, что компилятору требуется несколько мегабайт стекового пространства, а ОС Unix на Motorola 68000 предоставляла лишь 64 Кбайт.
Более того, я узнал, что компилятор Pastel выполняет синтаксический разбор всего входного файла, по которому строит дерево разбора, затем все дерево преобразует в цепочку «инструкций», после чего создает выходной файл, ни на одном из этапов не освобождая памяти. В этот момент я осознал, что должен написать свой компилятор полностью, с самого начала. Им стал компилятор, теперь известный как GCC; в нем не использовано ни строчки из исходных текстов компилятора Pastel, но не обошлось без интерфейсного модуля Си, который я сам же и написал. Все это произошло несколько лет спустя; а начал я с создания GNU Emacs.
GNU EmacsЯ начал работать над GNU Emacs в сентябре 1984 года, а в начале 1985-го уже имел работоспособную версию. Благодаря этому я смог для редактирования пользоваться средой Unix; раньше, чтобы не заниматься изучением vi или ed, чего мне совсем не хотелось, я редактировал свои тексты на машинах другого типа.
В это время многие из программистов захотели работать с GNU Emacs, поэтому возник вопрос, как его распространять. Кончено, я опубликовал его на анонимном ftp-сервере, размещенном на компьютере MIT, с которым я работал. (Этот компьютер под именем prep.ai.mit.edu таким образом стал основным ftp-узлом распространения GNU; когда несколько лет спустя я перестал работать в MIT, мы дали нашему ftp-серверу то же имя). Но в тот момент многие не имели доступа в Internet и не могли сделать копию с помощью ftp. Что я мог для них сделать?
Я мог бы сказать: «Поговорите со своими друзьями, имеющими выход в Internet, и попросите их сделать для вас копию». Или мог бы сделать то же, что и с оригинальным Emacs для PDP-10, сказать им: «Пришлите мне ленту, и я отправлю вам Emacs». Но в тот момент я был безработным и пытался заработать деньги на свободно распространяемом ПО. Поэтому я объявил, что готов за 150 долл. прислать по почте ленту с Emacs любому, кто хочет его получить. Таким образом, я начал коммерческую деятельность по тиражированию своих программ, что и стало предшественником компаний, которые сейчас распространяют системы GNU/Linux.
Может ли любой свободно воспользоваться программой?
Если программа, выходя из-под пера своего автора, становится свободно распространяемой, это необязательно означает, что каждый, кто имеет ее копию, может свободно ее распространять. Например, общедоступное ПО, то есть такое, на которое не распространяется авторское право, является свободно распространяемым; но любой человек может на его основе создать коммерческую программу. Точно также, многие свободно распространяемые программы защищены авторским правом, но распространяются по условиям простых разрешающих лицензий, которые допускают создание модифицированных коммерческих версий.
Классическим примером тому является оконная система X Window System. Эта система, созданная в MIT и выпускаемая как свободно распространяемое ПО с разрешающей лицензией, вскоре стало широко использоваться различными компьютерными компаниями. Они добавляли X к своим коммерческим Unix-системам, только в двоичном виде, и продавали его с тем же самым соглашением о неразглашении. Эти экземпляры X оказывались свободно распространяемым ПО не более, чем сами Unix-системы.
Разработчиков X Window System такая ситуация не удивила, поскольку они предполагали, что это произойдет. Целью была не свобода, а «успех», определяемый как «большое число пользователей». Они не заботились о том, насколько свободными окажутся пользователи и хотели лишь, чтобы их было много.
Это привело к парадоксальной ситуации, где различные способы определения свободы давали различные ответы на вопрос, является ли эта программа свободно распространяемой. Если судить о том, каким образом эту свободу определяют условия распространения X Window, можно сказать, что она относится к свободно распространяемому программному обеспечению. Но если попытаться выяснить, какой свободой обладает ее конкретный пользователь, можно с полным правом назвать эту систему коммерческой. Большинство пользователей X работали с коммерческими версиями, которые поставляются с Unix-системами, а не со свободно распространяемой ее версией.
Copyleft и GNU GPL
Цель GNU состояла в том, чтобы предоставить пользователям свободу, а не добиться популярности. Поэтому мы были вынуждены таким образом составить лицензионное соглашение, чтобы не допустить превращения программного обеспечения GNU в коммерческое. Свой метод мы назвали copyleft***.
Copyleft предусматривает применение традиционных законов о защите авторского права, но заставляет его служить совсем иным целям: вместо средства приватизации программного обеспечения, он становится средством, позволяющим сохранить программы свободно распространяемыми.
Основная идея copyleft состоит в том, чтобы дать каждому пользователю возможность использовать, копировать, изменять программу и распространять модифицированные версии, при условии, что их, в свою очередь, не запрещается изменять. Таким образом важнейшие свободы, которые собственно и определяют смысл «свободно распространяемого ПО», гарантированы каждому, кто получил копию; они становятся неотъемлемыми правами.
Для обеспечения эффективной реализации принципов copyleft, модифицированные версии также должны оставаться свободно распространяемыми. Это гарантирует, что результатами работы, в которой наши программы использовались в качестве основы, смогут воспользоваться все члены нашего сообщества в том случае, если эти результаты будут опубликованы. Когда программисты по своему желанию совершенствуют программы GNU, имеется нечто, не позволяющее их руководству заявить: «Вы не можете делиться с другими этими изменениями, поскольку мы собираемся использовать их для создания своей коммерческой версии программы».
Требование, чтобы модификации оставались свободно распространяемыми существенно, если мы хотим гарантировать свободу каждому пользователю этой программы. Компании, приватизировавшие X Window System, обычно вносили в нее ряд изменений с тем, чтобы перенести ее на свои платформы. Эти изменения были незначительны по сравнению с огромным размером X, но они были нетривиальны. Если внесение изменений было оправданием ограничений свободы пользователей, то воспользоваться таким оправданием легко сможет каждый.
Возникают и другие вопросы, в частности связанные с объединением свободно распространяемых и коммерческих программ. Такая комбинация неизбежно окажется за пределами категории свободно распространяемого ПО. Если есть какое-либо ограничение свободы, действующего для коммерческой составляющей, оно будет перенесено и на целое. Разрешить подобные комбинации означало бы оставить такую дыру, которая запросто утопила бы корабль. Следовательно, важнейшее требование copyleft позволяет закрыть эту дыру: все, что добавляется или объединяется с программой, имеющей статус copyleft, должно быть таким, чтобы общую, комбинированную версию по-прежнему можно было свободно распространять и присвоить ей гриф copyleft.
Конкретная реализация принципа copyleft, которую мы используем для большинства программ GNU — это GNU General Public License, или, для краткости, GNU GPL. В особых случаях применяются другие разновидности copyleft. Руководство пользователя по GNU также имеет гриф copyleft, но условия его намного проще, поскольку для такого рода материалов нет необходимости соблюдать все строгости GNU GPL.
Free Software Foundation
По мере роста интереса к Emacs в Проекте GNU стали участвовать и другие люди, и мы решили, что пришло время подумать об изыскании источников финансирования. Поэтому в 1985 году мы создали Free Software Foundation — благотворительный фонд для разработки свободно распространяемого ПО. Кроме того, фонд взял на себя распространение лент с Emacs; позже он стал поставлять и другие свободно распространяемые программы (созданные как в рамках Проекта GNU, так и вне его) на лентах, а также продавать руководства к ним.
FSF принимал пожертвования, но большая часть доходов всегда поступала от продаж копий свободно распространяемого ПО и связанных с ним услуг. Сейчас фонд продает компакт-диски с исходными текстами, с двоичными модулями, прекрасно отпечатанные руководства (все материалы можно свободно распространять и изменять), а также Deluxe Distributions (где мы строим обширную коллекцию ПО для предпочитаемой заказчиком платформы).
Сотрудники Free Software Foundation разработали и поддерживают несколько программных пакетов GNU. Из них стоит особо отметить два: библиотеку Си и shell. Библиотека используется любой программой, работающей в операционной системе GNU/Linux для взаимодействия с Linux. Она была разработана сотрудником FSF Роландом Макграсом. Оболочка, с которой работает большинство систем GNU/Linux, называется BASH (Bourne Again Shell****), созданная еще одним сотрудником FSF Брайаном Фоксом.
Мы финансировали их создание, поскольку Проект GNU не замыкается исключительно на инструментарии и среде разработки. Нашей целью является полная операционная система и эти программы необходимы для достижения этой цели.
Поддержка свободно распространяемого ПО
Идея свободно распространяемого ПО противоречит традиционной практике распространения программ, но не против бизнеса вообще. Если компании не нарушают свободы пользователей, мы желаем, чтобы им сопутствовал успех.
Продажа копий Emacs — пример одного из возможных методов тиражирования свободно распространяемого ПО. Когда эта деятельность перешла к FSF, мне понадобился иной способ, чтобы зарабатывать на жизнь. Я пришел к выводу, что таковым может служить продажа услуг, связанных со свободно распространяемыми программами, которые я создавал. К ним относятся обучение по таким темам, как настройка GNU Emacs, адаптация и перенос GCC на новые платформы.
Сейчас каждый из этих видов бизнеса, связанного со свободно распространяемым ПО, практикуется несколькими компаниями. Одни распространяют эти программы на компакт-дисках, другие предлагают услуги, начиная с ответов на вопросы пользователей, касающиеся устранения ошибок, и заканчивая реализацией существенных новых возможностей. Начали даже появляться компании, создающие новые свободно распространяемые продукты.
И все же будьте осторожны: некоторые компании, ассоциирующие себя с термином «открытые исходные тексты», на самом деле строят свой бизнес на коммерческих программах, работающих вместе со свободно распространяемым ПО. По сути, эти компании — сторонники собственнических программ; их продукты соблазняют пользователей отказаться от своих свобод. Они называют свои решения продуктами «увеличивающими прибавочную стоимость», то есть пытаются вынудить нас предпочесть удобство свободе. Если мы ценим свободу выше, мы должны назвать эти продукты «лишающими свободы».
Технические цели
Основная цель Проекта GNU состояла в создании свободно распространяемого ПО. Даже если у GNU нет технических преимуществ перед Unix, то социальные и этические преимущества все же есть. Мы посчитали естественным использовать известные стандартные, зарекомендовавшие себя решения, чтобы избежать произвольно установленных ограничений на размер, а также все возможные 8-разрядные коды везде, где это имеет смысл.
Кроме того, мы отказались от присущей Unix ориентации на небольшой размер памяти, решив не поддерживать 16-разрядные машины (было очевидно, что к моменту завершения Проекта GNU 32-разрядные компьютеры станут нормой жизни), и не предпринимали попыток сократить используемую память, если ее размер не превышал 1 Мбайт. В программах, для которых поддержка файлов очень большого размера не была критичной, мы рекомендовали программистам полностью читать входной файл целиком, а уже затем сканировать его содержимое, не заботясь о проблемах ввода/вывода. Дареные компьютеры
По мере укрепления репутации Проекта GNU, нам стали передавать в дар машины, на которых работала ОС Unix, для реализации нашего проекта. Это оказалось весьма полезным, поскольку проще всего разрабатывать компоненты GNU в среде Unix, постепенно подменяя компоненты этой операционной системы. Но тут возник этический вопрос: имеем ли мы вообще право на копию Unix. ОС Unix была и остается коммерческим ПО, а идеология Проекта GNU запрещает нам использовать какие бы то ни было коммерческие программы. Но исходя из тех же соображений, которые заставляют признать юридически законной самооборону в тех случаях, когда речь идет о защите своей жизни, я пришел к выводу, что правомерно использовать коммерческий пакет, когда он столь важен для разработки свободно распространяемого аналога, который, в свою очередь, позволит другим пользователя отказаться от работы с коммерческим пакетом.
Но даже если это вынужденное зло, оно все равно остается злом. Сейчас мы не используем Unix, поскольку заменили их на свободно распространяемые операционные системы. Если мы не можем заменить операционную систему, установленную на компьютере, на свободно распространяемую, мы меняем компьютер.
Список задач GNU
По мере развития Проекта GNU увеличивалось число системных компонентов, заимствованных или созданных заново, и в конце концов было признано необходимым составить список недостающих компонентов. Ориентируясь на этот список, мы набрали разработчиков для создания необходимых компонентов. В дополнение к недостающих частей Unix, мы перечислили в этом списке и другие полезные проекты, касающиеся разработки ПО и подготовки документации, которыми, по нашему убеждению, должна обладать действительно полная система.
Сейчас в списке задач GNU практически не осталось Unix-компонентов — эта работа заверщена, не считая создания ряда не столь критичных модулей. Но в списке по-прежнему есть проекты, которые можно назвать «приложениями». Любая программа, которая необходима даже очень узкому классу пользователей, станет полезным дополнением к операционной системе.
В этом списке указаны даже игры, причем они были добавлены в него с самого начала. В состав Unix входят игры, поэтому естественно, что они предусмотрены и в Проекте GNU. Но совместимость для игр — вопрос не столь важный, поэтому мы не стали следовать списку игр, которые есть в Unix. Вместо этого мы перечислили спектр различных типов игровых программ, которые могут понравиться пользователям.
Лицензия для библиотеки GNU
В Си-библиотеке GNU используется особый вариант формулировки copyleft, получивший название GNU Library General Public License (LPGL), которая позволяет использовать эту библиотеку для подключения коммерческого ПО. Почему было сделано такое исключение?
Библиотека Си выполняет общую работу; каждая коммерческая система или компилятор поставляются с библиотекой Си. Следовательно, если мы разрешим использовать нашу библиотеку Си только для свободно распространяемого ПО, никакого преимущества данной категории программ такое решение не даст, а только отобьет охоту работать с нашей библиотекой.
Единственная система, для которой сделано исключение, — это система GNU (в том числе, GNU/Linux). Здесь используется только одна Си-библиотека — Си-библиотека GNU. Поэтому условия распространения этой библиотеки определяют возможность компилировать коммерческую программу для системы GNU. Нет никаких этических причин разрешить использовать коммерческую программу на системе GNU, но со стратегической точки зрения кажется, что, запретив это, мы скорее будем препятствовать распространению системы GNU, нежели стимулировать разработку свободно распространяемых приложений.
Вот почему использование Library GPL — верная стратегия в отношении библиотеки Си. Для других библиотек, стратегические решения принимаются с учетом условий каждого конкретного случая. Если библиотека выполняет какую-либо специальную работу, способную помочь при создании определенных типов программ, тогда она выпускается в соответствии с условиями GPL, то есть ограничена только свободно распространяемыми ПО. Это способ помочь другим разработчикам таких программ, поскольку они будут иметь преимущество по сравнению с программистами, работающими над коммерческими системами.
Рассмотрим GNU Readline — библиотеку, которая была создана для редактирования командной строки в BASH. Эта библиотека поставляется в соответствии с обычной лицензией GNU GPL, а не Library GPL. Скорее всего, вследствие этого число используемых модулей Readline меньше, чем могло бы быть, но мы не рассматриваем это как убытки. В то же время, по крайней мере одно полезное приложение было создано специально как свободно распространяемое только для того, чтобы в нем можно было применять Readline и это реальная прибыль для сообщества.
Разработчики коммерческих программ имеют преимущества за счет финансирования; разработчикам свободно распространяемого программного обеспечения необходимо самим создавать преимущества друг для друга. Я надеюсь, что в один прекрасный день у нас будет большой набор библиотек, выпускаемых под лицензией GPL, и которые при этом нельзя использовать в коммерческих программах. Эти библиотеки позволят создавать полезные модули, играющие роль строительных блоков для новых свободно распространяемых программ, и обеспечивают значительные преимущества для дальнейшей разработки свободно распространяемого программного обеспечения.
Личная заинтересованность
Эрик Реймонд однажды заметил, что «всякая хорошая работа над программой начинается с личной заинтересованности разработчика». Возможно, так и происходит время от времени, но многие значительные компоненты программного обеспечения GNU разрабатывались для того, чтобы получить полную свободно распространяемую операционную систему. Все это развивалось с учетом перспективы и по четкому плану, а не под воздействием случайного импульса.
Эрик Реймонд: «Всякая хорошая работа над программой начинается с личной заинтересованности разработчика» |
Например, мы создали Си-библиотеку GNU, поскольку Unix-подобной системе нужна эта библиотека, оболочку Bourne Again Shell (BASH), потому что Unix-подобной системе необходима оболочка, а программу GNU tar, потому что Unix-подобной системе требуется программа tar. То же самое верно и для моих программ, Си-компилятора GNU, GNU Emacs, GDB и GNU Make.
Некоторые программы GNU были разработаны для того, чтобы противостоять конкретным угрозам нашим свободам. Так, к примеру, мы разработали gzip, чтобы заменить программу Compress, которая оказалась потерянной для сообщества из-за условий патента LZW. Мы нашли людей для создания LessTif, а также недавно выпущенных GNOME и Harmony, чтобы решить проблемы, возникающие из-за определенных коммерческих библиотек. Мы подготовили GNU Privacy Guard, чтобы заменить популярную, но не являющуюся свободно распространяемой программой шифрования, поскольку пользователи не должны выбирать между конфиденциальностью и свободой.
Конечно, люди пишут свои программы потому, что им интересна эта работа, и многие функции были добавлены к ним разными людьми, которые исходили из собственных нужд или интересов. Но программы существуют не поэтому.
Незапланированные разработки
В начале реализации Проекта GNU, я рассчитывал, что мы создадим полную систему GNU, а затем будем и поставлять ее как полную систему. Но все произошло не так.
Поскольку каждый компонент GNU реализовывался в ОС Unix, каждый из этих компонентов мог использоваться с Unix задолго до завершения полной системы GNU. Некоторые из этих программ стали популярными и пользователи начали их расширять и переносить на различные версии Unix, а иногда и в другие операционные системы.
Постепенно эти программы стали намного мощнее и позволили собрать средства, а также получить новые модули для других разработок в рамках проекта GNU. Но в то же время, такая стратегия вынудила отложить на несколько лет реализацию минимальной работоспособной системы, поскольку разработчики GNU тратили время на поддержку перенесенных версий и расширение возможностей существующих компонентов, вместо того, чтобы создавать один за другим недостающие фрагменты.
GNU HURDК 1990 году система GNU была практически закончена; не хватало только одного из базовых компонентов — ядра. Мы решили реализовать ядро как набор серверных процессов, работающих на Mach — микроядре, создаваемом в университете Карнеги-Меллона, а затем в университете штата Юта. GNU HURD представляет собой набор серверов (или herd of gnus, что значит «стадо гну»), которые работают на базе Much и выполняют различные обязанности ядра Unix. Начало разработки откладывалось в ожидании выпуска Much, которое, как было обещано, станет свободно распространяемым программным обеспечением.
Одной из причин выбора такой архитектуры было стремление избежать того, что казалось самой сложной частью работы: отладки ядра при отсутствии отладчика исходных текстов. Эта часть работы была уже проделана при создании Mach и мы рассчитывали отладить серверы HURD как пользовательские программы с помощью отладчика GNU debugger (GDB). Но прежде, чем это стало возможно, прошло очень много времени, а многопотоковые серверы, которые обмениваются сообщениями друг с другом, как выяснилось, отладить очень трудно. Попытки заставить HURD работать как единое целое растянулись на долгие годы.
AlixИзначально ядро GNU предполагалось назвать не HURD, а Alix — в честь женщины, которую я тогда любил. Она, системный администратор Unix, заметила однажды, как хорошо ее имя соответствует традициям наименования разновидностей Unix. В шутку она заявила своим друзьям: «Кое-кто назовет в мою честь ядро». Я ничего не сказал по этому поводу, но решил сделать ей сюрприз, назвав ядро именем Alix.
Но все произошло не так, как я рассчитывал. Майкл Бушнел (теперь Томас), ведущий разработчик ядра, предпочел название HURD, а именем Alix стали называть основную часть ядра — часть, которая должна была перехватывать системные вызовы и обрабатывать их, посылая сообщения серверам HURD.
В конце концов мы с Аликс расстались, она сменила имя; с другой стороны, архитектура HURD изменилась так, что библиотека Си теперь посылала сообщения непосредственно серверам и компонент с названием Alix была исключена из архитектуры.
Но перед тем как это случилось, ее друзья пользовались именем Alix в исходных текстах HURD и упоминали о нем при ней. Так что определенную роль это имя все же сыграло.
Linux и GNU/LinuxGNU HURD пока не готово для массового использования. К счастью, существует другое ядро. В 1991 году Линус Торвальдс разработал Unix-совместимое ядро и назвал его Linux. В 1992 году объединение Linux с неполной системой GNU позволило предложить свободно распространяемую операционную систему. (Их объединение само по себе оказалось делом нелегким). Именно благодаря Linux мы может работать с версией системы GNU.
Мы называем эту систему GNU/Linux, чтобы подчеркнуть, что она представляет собой именно сочетание системы GNU с Linux в качестве ядра.
Будущие трудности
Мы доказали свою способность создавать широкий спектр свободно распространяемых программ. Это не значит, что мы непобедимы и всемогущи. Существует ряд вопросов, из-за которых будущее свободно распространяемого ПО выглядит достаточно неопределенным; решение этих вопросов потребует стойкости и долготерпения, возможно в течение нескольких лет. Этим вопросам посвящены следующие четыре раздела.
Секреты оборудованияПроизводители аппаратного обеспечения стремятся сохранить в секрете спецификации оборудования. Такой подход сильно затрудняет создание свободно распространяемых драйверов, так, чтобы Linux и XFree86 могли поддерживать новое оборудование. На сегодняшний день полная свободно распространяемая система существует, но завтра она может не оказаться таковой, если мы не сможем поддерживать новые модели компьютеров.
Эту проблема решается двумя способами. Программисты могут выполнять обратный инжиниринг, чтобы выяснить, как именно поддерживать аппаратуру. Остальные могут ограничить свои усилия оборудованием, которое поддерживается свободно распространяемыми программами; по мере роста наших рядов, секретные спецификации будут обречены на забвение.
Обратный инжиниринг — огромная работа; есть ли у нас программисты, решимости которых хватит для того, чтобы ее выполнить? Да, если мы непоколебимо верим в то, что свободно распространяемое ПО — это дело принципа, а драйверы, не относящиеся к такому типу программ, использоваться не должны. Готовы ли мы потратить дополнительные деньги и время, чтобы иметь возможность использовать свободно распространяемые драйверы? Да, если решимость получить свободу станет стремлением большинства.
Коммерческие библиотекиКоммерческие библиотеки, которые используются вместе со свободно распространяемыми операционными системами, для разработчиков свободного ПО превращаются в ловушки. Часто эти библиотеки крайне соблазнительны; но если вы используете их, вы попадаетесь в ловушку, поскольку ваша программа не может естественным образом стать частью свободно распространяемой операционной системы. (Проще говоря, вы можете включить в состав ОС свою программу, но она не станет работать без этой коммерческой библиотеки). Хуже того, если программа, использующая коммерческую библиотеку, становится популярной, она может заманить в ту же ловушку других, ни о чем не подозревающих программистов.
Первый пример такой проблемы, связанный с инструментарием Motif, возвращает нас в 1980-е годы. Хотя в то время еще не было свободно распространяемых операционных систем, было ясно, что рано или поздно проблема Motif для них возникнет. Участники Проекта GNU откликнулись на эту проблему следующим образом: с одной стороны, потребовав, чтобы индивидуальные проекты в области свободно распространяемого ПО, наравне с Motif поддерживали свободно распространяемые наборы виджетов X Window, а с другой, выступили с инициативой разработки свободно распространяемой альтернативой Motif. На эту работу ушли годы; LessTif, созданный группой Hungry Programmers, стал достаточно мощным, чтобы поддерживать большинство приложений Motif, лишь в 1997 году.
Примерно в то же время начала приобретать популярность еще одна коммерческая библиотека — инструментарий для построения графических пользовательских интерфейсов компании Troll Technologies, получившая название Qt. В конечном итоге Qt вошел в состав большого свободно распространяемого программного пакета — оконной системы KDE.
Свободно распространяемые системы GNU/Linux не работали с KDE, поскольку не могли использовать Qt. Однако, некоторые компании, распространяющие Linux на коммерческой основе и не придерживающиеся строгих ограничений свободно распространяемого ПО, добавляли KDE в свои системы, выпуская тем самым продукты, обладающие более широкими возможностями, но ограничивающие свободу пользователей. Все большее число программистов работало с Qt, а миллионам новых «пользователей Linux» никогда не приходило в голову, что в этом может быть скрыта проблема. Ситуация все больше обострялась.
Сообщество сторонников свободно распространяемого ПО предложило два способа решения проблемы: GNOME и Harmony.
GNOME (GNU Network Object Model Environment) представляет собой проект настольной оконной системы в рамках GNU. Начатая в 1997 году Мигелем Деиказа и разработанная при поддержке компании Red Hat Software, система GNOME должна была предоставить необходимые механизмы, используя при этом исключительно свободно распространяемое ПО. Кроме того, она обладает рядом технических преимуществ, в частности, поддерживает различные языки, не только Cи++. Но его основной целью была свобода: никаких коммерческих программ.
Harmony — альтернативная библиотека, позволяющая использовать KDE без Qt.
В ноябре 1998 года разработчики Qt объявили об изменении условий лицензии, которая, когда изменения вступят в силу, сделает ее свободно распространяемой библиотекой. Хотя доказательств у меня нет, тем не менее, я считаю, что такое решение частично обусловлено реакцией сообщества на проблему, которую представляла Qt, когда относилась к категории коммерческих программ. Что нам придется делать, когда появится новая коммерческая библиотека? Смогут ли все члены сообщества понять, что необходимо избежать ловушки? Или многие из нас готовы променять свободу на удобство и тем самым породить еще более серьезную проблему? Наше будущее зависит от нашей принципиальности.
Патенты на программыСамая серьезная угроза, с которой мы сталкиваемся — это патенты, из-за которых мы не можем долгие годы (иногда до 20 лет) использовать в свободно распространяемом ПО определенные алгоритмы и возможности. Патент на алгоритм сжатия LZW вступил в силу в 1983 году и мы до сих пор не можем создать свободно распространяемую программу, способную выполнять сжатие файлов в формате GIF на приемлемом уровне. В 1998 году, чтобы избежать судебных исков о нарушении патента, мы были вынуждены исключить из дистрибутива GNU свободно распространяемую программу, реализующую алгоритм сжатия аудиозаписей MP3.
Есть несколько способов разрешения этой проблемы: можно искать свидетельства некорректности патента, а также альтернативные способы решения той же задачи. Но каждый из этих методов работает только в определенных ситуациях. Если оба не годятся, из-за опасения нарушить патентные соглашения мы вынуждены выпускать ПО, в котором отсутствуют возможности, столь необходимые пользователям.
Те из нас, кто ценит свободно распространяемое программное обеспечение за предоставляемую им свободу, останутся приверженцами такого рода программ в любом случае. Мы будем стремиться к тому, чтобы реализовать необходимые функции, не используя алгоритмы, защищенные патентами. Но те, кто предпочитает свободно распространяемое ПО только потому, что оно превосходит свои коммерческие аналоги в техническом плане, скорее всего не откажутся от применения коммерческих версий. Таким образом, несмотря на то, что крайне полезно говорить о практической эффективности «соборной» модели разработки, о надежности и мощности некоторых свободно распространяемых программ, мы не должны на этом останавливаться. Необходимо говорить о свободах и принципах.
Свободно распространяемая документация
Самые серьезные трудности в наших свободно распространяемых операционных системах связаны не с самим программами, а с отсутствием хорошей документации. Документация — важная часть любого программного пакета. Когда свободно распространяемое ПО выпускается без хорошего руководства, это существенный недостаток. На сегодняшний день таких недостатков очень много.
Свободно распространяемая документация, как и свободно распространяемое ПО, — это вопрос свободы, а не цены. Создание такой документации во многом схоже с разработкой самих программ: вопрос в том, чтобы все пользователи получили определенные свободы. Распространение (в том числе продажа) копий должно быть разрешено, как в электронном, так и в напечатанном виде, с тем, чтобы с каждой копией программы поставлялось руководство.
Разрешение на изменения не менее важно. Конечно, речь не идет о необходимости разрешения на изменение всех видов статей и книг. К примеру, не думаю, что вы или я будете отстаивать право изменять такие статьи, как эта, которые описывают ваши действия и рассказывают о ваших взглядах.
Но существует соображение, по которому свобода вносить изменения является критической для документации на свободно распространяемые программы. Когда люди научатся пользоваться своим правом менять программы, добавляя к ним новые и изменять имеющиеся возможности, если они добросовестно относятся к делу, то посчитают своим долгом изменять и документацию. Руководство, не соответствующее программе, которую оно описывает, не отвечает требованиям сообщества.
Некоторые виды ограничений установить довольно просто. Например, требование сохранить авторские замечания создателя документации, условия распространения или список авторов — это приемлемые требования. Столь же просто потребовать, чтобы измененные версии несли на себе отметку о модификации, даже указать целые разделы, которые нельзя удалять или изменять, если эти разделы касаются нетехнических моментов.
Эти виды ограничений определить не проблема, поскольку они не мешают добросовестному программисту привести руководство в соответствие с измененной программой.
Однако разрешить менять техническую информацию в документации и затем распространять полученный результат на всех традиционных носителях, по всем обычным каналам просто необходимо; в противном случае эти ограничения будут препятствовать развитию сообщества, документация не будет распространяться свободно и нам потребуется создавать другие руководства.
Будут ли разработчики свободно распространяемого ПО достаточно информированы и терпеливы, чтобы создать весь требуемый спектр свободно распространяемых руководств? Ответ тот же — наше будущее зависит от наших базовых принципов.
Мы должны говорить о свободе
По некоторым данным, сейчас системами GNU/Linux, такими как Debian GNU/Linux и Red Hat Linux пользуется около 10 млн. человек. Свободно распространяемое ПО обрело такие преимущества, что пользователи выбирают его исходя только из практических соображений.
Но чем больше интереса проявляется к разработке свободно распространяемого ПО, тем больше клиентов у тех, кто работает в этой сфере, и больше возможностей стимулировать компании разрабатывать свободно распространяемые программы, а не собственнические коммерческие продукты. Но интерес к самим программам растет быстрее, чем к принципам, на которых они построены, и это приводит к определенным трудностям. Наши возможности противостоять угрозам и преодолевать трудности, о которых мы говорили выше, зависят от того, насколько мы будем упорно добиваться свободы. Чтобы наше сообщество не распалось, нам необходимо распространять эти идеи среди новых пользователей.
Однако попытки привлечь новых пользователей в наше сообщество значительно опережают усилия, прилагаемые с тем, чтобы научить их быть гражданами сообщества. Нам необходимо делать и то, и другое, избегая перекосов как в одну, так и в другую сторону.
«Открытые исходные тексты»
В 1998 году просвещать пользователей стало намного сложнее. Часть сообщества решила отказаться от термина «свободно распространяемое ПО» в пользу термина «ПО, распространяемое в исходных текстах» («open source software»).
Некоторые сторонники новой терминологии объясняют свое решение стремлением избежать путаницы между выражениями «свободно распространяемый» и «бесплатный» — цель достойная. Другие, однако, стремятся отойти от принципов, лежащих в основе движения за свободно распространяемое ПО и Проекта GNU, и примкнуть к предпринимателям, многие из которых придерживаются идеологии, ставящей прибыль выше свободы, выше сообщества, выше принципов. Таким образом, рассуждения об «открытых исходных текстах» главным образом касаются возможности создать высококачественные, мощные программы, но не идей свободы, сообщества и принципов.
Яркий тому пример — журналы, посвященные Linux. Они заполнены рекламой коммерческих программ, которые работают с GNU/Linux. Когда появится следующий Motif или Qt, призовет ли этот журнал воздержаться от использования таких программ или станет их рекламировать?
Бизнес может поддержать сообщество различными способами; при прочих равных все они полезны. Но получить эту поддержку в обмен на отказ говорить о свободе и принципах, может оказаться гибельным.
Термины «свободно распространяемое ПО» и «открытые исходные тексты» в той или иной степени описывают одну и ту же категорию программ, но по-разному описывают программное обеспечение и его ценность. В Проекте GNU по-прежнему используется первый термин, дабы подчеркнуть важность идеи свободы, а не технологии.
Пробуй!
Философия Йоды (отвергающего лозунг «пробуй») достаточно стройна, но мне не подходит. Почти всегда я действовал, лишь надеясь, что смогу добиться результатов и не уверенный в том, что их окажется достаточно для достижения цели. Но в любом случае я пытался, поскольку я был последним, кто мог защитить город от наступающего врага. К величайшему моему изумлению, иногда мне удавалось добиться успеха.
Иногда меня преследовали неудачи; некоторые из городов, которые я защищал, пали. Тогда я находил другой город, которому требовалась защита, и был готов к новой битве. Со временем я научился определять направление главного удара и вставал на его пути, призывая других хакеров ко мне присоединиться.
Сейчас мне редко приходиться сражаться в одиночку. Я радуюсь, когда вижу множество хакеров, возводящих оборонительные укрепления, и понимаю, что мой город будет спасен — на этот раз. Но с каждым годом опасность возрастает; Microsoft определенно выбрала своей целью наше сообщество. Если вы хотите сохранить свою свободу, будьте готовы ее защищать.
* Тот факт, что слово ?хакер? стало синонимом слова ?взломщик?, целиком лежит на совести журналистов. Мы, хакеры, такого значения не признаем и по-прежнему называем этим словом тех, ?кому нравится программировать и кто стремится совершенствоваться в этом?.
** Я атеист и не являюсь последователем никого из религиозных лидеров, но иногда их слова меня просто восхищают.
*** В 1984 или 1985 году Дон Хопкинс (весьма творческая личность) написал мне письмо. На конверте он оставил несколько забавных замечаний, в том числе и следующее: «Copyleft — all rights reversed». Я воспользовался словом copyleft в качестве названия для концепции распространения, которую продумывал в тот момент.
**** Bourne Again Shell — шутливая производная от названия Bourne Shell — популярной оболочки Unix.