Plattformsoberoende programvara - Cross-platform software

Inom datorer är plattformsoberoende mjukvara (även mjukvara med flera plattformar eller plattformsoberoende programvara ) datorprogramvara som är utformad för att fungera på flera datorplattformar. Vissa plattformsoberoende programvaror kräver en separat byggnad för varje plattform, men vissa kan köras direkt på valfri plattform utan särskild förberedelse, skrivas på ett tolkat språk eller kompileras till bärbar bytekod för vilken tolkarna eller körtidspaket är vanliga eller standardiserade komponenter på alla plattformar som stöds.

Till exempel kan en plattformsoberoende applikation köras på Microsoft Windows , Linux och macOS . Plattformsoberoende programvara kan köras på många plattformar, eller så få som två. Några ramar för plattformsoberoende utveckling är Codename One , Kivy , Qt , Flutter , NativeScript , Xamarin , Phonegap , Ionic och React Native .

Plattformar

Plattform kan hänvisa till typen av processor (CPU) eller annan hårdvara som ett operativsystem (OS) eller applikation körs på, typen av operativsystem eller en kombination av de två. Ett exempel på en vanlig plattform är Microsoft Windows OS som körs på x86 -arkitekturen . Andra välkända stationära plattformar är Linux / Unix och macOS-som båda själva är plattformsoberoende. Det finns dock många enheter som smartphones som också är plattformar. Program kan skrivas för att bero på funktionerna i en viss plattform - antingen hårdvaran, operativsystemet eller den virtuella maskinen (VM) som den körs på. Till exempel är Java -plattformen en vanlig VM -plattform som körs på många operativsystem och hårdvarutyper.

Hårdvara

En hårdvaruplattform kan hänvisa till en instruktionsuppsättningsarkitektur . Till exempel: x86-arkitektur och dess varianter som IA-32 och x86-64 . Dessa maskiner kör ofta en version av Microsoft Windows, även om de kan köra andra operativsystem inklusive Linux, OpenBSD , NetBSD , macOS och FreeBSD .

De 32-bitars ARM arkitekturer (och nyare 64-bitars version) är vanligt på smartphones och surfplattor som kör Android, iOS och andra mobila operativsystem .

programvara

En mjukvaruplattform kan antingen vara ett operativsystem eller en programmeringsmiljö , men mer vanligt är det en kombination av båda. Ett undantag är Java , som använder en OS-oberoende virtuell dator för att köra Java-bytekod . Exempel på mjukvaruplattformar är:

Mindre/historiskt

Java

Den Java vanligtvis sammanställts för att köras på en VM som är en del av Java-plattformen. Java VM ( JVM ) är en CPU implementerad i programvara, som kör all Java -kod. Detta gör att samma kod kan köras på alla system som implementerar en JVM. Java-programvara kan köras med en maskinvarubaserad Java-processor . Detta används mestadels i inbäddade system.

Java-kod som körs i JVM har åtkomst till OS-relaterade tjänster, till exempel disk-I/O och nätverksåtkomst, om lämpliga privilegier beviljas. JVM gör systemanrop på uppdrag av Java -applikationen. Detta låter användarna bestämma lämplig skyddsnivå, beroende på en ACL . Till exempel är disk- och nätverksåtkomst vanligtvis aktiverat för skrivbordsprogram, men inte för webbläsarbaserade appletar . Den Java Native Interface (JNI) kan också användas för att få tillgång till OS-specifika funktioner, med en förlust av bärbarhet.

För närvarande kan Java Standard Edition-programvara köras på Microsoft Windows, macOS, flera Unix-liknande operativsystem och flera realtidsoperativsystem för inbäddade enheter. För mobilapplikationer används webbläsarplugins för Windows- och Mac-baserade enheter, och Android har inbyggt stöd för Java. Det finns också delmängder av Java, till exempel Java Card eller Java Platform, Micro Edition , avsedda för resursbegränsade enheter.

Genomförande

