stringtranslate.com

Кроссплатформенное программное обеспечение

В вычислительной технике кроссплатформенное программное обеспечение (также называемое многоплатформенным программным обеспечением , платформонезависимым программным обеспечением или платформонезависимым программным обеспечением ) — это компьютерное программное обеспечение , предназначенное для работы на нескольких вычислительных платформах . [1] Некоторое кроссплатформенное программное обеспечение требует отдельной сборки для каждой платформы, но некоторые из них можно запускать непосредственно на любой платформе без специальной подготовки, они написаны на интерпретируемом языке или скомпилированы в переносимый байт-код , для которого предназначены интерпретаторы или пакеты времени выполнения. общие или стандартные компоненты всех поддерживаемых платформ. [2]

Например, кроссплатформенное приложение может работать в Linux , macOS и Microsoft Windows . Кроссплатформенное программное обеспечение может работать на многих платформах или всего на двух. Некоторые фреймворки для кроссплатформенной разработки — это Codename One , ArkUI-X, Kivy , Qt , 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 (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] В качестве решения этой проблемы иногда используются такие методы, как полная виртуализация .

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

Традиционные приложения

Веб-приложения становятся все более популярными, но многие пользователи компьютеров по-прежнему используют традиционное прикладное программное обеспечение, которое не опирается на архитектуру клиент/веб-сервер. Различие между традиционными и веб-приложениями не всегда четкое. Функции, методы установки и архитектура веб-приложений и традиционных приложений частично совпадают и стирают различия. Тем не менее, это упрощающее различие является распространенным и полезным обобщением.

Бинарное программное обеспечение

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

Для программного обеспечения, которое распространяется в виде двоичного исполняемого файла, например написанного на C или C++, должна существовать сборка программного обеспечения для каждой платформы с использованием набора инструментов, который преобразует — транскомпилирует — одну базу кода в несколько двоичных исполняемых файлов. Например, Firefox , веб-браузер с открытым исходным кодом, доступен в Windows, macOS (как PowerPC , так и x86 через то, что Apple Inc. называет универсальным двоичным файлом ), Linux и BSD на нескольких компьютерных архитектурах. Четыре платформы (в данном случае Windows, macOS, Linux и BSD) представляют собой отдельные исполняемые дистрибутивы, хотя в основном они имеют один и тот же исходный код . В редких случаях исполняемый код, созданный для нескольких платформ, объединяется в один исполняемый файл, называемый толстым двоичным файлом .

Использование разных наборов инструментов может оказаться недостаточным для создания работающих исполняемых файлов для разных платформ. В этом случае программистам придется портировать исходный код на новую платформу. Например, такое приложение, как Firefox, которое уже работает в Windows на семействе x86, можно также модифицировать и перестроить для работы в Linux на x86 (и, возможно, на других архитектурах). Несколько версий кода могут храниться как отдельные базы кода или объединяться в одну базу кода.

Альтернативой портированию является кроссплатформенная виртуализация , при которой приложения, скомпилированные для одной платформы, могут работать на другой без изменения исходного кода или двоичных файлов. Например, компьютер Apple Rosetta , встроенный в компьютеры Macintosh на базе Intel , запускает приложения, скомпилированные для компьютеров Mac предыдущего поколения, которые использовали процессоры PowerPC. Другим примером является IBM PowerVM Lx86 , который позволяет приложениям Linux/x86 запускаться без изменений в ОС Linux/Power.

Пример кроссплатформенного двоичного программного обеспечения:

Сценарии и интерпретируемые языки

Сценарий можно считать кроссплатформенным, если его интерпретатор доступен на нескольких платформах и сценарий использует только возможности, встроенные в язык. Например, сценарий, написанный на 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 играть с геймерами на ПК, оставляя решение о том, какую платформу использовать, за потребителями. Первой игрой, обеспечивающей такой уровень интерактивности между ПК и консольными играми, была Quake 3 . [11]

