Reklame

Du har lige downloadet en funktionspakkeopdatering til din foretrukne open source-app. Alt fungerer godt, og du bruger det på dine andre enheder - så det er på tide at rulle det ud til dem også.

Undtagen din skinnende nye Linux-bærbare computer er ikke kompatibel med din Windows-installationspakke. Hvad med din Android-tablet? iPhone? PS4? Hvorfor kan du ikke bare tage det stykke software og bruge det, hvor du vil? Lad os udforske nogle forskellige barrierer mod drømmen om "køb en gang, løb overalt."

Softwareudvikling og OS-arkitektur

At forstå, hvorfor software ikke fungerer på tværs af operativsystemer, kræver lidt (bare lidt, jeg lover) viden om, hvordan software fremstilles.

Softwareudviklingsprocessen

I en meget grundlæggende softwareudviklingsflow til desktop, server og mobil (dvs. ikke web Programmering vs. Webudvikling: Hvad er forskellen?Du tror måske, at applikationsprogrammører og webudviklere gør det samme job, men det er langt fra sandheden. Her er de vigtigste forskelle mellem programmerere og webudviklere. Læs mere ), en programmør vil:

  1. Skriv nogle kode i en eller flere filer.
  2. Udarbejde koden til noget, computeren kan udføre.
  3. Prøve for at sikre, at programmet fungerer som forventet.
  4. Pakke og distribuere / distribuere softwaren.
software os kompatibilitet dev proces

Det er en kombination af det første og det andet trin, der vedrører os her. Processen med kompilering software, eller at omdanne den fra kode til dem og nuller, som en computer forstår (maskinsprog) er kompliceret. Vi kommer ikke ind på det i detaljer, men det er nyttigt at forstå på et højt niveau, hvad der sker.

OS Arkitektur

Et vigtigt punkt at forstå er, at et operativsystem ikke er en enkelt enhed. Snarere består det af lag af software.

Operativsystemkerner

Et operativsystem kerne er ansvarlig for at kommunikere med computerens hardware. Software kommunikerer sine kommandoer til kernen, som igen udsteder kommandoer til hardwaren til (for eksempel) at læse en fil fra harddisken eller tegne et vindue på skærmen. Det koordinerer dybest set alle oplysninger (uanset om det er gemte data, beregninger eller brugerinput) mellem hardware og forskellige stykker software. Kernen gør al denne funktionalitet tilgængelig for software via systemopkald.

software os kompatibilitet kerne grundlæggende
Billedkredit: Wikimedia Commons

Hvert operativsystemets kerne implementerer systemopkald forskelligt, hvad angår hvilke der er tilgængelige, hvad de kaldes, eller hvilke muligheder de tager. Som et resultat skal software tage højde for de systemopkald, der understøttes af kernen i hvert operativsystem, det er målrettet mod. Det systemopkald, du bruger til at sende data til GPU i Linux, kan have et andet navn, en liste med oplysninger, du har brug for, eller begge dele i Windows. Det nøjagtige opkald er muligvis ikke engang der.

Systembiblioteker

I mange tilfælde ringer software ikke direkte til kernen. I stedet kaldes det til systembibliotekereller samlinger af grundlæggende funktioner. Biblioteker findes, så (for eksempel) hvert eneste program, der gemmer filer på harddisken, behøver ikke at skrive en funktion for at gøre det. I stedet for det ganske enkelt links til et systembibliotek og bruger en eksisterende funktion. GLibC-biblioteket til Linux er et godt eksempel, ligesom .DLL-filerne i Win32 API eller indholdet af en Mac's / System / Library-bibliotek Sådan får du adgang til OS X-biblioteksmappen og hvorfor det er praktiskDe fleste OS X-biblioteksmapper er bedst at være i fred, men det er nyttigt at kende din vej ind og omkring Brugerbiblioteket. Læs mere .

software OS-kompatibilitetssystembiblioteker
Billedkredit: ScottXW via Wikimedia Commons

