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

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

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

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

Платформы

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

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

Аппаратная платформа может относиться к архитектура набора инструкций. Например: архитектура x86 и ее варианты, такие как IA-32 и x86-64. Эти машины часто работают под управлением одной из версий Microsoft Windows,[6]. За последние 20 лет доля ОС Microsoft существенно снизилась, за счет роста популярностей таких кроссплатформенных операционных систем как Linux, OpenBSD, NetBSD,FreeBSD, а также macOS.

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

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

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

Java

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

Java-код, запущенный в JVM, имеет доступ к службам, связанным с ОС, таким как дисковый ввод-вывод и доступ к сети, если ему предоставлены соответствующие привилегии. 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, предназначенные для устройств с ограниченными ресурсами.

Реализация

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

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

Примечания

  1. Design Guidelines: Glossary. java.sun.com. Дата обращения: 19 октября 2011.
  2. SDD Technology blog: Definition of cross platform. SDD Technology. Дата обращения: 18 октября 2020.
  3. Lee P Richardson. Xamarin vs Ionic: A Mobile, Cross Platform, Shootout (16 февраля 2016).
  4. 4,0 4,1 Platform Definition. The Linux Information Project. Дата обращения: 27 марта 2014.
  5. Cross Platform Mobile App Development. Groovy Web. Дата обращения: 27 марта 2020.
  6. На сайте Net Marketshare, которая имеет около 74% доли рынка по состоянию на январь 2023
  7. About Mono. mono-project.com. Дата обращения: 17 декабря 2015.
  8. Apple объявляет о переходе Mac на кремний Apple (англ.) ?. Apple Newsroom. Дата обращения: 8 декабря 2020.
  9. Porting to x86-64 (AMD64, EM64T) - Apache OpenOffice Wiki. Wiki.services.openoffice.org (2012-06-22). Retrieved on 2013-07-17.