För att programvara ska anses vara plattformsoberoende måste den ha funktion på mer än en datorarkitektur eller operativsystem. Att utveckla sådan programvara kan vara en tidskrävande uppgift eftersom olika operativsystem har olika applikationsprogrammeringsgränssnitt (API). Till exempel använder Linux ett annat API än Windows.

Programvara som är skriven för ett operativsystem kanske inte automatiskt fungerar på alla arkitekturer som operativsystemet stöder. Ett exempel är OpenOffice.org , som 2006 inte kördes på AMD64- eller Intel 64- processorer som implementerade x86-64-standarderna; 2012 överfördes det "mestadels" till dessa system. Bara för att programvara är skrivet på ett populärt programmeringsspråk som C eller C ++ , betyder det inte att det körs på alla operativsystem som stöder det språket - eller till och med på olika versioner av samma operativsystem.

Webbapplikationer

Webbapplikationer beskrivs vanligtvis som plattformsoberoende, eftersom de helst är tillgängliga från alla webbläsare : webbläsaren är plattformen. Webbapplikationer använder vanligtvis en klient -server -modell , men varierar mycket i komplexitet och funktionalitet. Det kan vara svårt att förena önskan om funktioner med behovet av kompatibilitet.

Grundläggande webbapplikationer utför all eller mest bearbetning från en statslös server och skickar resultatet till klientens webbläsare. All användarinteraktion med applikationen består av enkla utbyten av dataförfrågningar och serversvar. Denna typ av applikation var normen i de tidiga faserna av utvecklingen av World Wide Web . Sådana applikationer följer en enkel transaktionsmodell , identisk med den för att visa statiska webbsidor . Idag är de fortfarande relativt vanliga, särskilt där plattformsoberoende kompatibilitet och enkelhet anses vara mer kritiskt än avancerad funktionalitet.

Framstående exempel på avancerade webbapplikationer inkluderar webbgränssnittet till Gmail , A9.com , Google Maps webbplats och Live Search -tjänsten (nu Bing ) från Microsoft. Sådana applikationer är rutinmässigt beroende av ytterligare funktioner som bara finns i de senaste versionerna av populära webbläsare. Dessa funktioner inkluderar Ajax , JavaScript , Dynamic HTML , SVG och andra komponenter i rika webbapplikationer . Äldre versioner saknar ofta dessa.

Design

På grund av de konkurrerande intressena för kompatibilitet och funktionalitet har många designstrategier dykt upp.

Många mjukvarusystem använder en skiktad arkitektur där plattformsberoende kod är begränsad till de övre och nedre lagren.

Värdigt förfall

Graciös försämring försöker tillhandahålla samma eller liknande funktionalitet till alla användare och plattformar, samtidigt som den minskar funktionaliteten till en minst gemensam nämnare för mer begränsade klientwebbläsare. Till exempel kan en användare som försöker använda en webbläsare med begränsad funktion för att komma åt Gmail märka att Gmail växlar till grundläge, med reducerad funktionalitet men fortfarande används.

Flera kodbaser

En del programvara underhålls i olika kodbaser för olika (hårdvara och OS) plattformar, med motsvarande funktionalitet. Detta kräver mer ansträngning för att behålla koden, men kan vara värt när mängden plattformsspecifik kod är hög.

Enkel kodbas

Denna strategi bygger på att ha en kodbas som kan kompileras till flera plattformsspecifika format. En teknik är villkorlig sammanställning . Med denna teknik upprepas inte kod som är gemensam för alla plattformar. Kodblock som bara är relevanta för vissa plattformar görs villkorade, så att de bara tolkas eller sammanställs vid behov. En annan teknik är separering av funktionalitet, vilket inaktiverar funktionalitet som inte stöds av webbläsare eller operativsystem, samtidigt som den levererar en komplett applikation till användaren. (Se även: Separation av problem .) Denna teknik används i webbutveckling där tolkad kod (som i skriptspråk) kan fråga den plattform den körs på för att köra olika block villkorligt.

