Порти́рование (англ. porting[1]) — в программировании под порти́рованием понимают адаптацию некоторой программы или её части, с тем чтобы она работала в другой среде, отличающейся от той среды, под которую она была изначально написана с максимальным сохранением её пользовательских свойств. В этом основное отличие понятий порт и форк — в первом случае все пользовательские свойства пакета стараются сохранить, а во втором — это базирующаяся на общей основе самостоятельная разработка с новыми полезными свойствами.

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

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

  1. Портируемость — компиляция кода (обычно в некоторый промежуточный код, который затем интерпретируется или компилируется во время исполнения, «на лету», англ. Just-In-Time[2]), затем запускать его на множестве платформ без каких-либо изменений.
  2. Портируемость — как свойство программного обеспечения, описывающее, насколько легко это ПО может быть портировано. По мере развития операционных систем, языков и техники программирования, становится всё проще портировать программы между различными платформами. Одной из изначальных целей создания языка Си и стандартной библиотеки этого языка — была возможность простого портирования программ между несовместимыми аппаратными платформами. Дополнительные преимущества в плане портируемости могут иметь программы, удовлетворяющие специальным стандартам и правилам написания (см., например: Smart Package Manager).

Необходимость в выполнении портирования возникает обычно из-за различий в системе команд процессора, различий между способами взаимодействия операционной системы и программ (API — Application Program Interface), принципиальных различий в архитектуре вычислительных систем, либо по причине некоторых несовместимостей или даже полного отсутствия используемого языка программирования в целевом окружении.

Международные стандарты (в частности, продвигаемые ISO) значительно упрощают портирование[3], благодаря тому что они описывают среду исполнения программ таким образом, что различия между платформами становятся минимальными. Часто портирование программ между платформами, реализующими один и тот же стандарт (такой как POSIX.1) сводятся к перекомпиляции программы на новой платформе.

Существует также всё расширяющийся набор инструментов, облегчающих портирование, например, таких как GCC, предоставляющий неизменный язык программирования на различных платформах.

Некоторые языки программирования высокого уровня (Eiffel[4], Esterel) достигают портируемости путём трансляции исходного кода в промежуточный язык, имеющий компиляторы для многих процессоров и операционных систем.

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

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

В зависимости от того, для чего первоначально разрабатывалось то или иное программное обеспечение, его называют родным или портированным. Родное (англ. native[5]) ПО разрабатывается сразу для той платформы (аппаратного обеспечения и/или операционной системы), о которой идёт речь. Портированное (англ. ported) ПО разрабатывается для одних платформ, после чего переносится для работы на других платформах.

Примеры

  • Для ОС Linux 1.2 с окружением GNU, Solaris 2.4, HPUX 9, SGI IRIX графический редактор The GIMP является родным[6], а например на Windows, Mac OS X[7], ОС семейства BSD UNIX — FreeBSD/OpenBSD/NetBSD, DEC UNIX (DEC Ultrix, DEC OSF/1)/Tru64UNIX, и ряд других UNIX систем он был портирован с сохранением своих пользовательских свойств. В процессе портирования были разработаны графические библиотеки GTK (GIMP Toolkit) и gdk (GIMP Drawing Kit), которые позволили использовать GIMP вне зависимости от наличия библиотеки Motif.[8]
  • Сама операционная система Linux портирована на огромное количество аппаратных платформ.[9]
  • Логическая игра World of Goo была сначала выпущена для Wii и Windows, а потом портирована на Mac OS X и Linux.
  • Игра Quake 2 прекрасно работает под современными версиями ОС Windows, но для неё существуют порты, заменяющие оригинальный движок на более совершенный.
  • Max Payne, GTA 3, GTA Vice City и GTA: San Andreas были портированы на мобильные платформы (Android, iOS). Кроме того, вся серия Grand Theft Auto изначально создавалась для консолей, а затем портировалась (с улучшением графической составляющей) на ПК под ОС Windows.