reklama
Právě jste stáhli aktualizaci vaší oblíbené aplikace s otevřeným zdrojovým kódem. Všechno funguje dobře a vy je používáte na svých dalších zařízeních - je tedy čas na ně přejít.
Kromě vašeho nového lesklého laptopu Linux není kompatibilní s instalačním balíčkem Windows. A co váš Android tablet? iPhone? PS4? Proč nemůžete jen vzít ten kus softwaru a použít ho, kdekoli se vám líbí? Pojďme prozkoumat některé různé překážky snu „koupit jednou, běžet kamkoli“.
Vývoj softwaru a architektura OS
Pochopení toho, proč software nefunguje napříč operačními systémy, vyžaduje trochu (jen trochu slibuji) znalost toho, jak se software vyrábí.
Proces vývoje softwaru
Ve velmi základním toku vývoje softwaru pro stolní počítače, servery a mobilní telefony (tj. ne web Programování vs. Vývoj webu: Jaký je rozdíl?Možná si myslíte, že programátoři aplikací a vývojáři webových stránek dělají stejnou práci, ale to není ani zdaleka pravda. Zde jsou hlavní rozdíly mezi programátory a vývojáři webu. Přečtěte si více ), programátor:
- Zadejte nějaké kód do jednoho nebo více souborů.
- Sestavit kód do něčeho, co počítač dokáže spustit.
- Test aby program zajistil, že bude fungovat podle očekávání.
- Balení a distribuce / nasazení software.

Týká se nás kombinace prvního a druhého kroku. Proces kompilace software nebo jeho přeměna z kódu na ty a nuly, kterým počítač rozumí (strojový jazyk), je složitý. Nebudeme se k němu dostat velmi podrobně, ale je užitečné pochopit na vysoké úrovni, co se stane.
Architektura OS
Jeden důležitý bod k pochopení je, že operační systém není jediná entita. Spíše se skládá z vrstev softwaru.
Jádra operačního systému
Operační systém jádro odpovídá za komunikaci s hardwarem počítače. Software komunikuje své příkazy s jádrem, které zase vydává příkazy hardwaru, aby (například) přečetl soubor z pevného disku nebo nakreslil okno na obrazovku. V zásadě koordinuje všechny informace (ať už se jedná o uložená data, výpočty nebo vstup uživatele) mezi hardwarem a různými částmi softwaru. Jádro zpřístupňuje všechny tyto funkce softwaru prostřednictvím systémová volání.

Jádro každého operačního systému implementuje systémová volání odlišně, pokud jde o to, které z nich jsou k dispozici, co se jim říká nebo jaké možnosti mají. V důsledku toho musí software brát v úvahu systémová volání podporovaná jádrem každého OS, na který cílí. Systémové volání, které používáte k odesílání dat na GPU v systému Linux, může mít v systému Windows jiné jméno, seznam informací, které potřebujete poskytnout, nebo obojí. Ten přesný hovor tam nemusí být vůbec.
Systémové knihovny
V mnoha případech software nehovoří přímo do jádra. Místo toho to volá systémové knihovny, nebo kolekce základních funkcí. Knihovny tak existují (například) každý program, který ukládá soubory na pevný disk, k tomu nemusí psát žádnou funkci. Místo toho to prostě odkazy na systémová knihovna a používá existující funkci. Knihovna GLibC pro Linux je příkladem, stejně jako soubory .DLL v rozhraní Win32 API nebo obsah adresáře Mac / System / Library Jak získat přístup ke složce knihovny OS X a proč je to užitečnéVětšina složek knihovny OS X je nejlépe ponechat osamocená, ale je užitečné znát cestu v knihovně uživatelů. Přečtěte si více .

