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

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

Например, кроссплатформенное приложение может работать в Microsoft Windows , Linux и macOS . Кросс-платформенное программное обеспечение может работать на многих платформах или всего на двух. Некоторые платформы для кроссплатформенной разработки: Codename One , Kivy , Qt , Flutter , NativeScript , Xamarin , Phonegap , Ionic и React Native .

Платформы

Платформа может относиться к типу процессора (ЦП) или другому оборудованию, на котором работает операционная система (ОС) или приложение , типу ОС или их комбинации. Примером распространенной платформы является ОС Microsoft Windows, работающая на архитектуре x86 . Другими известными настольными платформами являются Linux / Unix и macOS, обе из которых сами по себе являются кроссплатформенными. Однако есть много устройств, таких как смартфоны , которые также являются платформами. Приложения могут быть написаны в зависимости от функций конкретной платформы - оборудования, ОС или виртуальной машины (ВМ), на которой она работает. Например, платформа Java - это обычная платформа виртуальных машин, которая работает на многих операционных системах и типах оборудования.

Аппаратное обеспечение

Аппаратная платформа может относиться к архитектуре набора команд . Например: архитектура x86 и ее варианты, такие как IA-32 и x86-64 . На этих машинах часто работает одна версия Microsoft Windows, хотя они могут работать и с другими ОС, включая Linux, OpenBSD , NetBSD , macOS и FreeBSD .

Эти 32-разрядные архитектуры ARM (и более новые 64-разрядные версии) является общим на смартфоны и планшетные компьютеры , которые работают Android, IOS , и других мобильных операционных систем .

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

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

Незначительный / исторический

Джава

Язык Java обычно компилируется для работы на виртуальной машине, которая является частью платформы Java. Java VM ( JVM ) - это программный процессор, на котором выполняется весь Java-код. Это позволяет запускать один и тот же код во всех системах, реализующих JVM. Программное обеспечение Java может выполняться аппаратным процессором Java . Это используется в основном во встроенных системах.

Код Java, работающий в JVM, имеет доступ к службам, связанным с ОС, таким как дисковый ввод-вывод и доступ к сети, если предоставлены соответствующие привилегии. JVM выполняет системные вызовы от имени приложения Java. Это позволяет пользователям выбирать подходящий уровень защиты в зависимости от ACL . Например, дисковый и сетевой доступ обычно разрешен для настольных приложений, но не для апплетов на основе браузера . Native Interface Java (JNI) также может быть использован для доступа к ОС-специфических функций, с потерей мобильности.

В настоящее время программное обеспечение Java Standard Edition может работать в Microsoft Windows, macOS, нескольких Unix-подобных ОС и нескольких операционных системах реального времени для встроенных устройств. Для мобильных приложений используются плагины браузера для устройств на базе Windows и Mac, а Android имеет встроенную поддержку Java. Также существуют подмножества Java, такие как Java Card или Java Platform, Micro Edition , предназначенные для устройств с ограниченными ресурсами.

Реализация

Чтобы программное обеспечение считалось кроссплатформенным, оно должно функционировать более чем на одной компьютерной архитектуре или ОС. Разработка такого программного обеспечения может быть трудоемкой задачей, поскольку разные ОС имеют разные интерфейсы прикладного программирования (API). Например, Linux использует API, отличный от Windows.

Программное обеспечение, написанное для одной ОС, может не работать автоматически на всех архитектурах, поддерживаемых ОС. Одним из примеров является OpenOffice.org , который в 2006 году изначально не работал на процессорах AMD64 или Intel 64 , реализующих стандарты x86-64; к 2012 году он был «в основном» перенесен на эти системы. Тот факт, что программное обеспечение написано на популярном языке программирования, таком как C или C ++ , не означает, что оно будет работать во всех ОС, поддерживающих этот язык, или даже в разных версиях одной и той же ОС.

Веб-приложения

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

