Eén maat past niet alles Waarom software niet universeel compatibel is

Eén maat past niet alles Waarom software niet universeel compatibel is / Technologie uitgelegd

Je hebt zojuist een uitgebreide update voor je favoriete open source-app gedownload. Alles werkt goed, en u gebruikt het op uw andere apparaten - dus het is tijd om het ook voor hen uit te rollen.

Behalve dat je glimmende nieuwe Linux-laptop niet compatibel is met je Windows-installatiepakket. Wat dacht je van je Android-tablet? iPhone? PS4? Waarom kan je dat stuk software niet gewoon nemen en gebruiken waar je maar wilt? Laten we een aantal verschillende barrières onderzoeken voor de droom van “koop één keer, ren overal.”

Softwareontwikkeling en OS-architectuur

Om te begrijpen waarom software niet werkt op verschillende besturingssystemen, heb je een beetje (maar een beetje, ik beloof het) kennis nodig over hoe software wordt gemaakt.

Het software ontwikkelingsproces

In een zeer elementaire software-ontwikkelingsstroom voor desktop, server en mobiel (dwz niet voor webprogrammering versus webontwikkeling: wat is het verschil? Programmeren versus Webontwikkeling: wat is het verschil? Misschien denkt u dat toepassingsprogrammeurs en webontwikkelaars hetzelfde doen , maar dat is allesbehalve waar: hier zijn de belangrijkste verschillen tussen programmeurs en webontwikkelaars Lees meer), een programmeur zal:

  1. Type wat code in een of meer bestanden.
  2. Compileren de code in iets dat de computer kan uitvoeren.
  3. Test om ervoor te zorgen dat het programma werkt zoals verwacht.
  4. Pakket en distribueren / implementeren de software.

Het is een combinatie van de eerste en tweede stap die ons hier aangaat. Het proces van compileren software, of het van code veranderen in de enen en nullen die een computer begrijpt (machinetaal) is complex. We zullen er niet gedetailleerd op in gaan, maar het is nuttig om op hoog niveau te begrijpen wat er gebeurt.

OS-architectuur

Een belangrijk punt om te begrijpen is dat een besturingssysteem geen enkele entiteit is. Integendeel, het is opgebouwd uit lagen van software.

Besturingssysteem Kernels

Een besturingssysteem pit is verantwoordelijk voor de communicatie met de hardware van de computer. Software communiceert zijn commando's naar de kernel, die op zijn beurt opdrachten aan de hardware geeft om (bijvoorbeeld) een bestand van de harde schijf te lezen of een venster op het scherm te tekenen. Het coördineert in wezen alle informatie (of het nu gaat om opgeslagen gegevens, berekeningen of gebruikersinvoer) tussen hardware en verschillende stukjes software. De kernel maakt al deze functionaliteit beschikbaar voor software via systeem oproepen.

Beeldcredits: Wikimedia Commons

De kernel van elk besturingssysteem zal systeemoproepen anders implementeren, in termen van welke beschikbaar zijn, hoe ze worden genoemd, of welke opties ze nemen. Dientengevolge moet de software rekening houden met de systeemoproepen die worden ondersteund door de kernel van elk besturingssysteem waarop het is gericht. De systeemaanroep die u gebruikt om gegevens naar de GPU te verzenden in Linux kan een andere naam hebben, een lijst met informatie die u moet opgeven of beide in Windows. Die exacte oproep is misschien helemaal niet aanwezig.

Systeembibliotheken

In veel gevallen roept software niet rechtstreeks naar de kernel. In plaats daarvan roept het naar systeembibliotheken, of verzamelingen van basisfuncties. Bibliotheken zijn zo (bijvoorbeeld) dat elk programma dat bestanden op de harde schijf opslaat, hiervoor geen functie hoeft te schrijven. In plaats daarvan eenvoudig links naar een systeembibliotheek en gebruikt een bestaande functie. De GLibC-bibliotheek voor Linux is hiervan een goed voorbeeld, net als de .DLL-bestanden in de Win32-API of de inhoud van een Mac / System / Library-map Toegang tot de OS X-bibliotheekmap & waarom het handig is Toegang tot de OS X-bibliotheek Folder en waarom het handig is De meeste mappen in de OS X-bibliotheek kunnen het beste alleen worden gelaten, maar het is handig om te weten wat je in en rondom de gebruikersbibliotheek bent. Lees verder .

