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

Порти́рование (англ. 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.
    • Аналогичная ситуация с такими культовыми играми, как Half-Life и Counter-Strike: для них была выпущена мобильная версия движка Xash3D (совместимого с оригинальным движком Half-Life), позволяющая запускать игры на любом устройстве с ОС Android. Однако, эти порты не являются официальными.
    • В настоящее время также существует тенденция создания т. н. «ремейков» старых игр, изначально выходивших на отдельных устройствах, для современных смартфонов и планшетов. Примерами таких игр являются «Змейка», «Тетрис», «Электроника», «Pac-Man» и т. д.

См. также

править

Примечания

править
  1. port — definition of port in English from the Oxford dictionary. Дата обращения: 14 июля 2016. Архивировано 25 июля 2016 года.
  2. Towards Intelligent Engineering and Information Technology Архивная копия от 21 марта 2013 на Wayback Machine Chapter 6.3 Java: «A major benefit of using bytecode is porting… JIT compilation and dynamic recompilation allow Java programs to approach the speed of native code without losing portability»
  3. Donald A. Lewine. POSIX Programmer’s Guide. Writing Portable UNIX Programs with the POSIX.1 Standard Архивная копия от 21 марта 2013 на Wayback Machine // O’Reilly, 1991—1994 «IEEE Std 1003.1-1988, commonly known as POSIX … When applications follow POSIX rules, it is easier to move programs from one POSIX-conforming operating system to another»
  4. Bertrand Meyer. Approaches to portability Архивная копия от 26 апреля 2012 на Wayback Machine // JOOP (Journal of Object-Oriented Programming), vol. 11, no. 6, July-August 1998, pages 93-95. «All current Eiffel compilers except for one … use C as their intermediate language. … This technique has been shown to offer key advantages: Guarantee of portability» и далее
  5. native software Архивная копия от 7 мая 2012 на Wayback Machine A Dictionary of Computing, 2004
  6. Spencer Kimball & Peter Mattis. Readme (txt) (11 февраля 1996). Дата обращения: 23 марта 2008. Архивировано из оригинала 17 февраля 2011 года. Пакет GIMP 0.54 2006 года, см файл README: «The GIMP has been tested (and developed) on the following operating systems: Linux 1.2.13, Solaris 2.4, HPUX 9.05, SGI IRIX»
  7. William von Hagen. Ubuntu Linux Bible: Featuring Ubuntu 10.04 LTS Архивная копия от 21 марта 2013 на Wayback Machine Chapter «Using GIMP» page 14-35
  8. GNU Image Manipulation Program. User Manual. Appendix A. GIMP History 2. The Early Days of GIMP Архивная копия от 2 февраля 2012 на Wayback Machine «Main programming advantages were the new toolkits, GTK (GIMP Toolkit) and gdk (GIMP Drawing Kit), which eliminated the reliance on Motif»
  9. The Linux Kernel Archives Архивная копия от 23 августа 2011 на Wayback Machine: Хотя Linux и разрабатывался сначала для 32-разрядных x86-ПК (от 386), сегодня он также работает (по крайней мере) на следующих архитектурах: Alpha AXP, Sun SPARC, Motorola 68000, PowerPC, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, AMD x86-64, AXIS CRIS, Renesas M32R, Atmel AVR32, Renesas H8/300, NEC V850, Tensilica Xtensa и Analog Devices Blackfin; для многих из них как в 32-разрядном, так и в 64-разрядном варианте. (Although originally developed first for 32-bit x86-based PCs (386 or higher), today Linux also runs on (at least) the Alpha AXP, Sun SPARC, Motorola 68000, PowerPC, ARM, Hitachi SuperH, IBM S/390, MIPS, HP PA-RISC, Intel IA-64, AMD x86-64, AXIS CRIS, Renesas M32R, Atmel AVR32, Renesas H8/300, NEC V850, Tensilica Xtensa, and Analog Devices Blackfin architectures; for many of these architectures in both 32- and 64-bit variants)

Литература

править
  • Andrew S. Tanenbaum (1984): Structured computer organization 10th Print. ISBN 0-13-854605-3.
  • Brian Hook. Write portable code: an introduction to developing software for multiple platforms — No Starch Press, 2005; ISBN 1-59327-056-9