Базовые веб-приложения выполняют всю или большую часть обработки с сервера без сохранения состояния и передают результат клиентскому веб-браузеру. Все взаимодействие пользователя с приложением состоит из простого обмена запросами данных и ответами сервера. Этот тип приложений был нормой на ранних этапах разработки приложений World Wide Web . Такие приложения следуют простой модели транзакций , идентичной модели обслуживания статических веб-страниц . Сегодня они все еще относительно распространены, особенно там, где кроссплатформенная совместимость и простота считаются более важными, чем расширенная функциональность.

Яркие примеры передовых веб-приложений включают веб-интерфейс для Gmail , A9.com , веб- сайт Google Maps и службу Live Search (теперь Bing ) от Microsoft. Такие приложения обычно зависят от дополнительных функций, имеющихся только в последних версиях популярных веб-браузеров. Эти функции включают Ajax , JavaScript , Dynamic HTML , SVG и другие компоненты полнофункциональных веб-приложений . В более старых версиях они часто отсутствуют.

Дизайн

Из-за конкурирующих интересов совместимости и функциональности появилось множество дизайнерских стратегий.

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

Изящная деградация

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

Несколько кодовых баз

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

Единая кодовая база

Эта стратегия основана на наличии одной кодовой базы, которая может быть скомпилирована в несколько форматов, зависящих от платформы. Один из методов - условная компиляция . При использовании этой техники код, общий для всех платформ, не повторяется. Блоки кода, относящиеся только к определенным платформам, делаются условными, поэтому они интерпретируются или компилируются только при необходимости. Другой метод - разделение функций, при котором отключаются функции, не поддерживаемые браузерами или ОС, при этом пользователю предоставляется полное приложение. (См. Также: Разделение задач .) Этот метод используется в веб-разработке, где интерпретируемый код (как в языках сценариев) может запрашивать платформу, на которой он работает, для выполнения различных блоков условно.

Сторонние библиотеки

Сторонние библиотеки пытаются упростить кроссплатформенные возможности, скрывая сложности дифференциации клиентов за единым унифицированным API за счет привязки к поставщику .

Адаптивный веб-дизайн

Адаптивный веб-дизайн (RWD) - это подход к веб-дизайну, направленный на создание визуального макета сайтов для обеспечения оптимального просмотра - легкое чтение и навигация с минимумом изменения размера, панорамирования и прокрутки - на широком спектре устройств, включая мобильные. телефоны к мониторам настольных компьютеров. В этом методе используется мало кода, зависящего от платформы, или он не используется совсем.

Тестирование

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

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

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

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

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

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

Для программного обеспечения, которое распространяется в виде двоичного исполняемого файла, например, написанного на 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 без изменений.

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

  • LibreOffice офисный пакет создан для Microsoft Windows, MacOS, многие дистрибутивы Linux, FreeBSD , NettBSD , OpenBSD , Android, IOS, Chrome OS, веб- Collabora онлайн и многих других. Многие из них поддерживаются на нескольких аппаратных платформах с архитектурой процессора, включая IA-32 , x86-64 и ARM .

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

Сценарий можно считать кроссплатформенным, если его интерпретатор доступен на нескольких платформах, а сценарий использует только встроенные в язык средства. Например, сценарий, написанный на Python для Unix-подобной системы, скорее всего, будет работать с небольшими изменениями или без них в Windows, потому что Python также работает в Windows; действительно существует множество реализаций (например, IronPython для .NET Framework ). То же самое касается многих языков сценариев с открытым исходным кодом .

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

Некоторые популярные кроссплатформенные языки сценариев:

  • bash - оболочка Unix, обычно запускаемая в Linux и других современных Unix-подобных системах, а также в Windows через уровень совместимости Cygwin POSIX .
  • Perl - впервые выпущен в 1987 году. Используется для программирования CGI , небольших задач системного администрирования и многого другого.
  • PHP - в основном используется для веб-приложений.
  • Python - язык, ориентированный на быструю разработку приложений и простоту написания, а не на эффективность во время выполнения.
  • Ruby - объектно-ориентированный язык, который упрощает чтение. Также может использоваться в Интернете через Ruby on Rails .
  • Tcl - динамический язык программирования, подходящий для широкого круга задач, включая веб-приложения и настольные приложения, сети, администрирование, тестирование и многое другое.

