Eén maat past niet allemaal: waarom software niet universeel compatibel is

Software is hetzelfde op elk besturingssysteem, toch? Fout. Het ziet er misschien hetzelfde uit en functioneert op dezelfde manier, maar het is anders achter de schermen.

Software is hetzelfde op elk besturingssysteem, toch?  Fout.  Het ziet er misschien hetzelfde uit en functioneert op dezelfde manier, maar het is anders achter de schermen.
Advertentie

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 een keer, ren overal naartoe".

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. Typ een code in een of meer bestanden.
  2. Compileer de code in iets dat de computer kan uitvoeren.
  3. Test om te controleren of het programma werkt zoals verwacht.
  4. Pakket en distribueer / gebruik de software.

software os compatibiliteit dev-proces

Het is een combinatie van de eerste en tweede stap die ons hier aangaat. Het proces van het compileren van software of het omzetten van code 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

De kernel van een besturingssysteem 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 systeemaanroepen .

software os compatibele kernel basics
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 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 systeembibliotheken of verzamelingen basisfuncties op. Bibliotheken zijn zo (bijvoorbeeld) dat elk programma dat bestanden op de harde schijf opslaat, hiervoor geen functie hoeft te schrijven. In plaats daarvan linkt het eenvoudig naar een systeembibliotheek en gebruikt het 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 je weg in en rond de gebruikersbibliotheek te kennen. Lees verder .

software os compatibiliteitssysteembibliotheken
Afbeeldingscredits: ScottXW via Wikimedia Commons

Systeembibliotheken fungeren als een soort vertaler tussen applicaties en de kernel voor routinetaken. Toepassingen voeren functieaanroepen 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, enzovoort. 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 wordt weergegeven in de onderstaande afbeelding.

software os compatibiliteit elf header

De getoonde binaire interface van de toepassing (ABI) is van bijzonder belang. Een combinatie van de aanroepen beschikbaar van processor, kernel en systeemlibararies, een ABI is vergelijkbaar met een API (Application Programming Interface) in die zin dat het definieert hoe twee programma's met elkaar communiceren. Maar de API is iets dat door programmeurs (mensen) in de broncode wordt gebruikt om aan te geven dat twee stukjes software met elkaar moeten 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? Wat is een virtuele machine? Met virtuele machines kunt u andere besturingssystemen binnen uw huidige besturingssysteem uitvoeren, maar waarom is dat van belang? Wat zijn de voor- en nadelen? 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 Ubuntu Is nu beschikbaar 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?

Loog ik tot nu toe?

Het blijkt dat er een categorie software is die er aan de oppervlakte uitziet alsof het gewoon "overal draait". Je kunt het downloaden en uitvoeren op elk ondersteund platform - het sleutelwoord is "ondersteund". Je downloadt eigenlijk de broncode voor de toepassing, terwijl een andere toepassing (de interpreter ) de broncode in realtime rechtstreeks uitvoert. 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) "één keer schrijven, overal uitvoeren." 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. Vervolgens voert een Java Runtime Enviornment (JRE) voor elk ondersteund computerplatform de code uit en vertaalt deze naar native OS-functies. De truc voor Java is dat het niet "direct" op het besturingssysteem wordt uitgevoerd. 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 daadwerkelijk kunt doen. De onderstaande afbeelding laat dit in actie zien, waarbij Java Desktop Application Framework van JIDE Software dezelfde applicatie voor Mac (bovenaan), Windows (midden-links), "pure Java" (midden-rechts) en Linux (onder) weergeeft.

software os compatibiliteit jide jdaf
Image Credit: JIDE-software

Java-programma's "compileren" zichzelf niet in realtime. In plaats daarvan zal de Java-compiler ze in "bytecode" weergeven. Je kunt bytecode zien als een halfbakken programma. Wanneer de ontwikkelaar de toepassing vrijgeeft, wordt deze zoveel mogelijk gecompileerd zonder te weten met welk besturingssysteem het zal worden uitgevoerd. Wanneer je het daadwerkelijk start, zal de JVM het "de rest van de weg bakken" om te passen in de specifieke functies van het host-besturingssysteem.

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 u de code van buiten uw toepassing "importeert", is deze gecompileerd naar bytecode de eerste keer dat deze wordt uitgevoerd. Dan zal de interpreter weten of de originele code bij volgende runs is gewijzigd, waarna hij deze opnieuw compileert naar nieuwe bytecode.

Een cool bijproduct van deze "on-demand" -draaien is dat je de interpreter kunt gebruiken om je scripts interactief te ontwikkelen. Door gewoon "python" in te typen op de opdrachtregel, start u de interpreter op en kunt u de code uitvoeren en de resultaten onmiddellijk bekijken.

software os compatibiliteit python-interpreter

Dit betekent dat ontwikkelaars dingen "live" kunnen spelen en tweaken. Vervolgens, als een regel code doet wat ze willen, kopieer en plak het in een scriptbestand (dat is veel efficiënter dan de "code-compileer-test" -cyclus die niet-geïnterpreteerde programmeurs van talen moeten doen).

Zelfs wanneer software hetzelfde is, is het waarschijnlijk niet

Jammer genoeg voor gebruikers heeft de technische industrie geen werkelijk "universeel" formaat ontwikkeld. En misschien zal het dit nooit doen. Het introduceren van dit soort normen resulteert vaak in een "minst 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

In this article