Tredjepartsbibliotek

Tredjepartsbibliotek försöker förenkla plattformsoberoende kapacitet genom att dölja komplexiteten hos klientdifferentiering bakom ett enda, enhetligt API, på bekostnad av leverantörslåsning .

Responsiv webbdesign

Responsiv webbdesign (RWD) är en webbdesignmetod som syftar till att utforma webbplatsernas visuella layout för att ge en optimal tittarupplevelse - enkel läsning och navigering med ett minimum av storlek, panorering och rullning - över ett brett spektrum av enheter, från mobila enheter telefoner till stationära datorskärmar. Liten eller ingen plattformsspecifik kod används med denna teknik.

Testning

Plattformsoberoende applikationer behöver mycket mer integrationstestning . Vissa webbläsare förbjuder installation av olika versioner på samma maskin. Det finns flera metoder som används för att rikta in sig på flera plattformar, men alla resulterar i programvara som kräver betydande manuell ansträngning för testning och underhåll. Tekniker som full virtualisering används ibland som en lösning för detta problem.

Verktyg som sidobjektmodellen gör att plattformstest kan skriptas så att ett testfall täcker flera versioner av en app. Om olika versioner har liknande användargränssnitt kan alla testas med ett testfall.

Traditionella applikationer

Webbapplikationer blir alltmer populära men många datoranvändare använder fortfarande traditionell programvara som inte är beroende av en klient/webbserverarkitektur. Skillnaden mellan traditionella och webbapplikationer är inte alltid tydlig. Funktioner, installationsmetoder och arkitekturer för webb och traditionella applikationer överlappar och suddar skillnaden. Denna förenklade åtskillnad är dock en vanlig och användbar generalisering.

Binär programvara

Traditionell applikationsprogramvara har distribuerats som binära filer, särskilt körbara filer . Executables stöder bara plattformen de byggdes för-vilket innebär att en enda plattformsoberoende körbar kan vara mycket uppblåst med kod som aldrig körs på en viss plattform. Istället finns det i allmänhet ett urval av körbara filer, var och en byggd för en plattform.

För programvara som distribueras som en binär körbar, som den som skrivs i C eller C ++, måste det finnas en mjukvarubyggnad för varje plattform, med hjälp av en verktygsuppsättning som översätter - transkompiler - en enda kodbas till flera binära körbara filer. Till exempel är Firefox , en webbläsare med öppen källkod, tillgänglig på Windows, macOS (både PowerPC och x86 genom vad Apple Inc. kallar en Universal binär ), Linux och BSD på flera datorarkitekturer. De fyra plattformarna (i det här fallet Windows, macOS, Linux och BSD) är separata körbara distributioner, även om de till stor del kommer från samma källkod .

Användningen av olika verktygssatser är kanske inte tillräckligt för att bygga en fungerande körbarhet för olika plattformar. I detta fall måste programmerare överföra källkoden till den nya plattformen. Till exempel kan ett program som Firefox, som redan körs på Windows på x86-familjen, modifieras och byggas om för att köras på Linux på x86 (och eventuellt andra arkitekturer) också. De flera versionerna av koden kan lagras som separata kodbaser eller slås samman till en kodbas.

Ett alternativ till portning är plattformsoberoende virtualisering , där applikationer som sammanställts för en plattform kan köras på en annan utan att modifiera källkoden eller binärfilerna. Som ett exempel kör Apples Rosetta , som är inbyggt i Intel -baserade Macintosh -datorer, applikationer som har sammanställts för den tidigare generationen Mac -datorer som använde PowerPC -processorer. Ett annat exempel är IBM PowerVM Lx86 , som gör att Linux/x86 -applikationer kan köras omodifierade på Linux/Power OS.

Exempel på plattformsoberoende binär programvara:

  • Den Libreoffice Office-paketet är byggd för Microsoft Windows, MacOS, många Linux-distributioner, FreeBSD , NettBSD , OpenBSD , Android, iOS, Chrome OS, webbaserad Collabora Online och många andra. Många av dessa stöds på flera hårdvaruplattformar med processorarkitekturer inklusive IA-32 , x86-64 och ARM .