Systémové knihovny fungují jako druh překladače mezi aplikacemi a jádrem pro rutinní úkoly. Aplikace vytvářejí volání funkcí do těchto knihoven, které zpracovávají mnoho detailů na nízké úrovni. Pro zjednodušení mohou také provádět systémová volání do jádra. Jak jste možná uhodli, znamená to, že tyto knihovny jsou psány pro konkrétní jádro, a proto je nelze použít napříč operačními systémy s různými jádry.
Hlavičky spuštění operačního systému
Posledním blokováním univerzálního softwaru je formát spustitelných souborů pro operační systémy. OS očekává, že soubory, které spustí, budou sledovat konkrétní binární formát souboru Vše, co potřebujete vědět o formátech souborů a jejich vlastnostechPoužíváme soubor slov zaměnitelně: hudbu, obrázek, tabulku, prezentaci atd. Ale co vlastně dělá ze souboru „soubor“? Zkusme pochopit tuto základní část práce s počítačem. Přečtěte si více . Například soubory spustitelného a propojitelného formátu (ELF), které běží na operačních systémech, jako je Linux a FreeBSD musí určit určité vlastnosti souboru v určitých bytech, jak je ukázáno níže obraz.

aplikační binární rozhraní (ABI) prokázané schopnosti mají zvláštní význam. Kombinace hovorů dostupných z procesoru, jádra a systémových knihoven, ABI je podobná an aplikační programovací rozhraní (API) v tom, že definuje, jak dva programy spolu komunikují. API je však něco, co používají programátoři (lidé) ve zdrojovém kódu k označení dvou kusů softwaru by měl mluvit k sobě navzájem. ABI je to, co jim ve skutečnosti umožňuje, jakmile je software zkompilován a spuštěn. Každý operační systém implementuje konkrétní ABI, které se může nebo nemusí měnit mezi verzemi stejného operačního systému.
Operační systémy obecně implementují své vlastní ABI, určené kombinací typu procesoru, jádra a všech standardních systémových knihoven. Ale někdy OS implementuje více než jeden. FreeBSD má podporu například pro binární soubory Linux, protože poskytuje Linux ABI jako doplněk k jádru FreeBSD (místo Linuxového jádra). To se liší od virtualizační programy Co je virtuální stroj? Vše, co potřebujete vědětVirtuální stroje vám umožňují spouštět na vašem aktuálním počítači další operační systémy. Tady byste o nich měli vědět. Přečtěte si více jako je VMWare nebo VirtualBox, které používají software k simulaci celého počítače (hardware a vše). V důsledku toho je tento typ kompatibility ABI rychlejší, ale mnohem větší úsilí na jeho udržení. Proto je to vzácné Microsoft nedávno viděl hodnotu Ubuntu je nyní k dispozici v obchodě Windows StoreWindows Insiders nyní mohou stáhnout a nainstalovat Ubuntu do Windows 10. Díky tomu se Linux a Windows spojují v bezbožný svazek, který si jen málokdo představil, že budou žít dost dlouho, aby byli svědky. Přečtěte si více v tom.
Výjimka: Interpretovaný software
Na základě výše uvedeného jsme se dozvěděli, že vývojáři vytvářejí software pro jeden a pouze jeden typ cílového systému. Až na to, že ne. Existuje mnoho aplikací, které si můžete stáhnout a spustit na Macu, pak zkopírovat a spustit na Windows, a možná dokonce znovu kopírovat a běžet na Linuxu bez problémů. Jak je tohle možné?
Lhal jsem až dosud?
Jak se ukázalo, existuje určitá kategorie softwaru, který vypadá na povrchu, jako by „běžel všude“. Můžete si jej stáhnout a spustit na jakémkoli podporovaná platforma - klíčové slovo „podporováno“. Ve skutečnosti stahujete zdrojový kód aplikace, zatímco jiná aplikace ( tlumočník) je druh spuštění zdrojového kódu přímo v reálném čase. Je to něco příliš zjednodušeného, takže se podívejme, jak přesně to funguje s několika jazyky.
Jáva
Když Java poprvé vydala, byl slib (doslova) „napsat jednou, běžet kdekoli.“ Nápad byl vytvořit aplikací pomocí funkcí Java, jak ukládat soubory, provádět výpočty nebo vytvářet aplikace okno. Pak Java Runtime Enviornment (JRE) pro každou podporovanou počítačovou platformu by spustil kód a přeložil je do nativních funkcí operačního systému. Trik s Java tedy spočívá v tom, že v operačním systému neběží „přímo“. Běží v části nazvané JRE Virtuální stroj Java a to je to, co běží na operačním systému.
Vložením této další softwarové vrstvy mezi aplikaci a OS vám Java umožňuje soustředit se na sadu funkcí, které jsou stejné v různých operačních systémech. Řeknete Java, co chcete dělat, a nechte JVM, aby se váš systém staral o to, jak to skutečně udělat. Níže uvedený obrázek ukazuje toto v akci, kde Java Desktop Application Framework společnosti JIDE Software zobrazí stejnou aplikaci pro Mac (nahoře), Windows (uprostřed-vlevo), „čistou Javu“ (uprostřed-vpravo) a Linux (dole).

