Портирование программного обеспечения

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

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

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

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

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

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

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

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

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

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

    Примеры

    • Для ОС Linux 1.2 с окружением GNU, Solaris 2.4, HPUX 9, SGI IRIX графический редактор The GIMP является родным, а например на Windows, Mac OS X, ОС семейства BSD UNIX — FreeBSD/OpenBSD/NetBSD, DEC UNIX (DEC Ultrix, DEC OSF/1)/Tru64UNIX, и ряд других UNIX систем он был портирован с сохранением своих пользовательских свойств. В процессе портирования были разработаны графические библиотеки GTK (GIMP Toolkit) и gdk (GIMP Drawing Kit), которые позволили использовать GIMP вне зависимости от наличия библиотеки Motif.
    • Сама операционная система Linux портирована на огромное количество аппаратных платформ.
    • Логическая игра 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.
      • Аналогичная ситуация с такими культовыми играми, как Half-Life и Counter-Strike: для них была выпущена мобильная версия движка Xash3D (совместимого с оригинальным движком Half-Life), позволяющая запускать игры на любом устройстве с ОС Android. Однако, эти порты не являются официальными.
      • В настоящее время также существует тенденция создания т. н. «ремейков» старых игр, изначально выходивших на отдельных устройствах, для современных смартфонов и планшетов. Примерами таких игр являются «Змейка», «Тетрис», «Электроника», «Pac-Man» и т. д.