Förhållandet mellan programvara och vilken typ av maskin som den är kompatibel med är komplex, men kokar ner till flera viktiga faktorer:
1. Instruktionsuppsättning Architecture (ISA): Detta är den grundläggande nivån. ISA definierar uppsättningen instruktioner som en processor förstår. Programvara (specifikt maskinkoden) måste skrivas för att matcha ISA för målprocessorn. Till exempel:
* x86: Används av de flesta skrivbords- och bärbara datorer som kör Windows, MacOS och Linux. Programvara sammanställd för x86 kommer att köras på en Intel- eller AMD -processor.
* arm: Dominerar mobila enheter (smartphones, surfplattor) och alltmer inbäddade system. Programvara som sammanställts för ARM kommer att köras på ett äpple-kisel (M1, M2), Qualcomm Snapdragon eller andra armbaserade processorer.
* Risc-V: En nyare, öppen källkod som får dragkraft. Programvara måste specifikt sammanställas för RISC-V-processorer.
* powerpc: Används i vissa äldre MAC och vissa specialiserade system.
Om programvarans ISA inte matchar processorns ISA kommer den inte att köras.
2. Operativsystem (OS): OS fungerar som en mellanhand mellan programvaran och hårdvaran. Programvara måste ofta sammanställas eller utformas för att arbeta med ett specifikt operativsystem.
* Windows: Många applikationer är uteslutande skrivna för Windows.
* macOS: Apples operativsystem, främst för sin egen hårdvara.
* Linux: Mycket mångsidig och körs på ett stort utbud av hårdvaruarkitekturer. Programvaran byggd för en Linux -distribution kanske emellertid inte är direkt kompatibel med en annan (även om det ofta lätt anpassas).
* android (baserat på Linux): Främst för mobila enheter.
* iOS (baserat på Unix): Apples mobila operativsystem.
Programvara som är designad för Windows körs vanligtvis inte direkt på macOS eller Linux utan betydande modifiering eller emulering (med hjälp av program som vin eller virtuella maskiner).
3. Systemresurser: Även om ISA och OS är kompatibla kan programvaran kräva specifika hårdvarufunktioner:
* processorhastighet och kärnor: Krävande programvara behöver en kraftfull processor.
* ram: Mängden minne tillgängligt. Brist på tillräcklig RAM kan leda till kraschar eller långsam prestanda.
* lagringsutrymme: Programvaran behöver utrymme på hårddisken eller SSD.
* Grafikkort: Spel och grafikintensiva applikationer kräver ett kapabelt grafikkort.
4. Programvaruarkitektur:
* Native Applications: Sammanställt direkt för mål OS och hårdvaruarkitektur och erbjuder optimal prestanda.
* Tolkade språk: Kör inom en tolk (t.ex. Java, Python). De kräver att den lämpliga tolken installeras på målmaskinen, men kan vara mer bärbara på olika plattformar.
* webbapplikationer: Kör i en webbläsare och erbjuder bred kompatibilitet så länge webbläsaren stöder den nödvändiga tekniken (t.ex. HTML, CSS, JavaScript).
5. Kompatibilitetslager och emulering:
* virtuella maskiner (VM): Låt köra ett helt operativsystem (och dess programvara) inom ett annat operativsystem. Detta möjliggör till exempel att köra Windows -programvara på en Mac.
* emulatorer: Simulera en annan hårdvarmiljö. Detta tillåter körprogramvara designad för en plattform på en annan (t.ex. att emulera en gammal spelkonsol på en PC).
* Översättningsskikt: Programvara som översätter instruktioner från en ISA till en annan, vilket tillåter programvara sammanställd för en arkitektur att köras på en annan (men ofta med en viss prestationsstraff).
Sammanfattningsvis är programvarukompatibilitet en mångfacetterad fråga. Det hänger på en kombination av programvarans ISA, OS -kompatibilitet, nödvändiga systemresurser, mjukvaruarkitektur och användning av kompatibilitetslager och emuleringstekniker. Enkelt uttryckt:Ju närmare matchen mellan programvarans krav och maskinens funktioner, desto mer sannolikt är programvaran att köra framgångsrikt.