Manus och tolkade språk

Ett skript kan anses vara plattformsoberoende om dess tolk är tillgänglig på flera plattformar och skriptet bara använder de inbyggda faciliteterna i språket. Till exempel kommer ett skript skrivet i Python för ett Unix-liknande system sannolikt att köras med liten eller ingen ändring på Windows, eftersom Python också körs på Windows; Det finns verkligen många implementeringar (t.ex. IronPython för .NET Framework ). Detsamma gäller många av skriptspråken med öppen källkod .

Till skillnad från binära körbara filer kan samma skript användas på alla datorer som har programvara för att tolka skriptet. Detta beror på att skriptet generellt lagras i ren text i en textfil . Det kan finnas några triviala frågor, till exempel representationen av en ny radkaraktär .

Några populära plattformsoberoende skriptspråk är:

  • bash- Ett Unix-skal som vanligtvis körs på Linux och andra moderna Unix-liknande system, liksom på Windows via Cygwin POSIX- kompatibilitetsskiktet.
  • Perl - släpptes först 1987. Används för CGI -programmering, små systemadministrationsuppgifter och mer.
  • PHP - Används mest för webbapplikationer.
  • Python- Ett språk som fokuserar på snabb applikationsutveckling och enkel skrivning, istället för körtidseffektivitet.
  • Ruby- Ett objektorienterat språk som syftar till att vara lättläst. Kan också användas på webben via Ruby on Rails .
  • Tcl - Ett dynamiskt programmeringsspråk, lämpligt för en mängd olika användningsområden, inklusive webb- och stationära applikationer, nätverk, administration, testning och många fler.

Videospel

Plattformsoberoende eller flera plattformar är en term som också kan gälla videospel som släpps på en rad videospelkonsoler . Exempel på plattformsspel inkluderar: Miner 2049er , Tomb Raider: Legend , FIFA-serien , NHL-serien och Minecraft .

Var och en har släppts på en mängd olika spelplattformar, till exempel Wii , PlayStation 3 , Xbox 360 , persondatorer och mobila enheter .

Sone -plattformar är svårare att skriva för än andra. För att kompensera detta kan ett videospel släppas på några plattformar först, sedan senare på andra. Normalt händer detta när ett nytt spelsystem släpps, eftersom videospelutvecklare måste bekanta sig med dess hårdvara och programvara.

Vissa spel är kanske inte plattformsoberoende på grund av licensavtal mellan utvecklare och spelkonsoltillverkare som begränsar utvecklingen till en viss konsol. Som ett exempel kan Disney skapa ett spel med avsikt att släppa på de senaste Nintendo och Sony spelkonsoler. Om Disney licensierar spelet till Sony först kan det krävas att spelet släpps enbart på Sonys konsol under en kort tid eller på obestämd tid .

Plattformsspel

Flera utvecklare har implementerat sätt att spela spel online medan de använder olika plattformar. Psyonix , Epic Games , Microsoft och Valve har alla teknik som gör det möjligt för Xbox 360 och PlayStation 3 -spelare att spela med PC -spelare, vilket låter konsumenterna bestämma vilken plattform som ska användas. Det första spelet som tillät denna nivå av interaktivitet mellan PC- och konsolspel var Quake 3 .

Spel som presenterar plattformsoberoende onlinespel inkluderar Rocket League , Final Fantasy XIV , Street Fighter V , Killer Instinct , Paragon och Fable Fortune , och Minecraft med bättre tillsammans uppdatering på Windows 10 , VR upplagor, Pocket Edition och Xbox One .

Programmering

Plattformsoberoende programmering är praktiken att medvetet skriva programvara för att arbeta på mer än en plattform.

Tillvägagångssätt