Systembiblioteker fungerer som en slags oversætter mellem applikationer og kernen til rutineopgaver. Ansøgninger foretages funktion opkald til disse biblioteker, der håndterer mange detaljer på lavt niveau. De kan også foretage systemopkald til kernen for nemheds skyld. Som du måske har gætt, betyder det, at disse biblioteker er skrevet til en bestemt kerne, og derfor kan de ikke bruges på tværs af operativsystemer med forskellige kerner.

Operativsystemudførelsesoverskrifter

Den sidste vejspærring til universel software er formatet for eksekverbare filer til operativsystemerne. Et operativsystem forventer, at de filer, det kører, skal følge en bestemt binært filformat Alt hvad du behøver at vide om filformater og deres egenskaberVi bruger ordfilen om hverandre: musik, billede, regneark, slideshow og så videre. Men hvad gør en fil alligevel til en "fil"? Lad os prøve og forstå denne grundlæggende del af computing. Læs mere . F.eks. Eksekverbare og linkbare format (ELF) -filer, der kører på operativsystemer som f.eks Linux og FreeBSD skal specificere bestemte egenskaber for filen i bestemte byte, som vist nedenfor billede.

software os kompatibilitet alf header

Det applikation binær grænseflade (ABI) vist dygtig er af særlig betydning. En kombination af tilgængelige opkald fra processor, kerne og systembiblioteker, en ABI ligner en applikationsprogrammeringsgrænseflade (API) ved at det definerer, hvordan to programmer kommunikerer med hinanden. Men API'et er noget, der bruges af programmerere (mennesker) i kildekoden til at indikere to stykker software bør tale med hinanden. ABI er det, der faktisk giver dem mulighed for at gøre det, når softwaren er samlet og kørt. Hvert operativsystem implementerer en bestemt ABI, der muligvis eller ikke ændrer mellem versioner af det samme operativsystem.

Generelt implementerer operativsystemer deres egen ABI, bestemt af en kombination af typen af ​​processor, kernen og eventuelle standardsystembiblioteker. Men nogle gange implementerer et operativsystem mere end et. FreeBSD har f.eks. Understøttelse af Linux-binære filer, fordi det giver en Linux ABI som tilføjelse til FreeBSD-kernen (i stedet for Linux-kernen). Dette er anderledes end virtualizatiton-programmer Hvad er en virtuel maskine? Alt hvad du behøver at videVirtuelle maskiner giver dig mulighed for at køre andre operativsystemer på din nuværende computer. Her er hvad du skal vide om dem. Læs mere såsom VMWare eller VirtualBox, der bruger software til at simulere en hel maskine (hardware og alt). Som et resultat er denne type ABI-kompatibilitet hurtigere, men meget mere kræfter at vedligeholde. Derfor er det sjældent, selvom Microsoft så for nylig værdien Ubuntu er nu tilgængelig i Windows StoreWindows Insiders kan nu downloade og installere Ubuntu på Windows 10. Dette bringer Linux og Windows sammen i en uhellig union, som få nogensinde havde forestillet sig, at de ville leve længe nok til at være vidne til. Læs mere ved at gøre det.

Undtagelse: fortolket software

Baseret på ovenstående har vi lært, at udviklere skriver software til en og kun én type målsystem. Bortset fra når de ikke gør det. Der er mange applikationer, som du kan downloade og køre på en Mac, derefter kopiere og køre på Windows, og måske endda kopiere igen og køre på Linux uden problemer. Hvordan er det muligt?

Ligger jeg indtil nu?

Som det viser sig, er der en kategori software, der ser ud på overfladen, som om den bare "kører overalt." Du kan downloade og køre det på enhver understøttet platform - nøgleordet er "understøttet." Faktisk downloader du kildekoden til applikationen, mens en anden applikation (det tolk) er slags at køre kildekoden direkte i realtid. Dette er noget af en forenkling, så lad os se på nøjagtigt, hvordan dette fungerer med et par sprog.