Видеоигры

Кросс-платформенность или мультиплатформенность - это термин, который также может относиться к видеоиграм, выпущенным на различных игровых консолях . Примеры кросс-платформенных игр включают в себя: Miner 2049er , Tomb Raider: Legend , серия FIFA , серия НХЛ и Minecraft .

Каждая из них была выпущена для различных игровых платформ, таких как Wii , PlayStation 3 , Xbox 360 , персональных компьютеров и мобильных устройств .

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

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

Кросс-платформенная игра

Несколько разработчиков реализовали способы играть в онлайн-игры на разных платформах. Psyonix , Epic Games , Microsoft и Valve обладают технологиями, которые позволяют игрокам Xbox 360 и PlayStation 3 играть с игроками на ПК, оставляя решение о том, какую платформу использовать. Первой игрой, которая обеспечила такой уровень интерактивности между ПК и консольными играми, была Quake 3 .

К играм с кроссплатформенной сетевой игрой относятся 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 * Никс система может иметь в третьих. Хотя это несложно, по сравнению с разработкой только для одной платформы, это может стоить намного дороже, чтобы платить более крупной команде или выпускать продукты медленнее. Это также может привести к увеличению количества ошибок, которые необходимо отслеживать и исправлять.

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

Некоторые приложения смешивают различные методы кроссплатформенного программирования для создания окончательного приложения. Примером может служить веб-браузер Firefox, который использует абстракцию для создания некоторых компонентов нижнего уровня с отдельными исходными поддеревьями для реализации специфичных для платформы функций (например, GUI) и реализации более чем одного языка сценариев для облегчения переносимости программного обеспечения. . Firefox реализует XUL , CSS и JavaScript для расширения браузера в дополнение к классическим плагинам браузера в стиле Netscape . Большая часть самого браузера написана на XUL, CSS и JavaScript.

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

