En storlek passar inte alla varför programvaran inte är universellt kompatibel

En storlek passar inte alla varför programvaran inte är universellt kompatibel / Teknologi förklaras

Du har just hämtat en uppdaterad uppdatering till din favoritprogram med öppen källkod. Allt fungerar bra, och du använder det på dina andra enheter - så det är dags att rulla ut det till dem också.

Förutom din glänsande nya Linux-bärbar dator är inte kompatibel med ditt Windows-installationspaket. Vad sägs om din Android-Tablet? iPhone? PS4? Varför kan du inte bara ta den programvaran och använda den vart du vill? Låt oss utforska några olika hinder för drömmen om “köp en gång, spring någonstans.”

Programutveckling och OS Arkitektur

Förstå varför programvara inte fungerar över operativsystem kräver lite (bara lite, jag lovar) kunskap om hur programvara görs.

Programvaruutvecklingsprocessen

I ett mycket grundläggande mjukvaruutveckling för skrivbord, server och mobil (dvs inte webbprogrammering vs webbutveckling: Vad är skillnaden? Programmering vs Webbutveckling: Vad är skillnaden? Du kanske tror att applikationsprogrammerare och webbutvecklare gör samma jobb , men det är långt ifrån sanningen. Här är de viktigaste skillnaderna mellan programmerare och webbutvecklare. Läs mer), en programmerare kommer att:

  1. Skriv några koda till en eller flera filer.
  2. Sammanställa koden till något som datorn kan exekvera.
  3. Testa för att se till att programmet fungerar som förväntat.
  4. Paket och distribuera / distribuera mjukvaran.

Det är en kombination av de första och andra stegen som berör oss här. Processen sammanställa programvara, eller vrid det från kod till dem och nollor som en dator förstår (maskinens språk) är komplex. Vi kommer inte in i det i detalj, men det är användbart att förstå på hög nivå vad som händer.

OS Arkitektur

En viktig punkt att förstå är att ett operativsystem inte är en enda enhet. Snarare består det av lager av programvara.

Operativsystem Kärnor

Ett operativsystems kärna ansvarar för att kommunicera med datorns hårdvara. Programvaran kommunicerar sina kommandon till kärnan, som i sin tur utfärdar kommandon till hårdvaran till (till exempel) läser en fil från hårddisken eller ritar ett fönster på skärmen. Det samordnar i princip all information (oavsett om det är lagrat data, beräkningar eller användarinmatning) mellan hårdvara och olika programvaror. Kärnan gör all denna funktionalitet tillgänglig för programvara via system samtal.

Bildkredit: Wikimedia Commons

Varje operativsystems kärna kommer att implementera systemsamtal annorlunda, i fråga om vilka som är tillgängliga, vad de kallas eller vilka alternativ de tar. Som ett resultat måste mjukvaran ta hänsyn till systemanrop som stöds av kärnan i varje operativsystem som det riktar sig till. Systemanropet du använder för att skicka data till GPU i Linux kan ha ett annat namn, en lista med information du behöver tillhandahålla, eller båda i Windows. Det exakta samtalet kanske inte ens finns överallt.

Systembiblioteken

I många fall ringer inte programvara direkt till kärnan. I stället ringer det till systembibliotek, eller samlingar av grundläggande funktioner. Bibliotek finns så (till exempel) varje program som sparar filer till hårddisken behöver inte skriva en funktion för att göra det. I stället är det helt enkelt länkar till ett systembibliotek och använder en befintlig funktion. GLibC-biblioteket för Linux är ett utmärkt exempel, liksom .DLL-filerna i Win32 API eller innehållet i en Mac / System / Library-katalog. Så här får du tillgång till OS X-bibliotekets mapp och varför det är praktiskt att få tillgång till OS X-biblioteket Mapp & varför det är praktiskt De flesta OS X-biblioteksmappar är bäst kvar, men det är användbart att känna till din väg i och runt användarbiblioteket. Läs mer .

Bildkredit: ScottXW via Wikimedia Commons

Systembibliotek fungerar som en typ av översättare mellan program och kärnan för rutinuppgifter. Applikationer gör funktionssamtal till dessa bibliotek, som hanterar en hel del lågnivå detaljer. De kan också göra systemanrop till kärnan för enkelhets skyld. Som du kanske har gissat betyder det att dessa bibliotek skrivs för en viss kärna och därför inte kan användas över operativsystem med olika kärnor.

Operativsystem Execution Headers

Det sista blockblocket till universell programvara är formatet av körbara filer för operativsystemen. Ett operativsystem förväntar sig att filerna körs för att följa ett visst binärt filformat Allt du behöver veta om filformat och deras egenskaper Allt du behöver veta om filformat och deras egenskaper Vi använder ordet filen utbytbart: musik, bild, kalkylblad, bildspel , och så vidare. Men vad gör en fil en "fil", ändå? Låt oss försöka förstå denna grundläggande del av databehandling. Läs mer . Exempelvis måste filerna Executable och Linkable Format (ELF) som körs på operativsystem som Linux och FreeBSD ange vissa egenskaper hos filen i vissa byte, vilket visas i bilden nedan.

De applikations binärt gränssnitt (ABI) visat kan vara av särskild betydelse. En kombination av samtal som är tillgängliga från processorn, kärnan och system libraries, är en ABI som liknar en applikationsprogrammeringsgränssnitt (API) genom att det definierar hur två program kommunicerar med varandra. Men API är något som används av programmerare (människor) i källkod för att ange två mjukvaror skall prata med varandra. ABI är vad som faktiskt tillåter dem att göra det när programvaran är sammanställd och körs. Varje operativsystem implementerar ett visst ABI, vilket eventuellt inte kan ändras mellan versioner av samma operativsystem.