Det finns olika sätt att skriva en plattformsoberoende applikation. Ett tillvägagångssätt är att skapa flera versioner av samma programvara i olika källträd - med andra ord kan Microsoft Windows -versionen av ett program ha en uppsättning källkodfiler och Macintosh -versionen en annan, medan ett FOSS *nix -system kan ha en tredje. Även om detta är enkelt, jämfört med att utveckla för endast en plattform kan det kosta mycket mer att betala ett större team eller släppa ut produkter långsammare. Det kan också leda till att fler buggar spåras och åtgärdas.

Ett annat tillvägagångssätt är att använda programvara som döljer skillnaderna mellan plattformarna. Detta abstraktionslager isolerar applikationen från plattformen. Sådana applikationer är plattformsagnostiker . Program som körs på JVM är byggda på detta sätt.

Vissa applikationer blandar olika metoder för plattformsoberoende programmering för att skapa den slutliga applikationen. Ett exempel är webbläsaren Firefox, som använder abstraktion för att bygga några av komponenterna på lägre nivå, med separata källunderträd för att implementera plattformsspecifika funktioner (som GUI), och implementering av mer än ett skriptspråk för att underlätta mjukvaruportabilitet . Firefox implementerar XUL , CSS och JavaScript för att förlänga webbläsaren, förutom klassiska webbläsar -plugins i Netscape -stil. Mycket av själva webbläsaren är skrivet i XUL, CSS och JavaScript.

Verktygssatser och miljöer

