En informática , el software multiplataforma (también llamado software multiplataforma , software agnóstico de plataforma o software independiente de plataforma ) es un software de computadora que está diseñado para funcionar en varias plataformas informáticas . [1] Algunos software multiplataforma requieren una compilación separada para cada plataforma, pero algunos se pueden ejecutar directamente en cualquier plataforma sin preparación especial, estando escritos en un lenguaje interpretado o compilados en bytecode portable para el cual los intérpretes o paquetes de tiempo de ejecución son componentes comunes o estándar de todas las plataformas compatibles. [2]
Por ejemplo, una aplicación multiplataforma puede ejecutarse en Linux , macOS y Microsoft Windows . El software multiplataforma puede ejecutarse en muchas plataformas o en tan solo dos. Algunos marcos para el desarrollo multiplataforma son Codename One , ArkUI-X, Kivy , Qt , GTK , Flutter , NativeScript , Xamarin , Apache Cordova , Ionic y React Native . [3]
La plataforma puede referirse al tipo de procesador (CPU) u otro hardware en el que se ejecuta un sistema operativo (SO) o una aplicación , el tipo de SO o una combinación de los dos. [4] Un ejemplo de una plataforma común es Android , que se ejecuta en la familia de arquitectura ARM . Otras plataformas conocidas son Linux / Unix , macOS y Windows , todas ellas multiplataforma. [4] Las aplicaciones se pueden escribir para depender de las características de una plataforma en particular, ya sea el hardware, el SO o la máquina virtual (VM) en la que se ejecuta. Por ejemplo, la plataforma Java es una plataforma de VM común que se ejecuta en muchos SO y tipos de hardware.
Una plataforma de hardware puede hacer referencia a una arquitectura de conjunto de instrucciones . Por ejemplo: ARM o la arquitectura x86. Estas máquinas pueden ejecutar diferentes sistemas operativos.
Los teléfonos inteligentes y tabletas generalmente ejecutan arquitectura ARM, estos a menudo ejecutan Android o iOS y otros sistemas operativos móviles .
Una plataforma de software puede ser un sistema operativo (OS) o un entorno de programación , aunque lo más común es que sea una combinación de ambos. Una excepción es Java , que utiliza una máquina virtual (VM) independiente del SO para ejecutar el bytecode de Java . Algunas plataformas de software son:
El lenguaje Java se compila normalmente para ejecutarse en una máquina virtual que forma parte de la plataforma Java. La máquina virtual Java (Java VM, JVM) es una CPU implementada en software, que ejecuta todo el código Java. Esto permite que el mismo código se ejecute en todos los sistemas que implementan una JVM. El software Java puede ejecutarse mediante un procesador Java basado en hardware . Esto se utiliza principalmente en sistemas integrados.
El código Java que se ejecuta en la JVM tiene acceso a servicios relacionados con el SO, como entrada/salida (E/S) de disco y acceso a la red, si se conceden los privilegios adecuados. La JVM realiza las llamadas al sistema en nombre de la aplicación Java. Esto permite a los usuarios decidir el nivel de protección adecuado, según una lista de control de acceso (ACL). Por ejemplo, el acceso al disco y a la red suele estar habilitado para aplicaciones de escritorio, pero no para subprogramas basados en navegador . La interfaz nativa de Java (JNI) también se puede utilizar para acceder a funciones específicas del SO, con una pérdida de portabilidad.
Actualmente, el software Java Standard Edition puede ejecutarse en Microsoft Windows, macOS, varios sistemas operativos tipo Unix y varios sistemas operativos en tiempo real para dispositivos integrados. Para las aplicaciones móviles, se utilizan complementos de navegador para dispositivos basados en Windows y Mac, y Android tiene soporte integrado para Java. También existen subconjuntos de Java, como Java Card o Java Platform, Micro Edition , diseñados para dispositivos con recursos limitados.
Para que un software se considere multiplataforma, debe funcionar en más de una arquitectura informática o sistema operativo. El desarrollo de este tipo de software puede ser una tarea que demanda mucho tiempo, ya que los distintos sistemas operativos tienen distintas interfaces de programación de aplicaciones (API).
Es posible que el software escrito para un sistema operativo no funcione automáticamente en todas las arquitecturas que ese sistema operativo admite. El hecho de que un software esté escrito en un lenguaje de programación popular , como C o C++ , no significa que se ejecutará en todos los sistemas operativos que admiten ese lenguaje, o incluso en diferentes versiones del mismo sistema operativo.
Las aplicaciones web suelen describirse como multiplataforma porque, idealmente, se puede acceder a ellas desde cualquier navegador web : el navegador es la plataforma. Las aplicaciones web suelen emplear un modelo cliente-servidor , pero varían ampliamente en complejidad y funcionalidad. Puede resultar difícil conciliar el deseo de contar con funciones con la necesidad de compatibilidad.
Las aplicaciones web básicas realizan todo o la mayor parte del procesamiento desde un servidor sin estado y pasan el resultado al navegador web del cliente. Toda la interacción del usuario con la aplicación consiste en intercambios simples de solicitudes de datos y respuestas del servidor. Este tipo de aplicación era la norma en las primeras fases del desarrollo de aplicaciones de la World Wide Web . Dichas aplicaciones siguen un modelo de transacción simple , idéntico al de servir páginas web estáticas . Hoy en día, siguen siendo relativamente comunes, especialmente donde la compatibilidad entre plataformas y la simplicidad se consideran más críticas que la funcionalidad avanzada.
Entre los ejemplos más destacados de aplicaciones web avanzadas se incluyen la interfaz web de Gmail y Google Maps . Estas aplicaciones dependen habitualmente de funciones adicionales que solo se encuentran en las versiones más recientes de los navegadores web más populares. Estas funciones incluyen Ajax , JavaScript , HTML dinámico , SVG y otros componentes de aplicaciones web enriquecidas .
Debido a los intereses en pugna entre compatibilidad y funcionalidad, han surgido numerosas estrategias de diseño.
Muchos sistemas de software utilizan una arquitectura en capas donde el código dependiente de la plataforma está restringido a las capas superior e inferior.
La degradación elegante intenta proporcionar la misma funcionalidad o una funcionalidad similar a todos los usuarios y plataformas, al tiempo que reduce esa funcionalidad a un mínimo común denominador para los navegadores de clientes más limitados. Por ejemplo, un usuario que intenta utilizar un navegador con funciones limitadas para acceder a Gmail puede notar que Gmail cambia al modo básico, con una funcionalidad reducida pero aún útil.
Algunos programas se mantienen en bases de código distintas para diferentes plataformas (hardware y SO), con funcionalidades equivalentes. Esto requiere un mayor esfuerzo para mantener el código, pero puede resultar útil cuando la cantidad de código específico de la plataforma es alta.
Esta estrategia se basa en tener una base de código que se puede compilar en múltiples formatos específicos de la plataforma. Una técnica es la compilación condicional . Con esta técnica, el código que es común a todas las plataformas no se repite. Los bloques de código que solo son relevantes para ciertas plataformas se vuelven condicionales, de modo que solo se interpreten o compilen cuando sea necesario. Otra técnica es la separación de funcionalidad, que deshabilita la funcionalidad no compatible con los navegadores o los sistemas operativos, al tiempo que ofrece una aplicación completa al usuario. (Véase también: Separación de preocupaciones ). Esta técnica se utiliza en el desarrollo web, donde el código interpretado (como en los lenguajes de script) puede consultar la plataforma en la que se ejecuta para ejecutar diferentes bloques de forma condicional. [6]
Las bibliotecas de terceros intentan simplificar la capacidad multiplataforma ocultando las complejidades de la diferenciación de clientes detrás de una API única y unificada, a expensas del bloqueo del proveedor .
El diseño web responsivo (RWD) es un enfoque de diseño web cuyo objetivo es diseñar el diseño visual de los sitios para brindar una experiencia de visualización óptima (lectura y navegación sencillas con un mínimo de cambios de tamaño, desplazamientos y desplazamientos) en una amplia gama de dispositivos, desde teléfonos móviles hasta monitores de computadoras de escritorio. Con esta técnica, se utiliza poco o ningún código específico de la plataforma.
Las aplicaciones multiplataforma necesitan muchas más pruebas de integración . Algunos navegadores web prohíben la instalación de diferentes versiones en la misma máquina. Existen varios enfoques que se utilizan para abordar múltiples plataformas, pero todos ellos dan como resultado un software que requiere un esfuerzo manual sustancial para las pruebas y el mantenimiento. [7] A veces se utilizan técnicas como la virtualización completa como solución alternativa para este problema.
Las herramientas como el modelo de objetos de página permiten crear scripts para pruebas multiplataforma de modo que un caso de prueba cubra varias versiones de una aplicación. Si distintas versiones tienen interfaces de usuario similares, todas se pueden probar con un solo caso de prueba.
Las aplicaciones web son cada vez más populares, pero muchos usuarios de ordenadores siguen utilizando software de aplicación tradicional que no se basa en una arquitectura cliente/servidor web. La distinción entre aplicaciones web y tradicionales no siempre es clara. Las características, los métodos de instalación y las arquitecturas de las aplicaciones web y tradicionales se superponen y difuminan la distinción. No obstante, esta distinción simplificadora es una generalización común y útil.
El software de aplicación tradicional se ha distribuido como archivos binarios, especialmente archivos ejecutables . Los ejecutables solo son compatibles con la plataforma para la que fueron creados, lo que significa que un único ejecutable multiplataforma podría estar muy sobrecargado con código que nunca se ejecuta en una plataforma en particular. En cambio, generalmente hay una selección de ejecutables, cada uno creado para una plataforma.
En el caso del software que se distribuye como ejecutable binario, como el escrito en C o C++, debe haber una compilación de software para cada plataforma, utilizando un conjunto de herramientas que traduzca (transcompila) una única base de código en varios ejecutables binarios. Por ejemplo, Firefox , un navegador web de código abierto, está disponible en Windows, macOS (tanto PowerPC como x86 a través de lo que Apple Inc. llama un binario universal ), Linux y BSD en múltiples arquitecturas informáticas. Las cuatro plataformas (en este caso, Windows, macOS, Linux y BSD) son distribuciones ejecutables independientes, aunque proceden en gran medida del mismo código fuente . En casos excepcionales, el código ejecutable creado para varias plataformas se combina en un único archivo ejecutable llamado binario fat .
El uso de diferentes conjuntos de herramientas puede no ser suficiente para crear archivos ejecutables que funcionen en diferentes plataformas. En este caso, los programadores deben trasladar el código fuente a la nueva plataforma. Por ejemplo, una aplicación como Firefox, que ya se ejecuta en Windows en la familia x86, se puede modificar y volver a crear para que se ejecute también en Linux en la familia x86 (y potencialmente en otras arquitecturas). Las distintas versiones del código se pueden almacenar como bases de código independientes o fusionar en una sola base de código.
Una alternativa a la portabilidad es la virtualización multiplataforma , en la que las aplicaciones compiladas para una plataforma pueden ejecutarse en otra sin modificar el código fuente ni los binarios. Por ejemplo, Rosetta de Apple , que está integrado en los ordenadores Macintosh basados en Intel , ejecuta aplicaciones compiladas para la generación anterior de Mac que utilizaban CPU PowerPC. Otro ejemplo es IBM PowerVM Lx86 , que permite que las aplicaciones Linux/x86 se ejecuten sin modificaciones en el sistema operativo Linux/Power.
Ejemplo de software binario multiplataforma:
Se puede considerar que un script es multiplataforma si su intérprete está disponible en varias plataformas y el script solo utiliza las funciones integradas en el lenguaje. Por ejemplo, un script escrito en Python para un sistema tipo Unix probablemente se ejecutará con poca o ninguna modificación en Windows, porque Python también se ejecuta en Windows; de hecho, hay muchas implementaciones (por ejemplo, IronPython para .NET Framework ). Lo mismo ocurre con muchos de los lenguajes de scripting de código abierto .
A diferencia de los archivos ejecutables binarios, el mismo script se puede utilizar en todas las computadoras que tengan software para interpretar el script. Esto se debe a que el script generalmente se almacena en texto sin formato en un archivo de texto . Puede haber algunos problemas triviales, como la representación de un carácter de nueva línea .
Algunos lenguajes de programación multiplataforma populares son:
Multiplataforma o multiplataforma es un término que también se puede aplicar a los videojuegos lanzados en una variedad de consolas de videojuegos . Algunos ejemplos de juegos multiplataforma incluyen: Miner 2049er , Tomb Raider: Legend , la serie FIFA , la serie NHL y Minecraft .
Cada uno de ellos se ha lanzado en una variedad de plataformas de juego, como Wii , PlayStation 3 , Xbox 360 , computadoras personales y dispositivos móviles .
Algunas plataformas son más difíciles de desarrollar que otras, por lo que se necesita más tiempo para desarrollar el videojuego con el mismo estándar. Para compensar esto, un videojuego puede lanzarse primero en algunas plataformas y luego en otras. Por lo general, esto sucede cuando se lanza un nuevo sistema de juego, porque los desarrolladores de videojuegos necesitan familiarizarse con su hardware y software.
Algunos juegos pueden no ser multiplataforma debido a acuerdos de licencia entre desarrolladores y fabricantes de consolas de videojuegos que limitan el desarrollo a una consola en particular. Por ejemplo, Disney podría crear un juego con la intención de lanzarlo en las consolas de juegos más recientes de Nintendo y Sony . Si Disney obtiene primero la licencia del juego con Sony, es posible que se le exija lanzar el juego únicamente en la consola de Sony durante un período breve o indefinidamente .
Varios desarrolladores han implementado formas de jugar juegos en línea mientras se utilizan diferentes plataformas. Psyonix , Epic Games , Microsoft y Valve poseen tecnología que permite a los jugadores de Xbox 360 y PlayStation 3 jugar con jugadores de PC, dejando la decisión de qué plataforma usar a los consumidores. El primer juego que permitió este nivel de interactividad entre juegos de PC y consola (Dreamcast con teclado y mouse especialmente producidos) fue Quake 3. [11] [12]
Los juegos que cuentan con juego en línea multiplataforma incluyen Rocket League , Final Fantasy XIV , Street Fighter V , Killer Instinct , Paragon y Fable Fortune , y Minecraft con su actualización Better Together en Windows 10 , ediciones VR, Pocket Edition y Xbox One .
La programación multiplataforma es la práctica de escribir deliberadamente software para que funcione en más de una plataforma.
Existen diferentes formas de escribir una aplicación multiplataforma. Una de ellas consiste en crear varias versiones del mismo software en diferentes árboles de código fuente ; en otras palabras, la versión de Microsoft Windows de una aplicación puede tener un conjunto de archivos de código fuente y la versión de Macintosh otro, mientras que un sistema FOSS *nix puede tener un tercero. Si bien esto es sencillo, en comparación con el desarrollo para una sola plataforma, puede costar mucho más pagar a un equipo más grande o lanzar productos más lentamente. También puede dar como resultado que haya más errores que rastrear y corregir.
Otro enfoque consiste en utilizar software que oculte las diferencias entre las plataformas. Esta capa de abstracción aísla la aplicación de la plataforma. Estas aplicaciones son independientes de la plataforma . Las aplicaciones que se ejecutan en la JVM se crean de esta manera.
Algunas aplicaciones combinan varios métodos de programación multiplataforma para crear la aplicación final. Un ejemplo es el navegador web Firefox, que utiliza la abstracción para construir algunos de los componentes de nivel inferior, con subárboles de código fuente separados para implementar características específicas de la plataforma (como la GUI) y la implementación de más de un lenguaje de script para facilitar la portabilidad del software . Firefox implementa XUL , CSS y JavaScript para extender el navegador, además de los complementos de navegador clásicos de estilo Netscape . Gran parte del navegador en sí está escrito en XUL, CSS y JavaScript.
Hay muchas herramientas [13] [14] disponibles para ayudar en el proceso de programación multiplataforma:
Existen muchos desafíos al desarrollar software multiplataforma.
Collabora Office es una alternativa popular de código abierto a la suite Microsoft Office. Se basa en LibreOffice y está disponible en una variedad de plataformas, incluidas Windows, Linux, iOS y Android. Este año, en julio, una importante actualización de la suite ofimática trajo soporte para dispositivos Chrome OS.
...interfaces táctiles optimizadas: una para tabletas y otra para pantallas de teléfonos. ...(iOS, iPadOS, Chromebooks, Android).
la primera solución viable de oficina web alojada por uno mismo para la popular plataforma Raspberry Pi 4