Портирование программного обеспечения: различия между версиями

...викификация, оформление, исправление ссылок
(слипшиеся/развалившиеся абзацы...)
(...викификация, оформление, исправление ссылок)
{{другие значения термина|Порт}}
'''Порти́рование''' ({{lang-en|porting}}<ref>[http://dictionary.die.net/porting The Free On-line Dictionary of Computing (2003-OCT-10], статья "«Porting"»</ref>) — в [[программирование|программировании]] под порти́рованием понимают [[Адаптация (кибернетика)|адаптацию]] некоторой [[компьютерная программа|программы]] или её части, с тем чтобы она работала в другой [[Среда программирования|среде]], отличающейся от той среды, под которую она была изначально написана с максимальным сохранением её пользовательских свойств. В этом основное отличие понятий ''порт'' и ''форк'' — в первом случае все пользовательские свойства пакета стараются сохранить, а во втором — это базирующаяся на общей основе самостоятельная разработка с новыми полезными свойствами.
 
[[Процесс]] портирования также называют ''портированием'' или ''переносом'', а результат — ''портом''. Но в любом случае главной задачей при портировании является сохранение привычных пользователю интерфейса и приёмов работы с пакетом и его свойств. Добавление новых или удаление части имеющихся свойств при портировании программных продуктов не допускается. <br />
 
Портирование — включение кода программы в работу [[Аппаратно-программное обеспечение|Аппаратно-программного обеспечения]].
 
'''Портируемость''' (переносимость, {{lang-en|portability}}) обычно относится к одной из двух вещей:
# Портируемость — как возможность единожды откомпилировав код (обычно в некоторый [[промежуточный код]], который затем интерпретируется или компилируется во время исполнения, «[[на лету]]», {{lang-en|Just-In-Time}}<ref>[http://books.google.ru/books?id=fbyUHGk9cH0C&pg=PA413&dq=porting+jit Towards Intelligent Engineering and Information Technology] Chapter "6.3 Java": ""«A major benefit of using bytecode is porting...porting… JIT compilation and dynamic recompilation allow Java programs to approach the speed of native code without losing portability""»</ref>), затем запускать его на множестве платформ без каких-либо изменений.
# Портируемость — как свойство программного обеспечения, описывающее, насколько легко это ПО может быть портировано. По мере развития операционных систем, языков и техники программирования, становится всё проще портировать программы между различными платформами. Одной из изначальных целей создания [[Си (язык программирования)|языка Си]] и стандартной библиотеки этого языка — была возможность простого портирования программ между несовместимыми аппаратными платформами. Дополнительные преимущества в плане портируемости могут иметь программы, удовлетворяющие специальным стандартам и правилам написания (см., например: [[Smart Package Manager]]).
 
Необходимость в выполнении портирования возникает обычно из-за различий в системе команд [[процессор]]а, различий между способами взаимодействия [[операционная система|операционной системы]] и программ ([[API]] — Application Program Interface), принципиальных различий в архитектуре вычислительных систем, либо по причине некоторых несовместимостей или даже полного отсутствия используемого [[язык программирования|языка программирования]] в целевом окружении.
 
Международные стандарты (в частности, продвигаемые [[ISO]]) значительно упрощают портирование<ref>Donald A. Lewine,. [http://books.google.ru/books?hl=en&lr=&id=rHyMRyDEG3gC&oi=fnd&pg=PR23 POSIX Programmer'sProgrammer’s Guide. Writing Portable UNIX Programs with the POSIX.1 Standard] // O'ReillyO’Reilly, 1991-19941991—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."»</ref>, благодаря тому что они описывают среду исполнения программ таким образом, что различия между платформами становятся минимальными. Часто портирование программ между платформами, реализующими один и тот же стандарт (такой как ''[[POSIX]].1'') сводятся к перекомпиляции программы на новой платформе.
 
Существует также всё расширяющийся набор инструментов, облегчающих портирование, например, таких как [[GCC]], предоставляющий неизменный язык программирования на различных платформах.
 
Некоторые языки программирования высокого уровня ([[Eiffel]]<ref>Bertrand Meyer. [http://archive.eiffel.com/doc/manuals/technology/bmarticles/joop/portability.html "Approaches to portability"] // 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. "» и далее</ref>, [[Esterel]]) достигают портируемости путем трансляции исходного кода в [[промежуточный язык]], имеющий [[компилятор]]ы для многих [[процессор]]ов и операционных систем.
 
Термин ''портирование'' часто применяется к [[компьютерная игра|компьютерным играм]], а именно, к процессу переноса компьютерной игры с первоначальной целевой платформы ([[персональный компьютер|персонального компьютера]] или [[игровая приставка|игровой приставки]]) на другую платформу. Ранние порты видеоигр, по сути, были результатом значительного или полного переписывания программы, но всё больше современных игр разрабатывается с использованием программного обеспечения, позволяющего генерировать код как для PC так и для одной или нескольких игровых консолей.
 
В зависимости от того, для чего первоначально разрабатывалось то или иное [[программное обеспечение]], его называют родным или портированным. Родное ({{lang-en|native}}<ref>[http://www.encyclopedia.com/doc/1O11-nativesoftware.html native software] A Dictionary of Computing, 2004] статья "native software"</ref>) ПО разрабатывается сразу для той платформы (аппаратного обеспечения и/или операционной системы), о которой идёт речь. Портированное ({{lang-en|ported}}) ПО разрабатывается для одних платформ, после чего переносится для работы на других платформах.
 
== Примеры ==
| title = Readme
| accessdate = 2008-03-23
| author = Spencer Kimball & Peter Mattis.
| date = 1996-02-11
| format = txt
}} Пакет 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."»</ref>, а например на [[Microsoft Windows|Windows]], Mac OS X<ref>William von Hagen. [books.google.ru/books?id=rsSlrQLB8-gC&pg=SA14-PA35&dq=gimp+ported Ubuntu Linux Bible: Featuring Ubuntu 10.04 LTS] Chapter "«Using GIMP"» page 14-35</ref>, ОС семейства BSD UNIX — FreeBSD/OpenBSD/NetBSD, DEC UNIX (DEC Ultrix, DEC OSF/1)/Tru64UNIX, и ряд других UNIX систем он был портирован с сохранением своих пользовательских свойств. В процессе портирования были разработаны графические библиотеки [[GTK]] (GIMP Toolkit) и [[gdk]] (GIMP Drawing Kit), которые позволили использовать GIMP вне зависимости от наличия библиотеки Motif.<ref>[http://docs.gimp.org/en/gimp-introduction-history-early-days.html GNU Image Manipulation Program. User Manual. Appendix A. GIMP History 2. The Early Days of GIMP] "«Main programming advantages were the new toolkits, GTK (GIMP Toolkit) and gdk (GIMP Drawing Kit), which eliminated the reliance on Motif."»</ref>
* Сама операционная система [[Linux]] портирована на огромное количество аппаратных платформ.<ref>[http://kernel.org/ The Linux Kernel Archives]: Хотя 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.)</ref>.
* Логическая игра [[World of Goo]] была сначала выпущена для [[Wii]] и Windows, а потом портирована на [[Mac OS X]] и Linux.
 
* [[Виртуализация]]
* [[Эмуляция]]
* [[Кросс-компиляциякомпилятор]]
* [[Кроссплатформенное программное обеспечение]]
* [[Кроссплатформенность]]
 
== Примечания ==
 
== Литература ==
* 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
 
[[Категория:Программирование]]