En størrelse passer ikke alle: Hvorfor programvare er ikke universelt kompatibel

Programvaren er den samme på alle operativsystem, ikke sant? Feil. Det kan se ut som det samme, og fungere på samme måte, men det er forskjellig bak kulissene.

Programvaren er den samme på alle operativsystem, ikke sant?  Feil.  Det kan se ut som det samme, og fungere på samme måte, men det er forskjellig bak kulissene.
Annonse

Du har nettopp lastet ned en oppdatert oppdatering til din favoritt åpen kildekode-app. Alt fungerer bra, og du bruker det på dine andre enheter - så det er på tide å rulle det ut til dem også.

Bortsett fra din skinnende nye Linux-bærbar PC, er ikke kompatibel med Windows-installasjonspakken. Hva med Android-nettbrettet ditt? iPhone? PS4? Hvorfor kan du ikke bare ta det stykket programvare og bruke det uansett hvor du vil? La oss utforske noen forskjellige barrierer for drømmen om "kjøp en gang, kjør hvor som helst."

Programvareutvikling og OS Arkitektur

Forstå hvorfor programvare ikke fungerer på tvers av operativsystemer krever litt (bare litt, jeg lover) kunnskap om hvordan programvare er laget.

Programvareutviklingsprosessen

I en svært grunnleggende programvareutviklingstrøm for desktop, server og mobile (dvs. ikke webprogrammering vs webutvikling: Hva er forskjellen? Programmering vs Webutvikling: Hva er forskjellen? Det kan hende du tror programmeringsprogrammerere og webutviklere gjør samme jobb, men det er langt fra sannheten. Her er de viktigste forskjellene mellom programmerere og webutviklere. Les mer), en programmør vil:

  1. Skriv inn noen kode i en eller flere filer.
  2. Kompil koden til noe datamaskinen kan utføre.
  3. Test for å sikre at programmet fungerer som forventet.
  4. Pakke og distribuere / distribuere programvaren.

programvare OS kompatibilitet dev prosess

Det er en kombinasjon av de første og andre trinnene som angår oss her. Prosessen med å kompilere programvare, eller omdanne den fra kode til dem og nuller som en datamaskin forstår (maskinsspråk) er komplisert. Vi kommer ikke inn i det i detalj, men det er nyttig å forstå på høyt nivå hva som skjer.

OS Arkitektur

Et viktig poeng å forstå er at et operativsystem ikke er en enkelt enhet. Snarere består det av lag av programvare.

Operativsystem Kjerner

Et operativsystems kjernen er ansvarlig for kommunikasjon med maskinvaren på datamaskinen. Programvaren kommuniserer kommandoer til kjernen, som igjen utsteder kommandoer til maskinvaren til (for eksempel) leser en fil fra harddisken, eller tegner et vindu på skjermen. Den koordinerer i utgangspunktet all informasjon (om det er lagret data, beregninger eller brukerinngang) mellom maskinvare og ulike deler av programvare. Kjernen gjør at denne funksjonaliteten er tilgjengelig for programvare via systemanrop .

grunnleggende programvare for kompatibilitet med kjernen
Bildekreditt: Wikimedia Commons

Hvert operativsystems kjernen vil implementere systemanrop på en annen måte, i form av hvilke som er tilgjengelige, hva de kalles, eller hvilke alternativer de tar. Som et resultat, må programvare ta hensyn til systemanropene som støttes av kjernen til hvert operativsystem den målretter mot. Systemanropet du bruker til å sende data til GPUen i Linux, kan ha et annet navn, en liste over opplysninger du må oppgi, eller begge deler i Windows. Det eksakte anropet kan ikke engang være der i det hele tatt.

Systembiblioteker

I mange tilfeller kalles ikke programvare direkte til kjernen. I stedet kaller det til systembiblioteker, eller samlinger av grunnleggende funksjoner. Biblioteker eksisterer slik (for eksempel) hvert program som lagrer filer til harddisken, trenger ikke å skrive en funksjon for å gjøre det. I stedet kobler den bare til et systembibliotek og bruker en eksisterende funksjon. GLibC-biblioteket for Linux er et godt eksempel, som det er .DLL-filene i Win32 API eller innholdet i en Mac / System / Library-katalog Slik får du tilgang til OS X-bibliotekmappen og hvorfor det er praktisk Slik får du tilgang til OS X-biblioteket Mappe og hvorfor det er praktisk De fleste OS X-biblioteksmapper er best igjen alene, men det er nyttig å vite veien i og rundt brukerbiblioteket. Les mer .

programvare OS kompatibilitetssystem biblioteker
Image Credit: ScottXW via Wikimedia Commons

Systembiblioteker fungerer som en slags oversetter mellom applikasjoner og kjernen for rutinemessige oppgaver. Programmer gjør funktionsanrop til disse bibliotekene, som håndterer mange detaljer på lavt nivå. De kan også gjøre systemanrop til kjernen for enkelhets skyld. Som du kanskje har gjettet, betyr dette at disse bibliotekene er skrevet for en bestemt kjerne, og kan derfor ikke brukes på tvers av operativsystemer med forskjellige kjerne.

Operativsystem Utførelse Headers

Den siste veikryssen til universell programvare er formatet av kjørbare filer for operativsystemene. Et operativsystem forventer at filene kjører for å følge et bestemt binært filformat Alt du trenger å vite om filformater og deres egenskaper Alt du trenger å vite om filformater og deres egenskaper Vi bruker ordfilen utveksling: musikk, bilde, regneark, lysbildefremvisning, og så videre. Men hva gjør en fil en "fil", uansett? La oss prøve å forstå denne grunnleggende delen av databehandling. Les mer . For eksempel kan filene Executable and Linkable Format (ELF) som kjører på operativsystemer som Linux og FreeBSD spesifisere bestemte egenskaper for filen i visse byte, som vist i bildet nedenfor.

programvare for kompatibilitet elf header

Applikasjonens binære grensesnitt (ABI) vist i stand er spesielt viktig. En kombinasjon av anropene som er tilgjengelige fra prosessor-, kjerne- og systembiblioteker, er en ABI som ligner på et programmeringsgrensesnitt (API) ved at det definerer hvordan to programmer kommuniserer med hverandre. Men API er noe som brukes av programmerere (mennesker) i kildekoden for å indikere at to stykker programvare skal snakke med hverandre. ABI er det som faktisk gjør at de kan gjøre det når programvaren er kompilert og kjørt. Hvert operativsystem implementerer en bestemt ABI, som kanskje eller ikke endres mellom versjoner av det samme operativsystemet.

Generelt implementerer operativsystemene sine egne ABI, bestemt av en kombinasjon av prosessorens type, kjernen og alle standard systembiblioteker. Men noen ganger vil et operativsystem implementere mer enn en. FreeBSD har støtte for Linux-binarier, for eksempel fordi den gir en Linux ABI som tillegg til FreeBSD-kjernen (i stedet for Linux-kjernen). Dette er forskjellig fra virtualizatiton-programmer Hva er en virtuell maskin? Hva er en virtuell maskin? Virtuelle maskiner lar deg kjøre andre operativsystemer i ditt nåværende operativsystem, men hvorfor betyr det noe? Hva er fordeler og ulemper? Les mer som VMWare eller VirtualBox, som bruker programvare for å simulere en hel maskin (maskinvare og alt). Som et resultat er denne typen ABI-kompatibilitet raskere, men mye mer innsats for å opprettholde. Dette er grunnen til at det er sjelden, selv om Microsoft nylig så verdien Ubuntu er nå tilgjengelig på Windows Store. Ubuntu er nå tilgjengelig på Windows Store. Windows Insiders kan nå laste ned og installere Ubuntu på Windows 10. Dette bringer Linux og Windows sammen i en uheldig union noen hadde forestilt seg at de ville leve lenge nok til å vitne. Les mer i å gjøre det.

Unntak: tolket programvare

Basert på ovenstående har vi lært at utviklere skriver programvare for en, og bare en, type målsystem. Unntatt når de ikke gjør det. Det er mange programmer du kan laste ned og kjøre på en Mac, deretter kopiere og kjøre på Windows, og kanskje til og med kopiere igjen og kjøre på Linux uten problemer. Hvordan er dette mulig?

