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

Software er det samme på ethvert operativsystem, ikke? Forkert. Det kan se ud på samme måde og fungere på samme måde, men det er anderledes bag kulisserne.

Software er det samme på ethvert operativsystem, ikke?  Forkert.  Det kan se ud på samme måde og fungere på samme måde, men det er anderledes bag kulisserne.
Reklame

Du har lige hentet en opdateret opdatering 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å.

Bortset fra din skinnende nye Linux laptop 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 undersøge nogle forskellige barrierer for drømmen om at "købe en gang, løbe overalt."

Softwareudvikling og OS Arkitektur

Forståelse af hvorfor software ikke fungerer på tværs af operativsystemer kræver lidt (bare lidt, jeg lover) viden om, hvordan software er lavet.

Softwareudviklingsprocessen

I en meget grundlæggende softwareudviklingstrøm til desktop, server og mobile (dvs. ikke webprogrammering vs webudvikling: Hvad er forskellen? 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 programmører og webudviklere. Læs mere), en programmør vil:

  1. Indtast nogle kode i en eller flere filer.
  2. Kompil koden til noget computeren kan udføre.
  3. Test for at sikre, at programmet fungerer som forventet.
  4. Pakke og distribuere / implementere softwaren.

software os kompatibilitet dev proces

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

OS Arkitektur

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

Operativsystemkerner

Et operativsystems kernel er ansvarlig for kommunikation med computerens hardware. Software kommunikerer sine kommandoer til kernen, som igen udsteder kommandoer til hardwaren til (for eksempel) læser en fil fra harddisken eller tegner et vindue på skærmen. Det koordinerer i grunden al information (om det er gemt data, beregninger eller brugerindgang) mellem hardware og forskellige softwarestykker. Kernen gør hele denne funktionalitet tilgængelig for software via systemopkald .

Grundlæggende om softwarekompatibilitetskernen
Billedkredit: Wikimedia Commons

Hvert operativsystems kerne vil implementere systemopkald forskelligt, hvad der er tilgængeligt, hvad de kaldes, eller hvilke muligheder de tager. Som et resultat heraf skal software tage højde for systemopkald, der understøttes af kernen i hvert operativsystem, den målretter mod. Systemanropet, du bruger til at sende data til GPU'en i Linux, kan have et andet navn, en liste over oplysninger, du skal levere, eller begge dele i Windows. Det præcise kald kan ikke engang være der overhovedet.

Systembiblioteker

I mange tilfælde kalder software ikke direkte til kernen. I stedet opkaldes det til systembiblioteker eller samlinger af grundlæggende funktioner. Biblioteker findes således (for eksempel) hvert program, der gemmer filer til harddisken, behøver ikke at skrive en funktion til at gøre det. I stedet forbinder det simpelthen med et systembibliotek og bruger en eksisterende funktion. GLibC-biblioteket til Linux er et glimrende eksempel, ligesom de. DLL-filer i Win32 API eller indholdet af en Mac / System / Library-mappe. Sådan får du adgang til OS X-bibliotekets mappe og hvorfor det er praktisk Sådan får du adgang til OS X-biblioteket Mappe og hvorfor det er praktisk Mest OS X Bibliotek mapper er bedst alene, men det er nyttigt at kende din vej i og omkring brugerbiblioteket. Læs mere .

software os kompatibilitetssystem biblioteker
Billedkredit: ScottXW via Wikimedia Commons

Systembiblioteker fungerer som en slags oversætter mellem applikationer og kernen til rutinemæssige opgaver. Applikationer gør funktionsopkald til disse biblioteker, der håndterer mange af de lavtliggende detaljer. De kan også gøre systemopkald til kernen for nemheds skyld. Som du måske har gættet betyder det, at disse biblioteker er skrevet til en bestemt kerne og derfor ikke kan bruges på tværs af operativsystemer med forskellige kerner.

Operationssystem Execution Headers

Det sidste vejspærre til universel software er formatet af eksekverbare filer til operativsystemerne. Et operativsystem forventer, at filerne kører for at følge et bestemt binært filformat Alt hvad du behøver at vide om filformater og deres egenskaber Alt du behøver at vide om filformater og deres egenskaber Vi bruger ordet fil interchangeably: musik, billede, regneark, diasshow, og så videre. Men hvad gør en fil en "fil", alligevel? Lad os forsøge at forstå denne grundlæggende del af databehandling. Læs mere . F.eks. Skal de filer, der kan udføres og forbindes med filer, der kører på operativsystemer som Linux og FreeBSD, angive bestemte egenskaber for filen i visse bytes, som vist i nedenstående billede.

software os kompatibilitet elf header