Afbeeldingscredits: ScottXW via Wikimedia Commons

Systeembibliotheken fungeren als een soort vertaler tussen applicaties en de kernel voor routinetaken. Toepassingen maken functie-oproepen naar deze bibliotheken, die veel van de details op laag niveau verwerken. Ze kunnen ook systeemaanroepen naar de kernel maken voor het gemak. Zoals je misschien al geraden hebt, betekent dit dat deze bibliotheken zijn geschreven voor een bepaalde kernel en daarom niet kunnen worden gebruikt in besturingssystemen met verschillende kernels.

Uitvoeringen van besturingssystemen

De laatste wegversperring tot universele software is het formaat van uitvoerbare bestanden voor de besturingssystemen. Een besturingssysteem verwacht dat de bestanden die het uitvoert een specifiek binair bestandsformaat hebben Alles wat u moet weten over bestandsindelingen en hun eigenschappen Alles wat u moet weten over bestandsindelingen en hun eigenschappen We gebruiken het woordbestand uitwisselbaar: muziek, afbeelding, spreadsheet, diavoorstelling , enzovoorts. Maar wat maakt een bestand eigenlijk tot een "bestand"? Laten we dit fundamentele onderdeel van computergebruik proberen te begrijpen. Lees verder . De ELF-bestanden (Executable en Linkable Format) die worden uitgevoerd op besturingssystemen zoals Linux en FreeBSD, moeten bijvoorbeeld bepaalde eigenschappen van het bestand in bepaalde bytes opgeven, zoals weergegeven in de onderstaande afbeelding..

De applicatie binaire interface (ABI) getoond bekwaam is van bijzonder belang. Een combinatie van de beschikbare aanroepen van processor, kernel en systeemlibararies, een ABI is vergelijkbaar met een applicatie-programmeerinterface (API) in dat het bepaalt hoe twee programma's met elkaar communiceren. Maar de API wordt door programmeurs (mensen) in de broncode gebruikt om twee stukken software aan te duiden moeten met elkaar praten. De ABI is wat hen in feite toestaat om dit te doen zodra de software is gecompileerd en uitgevoerd. Elk besturingssysteem implementeert een bepaalde ABI, die al dan niet kan veranderen tussen versies van datzelfde besturingssysteem.

Over het algemeen implementeren besturingssystemen hun eigen ABI, bepaald door een combinatie van het type processor, de kernel en eventuele standaard systeembibliotheken. Maar soms zal een besturingssysteem meer dan één besturingssysteem implementeren. FreeBSD heeft ondersteuning voor Linux-binaries, bijvoorbeeld omdat het een Linux ABI biedt als een add-on voor de FreeBSD-kernel (in plaats van de Linux-kernel). Dit verschilt van virtualizatiton-programma's Wat is een virtuele machine? Alles wat u moet weten Wat is een virtuele machine? Alles wat u moet weten Met virtuele machines kunt u andere besturingssystemen op uw huidige computer gebruiken. Dit is wat u over hen moet weten. Lees Meer, zoals VMWare of VirtualBox, die software gebruiken om een ​​hele machine (hardware en alles) te simuleren. Als gevolg hiervan is dit type ABI-compatibiliteit sneller, maar veel meer inspanning om te onderhouden. Dit is waarom het zeldzaam is, hoewel Microsoft onlangs de waarde zag die Ubuntu nu beschikbaar is in de Windows Store Ubuntu is nu beschikbaar in de Windows Store Windows Insiders kunnen Ubuntu nu downloaden en installeren op Windows 10. Dit brengt Linux en Windows samen in een onheilige eenheid maar weinigen hadden ooit gedacht dat ze lang genoeg zouden leven om te kunnen getuigen. Lees meer om het te doen.

Uitzondering: geïnterpreteerde software

Op basis van het bovenstaande hebben we geleerd dat ontwikkelaars software schrijven voor één en slechts één type doelsysteem. Behalve wanneer ze dat niet doen. Er zijn veel applicaties die u kunt downloaden en uitvoeren op een Mac, vervolgens kopiëren en uitvoeren op Windows, en misschien zelfs opnieuw kopiëren en zonder problemen op Linux uitvoeren. Hoe is dit mogelijk?

Lieg ik tot nu toe?

