Кроссплатформенность

Кроссплатформенность (межплатформенность) — способность программного обеспечения работать с несколькими аппаратными платформами или операционными системами. Обеспечивается благодаря использованию высокоуровневых языков программирования, сред разработки и выполнения, поддерживающих условную компиляцию, компоновку и выполнение кода для различных платформ. Типичным примером является программное обеспечение, предназначенное для работы в операционных системах Linux и Windows одновременно.

Swing выглядит одинаково на всех ОС
Mozilla Firefox, использующий XUL, оформляет окна в стиле ОС (в данном случае — Linux).

Кроссплатформенные языки программирования

[править | править код]

Кроссплатформенными можно назвать большинство современных высокоуровневых языков программирования. Например, Си, C++, Free Pascal, FreeBASIC, PureBasic — кроссплатформенные языки на уровне компиляции, то есть для этих языков есть компиляторы под различные платформы. Это позволяет — при надлежащем качестве кода — не переписывать основной движок программы, меняются только особые системозависимые части.

Не менее важны для кроссплатформенности стандартизованные библиотеки среды выполнения. В частности, стандартом стала библиотека языка Си (POSIX). Из крупных кроссплатформенных библиотек — Qt, GTK+, FLTK, STL, Boost, OpenGL, SDL, OpenAL, OpenCL.

Существуют кросс-компиляторы — компиляторы, генерирующие исполняемый код для платформы, отличной от той, на которой запущен сам компилятор.

Кроссплатформенные среды исполнения

[править | править код]

PHP, Perl, Python, Tcl и Ruby — кроссплатформенные интерпретируемые языки, их интерпретаторы существуют для многих платформ.

Среды исполнения ActionScript Virtual Machine, Java Virtual Machine и .NET также кроссплатформенны, однако на их вход подаётся не исходный текст, а промежуточный код. Поэтому программы, написанные на ActionScript, Java и C#, можно запускать под разными операционными системами без предварительной перекомпиляции.

Кроссплатформенный пользовательский интерфейс

[править | править код]

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

  1. Единый стиль, общий для всех операционных систем, программы выглядят одинаково под всеми системами. Так работают интерфейсные библиотеки Java наподобие Swing.
    • Плюс: можно жёстко расставлять элементы управления на манер Delphi, оригинальный стиль.
    • Минус: системе приходится иметь свои экранные шрифты, и стиль отличается от стиля ОС.
  2. Самоадаптирующийся (адаптивный) интерфейс, подстраивающий сетку под реальные размеры элементов управления. Типичные примеры — Qt, wxWidgets, XUL.
    • Плюс: стандартный стиль операционной системы, очень быстрый и «скинующийся» под Windows XP, Vista и Windows 7, и некоторая автоматизация локализации.
    • Минус: чтобы собрать самоадаптирующуюся (адаптивную) сетку, требуется квалифицированный программист, а также затруднена плотная компоновка.
  3. Гибридный подход реализован в GTK+.
    • Плюс: шрифты можно брать из системы, а не «тащить» свои, а также некоторая автоматизация локализации.
    • Минус: берёт все недостатки от первых двух подходов. Стиль отличается от стиля операционной системы, затруднена плотная компоновка.

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

Условная компиляция

[править | править код]

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

Например, браузер Mozilla Firefox имеет разные комплекты значков под разные операционные системы.

Прикладные программы

[править | править код]

Большое количество прикладных программ также являются кроссплатформенными. Особенно это качество выражено у программ, изначально разработанных для Unix-подобных операционных систем. Важным условием их переносимости на другие платформы является совместимость платформ с рекомендациями POSIX, а также существование компилятора GCC для платформы, на которую осуществляется перенос.

Операционные системы

[править | править код]

Современные операционные системы также часто являются кроссплатформенными. Например, операционные системы с открытым исходным кодом (в частности: NetBSD, Linux, FreeBSD, AROS) могут работать на нескольких различных аппаратных платформах. Наиболее часто это: x86, m68k, PowerPC, Alpha, AMD64, SPARC. («Эльбрус ОС» есть не что иное как глубоко доработанный для платформы «Эльбрус». Но существует «Эльбрус ОС» также доступна и для платформ «Эльбрус-SPARC», представляющей собой реализацию платформы SPARC от МЦСТ, и платформы х86.) Первый выпуск Microsoft Windows NT 4, вышедший в 1996 году, поддерживал четыре платформы (x86, Alpha, MIPS и PowerPC), в дальнейших версиях Windows NT осталась только поддержка платформы х86. Современная Microsoft Windows может работать как на платформе Intel x86, так и на Intel Itanium. (Точнее, для Itanium есть только версии Windows 2000/XP, Windows 2003 и Windows 2008, после чего поддержка Itanium была свёрнута.) Операционная система NetBSD считается самой наиболее многоплатформенной[1], — она портирована на большинство ныне существующих платформ.

Среды разработки

[править | править код]

Ряд IDE, в том числе Free Pascal, Lazarus, Qt Creator, работают на разных операционных системах: Linux, Windows и других[2].

Если программа не предназначена для исполнения (запуска) на определённой платформе, но для этой платформы существует эмулятор платформы, базовой для данной программы, то программа может быть исполнена в среде эмулятора.

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

Примечания

[править | править код]
  1. Portability and supported hardware platforms (англ.). netbsd.org. Дата обращения: 31 октября 2021. Архивировано 22 декабря 2021 года.
  2. IDE Lazarus и Free Pascal. Дата обращения: 8 декабря 2013. Архивировано из оригинала 26 ноября 2013 года.