Det finns mantverktyg för att hjälpa processen med plattformsoberoende programmering:

  • 8: e utvecklingsspråk som använder Juce som dess GUI -lager. Den stöder för närvarande Android, iOS, Windows, macOS, Linux och Raspberry Pi.
  • Anant Computing : En mobil applikationsplattform som fungerar på alla indiska språk, inklusive deras tangentbord, och som också stöder AppWallet och inbyggd prestanda i alla operativsystem.
  • AppearIQ : ett ramverk som stöder arbetsflödet för apputveckling och distribution i en företagsmiljö. Nativt utvecklade behållare presenterar maskinvarufunktioner för de mobila enheterna eller surfplattorna via ett API till HTML5 -kod vilket underlättar utvecklingen av mobilappar som körs på olika plattformar.
  • Boden: en UI -ram skriven i C ++.
  • Kairo : ett gratis mjukvarubibliotek som används för att tillhandahålla ett vektorgrafikbaserat, enhetsoberoende API. Den är utformad för att ge primitiv för tvådimensionell ritning över ett antal olika backends. Kairo är skrivet på C och har bindningar för många programmeringsspråk.
  • Cocos2d : en verktygslåda och spelmotor med öppen källkod för utveckling av 2D och enkla 3D-plattformsspel och applikationer.
  • Kodenamn ett : ett open-source Write Once Run Anywhere (WORA) -ramverk för Java- och Kotlin-utvecklare.
  • Delphi : en IDE som använder ett Pascal-baserat språk för utveckling. Den stöder Android, iOS, Windows, macOS, Linux.
  • Ecere SDK: ett GUI- och 2D/3D -grafikverktyg och IDE, skrivet i eC och med stöd för ytterligare språk som C och Python. Den stöder Linux, FreeBSD, Windows, Android, macOS och webben via Emscripten eller Binaryen (WebAssemble).
  • Eclipse : en utvecklingsmiljö med öppen källkod. Implementerad i Java med en konfigurerbar arkitektur som stöder många verktyg för mjukvaruutveckling. Tillägg är tillgängliga för flera språk, inklusive Java och C ++.
  • FLTK : en verktygslåda med öppen källkod, men lättare eftersom den begränsar sig till GUI.
  • Flutter : Ett plattformsgränssnitt för UI för Android och iOS utvecklat av Google .
  • fpGUI : En verktygslåda med öppen källkod som är helt implementerad i Object Pascal. Det stöder för närvarande Linux, Windows och lite Windows CE.
  • GeneXus : En Windows snabb lösning för mjukvaruutveckling för plattformsoberoende applikationsskapande och distribution baserad på kunskapsrepresentation och stöd för C# , COBOL , Java inklusive Android och BlackBerry smarta enheter, Objective-C för Apples mobila enheter, RPG , Ruby , Visual Basic och Visual FoxPro .
  • GLBasic : En BASIC -dialekt och kompilator som genererar C ++ - kod. Den innehåller cross -compilers för många plattformar och stöder många plattformar (Windows, Mac, Linux, Android, iOS och några exotiska handenheter).
  • Godot : en SDK som använder Godot Engine.
  • GTK+ : En verktygslåda med öppen källkod för Unix-liknande system med X11 och Microsoft Windows.
  • Haxe : Ett språk med öppen källkod.
  • Juce : Ett applikationsramverk skrivet i C ++, som används för att skriva inbyggd programvara på många system (Microsoft Windows, POSIX, macOS), utan ändring av koden.
  • Kivy : ett gränssnitt för plattformsgränssnitt med öppen källkod, skrivet i Python . Den stöder Android , iOS , Linux , OS X , Windows och Raspberry Pi .
  • LEADTOOLS : Plattformsoberoende SDK-bibliotek för att integrera teknik för igenkänning, dokument, medicin, bildbehandling och multimedia i Windows, iOS, macOS, Android, Linux och webbapplikationer.
  • LiveCode : ett kommersiellt språköverskridande plattformsutvecklingsspråk inspirerat av HyperTalk.
  • Lazarus : En programmeringsmiljö för FreePascal Compiler. Den stöder skapandet av fristående grafiska och konsolapplikationer och körs på Linux, MacOSX, iOS, Android, WinCE, Windows och WEB.
  • Max/MSP : Ett visuellt programmeringsspråk som inkapslar plattformsoberoende kod med en plattformsspecifik körtidsmiljö i applikationer för macOS och Windows En plattformsoberoende Android-körning. Det gör att omodifierade Android -appar kan köras inbyggt på iOS och macOS
  • Mendix : en molnbaserad plattform för applikationsutveckling med låg kod.
  • MonoCross : ett mönster med öppen källkodsmodell -vy-styrenhet där modellen och styrenheten är plattformsoberoende men vyn är plattformsspecifik.
  • Mono : En plattformsversion av Microsoft .NET med öppen källkod (ett ramverk för applikationer och programmeringsspråk)
  • MoSync : ett SDK med öppen källkod för mobilplattformsutveckling i C ++-familjen.
  • Mozilla-applikationsramverk : en plattform med öppen källkod för att bygga macOS-, Windows- och Linux-applikationer.
  • Ett plattformsoberoende JavaScript/TypeScript-ramverk för Android- och iOS-utveckling.
  • OpenGL : ett 3D -grafikbibliotek.
  • Pixel Game Maker MV : En egenutvecklad 2D -spelutvecklingsprogramvara för Windows för utveckling av Windows- och Nintendo Switch -spel.
  • PureBasic : ett eget språk och IDE för att bygga macOS-, Windows- och Linux -applikationer.
  • ReNative : Den universella utvecklings-SDK för att bygga projekt med flera plattformar med React Native. Inkluderar senaste iOS, tvOS, Android, Android TV, webb, Tizen TV, Tizen Watch, LG webOS, macOS/OSX, Windows, KaiOS, Firefox OS och Firefox TV -plattformar.
  • Qt : en applikationsram och widget-verktygslåda för Unix-liknande system med X11 , Microsoft Windows, macOS och andra system-tillgängliga under både proprietära och öppen källkodslicenser .
  • Enkelt och snabbt multimediabibliotek: Ett multimedia C ++ API som ger låg och hög åtkomst till grafik, input, ljud etc.
  • Simple DirectMedia Layer : ett multimediabibliotek med öppen källkod skriven i C som skapar en abstraktion över olika plattformars grafik, ljud och inmatnings- API: er . Den körs på operativsystem inklusive Linux, Windows och macOS och riktar sig till spel och multimediaprogram.
  • Smartface : ett inbyggt apputvecklingsverktyg för att skapa mobilapplikationer för Android och iOS, med WYSIWYG designredigerare med JavaScript -kodredigerare.
  • Tcl/Tk
  • Ultimate ++ : en ram för snabb applikationsutveckling för C ++ med fokus på programmerares produktivitet. Den innehåller en uppsättning bibliotek (GUI, SQL, etc.) och en integrerad utvecklingsmiljö. Den stöder Windows och Unix-liknande operativsystem.
  • Unity : En annan plattformsoberoende SDK som använder Unity Engine.
  • Uno -plattform : Windows, macOS, iOS, Android, WebAssemble och Linux med C#.
  • Unreal : Ett plattformsoberoende SDK som använder Unreal Engine.
  • V-Play Engine : V-Play är ett plattformsutvecklande SDK baserat på det populära Qt-ramverket. V-Play-appar och -spel skapas i Qt Creator.
  • WaveMaker : Ett utvecklingsverktyg med låg kod för att skapa responsiva webb- och hybridmobilapplikationer (Android och iOS).
  • WinDev: en integrerad utvecklingsmiljö för Windows, Linux, .Net och Java och webbläsare. Optimerad för affärs- och industriapplikationer.
  • wxWidgets : en verktygslåda med öppen källkod som också är en applikationsram . Den körs på Unix-liknande system med X11 , Microsoft Windows och macOS.
  • Xojo : en RAD IDE som använder ett objektorienterat programmeringsspråk för att skapa stationära, webb- och iOS-appar. Xojo gör inbyggda, kompilerade stationära appar för macOS, Windows, Linux och Raspberry Pi. Det skapar kompilerade webbappar som kan köras som fristående servrar eller via CGI. Och det har nyligen lagt till möjligheten att skapa inbyggda iOS -appar.