Есть много инструментов, которые помогут процессу кроссплатформенного программирования:

  • 8-й: язык разработки, использующий Juce в качестве уровня графического интерфейса пользователя. В настоящее время он поддерживает Android, iOS, Windows, macOS, Linux и Raspberry Pi.
  • Anant Computing : платформа мобильных приложений, которая работает на всех индийских языках, включая их клавиатуры, а также поддерживает AppWallet и собственную производительность во всех ОС.
  • AppearIQ : платформа, поддерживающая рабочий процесс разработки и развертывания приложений в корпоративной среде. Собственно разработанные контейнеры представляют аппаратные функции мобильных устройств или планшетов через API для кода HTML5, что облегчает разработку мобильных приложений, работающих на разных платформах.
  • Боден: инфраструктура пользовательского интерфейса, написанная на C ++.
  • Cairo : бесплатная библиотека программного обеспечения, используемая для обеспечения независимого от устройства API на основе векторной графики. Он предназначен для предоставления примитивов для двухмерного рисования в нескольких различных серверных модулях. Cairo написан на C и имеет привязки для многих языков программирования.
  • Cocos2d : набор инструментов и игровой движок с открытым исходным кодом для разработки двухмерных и простых трехмерных кроссплатформенных игр и приложений.
  • Codename One : фреймворк с открытым исходным кодом Write Once Run Anywhere (WORA) для разработчиков Java и Kotlin.
  • Delphi : IDE, использующая язык на основе Pascal для разработки. Он поддерживает Android, iOS, Windows, macOS, Linux.
  • Ecere SDK: набор инструментов и IDE с графическим интерфейсом и 2D / 3D-графикой, написанный на eC и поддерживающий дополнительные языки, такие как C и Python. Он поддерживает Linux, FreeBSD, Windows, Android, macOS и Интернет через Emscripten или Binaryen (WebAssembly).
  • Eclipse : среда разработки с открытым исходным кодом. Реализован на Java с настраиваемой архитектурой, которая поддерживает множество инструментов для разработки программного обеспечения. Дополнения доступны для нескольких языков, включая Java и C ++.
  • FLTK : набор инструментов с открытым исходным кодом, но более легкий, поскольку он ограничивается графическим интерфейсом.
  • Flutter : кроссплатформенный UI-фреймворк для Android и iOS, разработанный Google .
  • fpGUI : набор инструментов виджетов с открытым исходным кодом, полностью реализованный в Object Pascal. В настоящее время он поддерживает Linux, Windows и немного Windows CE.
  • GeneXus : решение для быстрой разработки программного обеспечения Windows для создания и развертывания кроссплатформенных приложений на основе представления знаний и поддержки C # , COBOL , Java, включая интеллектуальные устройства Android и BlackBerry, Objective-C для мобильных устройств Apple , RPG , Ruby , Visual Basic и Visual FoxPro .
  • GLBasic : БАЗОВЫЙ диалект и компилятор, который генерирует код C ++. Он включает кросс-компиляторы для многих платформ и поддерживает множество платформ (Windows, Mac, Linux, Android, iOS и некоторые экзотические портативные устройства).
  • Godot : SDK, использующий Godot Engine.
  • GTK + : набор инструментов виджетов с открытым исходным кодом для Unix-подобных систем с X11 и Microsoft Windows.
  • Haxe : язык с открытым исходным кодом.
  • Juce : инфраструктура приложений, написанная на C ++, используемая для написания собственного программного обеспечения во многих системах (Microsoft Windows, POSIX, macOS) без изменения кода.
  • Kivy : кроссплатформенный UI-фреймворк с открытым исходным кодом, написанный на Python . Он поддерживает Android , iOS , Linux , OS X , Windows и Raspberry Pi .
  • LEADTOOLS : кроссплатформенные библиотеки SDK для интеграции технологий распознавания, документирования, медицины, обработки изображений и мультимедиа в Windows, iOS, macOS, Android, Linux и веб-приложения.
  • LiveCode : коммерческий кроссплатформенный язык быстрой разработки приложений, вдохновленный HyperTalk.
  • Lazarus : среда программирования для компилятора FreePascal. Он поддерживает создание автономных графических и консольных приложений и работает в Linux, MacOSX, iOS, Android, WinCE, Windows и WEB.
  • Max / MSP : визуальный язык программирования, который инкапсулирует независимый от платформы код с зависящей от платформы средой выполнения в приложения для macOS и Windows. Кросс-платформенная среда выполнения Android. Это позволяет немодифицированным приложениям Android работать на iOS и macOS.
  • Mendix : облачная платформа для разработки приложений с низким уровнем кода.
  • MonoCross : шаблон проектирования модель – представление – контроллер с открытым исходным кодом, в котором модель и контроллер являются кроссплатформенными, но представление зависит от платформы.
  • Mono : кроссплатформенная версия Microsoft .NET с открытым исходным кодом (платформа для приложений и языков программирования).
  • MoSync : SDK с открытым исходным кодом для разработки приложений для мобильных платформ в семействе C ++.
  • Платформа приложений Mozilla : платформа с открытым исходным кодом для создания приложений для macOS, Windows и Linux.
  • Кросс-платформенный фреймворк JavaScript / TypeScript для разработки под Android и iOS.
  • OpenGL : библиотека трехмерной графики.
  • Pixel Game Maker MV : проприетарное программное обеспечение для разработки 2D-игр для Windows, предназначенное для разработки игр для Windows и Nintendo Switch .
  • PureBasic : собственный язык и IDE для создания приложений для macOS, Windows и Linux.
  • ReNative : универсальный SDK разработки для создания многоплатформенных проектов с React Native. Включает новейшие платформы iOS, tvOS, Android, Android TV, Web, Tizen TV, Tizen Watch, LG webOS, macOS / OSX, Windows, KaiOS, Firefox OS и Firefox TV.
  • Qt : платформа приложений и набор инструментов виджетов для Unix-подобных систем с X11 , Microsoft Windows, macOS и другими системами - доступны как по проприетарным лицензиям, так и по лицензиям с открытым исходным кодом .
  • Простая и быстрая мультимедийная библиотека: мультимедийный C ++ API , обеспечивающий низко- и высокоуровневый доступ к графике, вводу, аудио и т. Д.
  • Simple DirectMedia Layer : мультимедийная библиотека с открытым исходным кодом, написанная на C, которая создает абстракцию над графикой, звуком и входными API различных платформ . Он работает в операционных системах, включая Linux, Windows и macOS, и предназначен для игр и мультимедийных приложений.
  • Smartface : собственный инструмент разработки приложений для создания мобильных приложений для Android и iOS с использованием редактора дизайна WYSIWYG с редактором кода JavaScript.
  • Tcl / Tk
  • Ultimate ++ : среда быстрой разработки приложений на C ++, ориентированная на продуктивность программистов. Он включает в себя набор библиотек (GUI, SQL и др.) И интегрированную среду разработки. Он поддерживает Windows и Unix-подобные ОС.
  • Unity : еще один кроссплатформенный SDK, использующий Unity Engine.
  • Платформа Uno : Windows, macOS, iOS, Android, WebAssembly и Linux с использованием C #.
  • Unreal : кроссплатформенный SDK, использующий Unreal Engine.
  • V-Play Engine : V-Play - это кроссплатформенный SDK для разработки, основанный на популярной платформе Qt. Приложения и игры V-Play создаются в Qt Creator.
  • WaveMaker : инструмент разработки с низким кодом для создания адаптивных веб-приложений и гибридных мобильных (Android и iOS) приложений.
  • WinDev: интегрированная среда разработки для Windows, Linux, .Net и Java, а также веб-браузеров. Оптимизирован для бизнеса и промышленных приложений.
  • wxWidgets : набор инструментов виджетов с открытым исходным кодом, который также является фреймворком приложения . Он работает в Unix-подобных системах с X11 , Microsoft Windows и macOS.
  • Xojo : RAD IDE, использующая объектно-ориентированный язык программирования для создания настольных, веб-приложений и приложений для iOS. Xojo создает собственные скомпилированные настольные приложения для macOS, Windows, Linux и Raspberry Pi. Он создает скомпилированные веб-приложения, которые можно запускать как автономные серверы или через CGI. И недавно добавлена ​​возможность создавать собственные приложения для iOS.