Programy Java se v reálném čase přesně „nekompilují“. Spíše je kompilátor jazyka Java převede do „bajtkódu“. Bytecode si můžete představit jako napůl pečený program. Když vývojář uvolní aplikaci, je kompilován v maximální možné míře, aniž by věděl, na kterém OS bude spuštěn. Když ji skutečně spustíte, JVM ji „upeče zbytek cesty“, aby vyhovovala funkcím konkrétního hostitelského OS.
Krajta
Populární interpretovaný jazyk je Krajta 5 důvodů, proč není Python programování zbytečnéPython - Buď to miluješ, nebo ho nenávidíš. Můžete se dokonce houpat z jednoho konce na druhý jako kyvadlo. Bez ohledu na to, Python je jazyk, o kterém je těžké být ambivalentní. Přečtěte si více . Při spuštění skriptu Python interpret Python převede kód do pokynů pro operační systém. Může také fungovat podobně jako Java: když „importujete“ kód mimo vaši aplikaci, je při prvním spuštění kompilován na bytecode. Poté bude tlumočník vědět, zda se v následujících bězích původní kód změnil, a poté jej překompiluje na nový bytecode.
Skvělým vedlejším produktem tohoto běhu „na vyžádání“ je to, že můžete použít interpreta k vývoji skriptů. Jednoduše zadáním „pythonu“ do příkazového řádku spustíte interpret a můžete spustit kód a okamžitě vidět výsledky.

To znamená, že vývojáři mohou hrát a vylepšovat věci „živě“. Jakmile řádek kódu udělá, co chce, zkopírujte jej a vložte do něj soubor skriptu (což je mnohem efektivnější než cyklus „kód-kompilace-test“, který musí neinterpretovaní jazykové programátoři dělat).
I když je software stejný, pravděpodobně není
Bohužel pro uživatele technický průmysl nevyvinul skutečně „univerzální“ formát. A nikdy to nemůže udělat. Zavedení těchto typů norem často vede k řešení „nejméně společného jmenovatele“ a ústupky v zájmu získání souhlasu všech.
Co myslíš? Chtěli byste raději univerzálně kompatibilní software, i když to znamenalo, že to nebylo tak dobré? Nebo jste v pořádku s operačním systémem, který používáte, a nemáte zájem o aplikace z jiných platforem? Dejte nám vědět níže v komentářích!
Image Credits: Masterchief_Productions / Shutterstock
Aaron byl v oblasti technologií jako obchodní analytik a projektový manažer již patnáct let a je věrným uživatelem Ubuntu téměř stejně dlouho (od Breezy Badgera). Mezi jeho zájmy patří open source, aplikace pro malé firmy, integrace Linuxu a Androidu a práce na počítači v prostém textovém režimu.