В вычислительной технике кроссплатформенное программное обеспечение (также называемое многоплатформенным программным обеспечением , платформенно-независимым программным обеспечением или платформенно-независимым программным обеспечением ) — это компьютерное программное обеспечение , которое предназначено для работы на нескольких вычислительных платформах . [1] Некоторое кроссплатформенное программное обеспечение требует отдельной сборки для каждой платформы, но некоторое может быть напрямую запущено на любой платформе без специальной подготовки, будучи написанным на интерпретируемом языке или скомпилированным в переносимый байт-код, для которого интерпретаторы или пакеты времени выполнения являются общими или стандартными компонентами всех поддерживаемых платформ. [2]
Например, кроссплатформенное приложение может работать на Linux , macOS и Microsoft Windows . Кроссплатформенное программное обеспечение может работать на многих платформах или всего на двух. Некоторые фреймворки для кроссплатформенной разработки: Codename One , ArkUI-X, Kivy , Qt , GTK , Flutter , NativeScript , Xamarin , Apache Cordova , Ionic и React Native . [3]
Платформа может относиться к типу процессора (ЦП) или другого оборудования, на котором работает операционная система (ОС) или приложение , типу ОС или их комбинации. [4] Примером распространенной платформы является Android , работающий на архитектуре семейства ARM . Другие известные платформы — Linux / Unix , macOS и Windows , все они кроссплатформенные. [4] Приложения могут быть написаны так, чтобы зависеть от функций конкретной платформы — либо оборудования, ОС, либо виртуальной машины (ВМ), на которой она работает. Например, платформа Java — это распространенная платформа ВМ, которая работает на многих ОС и типах оборудования.
Аппаратная платформа может относиться к архитектуре набора инструкций . Например: ARM или архитектура x86. Эти машины могут работать под управлением различных операционных систем.
Смартфоны и планшеты, как правило, работают на базе архитектуры ARM, часто работают под управлением Android или iOS и других мобильных операционных систем .
Программная платформа может быть либо операционной системой (ОС), либо средой программирования , хотя чаще всего это комбинация того и другого. Исключением является Java , которая использует независимую от ОС виртуальную машину (ВМ) для выполнения байт-кода Java . Некоторые программные платформы:
Язык Java обычно компилируется для запуска на виртуальной машине, которая является частью платформы Java. Виртуальная машина Java (Java VM, JVM) — это ЦП, реализованный в программном обеспечении, который запускает весь код Java. Это позволяет запускать один и тот же код на всех системах, реализующих JVM. Программное обеспечение Java может выполняться аппаратным процессором Java . Это используется в основном во встроенных системах.
Код Java, работающий в JVM, имеет доступ к службам, связанным с ОС, таким как дисковый ввод/вывод (I/O) и сетевой доступ, если предоставлены соответствующие привилегии. JVM выполняет системные вызовы от имени приложения Java. Это позволяет пользователям выбирать соответствующий уровень защиты в зависимости от списка контроля доступа (ACL). Например, доступ к диску и сети обычно включен для настольных приложений, но не для апплетов на основе браузера . Java Native Interface (JNI) также может использоваться для доступа к функциям, специфичным для ОС, с потерей переносимости.
В настоящее время программное обеспечение Java Standard Edition может работать на Microsoft Windows, macOS, нескольких Unix-подобных ОС и нескольких операционных системах реального времени для встраиваемых устройств. Для мобильных приложений используются плагины браузера для устройств на базе Windows и Mac, а Android имеет встроенную поддержку Java. Существуют также подмножества Java, такие как Java Card или Java Platform, Micro Edition , предназначенные для устройств с ограниченными ресурсами.
Чтобы программное обеспечение считалось кроссплатформенным, оно должно функционировать на более чем одной компьютерной архитектуре или ОС. Разработка такого программного обеспечения может быть трудоемкой задачей, поскольку разные ОС имеют разные интерфейсы прикладного программирования (API).
Программное обеспечение, написанное для одной ОС, может не работать автоматически на всех архитектурах, которые поддерживает ОС. То, что программное обеспечение написано на популярном языке программирования, таком как C или C++ , не означает, что оно будет работать на всех ОС, которые поддерживают этот язык, или даже на разных версиях одной и той же ОС.
Веб-приложения обычно описываются как кроссплатформенные, потому что в идеале они доступны из любого веб-браузера : браузер — это платформа. Веб-приложения обычно используют модель клиент-сервер , но сильно различаются по сложности и функциональности. Может быть трудно совместить желание функций с необходимостью совместимости.
Базовые веб-приложения выполняют всю или большую часть обработки с сервера без сохранения состояния и передают результат клиентскому веб-браузеру. Все взаимодействие пользователя с приложением состоит из простого обмена запросами данных и ответами сервера. Этот тип приложений был нормой на ранних этапах разработки приложений Всемирной паутины . Такие приложения следуют простой модели транзакций , идентичной модели обслуживания статических веб-страниц . Сегодня они все еще относительно распространены, особенно там, где кроссплатформенная совместимость и простота считаются более важными, чем расширенная функциональность.
Яркими примерами расширенных веб-приложений являются веб-интерфейс Gmail и Google Maps . Такие приложения обычно зависят от дополнительных функций, которые можно найти только в последних версиях популярных веб-браузеров. К этим функциям относятся Ajax , JavaScript , Dynamic HTML , SVG и другие компоненты многофункциональных веб-приложений .
Из-за конкурирующих интересов совместимости и функциональности возникло множество стратегий проектирования.
Многие программные системы используют многоуровневую архитектуру, в которой платформенно-зависимый код ограничивается верхним и нижним уровнями.
Постепенная деградация пытается предоставить одинаковые или схожие функции всем пользователям и платформам, одновременно уменьшая эту функциональность до наименьшего общего знаменателя для более ограниченных клиентских браузеров. Например, пользователь, пытающийся использовать браузер с ограниченными функциями для доступа к Gmail, может заметить, что Gmail переключается в базовый режим с сокращенной функциональностью, но все еще пригодный для использования.
Некоторое программное обеспечение поддерживается в отдельных кодовых базах для разных платформ (аппаратных и ОС) с эквивалентной функциональностью. Это требует больше усилий для поддержки кода, но может быть оправдано, когда объем платформенно-специфичного кода высок.
Эта стратегия основана на наличии одной кодовой базы, которая может быть скомпилирована в несколько платформенно-специфичных форматов. Одним из методов является условная компиляция . С помощью этого метода код, общий для всех платформ, не повторяется. Блоки кода, которые относятся только к определенным платформам, делаются условными, так что они интерпретируются или компилируются только при необходимости. Другой метод — разделение функциональности, которое отключает функциональность, не поддерживаемую браузерами или ОС, при этом по-прежнему предоставляя пользователю полное приложение. (См. также: Разделение интересов .) Этот метод используется в веб-разработке, где интерпретируемый код (как в языках сценариев) может запрашивать платформу, на которой он запущен, для условного выполнения различных блоков. [6]
Сторонние библиотеки пытаются упростить кроссплатформенность, скрывая сложности дифференциации клиентов за единым унифицированным API за счет привязки к поставщику .
Адаптивный веб-дизайн (RWD) — это подход к веб-дизайну, направленный на создание визуальной компоновки сайтов для обеспечения оптимального просмотра — легкого чтения и навигации с минимальным изменением размера, панорамированием и прокруткой — на широком спектре устройств, от мобильных телефонов до мониторов настольных компьютеров. При использовании этой техники используется мало или совсем не используется платформенно-зависимый код.
Кроссплатформенные приложения требуют гораздо большего интеграционного тестирования . Некоторые веб-браузеры запрещают установку разных версий на одну машину. Существует несколько подходов, используемых для нацеливания на несколько платформ, но все они приводят к программному обеспечению, требующему значительных ручных усилий для тестирования и обслуживания. [7] Такие методы, как полная виртуализация , иногда используются в качестве обходного пути для этой проблемы.
Такие инструменты, как Page Object Model, позволяют писать кроссплатформенные тесты, чтобы один тестовый случай охватывал несколько версий приложения. Если разные версии имеют схожие пользовательские интерфейсы, все они могут быть протестированы с помощью одного тестового случая.
Веб-приложения становятся все более популярными, но многие пользователи компьютеров все еще используют традиционное прикладное программное обеспечение, которое не опирается на архитектуру клиент/веб-сервер. Различие между традиционными и веб-приложениями не всегда очевидно. Функции, методы установки и архитектуры для веб- и традиционных приложений перекрываются и размывают различие. Тем не менее, это упрощающее различие является общим и полезным обобщением.
Традиционное прикладное программное обеспечение распространялось в виде двоичных файлов, особенно исполняемых файлов . Исполняемые файлы поддерживают только ту платформу, для которой они были созданы, что означает, что один кроссплатформенный исполняемый файл может быть очень раздут кодом, который никогда не выполняется на определенной платформе. Вместо этого обычно существует выбор исполняемых файлов, каждый из которых создан для одной платформы.
Для программного обеспечения, которое распространяется как двоичный исполняемый файл, например, написанное на C или C++, должна быть сборка программного обеспечения для каждой платформы, использующая набор инструментов, который транслирует — транскомпилирует — одну кодовую базу в несколько двоичных исполняемых файлов. Например, Firefox , веб-браузер с открытым исходным кодом, доступен на Windows, macOS (как PowerPC , так и x86 через то, что Apple Inc. называет Universal binary ), Linux и BSD на нескольких компьютерных архитектурах. Четыре платформы (в данном случае Windows, macOS, Linux и BSD) являются отдельными исполняемыми дистрибутивами, хотя они в основном исходят из одного и того же исходного кода . В редких случаях исполняемый код, собранный для нескольких платформ, объединяется в один исполняемый файл, называемый fat binary .
Использование различных наборов инструментов может оказаться недостаточным для создания рабочих исполняемых файлов для разных платформ. В этом случае программисты должны перенести исходный код на новую платформу. Например, такое приложение, как Firefox, которое уже работает в Windows на семействе x86, можно изменить и перестроить для работы в Linux на x86 (и потенциально на других архитектурах). Несколько версий кода могут храниться как отдельные кодовые базы или объединяться в одну кодовую базу.
Альтернативой портированию является кроссплатформенная виртуализация , когда приложения, скомпилированные для одной платформы, могут работать на другой без изменения исходного кода или двоичных файлов. Например, Rosetta от Apple , встроенная в компьютеры Macintosh на базе Intel , запускает приложения, скомпилированные для предыдущего поколения компьютеров Mac, которые использовали процессоры PowerPC. Другим примером является IBM PowerVM Lx86 , которая позволяет приложениям Linux/x86 работать без изменений на Linux/Power OS.
Пример кроссплатформенного бинарного программного обеспечения:
Скрипт можно считать кроссплатформенным, если его интерпретатор доступен на нескольких платформах, а скрипт использует только встроенные в язык возможности. Например, скрипт, написанный на Python для Unix-подобной системы, скорее всего, будет работать с небольшими изменениями или без них в Windows, поскольку Python также работает в Windows; действительно, существует множество реализаций (например, IronPython для .NET Framework ). То же самое касается многих языков сценариев с открытым исходным кодом .
В отличие от исполняемых двоичных файлов, один и тот же скрипт может использоваться на всех компьютерах, на которых установлено программное обеспечение для его интерпретации. Это связано с тем, что скрипт обычно хранится в виде простого текста в текстовом файле . Могут возникнуть некоторые тривиальные проблемы, например, представление символа новой строки .
Некоторые популярные кроссплатформенные языки сценариев:
Кроссплатформенный или мультиплатформенный — это термин, который также может применяться к видеоиграм, выпущенным на ряде игровых консолей . Примеры кроссплатформенных игр включают: Miner 2049er , Tomb Raider: Legend , серию FIFA , серию NHL и Minecraft .
Каждая из них была выпущена на различных игровых платформах, таких как Wii , PlayStation 3 , Xbox 360 , персональные компьютеры и мобильные устройства .
Для некоторых платформ писать сложнее, чем для других, и требуется больше времени для разработки видеоигры по тому же стандарту. Чтобы компенсировать это, видеоигра может быть выпущена сначала на нескольких платформах, а затем на других. Обычно это происходит, когда выпускается новая игровая система, потому что разработчикам видеоигр необходимо ознакомиться с ее аппаратным и программным обеспечением.
Некоторые игры могут не быть кроссплатформенными из-за лицензионных соглашений между разработчиками и производителями игровых консолей, которые ограничивают разработку одной конкретной консолью. Например, Disney может создать игру с намерением выпустить ее на последних игровых консолях Nintendo и Sony . Если Disney сначала лицензирует игру у Sony, может потребоваться выпустить игру исключительно на консоли Sony в течение короткого времени или на неопределенный срок .
Несколько разработчиков реализовали способы играть в игры онлайн, используя разные платформы. Psyonix , Epic Games , Microsoft и Valve обладают технологией, которая позволяет игрокам Xbox 360 и PlayStation 3 играть с игроками ПК, оставляя решение о том, какую платформу использовать, потребителям. Первой игрой, которая позволила такой уровень интерактивности между играми ПК и консолей (Dreamcast со специально разработанной клавиатурой и мышью), была Quake 3. [11] [12]
К играм с кроссплатформенной сетевой игрой относятся Rocket League , Final Fantasy XIV , Street Fighter V , Killer Instinct , Paragon и Fable Fortune , а также Minecraft с обновлением Better Together для Windows 10 , VR-изданий, Pocket Edition и Xbox One .
Кроссплатформенное программирование — это практика преднамеренного написания программного обеспечения для работы на нескольких платформах.
Существуют разные способы написания кроссплатформенных приложений. Один из подходов заключается в создании нескольких версий одного и того же программного обеспечения в разных исходных деревьях — другими словами, версия приложения для Microsoft Windows может иметь один набор файлов исходного кода, а версия для Macintosh — другой, в то время как система FOSS *nix может иметь третий. Хотя это и просто, по сравнению с разработкой только для одной платформы оплата большей команды или более медленный выпуск продуктов может обойтись гораздо дороже. Это также может привести к отслеживанию и исправлению большего количества ошибок.
Другой подход заключается в использовании программного обеспечения, скрывающего различия между платформами. Этот уровень абстракции изолирует приложение от платформы. Такие приложения являются платформонезависимыми . Приложения, работающие на JVM, создаются таким образом.
Некоторые приложения смешивают различные методы кроссплатформенного программирования для создания конечного приложения. Примером является веб-браузер Firefox, который использует абстракцию для построения некоторых компонентов нижнего уровня с отдельными исходными поддеревьями для реализации платформенно-специфичных функций (например, GUI) и реализацией более чем одного языка сценариев для облегчения переносимости программного обеспечения . Firefox реализует XUL , CSS и JavaScript для расширения браузера, в дополнение к классическим плагинам браузера в стиле Netscape . Большая часть самого браузера написана на XUL, CSS и JavaScript.
Существует множество инструментов [13] [14], облегчающих процесс кроссплатформенного программирования:
При разработке кроссплатформенного программного обеспечения возникает множество проблем.
Collabora Office — популярная альтернатива Microsoft Office с открытым исходным кодом. Она основана на LibreOffice и доступна на различных платформах, включая Windows, Linux, iOS и Android. В июле этого года крупное обновление офисного пакета принесло поддержку устройств Chrome OS.
...сенсорные оптимизированные интерфейсы: один для планшетов и один для экранов телефонов. ...(iOS, iPadOS, Chromebooks, Android).
первое жизнеспособное решение для самостоятельного размещения веб-офиса для популярной платформы Raspberry Pi 4