Ble jeg liggende til nå?

Som det viser seg, er det en kategori av programvare som ser på overflaten som om den bare "kjører overalt." Du kan laste ned og kjøre den på en hvilken som helst støttet plattform - nøkkelordet blir "støttet." Faktisk laster du ned kildekode for søknaden, mens et annet program ( tolken ) er å kjøre kildekoden direkte i sanntid. Dette er noe av en forenkling, så la oss se på hvordan dette fungerer med et par språk.

Java

Når Java først ble utgitt, var det løftet (bokstavelig talt) "skriv en gang, kjør hvor som helst." Ideen var å lage programmer ved hjelp av Java-funksjoner for hvordan du lagrer filer, lager beregninger eller oppretter et programvindu. Deretter ville en Java Runtime Enviornment (JRE) for hver støttet datastasjon kjøre koden, og oversette disse til native OS-funksjoner. Trikset til Java er da at det ikke kjører "direkte" på operativsystemet. Den går i en del av JRE kalt Java Virtual Machine, og det er det som kjører på operativsystemet.

Ved å sette inn dette ekstra programvarelaget mellom applikasjonen og operativsystemet, lar Java deg fokusere på et sett med funksjoner som er de samme på tvers av operativsystemene. Du forteller Java hva du vil gjøre, og la JVM for systemet bekymre deg for hvordan du faktisk gjør det. Nedre bilde viser dette i aksjon, hvor JIDE Softwares Java Desktop Application Framework viser samme applikasjon for Mac (topp), Windows (midten til venstre), "ren Java" (midten til høyre) og Linux (nederst).

programvare us kompatibilitet jide jdaf
Bilde Kreditt: JIDE Software

Java-programmer samler seg ikke nøyaktig i realtid. I stedet vil Java-kompilatoren gjøre dem til "bytecode". Du kan tenke på bytecode som et halvbakket program. Når utvikleren slipper programmet, blir det samlet så mye som det kan være uten å vite hvilket OS den skal løpe på. Når du faktisk starter det, vil JVM "bake det resten av veien" for å passe til funksjonene som er spesielle for vertsoperatøren.

Python

Et populært tolket språk er Python 5 grunner til at Python-programmering ikke er ubrukelig 5 grunner til at Python-programmering ikke er ubrukelig Python - Du enten elsker det eller du hater det. Du kan til og med svinge fra den ene enden til den andre som en pendel. Uansett, Python er et språk som er vanskelig å være ambivalent om. Les mer . Når du kjører et Python-skript, vil Python-tolken oversette koden til instruksjoner for operativsystemet. Det kan også fungere på samme måte som Java: Når du "importerer" koden fra din applikasjon, blir den kompilert til bytecode første gang den kjøres. Så tolkeren vil vite om den opprinnelige koden har endret seg på etterfølgende løp, og det vil da bli kompilert til ny bytekode.

Et kjølig biprodukt av denne "on-demand" -løp er at du kan bruke tolken til å utvikle dine skript interaktivt. Ved å skrive "python" på kommandolinjen starter du tolken, og du kan kjøre kode og se resultatene umiddelbart.

programvare os kompatibilitet python tolk

Dette betyr at utviklere kan spille rundt og tilpasse ting "live". Så, når en linje med kode gjør hva de vil, kopiere og lime det inn i en skriptfil (som er mye mer effektiv enn "kodesammenligningstest" -syklusen som ikke-tolket språkprogrammerer må gjøre).

Selv når programvare er det samme, er det sannsynligvis ikke

Dessverre for brukerne har teknologibransjen ikke utviklet et virkelig "universal" format. Og det kan det aldri gjøre. Innføring av disse typer standarder resulterer ofte i en "minst fellesnævner" -løsning, med innrømmelser for å få alles godkjennelse.

Hva tror du? Vil du helst ha universelt kompatibel programvare, selv om det mente det ikke var så bra? Eller er du ok med operativsystemet du bruker, og har ingen interesse i appene fra andre plattformer? Gi oss beskjed nedenfor i kommentarene!

Image Credits: Masterchief_Productions / Shutterstock

In this article