Advertentie
U hebt zojuist een update vol functies gedownload naar uw favoriete open source-app. Alles werkt goed, en je gebruikt het op je andere apparaten - dus het is tijd om het ook naar die apparaten te implementeren.
Alleen is je glimmende nieuwe Linux-laptop niet compatibel met je Windows-installatiepakket. Hoe zit het met je Android-tablet? iPhone? PS4? Waarom kun je dat stukje software niet gewoon meenemen en gebruiken waar je maar wilt? Laten we een aantal verschillende barrières onderzoeken voor de droom van 'één keer kopen, overal naartoe rennen'.
Softwareontwikkeling en OS-architectuur
Om te begrijpen waarom software niet op verschillende besturingssystemen werkt, is een beetje (een beetje, ik beloof het) kennis nodig van hoe software wordt gemaakt.
Het softwareontwikkelingsproces
In een zeer eenvoudige stroom van softwareontwikkeling voor desktop, server en mobiel (d.w.z. geen web Programmeren versus Webontwikkeling: wat is het verschil?Je denkt misschien dat applicatieprogrammeurs en webontwikkelaars hetzelfde werk doen, maar dat is verre van waar. Hier zijn de belangrijkste verschillen tussen programmeurs en webontwikkelaars. Lees verder ), zal een programmeur:
- Typ wat code in een of meer bestanden.
- Compileren de code in iets dat de computer kan uitvoeren.
- Test om ervoor te zorgen dat het programma werkt zoals verwacht.
- Verpakken en distribueren / inzetten de software.
Het is een combinatie van de eerste en tweede stap die ons hier bezighoudt. Het proces van compileren software, of het omzetten van code in enen en nullen die een computer begrijpt (machinetaal) is complex. We komen er niet gedetailleerd op in, maar het is handig 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. Het bestaat eerder uit softwarelagen.
Besturingssysteem Kernels
Een besturingssysteem pit is verantwoordelijk voor de communicatie met de hardware van de computer. Software communiceert zijn opdrachten naar de kernel, die op zijn beurt opdrachten naar 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 principe alle informatie (of het nu gaat om opgeslagen gegevens, berekeningen of gebruikersinvoer) tussen hardware en verschillende software. De kernel maakt al deze functionaliteit beschikbaar voor software via systeemoproepen.
De kernel van elk besturingssysteem implementeert systeemaanroepen anders, in termen van welke beschikbaar zijn, hoe ze worden genoemd of welke opties ze nemen. Als gevolg hiervan moet software rekening houden met de systeemaanroepen die worden ondersteund door de kernel van elk besturingssysteem waarop het is gericht. De systeemaanroep die u gebruikt om gegevens naar de GPU in Linux te verzenden, heeft mogelijk een andere naam, een lijst met informatie die u moet opgeven of beide in Windows. Die exacte oproep is er misschien helemaal niet.
Systeembibliotheken
In veel gevallen roept software niet rechtstreeks naar de kernel op. In plaats daarvan roept het op systeembibliothekenof verzamelingen basisfuncties. Bibliotheken bestaan dus (bijvoorbeeld) elk programma dat bestanden op de harde schijf opslaat, hoeft hiervoor geen functie te schrijven. In plaats daarvan is het eenvoudig links naar een systeembibliotheek en gebruikt een bestaande functie. De GLibC-bibliotheek voor Linux is een goed voorbeeld, net als de .DLL-bestanden in de Win32 API of de inhoud van de directory van een Mac / Systeem / Bibliotheek Hoe toegang te krijgen tot de OS X-bibliotheekmap en waarom deze handig isDe meeste OS X-bibliotheekmappen kunnen het beste alleen worden gelaten, maar het is handig om uw weg in en rond de gebruikersbibliotheek te kennen. Lees verder .
Systeembibliotheken fungeren als een soort vertaler tussen applicaties en de kernel voor routinetaken. Toepassingen maken functie oproepen naar deze bibliotheken, die veel details op laag niveau verwerken. Ze kunnen ook voor het gemak systeemaanroepen naar de kernel doen. Zoals je misschien al geraden hebt, betekent dit dat deze bibliotheken voor een bepaalde kernel zijn geschreven en daarom niet kunnen worden gebruikt in besturingssystemen met verschillende kernels.
Besturingskoppen voor besturingssysteemuitvoering
De laatste wegversperring voor universele software is het formaat van uitvoerbare bestanden voor de besturingssystemen. Een besturingssysteem verwacht dat de bestanden die worden uitgevoerd een bepaald volgen binair bestandsformaat Alles wat u moet weten over bestandsindelingen en hun eigenschappenWe gebruiken het woordbestand door elkaar: muziek, afbeelding, spreadsheet, diavoorstelling, enzovoort. Maar wat maakt een bestand eigenlijk een 'bestand'? Laten we proberen dit fundamentele onderdeel van computergebruik te begrijpen. Lees verder . Bijvoorbeeld de ELF-bestanden (Executable and Linkable Format) die worden uitgevoerd op besturingssystemen zoals Linux en FreeBSD moeten bepaalde eigenschappen van het bestand in bepaalde bytes specificeren, zoals hieronder getoond beeld.
De applicatie binaire interface (ABI) getoond staat is van bijzonder belang. Een combinatie van de oproepen die beschikbaar zijn via processor, kernel en systeembibliotheken, een ABI is vergelijkbaar met een applicatie-programmeerinterface (API) doordat het definieert hoe twee programma's met elkaar communiceren. Maar de API wordt door programmeurs (mensen) gebruikt in broncode om twee stukken software aan te geven Moeten met elkaar praten. Met de ABI kunnen ze dit 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 standaardsysteembibliotheken. Maar soms implementeert een besturingssysteem meer dan één. FreeBSD biedt bijvoorbeeld ondersteuning voor Linux-binaries, omdat het een Linux ABI biedt als een add-on voor de FreeBSD-kernel (in plaats van de Linux-kernel). Dit is anders dan virtualizatiton programma's Wat is een virtuele machine? Alles wat u moet wetenMet virtuele machines kunt u andere besturingssystemen op uw huidige computer uitvoeren. Dit is wat u over hen moet weten. Lees verder zoals VMWare of VirtualBox, die software gebruiken om een hele machine (hardware en alle) te simuleren. Als gevolg hiervan is dit type ABI-compatibiliteit sneller, maar veel meer moeite om te onderhouden. Dit is waarom het zeldzaam is, hoewel Microsoft zag onlangs de waarde Ubuntu is nu beschikbaar in de Windows StoreWindows Insiders kunnen nu Ubuntu downloaden en installeren op Windows 10. Dit brengt Linux en Windows samen in een onheilige unie die weinigen ooit hadden gedacht dat ze lang genoeg zouden leven om te getuigen. Lees verder door 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 je kunt downloaden en uitvoeren op een Mac, vervolgens kopiëren en uitvoeren op Windows, en misschien zelfs opnieuw kopiëren en zonder problemen uitvoeren op Linux. Hoe is dit mogelijk?
Loog ik tot nu toe?
Het blijkt dat er een categorie software is die aan de oppervlakte lijkt alsof het gewoon "overal wordt uitgevoerd". Je kunt het downloaden en op elke gewenste manier uitvoeren ondersteund platform - het sleutelwoord wordt 'ondersteund'. U downloadt in feite de broncode voor de toepassing, terwijl u een andere toepassing gebruikt (de tolk) is een soort van het direct uitvoeren van de broncode in realtime. Dit is een beetje een vereenvoudiging, dus laten we eens kijken hoe dit werkt met een paar talen.
Java
Toen Java voor het eerst uitkwam, was de belofte (letterlijk) "eenmaal schrijven, overal uitvoeren". Het idee was om te creëren toepassingen door Java-functies te gebruiken voor het opslaan van bestanden, het maken van berekeningen of het maken van een toepassing venster. 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 dan ook dat het niet "rechtstreeks" op het besturingssysteem draait. Het draait in een deel van de JRE genaamd de Java Virtual Machine en dat is wat op het besturingssysteem draait.
Door deze extra softwarelaag tussen de toepassing en het besturingssysteem in te voegen, kunt u zich met Java concentreren op een reeks functies die hetzelfde zijn voor alle besturingssystemen. U vertelt Java wat u wilt doen en laat de JVM voor uw systeem zich zorgen maken over hoe het daadwerkelijk moet worden gedaan. De onderstaande afbeelding toont dit in actie, waar Java Desktop Application Framework van JIDE Software geeft dezelfde applicatie weer voor Mac (boven), Windows (midden links), "pure Java" (midden rechts) en Linux (onder).
Java-programma's 'compileren' zich niet precies in realtime. In plaats daarvan zal de Java-compiler ze in "bytecode" veranderen. Je kunt bytecode beschouwen als een halfbakken programma. Wanneer de ontwikkelaar de applicatie uitbrengt, wordt deze zo veel mogelijk gecompileerd zonder te weten op welk besturingssysteem deze zal draaien. Wanneer u het daadwerkelijk start, zal de JVM "de rest van de weg bakken" om aan de specifieke functies van het host-besturingssysteem te voldoen.
Python
Een populaire geïnterpreteerde taal is Python 5 redenen waarom programmeren met Python niet nutteloos isPython - Je houdt ervan of je haat het. Je zou zelfs van het ene uiteinde naar het andere kunnen slingeren als een slinger. Hoe dan ook, Python is een taal die moeilijk ambivalent is. 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 code van buiten uw toepassing "importeert", wordt deze gecompileerd om de eerste keer dat deze wordt uitgevoerd bytecode. Dan zal de tolk weten of, bij volgende runs, de originele code is veranderd, op welk punt hij deze opnieuw compileert naar nieuwe bytecode.
Een cool bijproduct van deze 'on-demand'-uitvoering is dat u de tolk kunt gebruiken om uw scripts interactief te ontwikkelen. Door eenvoudigweg "python" te typen op de opdrachtregel, start u de tolk op en kunt u code uitvoeren en de resultaten meteen zien.
Dit betekent dat ontwikkelaars dingen live kunnen spelen en aanpassen. Zodra een coderegel doet wat ze willen, kopieert en plakt u deze in een scriptbestand (dat veel efficiënter is dan de "code-compileer-test" -cyclus die niet-geïnterpreteerde taalprogrammeurs moeten doen).
Zelfs als de software hetzelfde is, is het waarschijnlijk niet
Helaas voor gebruikers heeft de technologische industrie geen echt "universeel" formaat ontwikkeld. En dat zal het misschien nooit doen. De invoering van dit soort normen resulteert vaak in een oplossing met de 'kleinste gemene deler', met concessies in het belang van ieders goedkeuring.
Wat denk je? Wilt u liever universeel compatibele software, zelfs als het betekende dat het niet zo goed was? Of ben je in orde met het besturingssysteem dat je gebruikt en heb je geen interesse in de apps van andere platforms? Laat het ons hieronder weten in de comments!
Image Credits: Masterchief_Productions / Shutterstock
Aaron is al vijftien jaar elleboog in technologie als bedrijfsanalist en projectmanager en is al bijna even lang een trouwe Ubuntu-gebruiker (sinds de Breezy Badger). Zijn interesses zijn onder meer open source, applicaties voor kleine bedrijven, integratie van Linux en Android en computergebruik in gewone tekstmodus.