Java

Da Java først blev frigivet, var det løftet (bogstaveligt talt) "skriv en gang, kør hvor som helst." Ideen var at skabe applikationer ved hjælp af Java-funktioner til at gemme filer, foretage beregninger eller oprette et program vindue. Derefter a Java Runtime Enviornment (JRE) for hver understøttet computerplatform kører koden og oversætter disse til oprindelige OS-funktioner. Tricket til Java er altså, at det ikke kører "direkte" på operativsystemet. Det kører i en del af den kaldte JRE det Java Virtual Machine og det er det, der kører på operativsystemet.

Ved at indsætte dette ekstra softwarelag mellem applikationen og OS giver Java dig mulighed for at fokusere på et sæt funktioner, der er ens på tværs af operativsystemer. Du fortæller Java, hvad du vil gøre, og lad JVM til dit system bekymre dig om, hvordan du rent faktisk gør det. Nedenstående billede viser dette i aktion, hvor JIDE Softwares Java Desktop Application Framework viser det samme program til Mac (øverst), Windows (midt til venstre), "ren Java" (midt til højre) og Linux (nederst).

software os kompatibilitet jide jdaf
Billedkredit: JIDE-software

Java-programmer "kompilerer" sig ikke præcist i realtid. Snarere vil Java-kompilatoren gengive dem til "bytecode." Du kan tænke på bytecode som et halvbagt program. Når udvikleren frigiver applikationen, er den samlet så meget som den kan være uden at vide, hvilket operativsystem det vil køre på. Når du rent faktisk starter det, vil JVM "bage det resten af ​​vejen" for at passe til funktionerne i værts-OS.

Python

Et populært fortolket sprog er Python 5 grunde til, at Python-programmering ikke er nytteløsPython - Du elsker enten det, eller du hader det. Du kan endda svinge fra den ene ende til den anden som en pendul. Uanset hvad er Python et sprog, der er svært at være ambivalent med. Læs mere . Når du kører et Python-script, oversætter Python-tolken kode til instruktioner til OS. Det kan også fungere på samme måde som Java: når du "importerer" kode uden for din applikation, er den samlet til bytekode første gang den køres. Derefter ved fortolkeren, om den oprindelige kode ved efterfølgende kørsler er ændret, på hvilket tidspunkt den vil kompilere den igen til ny bytekode.

Et cool biprodukt af denne "on-demand" -kørsel er, at du kan bruge tolken til at udvikle dine scripts interaktivt. Ved blot at skrive "python" på kommandolinjen starter du tolk, og du kan køre kode og se resultaterne med det samme.

software os kompatibilitet python tolk

Dette betyder, at udviklere kan lege og finpusse tingene "live". Når en kodelinje først gør det, de vil, skal du kopiere og indsætte den i en script-fil (som er meget mere effektiv end den "kodekompilér-test" cyklus, som ikke-tolke sprogprogrammører skal gøre).

Selv når software er den samme, er det sandsynligvis ikke

Desværre for brugerne har tech-industrien ikke udviklet et ægte “universelt” format. Og det gør det måske aldrig. Indførelse af disse typer standarder resulterer ofte i en ”mindst fællesnævner” -løsning med indrømmelser i interesse for at få alles godkendelse.

Hvad synes du? Vil du hellere have universelt kompatibel software, selvom det betød, at det ikke var så godt? Eller har du det godt med det operativsystem, du bruger, og har ingen interesse i apps fra andre platforme? Fortæl os det nedenfor i kommentarerne!

Billedkreditter: Masterchief_Productions / Shutterstock

Aaron har arbejdet dybt inden for teknologi som forretningsanalytiker og projektleder i femten år og har været en loyal Ubuntu-bruger næsten lige så længe (siden Breezy Badger). Hans interesser inkluderer open source, applikationer til små virksomheder, integration af Linux og Android og computing i almindelig teksttilstand.