Патч (вычисления) - Patch (computing)

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

Патчи могут быть установлены либо под программным управлением, либо человеком-программистом с использованием инструмента редактирования или отладчика . Они могут применяться к программным файлам на запоминающем устройстве или в памяти компьютера. Патчи могут быть постоянными (до повторной установки) или временными.

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

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

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

Типы

Бинарные патчи

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

Исправления для другого программного обеспечения обычно распространяются в виде файлов данных, содержащих код исправления. Их считывает служебная программа исправлений, которая выполняет установку. Эта утилита изменяет исполняемый файл целевой программы - машинный код программы - обычно путем перезаписи его байтов байтами, представляющими новый код исправления. Если новый код умещается в пространстве (количестве байтов), занимаемом старым кодом, он может быть заменен путем перезаписи непосредственно поверх старого кода. Это называется встроенным патчем. Если новый код больше старого, утилита исправления добавит загрузочную запись (и), содержащую новый код, в объектный файл целевой программы, для которой выполняется исправление. Когда исправленная программа запускается, выполнение направляется на новый код с инструкциями ветвления (переходами или вызовами), исправленными в том месте в старом коде, где требуется новый код. На ранних 8-битных микрокомпьютерах, например Radio Shack TRS-80 , операционная система включает утилиту PATCH / CMD, которая принимает данные исправлений из текстового файла и применяет исправления к исполняемым двоичным файлам целевой программы.

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

Небольшие исправления машинного кода в памяти можно вручную применить с помощью служебной программы отладки системы, такой как отладчики CP / M DDT или MS-DOS DEBUG. Программисты, работающие на интерпретируемом BASIC, часто использовали команду POKE для изменения функциональности процедуры системного обслуживания или самого интерпретатора.

Патчи исходного кода

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

Большие пятна

Поскольку слово «патч» имеет оттенок небольшого исправления, для крупных исправлений может использоваться другая номенклатура. Объемные исправления или исправления, которые существенно изменяют программу, могут распространяться как « пакеты обновления » или как «обновления программного обеспечения». Microsoft Windows NT и ее преемники (включая Windows 2000 , Windows XP , Windows Vista и Windows 7 ) используют терминологию «пакет обновления». Исторически для обозначения этих обновлений IBM использовала термины «Пакеты исправлений» и «Дискета с корректирующим сервисом».

История

Программная лента для Harvard Mark I 1944 года , одного из первых цифровых компьютеров. Обратите внимание на физические заплатки, используемые для исправления пробитых отверстий путем их закрытия.

Исторически сложилось так, что поставщики программного обеспечения распространяли исправления на бумажной ленте или перфокартах , ожидая, что получатель вырезает указанную часть исходной ленты (или колоды) и вставит (отсюда и название) заменяющий сегмент. В более поздних версиях патчей использовалась магнитная лента. Затем, после изобретения съемных дисководов, патчи приходили от разработчика программного обеспечения через диск или, позже, CD-ROM по почте . Благодаря широкому доступу в Интернет , загрузка исправлений с веб-сайта разработчика или через автоматические обновления программного обеспечения часто становилась доступной для конечных пользователей. Начиная с Mac OS 9 от Apple и Windows ME от Microsoft , операционные системы ПК получили возможность получать автоматические обновления программного обеспечения через Интернет.

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

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

заявка

Размер патчей может варьироваться от нескольких байтов до сотен мегабайт ; таким образом, более значительные изменения подразумевают больший размер, хотя это также зависит от того, включает ли исправление файлы целиком или только измененные части файлов. В частности, патчи могут стать довольно большими, когда изменения добавляют или заменяют непрограммные данные, такие как графические и звуковые файлы. Такие ситуации обычно возникают при установке исправлений в компьютерные игры . По сравнению с первоначальной установкой программного обеспечения, установка исправлений обычно не занимает много времени.

