Введение

Различие между свободным программным обеспечением и коммерческим программным обеспечением состоит в доступности исходников [27]. Это значит, что свободное программное обеспечение поставляется как архив файлов исходного кода. Это может смутить новичков, так как перед тем, как использовать свободное программное обеспечение, его прийдется откомпилировать.

Большинство свободного программного обеспечения существует в откомпилированном виде. Вы можете просто установить пре-компилированные бинарники [28] Некоторое свободное программное обеспечение не распространяется в виде бинарников. Кроме того, если вы используете экзотическую операционную систему или экзотическое “железо” - многие программы будут доступны только в виде исходников. Более того, компилируя программное обеспечение самостоятельно, вы можете отключить ненужные вам опции или наоборот, включить только интересующие вас, или даже расширить функциональность компилируемой программы в соответствии со своими нуждами.

Требования

Для сборки программного обеспечения вам потребуются:

  • компьютер с работающей операционной системой,

  • базовые знания по использованию вашей операционной системы,

  • некоторое количество свободного места на вашем диске,

  • компилятор (обычно для языка программирования C) и архиватор (tar),

  • некоторое количество провизии (в особо тяжелых случаях дело может затянуться). Настоящие хакеры едят пиццу, а не quiches (что-то типа пирога с овощами и мясом).

  • чего нибудь попить (из тех же соображений). Настоящие хакеры пьют содовую – и кофеин.

  • Телефонный номер вашего друга, который занимается перекомпиляцией ядра каждую неделю,

  • много терпения для того, чтобы это сделать!

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

Компиляция

Принципы

Для того, чтобы транслировать исходный код в бинарный файл, необходимо выполнить компиляцию (compilation) (обычно это делают из исходных кодов на языках C или C++, которые являются самыми распространенными языками программирования (под UNIX) в сообществе свободного программного обеспечения). Некоторые свободные программы написаны на языках, которые не требуют компиляции (например, perl или shell), но им все-таки обычно необходима некоторая настройка.

Компиляция кода на C выполняется с помощью C компилятора, чаще всего gcc, это свободный компилятор, разработанный в рамках проекта GNU. Полное компилирование программного продукта - это комплексная задача, которая включает в себя последовательную компиляцию множества различных исходных файлов (так проще для программистов - они могут помещать различные части своей работы в отдельных файлах). Для того чтобы было проще делать такие повторяющиеся операции, существует утилита с названием make.

Четыре шага компиляции

Чтобы понять как происходит компиляция (между прочим, это поможет в решении возникающих проблем), вы должны знать четыре шага компиляции. Объект постепенно конвертируется из текстового файла, написанного на языке, который понятен для квалифицированного человека (то есть язык C), в язык, который понятен для машины (или в некоторых случаях, частично, для очень квалифицированного человека). gcc выполняет последовательно четыре программы, каждая из которых делает один из упомянутых шагов:

  1. cpp: На первом шаге происходит замена директив условной компиляции на чистые инструкции C. Это называется препроцессором ( preprocessor). Как правило, это вставка заголовков (#include) или определение макрокоманд (#define). В конце этой стадии генерируется чистый код на C.

  2. cc1: На этом шаге код на C конвертируется в код на языке ассеблера (assembly language). Сгенерированный код зависит от конечной архитектуры.

  3. as: На этом шаге происходит генерация кода из языка ассемблера в объектный код (object code) (или бинарный код (binary code)). В конце этого шага генерируются файлы с расширением .o.

  4. ld: На последней стадии происходит линковка (linkage) всех объектных файлов (.o) и необходимых библиотек, и, в результате получается выполняемый файл.

Структура распространения программ

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

  • В файле INSTALL описана процедура инсталляции.

  • В файле README содержится общая информация, относящаяся к программе (короткое описание, автор, URL где можно найти эту программу, документы имеющие отношение к программе, относящиеся к делу ссылки, и т.д.). В случае отсутствия файла INSTALL в файле README должна находиться краткая информация по инсталляции.

  • В файле COPYING должна содержаться лицензия или условия распространения программы. В некоторых случаях для этих целей используется файл LICENSE, который имеет тоже самое содержимое.

  • В файле CONTRIB или в файле CREDITS содержится список людей, имеющих отношение к этому программному продукту (активные участники, их вклад в продукт и т.д.).

  • Файл CHANGES (реже NEWS), содержит последние изменения и устраненные ошибки.

  • Файл Makefile (смотри раздел “make”) позволяет произвести компиляцию программного обеспечения (этот файл необходим для утилиты make). Этого файла часто может не существовать сразу, тогда он создается динамически в процессе настройки.

  • Весьма часто файлы configure или Imakefile позволяют сгенерировать новый файл Makefile.

  • Каталог, в котором содержатся исходные коды, и где после компиляции будут лежать бинарники обычно называется src.

  • Каталог, в котором содержится документация, относящаяся к этому программному продукту (обычно в форматах man или Texinfo) называется doc.

  • Иногда может поставляться каталог, в котором содержатся специфические для программы данные (обычно это файлы настройки, примеры получаемых данных или файлы ресурсов).



[27] Это не совсем верно, так как некоторое коммерческое программное обеспечение тоже доступно в исходных кодах. Но в этом случае пользователю запрещается использовать или изменять код коммерческого програмного обеспечения.

[28] Словом “бинарник” обозначается понятие “бинарный файл”, по аналогии с исходником. В данном случае под бинарником подразумевается бинарный файл, полученный из исходного кода программы путем компиляции. Это понятие мы применяем для упрощения структуры предложений в этой главе, хотя отдаем себе отчет в том, что это “жаргонное” выражение.