I allmänhet implementerar operativsystem sina egna ABI, bestämda av en kombination av typ av processor, kärnan och alla standardbaserade systembibliotek. Men ibland kommer ett operativsystem att genomföra mer än en. FreeBSD har stöd för Linux-binärer, till exempel, eftersom det ger en Linux ABI som tillägg till FreeBSD-kärnan (i stället för Linux-kärnan). Detta skiljer sig från virtualizatiton-program Vad är en virtuell maskin? Allt du behöver veta Vad är en virtuell maskin? Allt du behöver veta Virtuella maskiner kan du köra andra operativsystem på din nuvarande dator. Här är vad du borde veta om dem. Läs mer som VMWare eller VirtualBox, som använder programvara för att simulera en hel maskin (hårdvara och allt). Som ett resultat är denna typ av ABI-kompatibilitet snabbare, men mycket mer ansträngning att behålla. Det är därför det är sällsynt, även om Microsoft nyligen såg värdet Ubuntu är nu tillgängligt på Windows Store. Ubuntu är nu tillgängligt på Windows Store. Windows Insiders kan nu ladda ner och installera Ubuntu på Windows 10. Det ger Linux och Windows tillsammans i en ohelig union få någonsin föreställde sig att de skulle leva tillräckligt länge för att bevittna. Läs mer om det.

Undantag: Tolkad programvara

Baserat på ovanstående har vi lärt oss att utvecklare skriver programvara för en och endast en, typ av målsystem. Förutom när de inte gör det. Det finns många program som du kan ladda ner och köra på en Mac, sedan kopiera och köra på Windows, och kanske till och med kopiera igen och köra på Linux utan problem. Hur är detta möjligt?

Ljugde jag fram till nu?

Som det visar sig finns det en kategori av programvara som ser ut på ytan som den bara “kör överallt.” Du kan ladda ner och köra den på vilken plattform som helst som stöds - nyckelordet är “stöds.” Faktum är att du hämtar källkoden för programmet, medan en annan applikation ( tolk) är typ av att köra källkoden direkt i realtid. Det här är något av en förenkling, så låt oss titta på exakt hur det fungerar med ett par språk.

java

När Java släpptes första gången var det löftet (bokstavligen) “skriv en gång, spring någonstans.” Tanken var att skapa applikationer genom att använda Java-funktioner för hur man sparar filer, gör beräkningar eller skapar ett programfönster. Då en Java Runtime Enviornment (JRE) för varje stödd datorplattform skulle köra koden och översätta dessa till inbyggda operativsystem. Tricket till Java är då att det inte körs “direkt” på operativsystemet. Den körs i en del av JRE som heter Java Virtual Machine och det är det som körs på operativsystemet.

Genom att infoga detta ytterligare programlager mellan applikationen och operativsystemet kan Java fokusera på en uppsättning funktioner som är desamma över operativsystem. Du berättar för Java vad du vill göra, och låt JVM för ditt system oroa sig för hur man faktiskt gör det. Nedanstående bild visar detta i åtgärd, där JIDE Softwares Java Desktop Application Framework visar samma applikation för Mac (överst), Windows (mitten till vänster), “ren Java” (mitten till höger) och Linux (botten).

Bildkrediter: JIDE-programvara

Java-program gör inte exakt “sammanställa” själva i realtid. Istället kommer Java-kompilatorn att göra dem till “bytekod.” Du kan tänka dig bytecode som ett halvbakat program. När utvecklaren släpper applikationen sammanställs det så mycket som det kan vara utan att veta vilket operativsystem det ska gå på. När du faktiskt startar det, kommer JVM “baka det resten av vägen” för att passa de specifika funktionerna i värd-operativsystemet.

Pytonorm

Ett populärt tolkat språk är Python 5 Anledningar till att Python-programmering inte är oanvändbar 5 Anledningar till att Python-programmering inte är oanvändbar Python - Du älskar antingen det eller du hatar det. Du kan till och med svänga från ena änden till en annan som en pendel. Oavsett, Python är ett språk som är svårt att vara ambivalent. Läs mer . När du kör ett Python-skript kommer Python-tolken att översätta kod till instruktioner för operativsystemet. Det kan också fungera på samma sätt som Java: när du “importera” kod utanför din ansökan är den sammanställd till bytecode första gången den körs. Då kommer tolken att veta om den ursprungliga koden vid senare körningar har ändrats, vid vilken tidpunkt det kommer att kompilera det på nytt byte-kod.

En cool biprodukt av detta “på begäran” köra är att du kan använda tolken för att utveckla dina skript interaktivt. Genom att helt enkelt skriva “pytonorm” på kommandoraden startar du tolken, och du kan köra koden och se resultatet direkt.

Det betyder att utvecklare kan spela och tweak saker “leva.” Sedan gör en gång en kod med vad de vill ha, kopiera och klistra in det i en skriptfil (vilket är mycket effektivare än “code-compile-testet” cykla som icke tolkade språkprogrammerare måste göra).

Även när programvaran är densamma är det förmodligen inte

Tyvärr för användarna har den tekniska industrin inte utvecklat ett riktigt “universell” formatera. Och det får aldrig göra det. Att introducera dessa typer av standarder leder ofta till en “minst gemensamma nämnare” lösning med medgivanden för att få allas godkännande.

Vad tror du? Skulle du helst ha universellt kompatibel programvara, även om det menade att det inte var så bra? Eller är du okej med operativsystemet du använder, och har inget intresse för appar från andra plattformar? Låt oss veta nedan i kommentarerna!

Bildkrediter: Masterchief_Productions / Shutterstock

Utforska mer om: Filsystem, Installera programvara, Operativsystem.