Введение

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

Этимология

Термин "порт" происходит от латинского portāre, что означает "нести". Когда код несовместим с определенной операционной системой или архитектурой, этот код необходимо "перенести" в новую систему. Этот термин обычно не применяется к процессу адаптации программного обеспечения для работы с меньшим объемом памяти на той же платформе (процессоре и операционной системе). Разработчики программного обеспечения часто заявляют, что их программы переносимы, то есть для адаптации к новой среде потребуется немного усилий. Фактический объем необходимых усилий зависит от нескольких факторов, включая степень различия между исходной средой (исходной платформой) и новой средой (целевой платформой), опыт разработчиков в понимании того, какие конструкции языка программирования и вызовы сторонних библиотек могут быть непереносимыми, а также объем усилий, затраченных разработчиками на использование только переносимых конструкций (конструкции, специфичные для платформы, часто предоставляют более простое решение).

История

Количество существенно различающихся процессоров и операционных систем, используемых на настольных компьютерах сегодня, значительно меньше, чем в прошлом. Доминирование архитектуры x86 означает, что большая часть настольного программного обеспечения никогда не портируется на другие процессоры. На этом же рынке выбор операционных систем фактически сократился до трех: Microsoft Windows, macOS и Linux. Однако на рынках встраиваемых систем и мобильных устройств переносимость остается важной проблемой, при этом ARM является широко используемой альтернативой. Международные стандарты, такие как стандарты, разработанные ISO, значительно облегчают портирование, определяя детали вычислительной среды таким образом, чтобы уменьшить различия между различными платформами, соответствующими этим стандартам. Написание программного обеспечения, которое соответствует требованиям, установленным этими стандартами, требует определенных, хотя и нетривиальных усилий. Портирование такой программы между двумя платформами, соответствующими стандартам (например, POSIX.1), может заключаться лишь в загрузке исходного кода и его перекомпиляции на новой платформе. Однако разработчики часто обнаруживают, что из-за незначительных различий платформ требуются различные небольшие исправления. Большинство стандартов имеют "серые зоны", где различия в интерпретации приводят к небольшим вариациям между платформами. Также постоянно увеличивается количество инструментов, облегчающих портирование, таких как GNU Compiler Collection, предоставляющая согласованные языки программирования на разных платформах, и Autotools, которая автоматизирует обнаружение незначительных изменений в окружении и соответствующую адаптацию программного обеспечения перед компиляцией. Компиляторы некоторых языков программирования высокого уровня (например, Eiffel, Esterel) обеспечивают переносимость, генерируя исходный код на другом промежуточном языке высокого уровня (например, C), для которого обычно доступны компиляторы для многих платформ. Эмуляция и перекрестная компиляция – это две активности, связанные с портированием, но отличные от него.

Портирование видеоигр

Портирование — это также термин, используемый, когда видеоигра, разработанная для запуска на одной платформе, будь то аркадный автомат, видеоигровая консоль или персональный компьютер, переносится для запуска на другой платформе, возможно, с некоторыми незначительными отличиями. С начала появления видеоигр и до 1990-х годов «порты», в то время часто называемые «конверсиями», зачастую не были полноценными портами, а скорее переработанными версиями игр из-за ограничений различных систем. Например, игра 1982 года «Хоббит» — текстовое приключение, дополненное графикой, — имела существенно различающиеся графические стили на разных персональных компьютерах, для которых создавались её порты. Однако многие видеоигры XXI века разрабатываются с использованием программного обеспечения (часто на C++), которое может генерировать код для одной или нескольких консолей, а также для ПК без необходимости фактического портирования (вместо этого используется общее портирование отдельных библиотек компонентов). Многие ранние порты страдали от значительных проблем с качеством игрового процесса, поскольку компьютеры сильно различались. Ричард Гарриотт заявил в 1984 году на Origins Game Fair, что Origin Systems сначала разрабатывала компьютерные игры для серии Apple II, а затем портировала их на Commodore 64 и Atari 8-бит, поскольку спрайты и другие продвинутые возможности последних машин делали портирование с них на Apple «гораздо более сложным, возможно, даже невозможным». В отзывах часто критиковали порты, страдавшие от «конверсионита Apple», сохраняя «ужасный звук и черно-бело-зелено-фиолетовую графику» Apple; после заявления Гарриотта, когда Дэн Бантен спросил «людей из Atari и Commodore в зале, довольны ли вы переделками для Apple?», зрители выкрикнули «Нет!». Гарриотт ответил: «В противном случае версия для Apple никогда не будет завершена. С точки зрения издателя это невыгодно». Другие работали иначе. Например, Ozark Softscape написала M.U.L.E. для Atari в первую очередь, потому что предпочитала разрабатывать для самых передовых компьютеров, удаляя или изменяя функции по мере необходимости в процессе портирования. Такая политика не всегда была осуществима; Бантен заявил, что «M.U.L.E. невозможно сделать для Apple», и что версии Семи городов золота для платформ, отличных от Atari, были хуже. В журнале Compute! Gazette в 1986 году писали, что при портировании с Atari на Commodore оригинал обычно превосходил по качеству. Журнал также отметил, что качество игр для Commodore улучшилось, когда разработчики начали создавать для неё новое программное обеспечение в конце 1983 года. При портировании аркадных игр часто использовались термины «аркадная точность» или «аркадная достоверность», чтобы описать, насколько близко игровой процесс, графика и другие ресурсы портированной версии соответствовали аркадной. Многие аркадные порты в начале 1980-х годов были далеки от идеала, поскольку домашние консоли и компьютеры не обладали сложным аппаратным обеспечением аркадных автоматов, но игры все же могли приблизиться к игровому процессу. Примечательно, что Space Invaders на Atari VCS стала хитовой игрой для консоли, несмотря на различия, а более поздний порт Pac-Man печально известен своими отклонениями от аркадной версии. Аркадные порты с высокой точностью стали более распространены, начиная с 1990-х годов, когда домашние консоли приблизились по мощности к аркадным системам. В частности, система Neo Geo от SNK, представленная как многоигровая аркадная система, также предлагалась в качестве домашней консоли с теми же характеристиками. Это позволило играть в аркадные игры с высокой точностью дома. «Консольный порт» — это игра, изначально созданная для консоли, а затем выпущена идентичная версия для персонального компьютера. Этот термин широко используется в игровом сообществе. Процесс портирования игры с консоли на ПК часто воспринимается негативно из-за того, что компьютеры обычно обладают более высокой производительностью, которая не используется в полной мере, частично из-за того, что аппаратное обеспечение консолей фиксировано на протяжении всего срока службы (игры разрабатываются под конкретные характеристики консоли), в то время как ПК становятся мощнее по мере развития аппаратного обеспечения, а также из-за того, что портированные игры иногда плохо оптимизированы для ПК или портированы небрежно. Хотя в целом они похожи, могут существовать архитектурные различия, такие как использование унифицированной памяти на консолях.