В случае операционных систем и компьютерного серверного программного обеспечения патчи играют особенно важную роль в исправлении дыр в безопасности. Некоторые критические исправления связаны с проблемами с драйверами. Для исправлений может потребоваться предварительное применение других исправлений или может потребоваться предварительное или одновременное обновление нескольких независимых программных компонентов. Чтобы упростить обновление, операционные системы часто предоставляют средства автоматического или полуавтоматического обновления. Полностью автоматические обновления не смогли получить широкой популярности в корпоративных вычислительных средах, отчасти из-за вышеупомянутых сбоев, но также и потому, что администраторы опасаются, что компании-разработчики программного обеспечения могут получить неограниченный контроль над своими компьютерами. Системы управления пакетами могут предлагать различные степени автоматизации исправлений.

Использование полностью автоматических обновлений стало гораздо более распространенным на потребительском рынке, в основном из-за того, что Microsoft Windows добавила их поддержку, а пакет обновления 2 для Windows XP (доступный в 2004 году) включил их по умолчанию. Осторожные пользователи, особенно системные администраторы, обычно откладывают установку исправлений до тех пор, пока не смогут проверить стабильность исправлений. Microsoft (W) SUS поддерживает это. В случае больших исправлений или значительных изменений дистрибьюторы часто ограничивают доступность исправлений для квалифицированных разработчиков в качестве бета-теста .

Применение исправлений к микропрограммному обеспечению создает особые проблемы, поскольку часто требует предоставления совершенно новых образов микропрограмм, а не применения только отличий от предыдущей версии. Патч обычно состоит из образа прошивки в виде двоичных данных вместе со специальной программой, предоставленной поставщиком, которая заменяет предыдущую версию новой версией; материнская плата BIOS обновление является примером общего патча прошивки. Любая непредвиденная ошибка или прерывание во время обновления, например отключение электроэнергии, может сделать материнскую плату непригодной для использования. Производители материнских плат могут принять меры для предотвращения серьезных повреждений; например, процедура обновления может создать и сохранить резервную копию микропрограммы на случай, если она определит, что первичная копия повреждена (обычно с помощью контрольной суммы , такой как CRC ).

Видеоигры

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

Иногда компании выпускают игры, зная, что в них есть ошибки. Компьютер Gaming World « s Scorpia в 1994 году осудил«компания-слишком много , чтобы упомянуть-кто выпустить некачественный продукт , зная , что они могут получить с исправлениями и обновлениями, и которые делает » платное -testers своих клиентов".

В разработке программного обеспечения

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

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

Apache HTTP Server изначально развивался как ряд исправлений , которые Белендорф сверенному улучшить NCSA HTTPD , отсюда название , которое подразумевает , что она представляет собой набор патчей ( «пятнистый сервер» ). В FAQ на официальном сайте проекта указано, что название «Apache» было выбрано из уважения к индейскому племени апачей . Однако объяснение «неоднородный сервер» изначально было дано на сайте проекта.

Варианты

Исправление

Исправление или инженерное обновление Quick Fix (обновление QFE) - это единый накопительный пакет, который включает информацию (часто в форме одного или нескольких файлов), которая используется для решения проблемы в программном продукте (например, ошибки программного обеспечения). Обычно исправления делаются для решения конкретной ситуации с клиентом. Когда-то Microsoft использовала этот термин, но остановилась в пользу новой терминологии: General Distribution Release (GDR) и Limited Distribution Release (LDR). Blizzard Entertainment , однако, определяет исправление как «изменение, внесенное в игру, которое считается достаточно важным, чтобы его нельзя было отложить до обычного обновления контента».

Точечный выпуск

Точечный выпуск - это второстепенный выпуск программного проекта, особенно тот, который предназначен для исправления ошибок или небольших чисток, а не для добавления важных функций . Часто бывает слишком много ошибок, чтобы их можно было исправить в одном основном или второстепенном выпуске, что создает необходимость в выпуске точки.

Временное исправление программы

