В вычислениях, кроссплатформенное программное обеспечение (также мультиплатформенное программное обеспечение или платформенно-независимое программное обеспечение ) - это компьютерное программное обеспечение, которое реализовано на нескольких вычислительных платформах. Кроссплатформенное программное обеспечение можно разделить на два типа; один требует индивидуальной сборки или компиляции для каждой поддерживаемой платформы, а другой может быть запущен непосредственно на любой платформе без специальной подготовки, например, программное обеспечение, написанное на интерпретируемом языке или предварительно скомпилированное портативное байт-код, для которого интерпретаторы или пакеты времени выполнения являются общими или стандартными компонентами всех платформ.
Например, может выполняться кроссплатформенное приложение в Microsoft Windows, Linux и macOS. Кросс-платформенные программы могут работать как на всех существующих платформах, так и всего на двух платформах. Кросс-платформенные платформы (например, Kivy, Qt, Flutter, NativeScript, Xamarin, Phonegap, Ionic и React Native ) существуют для помощи в кроссплатформенной разработке.
Платформа может относиться к типу процессора (ЦП) или другого оборудования, на котором установлена данная операционная система или приложение работает, тип операционной системы на вычислительном r или сочетание типа оборудования и типа операционной системы, работающей на нем. Примером общей платформы является Microsoft Windows, работающая на архитектуре x86. Другие широко известные платформы настольных компьютеров включают Linux / Unix и macOS, обе из которых сами по себе являются кроссплатформенными. Однако существует множество устройств, таких как смартфоны, которые также фактически являются компьютерными платформами, но о которых так думают реже. Прикладное программное обеспечение может быть написано в зависимости от функций конкретной платформы - оборудования, операционной системы или виртуальной машины, на которой она работает. Платформа Java - это платформа виртуальных машин, которая работает во многих операционных системах и типах оборудования, и является общей платформой для написания программного обеспечения.
Аппаратная платформа может относиться к архитектуре набора команд. Например: архитектура x86 и ее варианты, такие как IA-32 и x86-64. На этих машинах часто работает одна версия Microsoft Windows, хотя они могут работать и с другими операционными системами, включая Linux, OpenBSD, NetBSD, macOS и FreeBSD.
. 311>32-разрядная Архитектура ARM (и более новая 64-разрядная версия) распространена на смартфонах и планшетных компьютерах, работающих под управлением Android., iOS и другие мобильные операционные системы.
Программные платформы могут быть либо операционной системой, либо средой программирования, хотя больше обычно это комбинация обоих. Заметным исключением из этого правила является Java, который использует независимую от операционной системы виртуальную машину для своего скомпилированного кода, известного в мире Java как байт-код. Примеры программных платформ:
Как отмечалось ранее, платформа Java является исключением из общего правила, согласно которому операционная система является программной платформой. Язык Java обычно компилируется в виртуальную машину: виртуальный ЦП, на котором выполняется весь код, написанный для языка. Это позволяет запускать один и тот же исполняемый двоичный файл во всех системах, реализующих виртуальную машину Java (JVM). Программы Java могут выполняться изначально с использованием процессора Java. Это нечасто и в основном используется для встроенных систем.
Код Java, работающий в JVM, имеет доступ к службам, связанным с ОС, таким как дисковый ввод-вывод и доступ к сети, если предоставлены соответствующие привилегии. JVM выполняет системные вызовы от имени приложения Java. Эта настройка позволяет пользователям выбирать соответствующий уровень защиты в зависимости от ACL. Например, дисковый и сетевой доступ обычно разрешен для настольных приложений, но не для браузерных приложений . JNI также можно использовать для разрешения доступа к функциям, специфичным для операционной системы.
В настоящее время программы Java Standard Edition могут работать в Microsoft Windows, macOS, нескольких Unix-подобных операционных системах и еще нескольких не-UNIX-подобных операционных системах, таких как встроенные системы. Для мобильных приложений используются плагины браузера для устройств на базе Windows и Mac, а Android имеет встроенную поддержку Java. Также существуют подмножества Java, такие как Java Card или Java Platform, Micro Edition, предназначенные для устройств с ограниченными ресурсами.
Чтобы часть программного обеспечения считалась кроссплатформенной, она должна быть способна работать более чем на одной компьютерной архитектуре или операционной системе. Разработка такой программы может быть трудоемкой задачей, поскольку разные операционные системы имеют разные интерфейсы прикладного программирования (API). Например, Linux использует другой API для прикладного программного обеспечения, чем Windows.
Программное обеспечение, написанное для конкретной операционной системы, не работает автоматически на всех архитектурах, поддерживаемых операционной системой. Одним из примеров по состоянию на август 2006 г. был OpenOffice.org, который изначально не работал на процессорах AMD64 или Intel 64, реализующих стандарты x86-64 для компьютеры; с тех пор это было изменено, и пакет программного обеспечения OpenOffice.org «в основном» перенесен на эти 64-битные системы. Это также означает, что тот факт, что программа написана на популярном языке программирования, таком как 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.
Сценарий может считаться кроссплатформенным, если его интерпретатор доступен на нескольких платформах, а сценарий использует только возможности, предоставляемые язык. То есть сценарий, написанный на Python для Unix-подобной системы, скорее всего, будет работать с небольшими изменениями или без них в Windows, потому что Python также работает в Windows; также существует несколько реализаций Python, которые будут запускать одни и те же сценарии (например, IronPython для .NET Framework ). То же самое касается многих языков программирования с открытым исходным кодом, которые доступны и являются языками сценариев.
В отличие от двоичных исполняемых файлов, один и тот же сценарий может использоваться на всех компьютерах, имеющих программное обеспечение для интерпретации сценарий. Это связано с тем, что сценарий обычно хранится в виде обычного текста в текстовом файле . Однако могут быть некоторые проблемы, такие как тип символа новой строки, который находится между строками. Как правило, однако, для того, чтобы сценарий, написанный для одной системы, запускался в другой, требуется немного или совсем не работать.
Некоторые довольно популярные кроссплатформенные языки сценариев или интерпретируемые языки :
Кросс-платформенность или мультиплатформенность - это термин, который также может относиться к видеоиграм, выпущенным на ряде игровых консолей, специализированных компьютеры, предназначенные для игры в игры. Примеры кроссплатформенных видеоигр: Miner 2049er, Tomb Raider: Legend, FIFA (серия видеоигр), NHL Series и Minecraft.
Каждый из них был выпущен для различных игровых платформ, таких как Wii, PlayStation 3, Xbox 360, персональные компьютеры (ПК) и мобильные устройства.
Характеристики конкретной системы могут увеличивать время, необходимое для реализации видеоигры на нескольких платформах. Таким образом, видеоигра может быть сначала выпущена на нескольких платформах, а затем выпущена на остальных платформах. Обычно такая ситуация возникает при выпуске новой игровой системы, потому что разработчикам видеоигр необходимо ознакомиться с аппаратным и программным обеспечением, связанным с новой консолью.
Некоторые игры могут не стать кроссплатформенными из-за лицензионных соглашений между разработчиками и производителями игровых консолей, которые ограничивают разработку игры одной конкретной консолью. Например, Disney может создать игру с целью ее выпуска на последних игровых консолях Nintendo и Sony. Если Disney сначала лицензирует игру у Sony, Disney может взамен потребовать выпустить игру исключительно на консоли 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 * nix может иметь другой. Хотя это простой подход к проблеме, он может быть значительно более дорогостоящим с точки зрения затрат на разработку, времени разработки или того и другого, особенно для юридических лиц. Идея состоит в том, чтобы создать более двух разных программ, которые могут вести себя аналогично друг другу. Также возможно, что этот способ разработки кроссплатформенного приложения приведет к большему количеству проблем с отслеживанием и исправлением ошибок, потому что в двух разных исходных деревьях будут разные программисты и, следовательно, разные дефекты в каждой версии.
Другой подход, который используется, состоит в том, чтобы полагаться на уже существующее программное обеспечение, которое скрывает различия между платформами - так называемая абстракция платформы - таким образом, что сама программа не знает, на какой платформе она работает. Можно сказать, что такие программы не зависят от платформы. Программы, работающие на виртуальной машине Java (JVM), построены таким образом.
Некоторые приложения смешивают различные методы кроссплатформенного программирования для создания окончательного приложения. Примером этого является веб-браузер Firefox, который использует абстракцию для создания некоторых компонентов нижнего уровня, отдельные поддеревья исходного кода для реализации специфичных для платформы функций (например, GUI) и реализацию более чем одного языка сценариев для облегчения простота переносимости. Firefox реализует XUL, CSS и JavaScript для расширения возможностей браузера в дополнение к классическим плагинам браузера в стиле Netscape. Большая часть самого браузера написана на XUL, CSS и JavaScript.
Существует ряд инструментов, которые помогают облегчить процесс кросс-платформенного программирования:
Есть определенные проблемы, связанные с кроссплатформенной разработкой. Некоторые из них включают: