Annons

Du har precis laddat ner en funktionspaketuppdatering till din favorit-open source-app. Allt fungerar bra, och du använder det på dina andra enheter - så det är dags att rulla ut dem också.

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

Programutveckling och OS-arkitektur

Att förstå varför programvara inte fungerar i olika operativsystem kräver lite (bara lite, jag lovar) kunskap om hur programvara skapas.

Programutvecklingsprocessen

I ett mycket grundläggande mjukvaruutvecklingsflöde för desktop, server och mobil (d.v.s. inte webb 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 ), kommer en programmerare att:

instagram viewer
  1. Skriv några koda i en eller flera filer.
  2. Sammanställa koden till något som datorn kan köra.
  3. Testa för att se till att programmet fungerar som förväntat.
  4. Paketera och distribuera / distribuera mjukvaran.
mjukvara os kompatibilitet dev process

Det är en kombination av de första och andra stegen som berör oss här. Processen sammanställa programvara, eller omvandla den från kod till de och nollor som en dator förstår (maskinspråk) är komplex. Vi kommer inte in på det i detalj, men det är användbart att förstå på en 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.

Operativsystemets kärnor

Ett operativsystem kärna ansvarar för att kommunicera med maskinvaran på datorn. Programvara kommunicerar sina kommandon till kärnan, som i sin tur ger kommandon till hårdvaran för att (till exempel) läsa en fil från hårddisken eller rita ett fönster på skärmen. Den koordinerar i princip all information (oavsett om det är lagrade data, beräkningar eller användarinmatning) mellan hårdvara och olika programvara. Kärnan gör all denna funktionalitet tillgänglig för programvara via systemsamtal.

programvara os kompatibilitet kärnor grunderna
Bildkredit: Wikimedia Commons

Varje operativsystem kärna kommer att implementera systemsamtal på olika sätt, i termer av vilka som är tillgängliga, vad de kallas eller vilka alternativ de tar. Som ett resultat måste programvara ta hänsyn till systemsamtal som stöds av kärnan i varje operativsystem som den riktar sig till. Det systemsamtal 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 där alls.

Systembibliotek

I många fall ringer inte programvaran direkt till kärnan. Istället ringer det till systembibliotekeller samlingar av grundläggande funktioner. Bibliotek finns så (till exempel) varje program som sparar filer på hårddisken behöver inte skriva en funktion för att göra det. Istället, helt enkelt länkar till ett systembibliotek och använder en befintlig funktion. GLibC-biblioteket för Linux är ett bra exempel, liksom .DLL-filerna i Win32 API eller innehållet i en Mac: s / System / Library-katalog Hur du kommer åt OS X-bibliotekmappen och varför det är praktisktDe flesta OS X-biblioteksmappar lämnas bäst ensamma, men det är bra att veta hur du är i och runt användarbiblioteket. Läs mer .

programvara OS-kompatibilitetssystembibliotek
Bildkredit: ScottXW via Wikimedia Commons

Systembibliotek fungerar som en slags översättare mellan applikationer och kärnan för rutinuppgifter. Ansökningar gör funktion samtal till dessa bibliotek som hanterar många detaljer på låg nivå. De kan också ringa systemsamtal till kärnan för enkelhets skull. Som du kanske gissat betyder det att dessa bibliotek är skrivna för en viss kärna och därför inte kan användas över olika operativsystem med olika kärnor.

Operativsystem exekveringshuvuden

Den sista vägspärren till universell programvara är formatet för körbara filer för operativsystemen. Ett operativsystem förväntar sig att filerna som körs följer en viss binärt filformat Allt du behöver veta om filformat och deras egenskaperVi använder ordfilen omväxlande: musik, bild, kalkylblad, bildspel, och så vidare. Men vad gör en fil till en "fil" ändå? Låt oss försöka förstå denna grundläggande del av datoranvändning. Läs mer . Exempelvis filerna Executable och Linkable Format (ELF) som körs på operativsystem, t.ex. Linux och FreeBSD måste ange vissa egenskaper för filen i vissa byte, som visas nedan bild.

mjukvara os kompatibilitet elf header

De applikation binärt gränssnitt (ABI) visad kapabel är av särskild betydelse. En kombination av tillgängliga samtal från processor, kärna och systembibliotek, en ABI liknar en applikationsprogrammeringsgränssnitt (API) genom att det definierar hur två program kommunicerar med varandra. Men API: n är något som används av programmerare (människor) i källkod för att indikera två programvaror skall prata med varandra. ABI är det som faktiskt tillåter dem att göra det när programvaran har sammanställts och körts. Varje operativsystem implementerar en viss ABI, som kanske eller inte kan ändras mellan versioner av samma operativsystem.

I allmänhet implementerar operativsystem sina egna ABI, bestämda av en kombination av typen av processor, kärnan och alla vanliga systembibliotek. Men ibland kommer ett operativsystem att implementera mer än ett. FreeBSD har stöd för Linux-binärer, till exempel eftersom det tillhandahåller en Linux ABI som ett tillägg till FreeBSD-kärnan (istället för Linux-kärnan). Detta skiljer sig från virtualizatiton-program Vad är en virtuell maskin? Allt du behöver vetaMed virtuella maskiner kan du köra andra operativsystem på din nuvarande dator. Här är vad du bör veta om dem. Läs mer till exempel 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 underhålla. Det är därför det är sällsynt, även om Microsoft såg nyligen värdet Ubuntu är nu tillgängligt i Windows StoreWindows Insiders kan nu ladda ner och installera Ubuntu på Windows 10. Detta förenar Linux och Windows i en ohelig förening som få någonsin föreställde sig att de skulle leva tillräckligt länge för att bevittna. Läs mer genom att göra det.

Undantag: tolkad programvara

Baserat på ovanstående har vi lärt oss att utvecklare skriver programvara för en, och endast en, målsystem. Förutom när de inte gör det. Det finns många applikationer 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?

Ligger jag upp till nu?

Det visar sig att det finns en kategori programvara som ser ut på ytan som att den bara "kör överallt." Du kan ladda ner och köra den på valfri plattform som stöds - nyckelordet är "stöttat." I själva verket laddar du ner källkoden för applikationen, medan en annan applikation (de tolk) är typ av att köra källkoden direkt i realtid. Detta är något av en överförenkling, så låt oss titta exakt på hur detta fungerar med ett par språk.

Java

När Java först släpptes, var det löfte (bokstavligen) "skriva en gång, kör var som helst." Idén var att skapa applikationer med Java-funktioner för att spara filer, göra beräkningar eller skapa ett program fönster. Då en Java Runtime Enviornment (JRE) för varje datorplattform som stöds skulle köra koden och översätta dessa till ursprungliga OS-funktioner. Tricket för Java är då att det inte körs "direkt" på operativsystemet. Den körs i en del av den JRE som heter de Java Virtual Machine och det är vad som körs på operativsystemet.

Genom att infoga detta ytterligare mjukvarulager mellan applikationen och operativsystemet låter Java dig fokusera på en uppsättning funktioner som är desamma över operativsystem. Du berätta för Java vad du vill göra och låt JVM för ditt system oroa dig för hur du faktiskt gör det. Bilden nedan visar detta i aktion, var JIDE-programvarans Java Desktop Application Framework visar samma applikation för Mac (överst), Windows (mitten till vänster), "ren Java" (mitten till höger) och Linux (längst ner).

mjukvara os kompatibilitet jide jdaf
Bildkredit: JIDE-programvara

Java-program "kompilerar" sig inte exakt i realtid. Snarare kommer Java-kompilatorn att göra dem till "bytecode." Du kan tänka på bytecode som ett halvbakt program. När utvecklaren släpper applikationen har den sammanställts så mycket som den kan vara utan att veta vilket operativsystem det kommer att köras på. När du faktiskt startar den kommer JVM att "baka det resten av vägen" så att de passar de funktioner som är värd för OS.

Pytonorm

Ett populärt tolkat språk är Pytonorm 5 skäl till varför Python-programmering inte är användbarPython - Du älskar antingen eller så hatar du det. Du kanske till och med svänger från ena änden till den andra som en pendel. Hur som helst är Python ett språk som det är svårt att vara ambivalent med. Läs mer . När du kör ett Python-skript översätter Python-tolkaren kod till instruktioner för operativsystemet. Det kan också fungera på samma sätt som Java: när du "importerar" kod utanför din applikation är den sammanställd för att bytkode första gången den körs. Då kommer tolken att veta om, vid efterföljande körningar, den ursprungliga koden har ändrats, vid vilken tidpunkt den kommer att kompilera den till ny bytekod.

En cool biprodukt av denna "on-demand" -körning är att du kan använda tolk för att utveckla dina skript interaktivt. Genom att bara skriva "python" på kommandoraden startar du tolkar, och du kan köra kod och se resultaten omedelbart.

programvara os kompatibilitet python tolk

Detta innebär att utvecklare kan spela och justera saker "live". Sedan, när en kodrad gör vad de vill, kopiera och klistra in den i en skriptfil (vilket är mycket effektivare än "kod-kompilera-test" -cykeln 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ändare har teknikindustrin inte utvecklat ett riktigt "universellt" format. Och det kanske aldrig gör det. Att införa dessa typer av standarder resulterar ofta i en ”minst gemensam nämnare” -lösning, med medgivanden för att få allas godkännande.

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

Bildpoäng: Masterchief_Productions / Shutterstock

Aaron har varit armbågsdjup inom teknik som affärsanalytiker och projektledare under femton år och har varit en lojal Ubuntu-användare nästan lika länge (sedan Breezy Badger). Hans intressen inkluderar öppen källkod, småföretagsapplikationer, integration av Linux och Android och datorisering i vanlig textläge.