Het blijkt dat er een categorie software is die er net zo uitziet als op het oppervlak “loopt overal.” U kunt het downloaden en uitvoeren op elk ondersteund platform - het sleutelwoord zijnde “ondersteunde.” In feite download je de broncode voor de applicatie, terwijl een andere applicatie (de tolk) is een soort van uitvoering van de broncode direct in realtime. Dit is iets van een te grote vereenvoudiging, dus laten we eens kijken naar hoe dit werkt met een paar talen.

Java

Toen Java voor het eerst uitkwam, was de belofte (letterlijk) “schrijf één keer, ren overal.” Het idee was om applicaties te maken met behulp van Java-functies voor het opslaan van bestanden, het maken van berekeningen of het maken van een toepassingsvenster. Dan een Java Runtime Enviornment (JRE) voor elk ondersteund computerplatform zou de code worden uitgevoerd en deze worden vertaald naar native OS-functies. De truc voor Java is dus dat het niet werkt “direct” op het besturingssysteem. Het draait in een deel van de JRE genaamd de Java Virtual Machine en dat is wat draait op het besturingssysteem.

Door deze extra softwarelaag tussen de toepassing en het besturingssysteem in te voegen, stelt Java u in staat om u te concentreren op een reeks functies die hetzelfde is voor verschillende besturingssystemen. U vertelt Java wat u wilt doen en laat de JVM voor uw systeem zich zorgen maken over hoe u het eigenlijk kunt doen. De onderstaande afbeelding laat dit in actie zien, waarbij Java Desktop Application Framework van JIDE Software dezelfde applicatie voor Mac (boven), Windows (middenlinks) laat zien, “pure Java” (midden-rechts) en Linux (onder).

Image Credit: JIDE-software

Java-programma's niet precies “compileren” zelf in realtime. Integendeel, de Java-compiler maakt ze waar “bytecode.” Je kunt bytecode zien als een halfgebakken programma. Wanneer de ontwikkelaar de toepassing vrijgeeft, wordt deze zoveel mogelijk gecompileerd zonder te weten met welk besturingssysteem het zal worden uitgevoerd. Wanneer u het daadwerkelijk start, zal de JVM dat doen “bak het de rest van de weg” om in de specifieke functies van het host-besturingssysteem te passen.

Python

Een populaire geïnterpreteerde taal is Python 5 Redenen waarom Python-programmering niet nutteloos is 5 Redenen waarom Python-programmeren geen zin heeft Python - Je houdt er wel van of je haat het. Je zou zelfs als een slinger van het ene uiteinde naar het andere kunnen zwaaien. Ongeacht, Python is een taal waar het moeilijk is om ambivalent te zijn. Lees verder . Wanneer u een Python-script uitvoert, vertaalt de Python-interpreter code in instructies voor het besturingssysteem. Het kan ook op dezelfde manier werken als Java: wanneer jij “importeren” code van buiten uw applicatie is het gecompileerd naar bytecode de eerste keer dat het wordt uitgevoerd. De interpreter weet dan of de originele code bij volgende runs is gewijzigd, waarna hij deze opnieuw compileert naar nieuwe bytecode.

Een coole bijproduct hiervan “op aanvraag” uitvoeren is dat u de interpreter kunt gebruiken om uw scripts interactief te ontwikkelen. Door simpelweg te typen “Python” op de opdrachtregel start u de interpreter en kunt u de code uitvoeren en de resultaten onmiddellijk bekijken.

Dit betekent dat ontwikkelaars kunnen spelen en dingen kunnen aanpassen “leven.” Vervolgens, als een regel code doet wat ze willen, kopieer en plak het in een scriptbestand (dat is veel efficiënter dan het “code-compile-testen” cyclus die niet-geïnterpreteerde taalprogrammeurs moeten doen).

Zelfs wanneer software hetzelfde is, is het waarschijnlijk niet

Helaas voor gebruikers heeft de technische industrie geen echt ontwikkeld “universeel” formaat. En misschien zal het dit nooit doen. Het introduceren van dit soort normen resulteert vaak in een “kleinste gemene deler” oplossing, met concessies in het belang van ieders goedkeuring te krijgen.

Wat denk je? Zou je liever universeel compatibele software hebben, zelfs als dat betekende dat het niet zo goed was? Of bent u in orde met het besturingssysteem dat u gebruikt en heeft u geen interesse in de apps van andere platforms? Laat het ons hieronder weten in de reacties!

Afbeeldingscredits: Masterchief_Productions / Shutterstock

Meer informatie over: Bestandssysteem, Software installeren, Besturingssystemen.