К играм с кроссплатформенной сетевой игрой относятся 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, который использует абстракцию для создания некоторых компонентов нижнего уровня с отдельными поддеревьями исходного кода для реализации функций, специфичных для платформы (например, графического пользовательского интерфейса), а также реализацию более чем одного языка сценариев для облегчения переносимости программного обеспечения. . Firefox реализует XUL , CSS и JavaScript для расширения браузера в дополнение к классическим плагинам браузера в стиле Netscape . Большая часть самого браузера написана на XUL, CSS и JavaScript.

Наборы инструментов и среды

Существует множество инструментов [12] [13] , которые могут помочь в процессе кроссплатформенного программирования:

Проблемы

При разработке кроссплатформенного программного обеспечения возникает множество проблем.

Смотрите также

Рекомендации

  1. ^ «Рекомендации по проектированию: Глоссарий». java.sun.com. Архивировано из оригинала 13 февраля 2012 г. Проверено 19 октября 2011 г.
  2. ^ «Блог SDD Technology: Определение кроссплатформенности» . Технология SDD . Проверено 18 октября 2020 г.
  3. ^ Ли П. Ричардсон (16 февраля 2016 г.). «Xamarin против Ionic: мобильная, кроссплатформенная, перестрелка».
  4. ^ ab «Определение платформы». Информационный проект Linux . Проверено 27 марта 2014 г.
  5. ^ «О Моно». mono-project.com . Проверено 17 декабря 2015 г.
  6. ^ Корти, Саша П. (октябрь 2011 г.). «Обнаружение браузера и функций». Журнал MSDN . Проверено 28 января 2014 г.
  7. ^ Чоудхари, СР (2014). «Кроссплатформенное тестирование и сопровождение веб- и мобильных приложений». Сопутствующие материалы 36-й Международной конференции по программной инженерии. стр. 642–645. дои : 10.1145/2591062.2591097. hdl : 1853/53588 . ISBN 9781450327688. S2CID  1903037.
  8. ^ Мехротра, Праноб (01 декабря 2020 г.). «Пакет Collabora Office получил новый макет для планшетов Android и Chromebook» . XDA-Разработчики . Проверено 15 января 2021 г. Collabora Office — популярная альтернатива пакету Microsoft Office с открытым исходным кодом. Он основан на LibreOffice и доступен на различных платформах, включая Windows, Linux, iOS и Android. В июле этого года крупное обновление офисного пакета обеспечило поддержку устройств Chrome OS.
  9. ^ «Collabora Office для iOS и Android стал лучше!». Адфинис . 15 декабря 2020 г. Проверено 15 января 2021 г. ...интерфейсы, оптимизированные для сенсорного управления: один для планшетов, другой для экранов телефонов. ...(iOS, iPadOS, Chromebook, Android).
  10. ^ «Nextcloud Ubuntu Appliance добавляет Collabora Online в образ Raspberry Pi» . МуйЛинукс . 26 марта 2021 г. Проверено 30 марта 2021 г. первое жизнеспособное решение для автономного веб-офиса для популярной платформы Raspberry Pi 4.
  11. ^ Крибба. Quake III Arena, Giant Bombcast , 15 февраля 2013 г.
  12. ^ Набор инструментов GUI, страница Framework
  13. ^ «Часто задаваемые вопросы, независимые от платформы» . Архивировано из оригинала 16 августа 2008 г. Проверено 25 апреля 2009 г.
  14. ^ «Кроссплатформенные библиотеки SDK для распознавания, документов, медицины, изображений и мультимедиа» . www.leadtools.com . Проверено 03 марта 2021 г.
  15. ^ «12 преимуществ разработки кроссплатформенных приложений Xamarin» . ХедВоркс . 15 марта 2019 г.
  16. ^ Описание WxWidgets
  17. ^ Уоррен, Том (14 января 2020 г.). «Microsoft прощается с Windows 7 и миллионами компьютеров, на которых она все еще работает». Грань . Проверено 6 февраля 2020 г.