# Platform-onafhankelijke software

Een toepassing op een computer of een aan een computer aangesloten apparaat, zoals een programmeertaal, software of hardware, heet multiplatform of cross-platform wanneer het op meer dan één systeemplatform werkt, bijvoorbeeld met Linux, Mac en Windows. Platformonafhankelijk duidt op een toepassing die op elk systeem of minstens de courantste systemen werkt. Voorbeelden van multiplatformtalen zijn C, C++, Java, JavaScript, Python, Tcl, Erlang, Delphi+Kylix en REALbasic.

## Programmeertalen

De meeste computertalen zijn strikt gezien platformonafhankelijk. Wanneer men instructies wil geven aan de CPU vanaf een hoog niveau, op een manier die door de mens leesbaar is, is het niet nodig om sterk van het specifiek besturingssysteem afhankelijk te zijn. Om echter complexere zaken te doen, zoals een grafische gebruikersomgeving (GUI) creëren met behulp van de widgetverzameling van het systeem, wordt het programma gelinkt met bibliotheken die specifiek kunnen zijn voor het systeem van de ontwikkelaar. Hoewel bijvoorbeeld C++ zelf op tegelijk op verschillende platforms werkt, zal een programma dat is geschreven voor Windows en daartoe de Win32 API gebruikt, normaal gezien niet compileren op een computer met Unix. Er zijn vaak ook verschillen in de manier waarop de schrijvers van compilers een bepaalde opdrachten interpreteren; in dit geval kan het nodig zijn het programma te controleren voordat men het compileert op andere systemen.
Bepaalde programmeertalen, zoals Java zijn van het begin af ontworpen op elk platform om te werken, dat een gepaste virtuele machine heeft. Talen die bytecode gebruiken als een gecompileerde voorstelling of talen die script direct interpreteren hoeven niet te worden gecompileerd voor het specifiek besturingssysteem. Bibliotheken, die een onderdeel zijn van het besturingssysteem, worden niet gelinkt met de verdeelde code, het is eerder de runtime-omgeving die de gelijkwaardige functionaliteit zelf opnieuw implementeert of een brug vormt naar het besturingssysteem, maar daarbij abstractie maakt van de specifieke eigenheden. Het is weliswaar mogelijk om Javaprogramma's te maken die alleen draaien op een bepaald systeem, door ofwel het gebruik van JNI of het uitvoeren van een bytecode-naar-machinecode-compiler, maar dit is meestal niet nodig.
Het leveren en testen van gecompileerde versie van een programma, voor ieder besturingssysteem of iedere CPU is praktisch onmogelijk, daarom zijn open source-projecten of toepassingen, die de gebruiker in staat stellen zelf code te compileren meestal minder afhankelijk van het gebruikte systeem. Op dezelfde manier zijn talen die worden geïnterpreteerd of een virtuele machine gebruiken eerder platformonafhankelijk. HotSpot, Suns virtuele Javamachine, wordt alleen geleverd als gecompileerde code, met ondersteuning voor verschillende, maar niet alle, platformen. Sun ondersteunt bijvoorbeeld alleen GNU/Linux op de i386-architectuur. Iemand die Linux gebruikt op een PowerPC- of SPARC-computer kan Java niet gebruiken zonder te compileren naar machinecode of het gebruik van hulpmiddelen van derden.
Veel API's zijn platformafhankelijk. OpenGL kan men beschouwen als platformonafhankelijk, omdat dit niet afhankelijk is van een bepaald besturingssysteem, processorarchitectuur of een specifiek merk van grafische hardware. Platformafhankelijke API's kunnen worden gesimuleerd op andere systemen als een tussenliggende compatibiliteitslaag, zoals de Wine-bibliotheek, die het mogelijk maakt om programma's die de Windows bibliotheken nodig hebben uit te voeren op UNIX.
Er bestaan ook multiplatform uitbreidingen en middleware voor veel programmeertalen, die ontwikkelaars de mogelijkheid bieden om dezelfde broncode te compileren en uit te voeren om verschillende platformen, met slechts een minimale aanpassing. Voorbeelden zijn Qt en wxWidgets.

## Platformonafhankelijkheid op het internet

Webapplicaties zijn normaal gezien bruikbaar van ieder platform met een webbrowser, onafhankelijk van de taal waarin ze zijn geschreven. Dit komt doordat de code wordt uitgevoerd op een server en de communicatie met de gebruiker alleen gebeurt via HTTP of HTTPS en HTML of XHTML.
Webpagina's worden vaak platform- of browseronafhankelijk genoemd wanneer ze gebruikt kunnen worden vanaf elke browser, of minstens vanaf elke recente browser. Behalve het creëren van geldige code, vereist dit van de auteur vaak ook om kennis te hebben van de browsers die niet nauwkeurig omgaan met webstandaarden, zoals Internet Explorer.
Een webpagina die inhoud aanbiedt die niet door alle browsers kan getoond worden, zoals Adobe Flash-presentaties, kan toch multiplatform zijn als er voorzieningen getroffen worden voor gebruikers die de speciale plug-ins of ondersteuning niet hebben. Men kan bijvoorbeeld afbeeldingen tonen in de plaats van complexere inhouden, of een downloadbare MPEG-versie van geanimeerd materiaal aanbieden. De inhoud is dan echter niet langer systeemonafhankelijk.