A számítástechnikában a többplatformos szoftver vagy keresztplatformos szoftver olyan számítógépes szoftver, amelyet úgy terveztek, hogy több számítástechnikai platformon is működjön. Egyes többplatformos szoftverekhez minden platformra külön összeállítás szükséges, mások viszont külön előkészítés nélkül közvetlenül futtathatók bármely platformon, mivel értelmezett nyelven írták őket, vagy hordozható bájtkóddá fordították, amelyhez az értelmezők vagy futtatókörnyezetek minden támogatott platformon rendelkezésre állnak.
Például egy keresztplatformos alkalmazás futhat Linuxon, macOS-en és Windowson. A keresztplatformos szoftver sok platformon is futhat, de akár csak kettőn is. A keresztplatformos fejlesztés néhány keretrendszere a Codename One, az ArkUI-X, a Kivy, a Qt, a GTK, a Flutter, a NativeScript, a Xamarin, az Apache Cordova, az Ionic és a React Native.
Platformok
A platform utalhat arra a processzortípusra (CPU-ra) vagy más hardverre, amelyen egy operációs rendszer (OS) vagy alkalmazás fut, az operációs rendszer típusára, illetve a kettő kombinációjára. Egy gyakori platform példája az Android, amely az ARM architektúracsaládon fut. További ismert platformok a Linux/Unix, a macOS és a Windows; ezek mind keresztplatformosak. Az alkalmazásokat úgy is meg lehet írni, hogy egy adott platform — a hardver, az operációs rendszer vagy a virtuális gép (VM), amelyen futnak — jellemzőitől függjenek. Például a Java platform egy gyakori VM-platform, amely sok operációs rendszeren és hardvertípuson fut.
Hardver A hardverplatform utalhat egy utasításkészlet-architektúrára. Például: ARM vagy x86 architektúra. Ezeken a gépeken különböző operációs rendszerek futhatnak.
Az okostelefonok és táblagépek általában ARM architektúrán működnek; ezeken gyakran Android vagy iOS, illetve más mobil operációs rendszerek futnak.
Szoftver Egy szoftverplatform lehet operációs rendszer (OS) vagy programozási környezet, bár gyakrabban a kettő kombinációja. Kivétel a Java, amely operációs rendszertől független virtuális gépet (VM) használ a Java bájtkód végrehajtására. Néhány szoftverplatform: Android (ARM64) ChromeOS (ARM32, ARM64, IA-32, x86-64) A Microsoft által létrehozott Common Language Infrastructure (CLI), amelynek megvalósításai: A régi .NET Framework, amely csak Microsoft Windowson működik. Az újabb .NET keretrendszer (egyszerűen „.NET”), amely Microsoft Windowson, macOS-en és Linuxon is működik. Egyéb megvalósítások, például a Mono (korábban a Novell és a Xamarin által) OpenHarmony/Oniro (ARM64, RISC-V, x86, x64 és LoongArch) HarmonyOS (ARM64) iOS ((ARMv8-A)) iPadOS (ARMv8-A) Java Linux ( Alpha, ARC, ARM, C-Sky, Hexagon, LoongArch, m68k, Microblaze, MIPS, Nios II, OpenRISC, PA-RISC, PowerPC, RISC-V, s390, SuperH, SPARC, x86, Xtensa) Microsoft C to P-Code (1980–1982: sok architektúra és rendszer) macOS x86, ARM (Apple silicon) Windows (IA-32, x86-64, ARM, ARM64) PlayStation 4 (x86), PlayStation 3 (PowerPC) és PlayStation Vita (ARM) Solaris (SPARC, x86) SPARC Unix (1969 óta sok platform) webböngészők – többnyire kompatibilisek egymással, JavaScript webalkalmazásokat futtatnak Xbox
Kisebb, történeti jelentőségű AmigaOS (m68k), AmigaOS 4 (PowerPC), AROS (x86, PowerPC, m68k), MorphOS (PowerPC) Atari TOS, MiNT BSD (sok platform; lásd például NetBSD,) MS-DOS és kompatibilis rendszerek: IBM PC DOS, DR-DOS, FreeDOS OS/2, eComStation BeOS (PowerPC, x86)
Java
A Java nyelvet általában úgy fordítják, hogy a Java platform részét képező VM-en fusson. A Java virtuális gép (Java VM, JVM) szoftveresen megvalósított CPU, amely minden Java-kódot futtat. Ez lehetővé teszi, hogy ugyanaz a kód minden olyan rendszeren fusson, amely megvalósítja a JVM-et. A Java-szoftver hardveralapú Java-processzoron is végrehajtható. Ezt főként beágyazott rendszerekben használják.
A JVM-ben futó Java-kód hozzáférhet az operációs rendszerhez kapcsolódó szolgáltatásokhoz, például a lemezes bemenet/kimenethez (I/O) és a hálózati hozzáféréshez, ha megkapja a megfelelő jogosultságokat. A JVM a Java-alkalmazás nevében végzi el a rendszerhívásokat. Ez lehetővé teszi a felhasználók számára, hogy a megfelelő védelmi szintet válasszák ki egy hozzáférés-vezérlési lista (ACL) alapján. Például a lemez- és hálózati hozzáférés általában engedélyezett az asztali alkalmazások számára, de nem a böngészőalapú appleteknél. A Java Native Interface (JNI) szintén használható operációsrendszer-specifikus funkciók elérésére, a hordozhatóság csökkenése árán.
Jelenleg a Java Standard Edition szoftverek futtathatók Microsoft Windowson, macOS-en, több Unix-szerű operációs rendszeren, valamint több valós idejű operációs rendszeren beágyazott eszközökön. Mobilalkalmazásoknál Windows- és Mac-alapú eszközökön böngészőbővítményeket használnak, az Android pedig beépített Java-támogatással rendelkezik. Léteznek továbbá Java-részhalmazok is, például a Java Card vagy a Java Platform, Micro Edition, amelyeket erőforrás-korlátos eszközökre terveztek.
Megvalósítás Ahhoz, hogy egy szoftvert keresztplatformosnak lehessen tekinteni, egynél több számítógép-architektúrán vagy operációs rendszeren kell működnie. Az ilyen szoftver fejlesztése időigényes feladat lehet, mivel a különböző operációs rendszerek eltérő alkalmazásprogramozási interfészekkel (API-kkal) rendelkeznek.
Egy adott operációs rendszerre írt szoftver nem feltétlenül működik automatikusan az adott operációs rendszer által támogatott összes architektúrán. Attól, hogy egy szoftvert népszerű programozási nyelven, például C vagy C++ nyelven írtak, még nem jelenti azt, hogy minden olyan operációs rendszeren futni fog, amely támogatja az adott nyelvet — vagy akár ugyanannak az operációs rendszernek különböző verzióin.
Webalkalmazások A webalkalmazásokat általában keresztplatformosnak tekintik, mert ideális esetben bármely webböngészőből elérhetők: maga a böngésző a platform. A webalkalmazások általában kliens–szerver modellt alkalmaznak, de összetettségük és funkcionalitásuk nagyon eltérő lehet. Nehéz lehet összeegyeztetni a funkciók iránti igényt a kompatibilitás szükségességével.
Az alapvető webalkalmazások az összes vagy a legtöbb feldolgozást egy állapotmentes szerveren végzik, majd az eredményt továbbítják a kliens webböngészőjének. A felhasználó és az alkalmazás közötti minden interakció egyszerű adatkérések és szerverválaszok cseréjéből áll. Ez az alkalmazástípus volt jellemző a World Wide Web-alkalmazásfejlesztés korai szakaszaiban. Az ilyen alkalmazások egyszerű tranzakciós modellt követnek, amely megegyezik a statikus weboldalak kiszolgálásának modelljével. Ma is viszonylag gyakoriak, különösen ott, ahol a keresztplatformos kompatibilitást és az egyszerűséget fontosabbnak tartják, mint a fejlett funkcionalitást.
A fejlett webalkalmazások ismert példái közé tartozik a Gmail és a Google Térkép webes felülete. Az ilyen alkalmazások rendszerint olyan további funkcióktól függenek, amelyek csak a népszerű webböngészők újabb verzióiban találhatók meg. Ezek közé tartozik az Ajax, a JavaScript, a Dinamikus HTML, az SVG és a gazdag webalkalmazások egyéb összetevői.
Tervezés A kompatibilitás és a funkcionalitás versengő érdekei miatt számos tervezési stratégia alakult ki.
Sok szoftverrendszer rétegzett architektúrát használ, ahol a platformfüggő kódot a legfelső és a legalsó rétegekre korlátozzák.
Fokozatos leépülés A fokozatos leépülés arra törekszik, hogy minden felhasználó és platform számára azonos vagy hasonló funkcionalitást biztosítson, miközben a korlátozottabb kliensböngészők esetében ezt a funkcionalitást a legalacsonyabb közös nevezőre csökkenti. Például egy korlátozott funkciójú böngészővel a Gmail elérésére próbálkozó felhasználó észreveheti, hogy a Gmail alapmódra vált, csökkentett funkcionalitással, de továbbra is használható módon.
Több kódbázis Egyes szoftvereket különálló kódbázisokban tartanak karban a különböző (hardver- és operációsrendszer-) platformokra, azonos funkcionalitással. Ez több erőfeszítést igényel a kód karbantartásához, de megérheti, ha a platformfüggő kód mennyisége nagy.
Egyetlen kódbázis Ez a stratégia egyetlen kódbázis meglétére támaszkodik, amely több platformfüggő formátumba fordítható. Az egyik technika a feltételes fordítás. Ezzel a technikával a minden platformon közös kód nem ismétlődik. Azokat a kódblokkokat, amelyek csak bizonyos platformokhoz kapcsolódnak, feltételessé teszik, így csak akkor értelmezik vagy fordítják őket, amikor szükség van rájuk. Egy másik technika a funkcionalitás szétválasztása, amely letiltja a böngészők vagy operációs rendszerek által nem támogatott funkciókat, miközben a felhasználó továbbra is teljes alkalmazást kap. (Lásd még: Separation of concerns.) Ezt a technikát webfejlesztésben használják, ahol az értelmezett kód (például a szkriptnyelvekben) lekérdezheti, hogy milyen platformon fut, és ez alapján feltételesen különböző blokkokat hajthat végre.
Harmadik féltől származó könyvtárak A harmadik féltől származó könyvtárak arra törekednek, hogy egyszerűsítsék a keresztplatformos képességeket azáltal, hogy a kliensoldali különbségek bonyolultságát egyetlen, egységes API mögé rejtik, a gyártóhoz kötődés árán.
Reszponzív webdizájn A reszponzív webdizájn (RWD) olyan webtervezési megközelítés, amelynek célja a webhelyek vizuális elrendezésének kialakítása optimális megtekintési élmény biztosítása érdekében — könnyű olvashatósággal és navigációval, minimális átméretezéssel, pásztázással és görgetéssel — sokféle eszközön, a mobiltelefonoktól az asztali számítógépes monitorokig. Ezzel a technikával kevés vagy semennyi platformfüggő kódot nem használnak.
Tesztelés A keresztplatformos alkalmazások sokkal több integrációs tesztelést igényelnek. Egyes webböngészők megakadályozzák, hogy ugyanazon a gépen különböző verziókat telepítsenek. Többféle megközelítés létezik több platform megcélzására, de mindegyik olyan szoftvert eredményez, amelynek tesztelése és karbantartása jelentős kézi munkát igényel. Az olyan technikákat, mint a teljes virtualizáció, néha kerülő megoldásként használják erre a problémára.
Az olyan eszközök, mint a Page Object Model, lehetővé teszik a keresztplatformos tesztek szkriptelését úgy, hogy egyetlen teszteset egy alkalmazás több verzióját is lefedje. Ha a különböző verziók hasonló felhasználói felülettel rendelkeznek, mindegyik tesztelhető ugyanazzal a tesztesettel.
Hagyományos alkalmazások A webalkalmazások egyre népszerűbbek, de sok számítógép-felhasználó továbbra is hagyományos alkalmazásszoftvert használ, amely nem támaszkodik kliens/webszerver architektúrára. A hagyományos és a webalkalmazások közötti különbség nem mindig egyértelmű. A webes és hagyományos alkalmazások funkciói, telepítési módszerei és architektúrái átfednek egymással, és elmosódottá teszik a különbséget. Ennek ellenére ez az egyszerűsítő megkülönböztetés gyakori és hasznos általánosítás.
Bináris szoftver A hagyományos alkalmazásszoftvereket bináris fájlokként terjesztették, különösen futtatható fájlokként. A futtatható fájlok csak azt a platformot támogatják, amelyre készítették őket — ami azt jelenti, hogy egyetlen keresztplatformos futtatható fájl nagyon felduzzadhatna olyan kóddal, amely egy adott platformon soha nem fut le. Ehelyett általában több futtatható fájl közül lehet választani, amelyek mindegyike egy-egy platformra készült.