En størrelse passer ikke alle, hvorfor programvaren ikke er universelt kompatibel
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:
- Skriv inn noen kode inn i en eller flere filer.
- Kompilere koden til noe datamaskinen kan utføre.
- Test for å sikre at programmet fungerer som forventet.
- Pakke og distribuere / distribuere programvaren.
Det er en kombinasjon av de første og andre trinnene som angår oss her. Prosessen av kompilering programvare, eller snu den fra kode til de 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 operativsystem er kernel er ansvarlig for å kommunisere 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 all denne funksjonaliteten tilgjengelig for programvare via systemanrop.
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 er det rett og slett lenker 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 .
Systembiblioteker fungerer som en slags oversetter mellom applikasjoner og kjernen for rutinemessige oppgaver. Applikasjoner gjør funksjonsanrop til disse bibliotekene, som håndterer mye av lavnivå detaljene. 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 kjerner.
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.
De applikasjons binært grensesnitt (ABI) vist i stand er spesielt viktig. En kombinasjon av anropene som er tilgjengelige fra prosessor, kjerne og systembibliotek, er en ABI som ligner en applikasjonsprogrammeringsgrensesnitt (API) ved at det definerer hvordan to programmer kommuniserer med hverandre. Men API er noe som brukes av programmerere (mennesker) i kildekoden for å indikere to deler av programvaren bør 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? Alt du trenger å vite Hva er en virtuell maskin? Alt du trenger å vite Virtuelle maskiner lar deg kjøre andre operativsystemer på din nåværende datamaskin. Her er hva du bør vite om dem. 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 den bare “løper overalt.” Du kan laste ned og kjøre den på alle støttede plattformer - nøkkelordet er “støttet.” Faktisk laster du ned kildekoden for programmet, mens et annet program ( tolk) 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.” Tanken var å lage programmer ved hjelp av Java-funksjoner for hvordan du lagrer filer, lager beregninger eller oppretter et programvindu. Deretter en Java Runtime Enviornment (JRE) for hver støttet dataplatform ville kjøre koden, og oversette disse til native OS-funksjoner. Trikset til Java er da at det ikke løper “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. Bildet nedenfor viser dette i aksjon, hvor JIDE Softwares Java Desktop Application Framework viser det samme programmet for Mac (topp), Windows (midten til venstre), “ren Java” (midten til høyre) og Linux (nederst).
Java-programmer gjør ikke nettopp “kompilere” seg selv i sanntid. 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 den, vil JVM “bake den resten av veien” for å passe til funksjonene som er spesielle for verts-operativsystemet.
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 “importere” kode fra utenfor søknaden din, er 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 da vil det bli kompilert til ny bytekode.
Et kjølig biprodukt av dette “på etterspørsel” Kjører er at du kan bruke tolken til å utvikle dine skript interaktivt. Ved å bare skrive “python” på kommandolinjen starter du tolken, og du kan kjøre kode og se resultatene umiddelbart.
Dette betyr at utviklere kan spille rundt og finjustere ting “bo.” 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 den “kode-kompilere-test” syklus 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 seg virkelig “universell” format. Og det kan det aldri gjøre. Innføring av disse typer standarder resulterer ofte i en “minst fellesnevneren” løsning, med innrømmelser i interesse for å få alles godkjenning.
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
Utforsk mer om: Filsystem, Installer programvare, Operativsystemer.