Временное исправление программы или Временное исправление продукта (PTF), в зависимости от даты, - это стандартная терминология IBM для отдельного исправления ошибки или группы исправлений, распространяемых в форме, готовой к установке для клиентов. PTF иногда называли «ZAP». Заказчики иногда иронично объясняют аббревиатуру как постоянное временное исправление или, что более вероятно, это исправление , потому что у них есть возможность сделать PTF постоянной частью операционной системы, если исправление устраняет проблему.

Патчи безопасности

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

Патчи безопасности - это основной метод устранения уязвимостей в программном обеспечении. В настоящее время Microsoft выпускает свои исправления безопасности один раз в месяц, а в других операционных системах и проектах программного обеспечения есть группы безопасности, предназначенные для выпуска наиболее надежных исправлений программного обеспечения как можно скорее после объявления об уязвимости. Исправления безопасности тесно связаны с ответственным раскрытием информации .

Эти исправления безопасности критически важны для защиты бизнес-процессов. В 2017 году компании были поражены программой-вымогателем под названием WannaCry, которая шифрует файлы в определенных версиях Microsoft Windows и требует выкупа через BitCoin. В ответ на это Microsoft выпустила патч, который останавливает запуск программы-вымогателя.

Service Pack

Пакет обновления, SP или пакет функций (FP) включает в себя набор обновлений, исправлений или улучшений программного обеспечения, поставляемых в виде одного устанавливаемого пакета. Компании часто выпускают пакет обновления, когда количество отдельных исправлений для данной программы достигает определенного (произвольного) предела или когда выпуск программного обеспечения стабилизируется с ограниченным количеством оставшихся проблем на основе отзывов пользователей и отслеживания ошибок, таких как Bugzilla . В крупных программных приложениях, таких как офисные пакеты, операционные системы, программное обеспечение баз данных или управление сетью, нередко выпускают пакет обновления в течение первого или двух лет после выпуска продукта. Установка пакета обновления проще и менее подвержена ошибкам, чем установка множества отдельных исправлений, тем более при обновлении нескольких компьютеров по сети, где пакеты обновления распространены.

Неофициальные патчи

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

Нашивки с обезьянами

Патч обезьяны означает расширение или изменение программы локально (затрагивая только работающий экземпляр программы).

Горячие исправления

Горячая установка исправлений , также известная как исправление в реальном времени или динамическое обновление программного обеспечения , представляет собой применение исправлений без завершения работы и перезапуска системы или соответствующей программы. Это решает проблемы, связанные с недоступностью услуги, предоставляемой системой или программой. Метод можно использовать для обновления ядра Linux без остановки системы. Патч, который можно применить таким образом, называется горячим патчем или живым патчем . Это становится обычной практикой в ​​сфере мобильных приложений. Такие компании, как Rollout.io, используют метод swizzling для доставки горячих исправлений в экосистему iOS. Еще один метод исправления приложений iOS - это JSPatch.

Облачные провайдеры часто используют горячие исправления, чтобы избежать простоев клиентов при обновлении базовой инфраструктуры.

Скольжение

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

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

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

Системы обновления программного обеспечения

Системы обновления программного обеспечения позволяют пользователям и разработчикам программного обеспечения управлять обновлениями. В 2017 году Пети cyberpandemic , финансового программного обеспечения "Медок" По обновление системы , как говорят, был взломан для распространения вредоносных программ с помощью своих обновлений. В блоге Tor эксперт по кибербезопасности Майк Перри заявляет, что детерминированные распределенные сборки, вероятно, являются единственным способом защиты от вредоносных программ, которые атакуют процессы разработки и сборки программного обеспечения, чтобы заразить миллионы компьютеров в одном, официально подписанном, мгновенном обновлении. Диспетчеры обновлений также позволяют быстро и широко применять обновления безопасности. Менеджеры обновлений Linux, такие как Synaptic, позволяют пользователям обновлять все программное обеспечение, установленное на их машинах. Такие приложения, как Synaptic, используют криптографические контрольные суммы для проверки исходных / локальных файлов перед их применением, чтобы гарантировать устойчивость к вредоносным программам.

Смотрите также

использованная литература

внешние ссылки