Вызовы

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

  • Тестирование кроссплатформенных приложений может быть значительно более сложным, поскольку разные платформы могут демонстрировать немного разное поведение или незначительные ошибки. Эта проблема заставила некоторых разработчиков высмеивать кроссплатформенную разработку как «напиши один раз, отлаживай везде», взяв за основу маркетинговый слоган Sun Microsystems « напиши один раз, запусти где угодно ».
  • Разработчики часто ограничиваются использованием подмножества функций с наименьшим общим знаменателем, которые доступны на всех платформах. Это может снизить производительность приложения или запретить разработчикам использовать наиболее продвинутые функции каждой платформы.
  • Различные платформы часто имеют разные соглашения о пользовательском интерфейсе, которые не всегда поддерживаются кроссплатформенными приложениями. Например, приложения, разработанные для macOS и GNOME , должны размещать наиболее важную кнопку в правой части окна или диалогового окна, тогда как Microsoft Windows и KDE придерживаются противоположного соглашения. Хотя многие из этих различий незначительны, кроссплатформенное приложение, не соответствующее этим соглашениям, может показаться пользователю неуклюжим или чуждым. При быстрой работе такие противоположные соглашения могут даже привести к потере данных , например, в диалоговом окне, подтверждающем, следует ли сохранить или отменить изменения.
  • Языки сценариев и байт-код виртуальной машины должны переводиться в собственный исполняемый код каждый раз, когда они используются, что снижает производительность. Этот штраф можно уменьшить, используя такие методы, как своевременная компиляция ; но некоторые вычислительные затраты могут быть неизбежны.
  • Различные платформы требуют использования собственных форматов пакетов, таких как RPM и MSI . Мультиплатформенные установщики, такие как InstallAnywhere, удовлетворяют эту потребность.
  • Кросс-платформенные среды выполнения могут иметь недостатки межплатформенной безопасности, создавая благоприятную среду для кроссплатформенного вредоносного ПО.

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

использованная литература