Ловушки для капризных программ Крис Касперски Хакер, номер #089, стр. 089-106-1 Скрытый потенциал ручных сборок UNIX-программистам свойственно не зажимать исходники, и подавляющее большинство программ распространяются в открытом виде. Однако народ тяготеет к готовым бинарным сборкам, зачастую даже не догадываясь, каких возможностей он лишен! Многие пользователи перекомпилируют программы, но немногие делают это правильно! Ручная сборка — достаточно сложный, неочевидный и порой взаимопротиворечащий процесс, который мы сейчас попробуем заточить. [введение] Зачем мучиться, собирая программу руками, если можно просто скачать готовую бинарную сборку. Вот топ основных причин, по которым исходные тексты лучше готовых дистрибутивов: * сборки есть не для всех платформ (в основном это касается x86-64); * для текущих версий сборки практически всегда отсутствуют, а релизы выходят нечасто, вынуждая нас использовать версию двухгодичной давности (и это далеко не преувеличение!), с завистью поглядывая на коллег, собравших последнюю альфу с кучей всяких вкусностей и нововведений; * готовые сборки включают в себя не все фичи, реализованные в исходных текстах (в частности, в состав популярного эмулятора BOCHS входит внешний интерактивный отладчик в стиле Turbo Debugger, в то время как официальные сборки содержат простейший интегрированный отладчик типа "debug.com"); * для многих программ существуют расширения, созданные сторонними разработчиками и устанавливаемые только посредством перекомпиляции; * готовая сборка зачастую включает в себя много лишних компонентов, которые только отнимают процессорные ресурсы и память, но лично нам ни разу не понадобятся; * официальные сборки компилируются с типовыми опциями оптимизации, общими для всех процессоров, в результате чего код получается неэффективным и неоптимальным (или даже вообще неработающим, к примеру, на старых процессорах типа 80386 или 80486); * при выходе новой версии всю сборку заново приходится скачивать, вместо того чтобы забрать только измененные файлы (а для часто обновляемых программ это актуально); * если программа содержит уязвимость, то атаковать готовую сборку проще, поскольку хакер знает точное расположение всех машинных команд и раскладку памяти; * заплатки к исходным текстам выходят намного быстрее и чаще, чем к бинарным сборкам; * пользоваться готовыми сборками - это не unix-way и совсем не по-хакерски. А вот теперь приведем топ основных причин, по которым готовые сборки лучше исходных текстов: * готовая сборка "весит" намного легче исходных текстов, даже сжатых самым лучшим архиватором. Больше всех страдают владельцы медленных dial-up соединений, тем более что докачку поддерживают далеко не все серверы; * в разархивированном виде исходные тексты занимают очень много места (иногда сотни мегабайт), а сама компиляция требует значительного времени, которое, как известно, всегда работает против нас; * "ручная" настройка программы "под себя" требует внимательного чтения мануалов и изучения конфигурационных скриптов; * часто требуется скачивать дополнительные заголовочные файлы и библиотеки, обновлять компилятор и т.д., что опять-таки требует времени, трафика и дискового пространства; |