Портирование программного обеспечения
Порти́рование (англ. porting[1]) — в программировании — адаптация некоторой программы или её части так, чтобы она работала в другой среде, отличающейся от той среды, под которую она была изначально написана, с максимальным сохранением её пользовательских свойств. В этом основное отличие понятий порт и форк — в первом случае все пользовательские свойства пакета стараются сохранить, а во втором — это базирующаяся на общей основе самостоятельная разработка с новыми полезными свойствами.
Процесс портирования также называют переносом, а результат — портом. Но в любом случае главной задачей при портировании является сохранение привычных пользователю интерфейса и приёмов работы с пакетом и его свойств. Добавление новых или удаление части имеющихся свойств при портировании программных продуктов не допускается.
Портируемость (переносимость, англ. portability) обычно относится к одной из двух вещей:
- Портируемость — компиляция кода (обычно в некоторый промежуточный код, который затем интерпретируется или компилируется во время исполнения, «на лету», англ. Just-In-Time[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» и т. д.
См. также
- Виртуализация
- Эмуляция
- Кросс-компилятор
- Кроссплатформенное программное обеспечение
Примечания
- ↑ port — definition of port in English from the Oxford dictionary . Дата обращения: 14 июля 2016. Архивировано 25 июля 2016 года.
- ↑ 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»
- ↑ 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»
- ↑ 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» и далее
- ↑ native software Архивная копия от 7 мая 2012 на Wayback Machine A Dictionary of Computing, 2004
- ↑ 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»
- ↑ William von Hagen. Ubuntu Linux Bible: Featuring Ubuntu 10.04 LTS Архивная копия от 21 марта 2013 на Wayback Machine Chapter «Using GIMP» page 14-35
- ↑ 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»
- ↑ 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