Utmaningar

Det finns många utmaningar när man utvecklar plattformsoberoende programvara.

  • Att testa plattformsoberoende applikationer kan vara betydligt mer komplicerat, eftersom olika plattformar kan uppvisa lite olika beteenden eller subtila buggar. Detta problem har lett till att vissa utvecklare hånar plattformsoberoende utveckling som "skriv en gång, felsök överallt", en uppfattning om Sun Microsystems " skriv en gång, kör var som helst " marknadsföringsslogan.
  • Utvecklare är ofta begränsade till att använda den lägsta gemensamma nämnaren delmängd av funktioner som är tillgängliga på alla plattformar. Detta kan hindra programmets prestanda eller hindra utvecklare från att använda de mest avancerade funktionerna på varje plattform.
  • Olika plattformar har ofta olika användargränssnittskonventioner, som plattformsoberoende applikationer inte alltid rymmer. Till exempel ska applikationer som utvecklats för macOS och GNOME placera den viktigaste knappen på höger sida av ett fönster eller en dialogruta, medan Microsoft Windows och KDE har motsatt konvention. Även om många av dessa skillnader är subtila, kan en plattformsoberoende applikation som inte överensstämmer med dessa konventioner kännas klumpig eller främmande för användaren. När man arbetar snabbt kan sådana motsatta konventioner till och med leda till dataförlust , till exempel i en dialogruta som bekräftar om ändringar ska sparas eller kasseras.
  • Skriptspråk och VM -bytekod måste översättas till inbyggd körbar kod varje gång de används, vilket medför en prestationsstraff. Denna straff kan lindras med hjälp av tekniker som just-in-time compilation ; men vissa beräkningskostnader kan vara oundvikliga.
  • Olika plattformar kräver användning av inbyggda paketformat som RPM och MSI . Multiplattformsinstallatörer som InstallAnywhere tillgodoser detta behov.
  • Exekveringsmiljöer över flera plattformar kan drabbas av säkerhetsbrister över flera plattformar, vilket skapar en bördig miljö för plattformsoberoende programvara.

Se även

Referenser