Den anvendte binære grænseflade (ABI) vist i stand er af særlig betydning. En kombination af opkaldene, der er tilgængelige fra processor-, kerne- og systembiblioteker, er en ABI, der ligner en applikationsprogrammeringsflade (API), idet den definerer, hvordan to programmer kommunikerer med hinanden. Men API'en er noget, der bruges af programmører (mennesker) i kildekoden for at angive, at to stykker software skal snakke med hinanden. ABI er hvad der faktisk giver dem mulighed for at gøre det, når softwaren er kompileret og kørt. Hvert operativsystem implementerer en bestemt ABI, som måske ændrer sig mellem versioner af det samme operativsystem.

Generelt implementerer operativsystemer deres egne ABI, bestemt af en kombination af typen af ​​processor, kernen og ethvert standard systembibliotek. Men nogle gange vil et operativsystem implementere mere end en. FreeBSD har støtte til Linux-binarier, for eksempel fordi den giver en Linux ABI som en add-on til FreeBSD-kernen (i stedet for Linux-kernen). Dette er forskelligt fra virtualizatiton-programmer Hvad er en virtuel maskine? Hvad er en virtuel maskine? Virtuelle maskiner giver dig mulighed for at køre andre operativsystemer i dit nuværende operativsystem, men hvorfor betyder det noget? Hvad er fordele og ulemper? Læs mere som VMWare eller VirtualBox, som bruger software til at simulere en hel maskine (hardware og alle). Som følge heraf er denne type ABI-kompatibilitet hurtigere, men meget mere indsats for at vedligeholde. Derfor er det sjældent, selv om Microsoft for nylig så værdien Ubuntu er nu tilgængelig på Windows Store Ubuntu er nu tilgængelig på Windows Store Windows Insiders kan nu downloade og installere Ubuntu på Windows 10. Dette bringer Linux og Windows sammen i en uheldig union få nogensinde forestillet sig, at de ville leve længe nok til at være vidne til. Læs mere i at gøre det.

Undtagelse: Tolk Software

Baseret på ovenstående har vi lært, at udviklere skriver software til en, og kun en, type målsystem. Undtagen 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?

Løg jeg mig indtil nu?

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

Java

Når Java først blev udgivet, var det løfte (bogstaveligt) "skrive en gang, køre hvor som helst." Ideen var at oprette applikationer ved at bruge Java-funktioner til at gemme filer, lave beregninger eller oprette et programvindue. Så ville en Java Runtime Enviornment (JRE) for hver understøttet computerplatform køre koden og oversætte disse til native OS-funktioner. Tricket til Java er så, at det ikke kører "direkte" på operativsystemet. Den kører i en del af JRE kaldet Java Virtual Machine, og det er det, der kører på operativsystemet.

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

software os kompatibilitet jide jdaf
Billedkredit: JIDE Software

Java-programmer sammensætter ikke netop "realtid" præcist. I stedet vil Java-kompilatoren gøre dem til "bytecode". Du kan tænke på bytecode som et halvbagt program. Når udvikleren frigiver applikationen, kompileres det så meget som det kan være uden at vide, hvilket OS det skal køre på. Når du rent faktisk lancerer det, vil JVM "bage det resten af ​​vejen" for at passe til de særlige funktioner i værts-operativsystemet.

Python

Et populært fortolket sprog er Python 5 Grunde til, at Python-programmering ikke er ubrugelig 5 Grunde til, at Python-programmering ikke er ubrugelig Python - Du elsker enten det eller du hader det. Du kan endda svinge fra den ene ende til den anden som et pendul. Uanset hvad, Python er et sprog, der er svært at være ambivalent om. Læs mere . Når du kører et Python-script, vil Python-tolken oversætte kode til instruktioner til operativsystemet. Det kan også fungere på samme måde som Java: Når du "importerer" kode uden for din applikation, kompileres den til bytecode første gang den køres. Så vil tolken vide, om den oprindelige kode er ændret på efterfølgende kørsler, hvorefter den vil genopbygge den til ny bytecode.

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

software os kompatibilitet python tolk

Dette betyder, at udviklere kan spille rundt og justere ting "live". Så en gang en kode kode gør hvad de vil, skal du kopiere og indsætte det i en script-fil (som er meget mere effektiv end den "code-compile-test" -cyklus, der ikke-fortolket sprogprogrammører skal gøre).

Selv når software er det samme, er det nok ikke

Desværre for brugerne har teknologibranchen ikke udviklet et ægte "universal" format. Og det må det aldrig gøre. Indførelse af disse typer af standarder resulterer ofte i en "mindste fællesnævner" -løsning, med indrømmelser 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 er du i orden med det operativsystem, du bruger, og har ingen interesse i apps fra andre platforme? Lad os vide nedenfor i kommentarerne!

Billedkreditter: Masterchief_Productions / Shutterstock

In this article