Oglas
Pravkar ste v svojo najljubšo odprtokodno aplikacijo prenesli posodobljeno različico. Vse deluje dobro in ga uporabljate v drugih napravah - zato je čas, da jih razstavite tudi njim.
Razen, da vaš svetleč nov prenosni računalnik Linux ni združljiv z vašim namestitvenim paketom Windows. Kaj pa tablični računalnik Android? iPhone? PS4? Zakaj ne morete vzeti tega dela programske opreme in ga uporabljati, kjer koli želite? Raziskujmo nekaj različnih ovir za sanje o "nakupu enkrat, teči kamor koli."
Razvoj programske opreme in arhitektura OS-a
Razumevanje, zakaj programska oprema ne deluje v operacijskih sistemih, zahteva malo (samo malo, obljubim) znanja, kako je programska oprema izdelana.
Proces razvoja programske opreme
V zelo osnovnem toku razvoja programske opreme za namizje, strežnike in mobilne naprave (tj. ne splet Programiranje vs. Spletni razvoj: v čem je razlika?Morda mislite, da aplikacijski programerji in spletni razvijalci opravljajo isto delo, vendar to še zdaleč ni resnica. Tu so ključne razlike med programerji in spletnimi razvijalci. Preberi več ), programer bo:
- Vnesite nekaj Koda v eno ali več datotek.
- Sestavi kodo v nekaj, kar računalnik lahko izvede.
- Test da se prepriča, da program deluje po pričakovanjih.
- Pakiranje in distribucija / uporaba programska oprema.
Tukaj nas zadeva kombinacija prvega in drugega koraka. Postopek sestavljanje programsko opremo ali pa jo iz kode pretvoriti v tiste in ničle, ki jih računalnik razume (strojni jezik), je zapleteno. Vanj se ne bomo podrobno seznanili, vendar je koristno razumeti, kaj se zgodi.
OS Arhitektura
Pomembno je razumeti, da operacijski sistem ni ena sama entiteta. Namesto tega je sestavljen iz plasti programske opreme.
Jedra operacijskega sistema
Operacijski sistem jedro je odgovoren za komunikacijo s strojno opremo računalnika. Programska oprema sporoči svoje ukaze jedru, ki nato strojem izda ukaze za (na primer) branje datoteke s trdega diska ali na zaslonu nariše okno. V bistvu usklajuje vse podatke (naj bodo to shranjeni podatki, izračuni ali uporabniški vnos) med strojno opremo in različnimi deli programske opreme. Jedro omogoča, da so vse te funkcije na voljo programski opremi preko sistemski klici.
Vsako jedro operacijskega sistema bo izvajalo sistemske klice drugače, glede na to, kateri so na voljo, kako se imenujejo ali katere možnosti sprejmejo. Kot rezultat tega mora programska oprema upoštevati sistemske klice, ki jih podpira jedro vsake OS, na katero cilja. Sistemski klic, ki ga uporabljate za pošiljanje podatkov v GPU v Linuxu, ima lahko drugačno ime, seznam informacij, ki jih morate zagotoviti, ali oboje v sistemu Windows. Točnega klica morda sploh ne bo.
Sistemske knjižnice
V mnogih primerih programska oprema ne kliče neposredno v jedro. Namesto tega poziva k sistemske knjižniceali zbirke osnovnih funkcij. Knjižnice obstajajo tako (na primer) vsakemu programu, ki datoteke shrani na trdi disk, ni treba napisati funkcije, da bi to storili. Namesto tega preprosto povezave do sistemska knjižnica in uporablja obstoječo funkcijo. Knjižnica GLibC za Linux je odličen primer, prav tako datoteke .DLL v API-ju Win32 ali vsebino imenika Mac / System / Library Kako dostopati do mape knjižnice OS X in zakaj je priročnoVečino map knjižnice OS X je najbolje pustiti pri miru, vendar je koristno poznati svojo pot v in okoli uporabniške knjižnice. Preberi več .
Sistemske knjižnice delujejo kot nekakšen prevajalec med aplikacijami in jedrom za rutinske naloge. Prijave naredijo funkcijski klici v te knjižnice, ki obdelujejo veliko podrobnosti na nizki ravni. Za lažje klicanje lahko tudi kličejo jedro. Kot ste morda uganili, to pomeni, da so te knjižnice napisane za določeno jedro, zato jih ni mogoče uporabljati v operacijskih sistemih z različnimi jedri.
Izvršilne glave za operacijski sistem
Zadnja ovira za univerzalno programsko opremo je oblika izvršljivih datotek za operacijske sisteme. OS pričakuje, da datoteke, ki jih zažene, sledijo določenemu oblika binarne datoteke Vse, kar morate vedeti o oblikah datotek in njihovih lastnostihBesedno datoteko uporabljamo zamenljivo: glasba, slika, preglednica, diaprojekcija itd. Toda kaj sploh pomeni datoteko "datoteko"? Poskusimo in razumemo ta temeljni del računanja. Preberi več . Na primer datoteke izvršljivega in povezovalnega formata (ELF), ki delujejo v operacijskih sistemih, kot so Linux in FreeBSD morata določiti določene lastnosti datoteke v določenih bajtih, kot je prikazano spodaj slika.
The binarni vmesnik aplikacije (ABI) izkazana sposobnost je še posebej pomembna. Kombinacija klicev, ki so na voljo v procesorju, jedru in sistemskih knjižnicah, je podobna ABI an vmesnik za programiranje aplikacij (API) saj opredeljuje, kako dva programa komunicirata drug z drugim. Toda API je nekaj, kar programerji (ljudje) uporabljajo v izvorni kodi za označitev dveh delov programske opreme naj bi govoriti drug z drugim. ABI je tisto, kar jim dejansko omogoča, ko se programska oprema pripravi in zažene. Vsak operacijski sistem izvaja določen ABI, ki se lahko ali ne spreminja med različicami istega operacijskega sistema.
Na splošno operacijski sistemi izvajajo svoj ABI, ki ga določa kombinacija vrste procesorja, jedra in katere koli standardne sistemske knjižnice. Toda včasih bo OS izvedel več kot enega. FreeBSD ima na primer podporo za binarne datoteke Linux, ker ponuja Linux ABI kot dodatek k jedru FreeBSD (namesto Linux jedra). To je drugače kot virtualizatiton programi Kaj je virtualni stroj? Vse, kar morate vedetiNavidezni stroji vam omogočajo zagon drugih operacijskih sistemov na vašem trenutnem računalniku. Tukaj je tisto, kar bi morali vedeti o njih. Preberi več na primer VMWare ali VirtualBox, ki uporabljajo programsko opremo za simulacijo celotnega stroja (strojne opreme in vsega). Kot rezultat tega je združljivost ABI hitrejša, vendar je veliko več truda za vzdrževanje. Zato je to redko Microsoft je pred kratkim videl vrednost Ubuntu je zdaj na voljo v trgovini WindowsWindows Insiders lahko zdaj prenesejo in namestijo Ubuntu v sistem Windows 10. S tem sta Linux in Windows združena v nečedni zvezi, ki si jih je malo predstavljalo, da bodo živeli dovolj dolgo, da bi bili priča. Preberi več pri tem.
Izjema: Interpretirana programska oprema
Na podlagi zgoraj navedenega smo izvedeli, da razvijalci pišejo programsko opremo za en in samo en tip ciljnega sistema. Razen kadar nimajo. Obstaja veliko aplikacij, ki jih lahko prenesete in zaženete na Macu, nato kopirate in zaženete v operacijskem sistemu Windows in morda celo kopirate in zaženete v Linuxu brez težav. Kako je to mogoče?
Sem ležal do zdaj?
Kot kaže, obstaja kategorija programske opreme, ki izgleda na površini, kot da "samo teče povsod". Lahko ga prenesete in zaženete na katerem koli podprta platforma - ključna beseda je "podprta." Pravzaprav nalagate izvorno kodo za drugo aplikacijo (the tolmač) je nekako izvaja izvirno kodo neposredno v realnem času. To je nekaj preveč poenostavitve, zato si poglejmo, kako natančno to deluje z nekaj jeziki.
Java
Ko je Java prvič izšla, je bilo (dobesedno) "pisati enkrat, zagnati kamor koli." Ideja je bila ustvariti aplikacije s pomočjo funkcij Java za shranjevanje datotek, izračune ali ustvarjanje aplikacije okno. Potem a Java Runtime Enviornment (JRE) vsaka podprta računalniška platforma bi zagnala kodo in jih prenesla v izvorne funkcije OS. Trik pri Javi je torej v tem, da se ta ne izvaja "neposredno" v operacijskem sistemu. Teče v delu, imenovanem JRE the Java Virtual Machine in to je tisto, kar deluje v operacijskem sistemu.
Z vstavitvijo tega dodatnega programskega sloja med aplikacijo in OS se vam Java omogoča, da se osredotočite na nabor funkcij, ki so enake v operacijskih sistemih. Javi poveš, kaj želiš storiti, in JVM za svoj sistem pusti, da skrbi, kako to dejansko storiti. Spodnja slika prikazuje to v akciji, kam Programski program Java Desktop za program JIDE Software prikaže isto aplikacijo za Mac (zgoraj), Windows (sredina levo), "čisto Java" (srednja desna) in Linux (spodaj).
Programi Java se v realnem času ne natančno "sestavijo". Namesto tega jih bo prevajalnik Java pretvoril v "bajt kodo." Bajt kodo si lahko predstavljate kot napol zapečen program. Ko razvijalec sprosti aplikacijo, jo zbere toliko, kot lahko, ne da bi vedel, v katerem operacijskem sistemu se bo izvajal. Ko ga dejansko zaženete, bo JVM "spekel preostanek poti", da bo ustrezal funkcijam gostiteljske OS.
Python
Priljubljen tolmačen jezik je Python 5 razlogov, zakaj programiranje Pythona ni neuporabnoPython - Ali ga imate radi ali ga sovražite. Morda celo nihate z enega konca na drugega kot nihalo. Ne glede na to je Python jezik, v katerem je težko biti ambivalenten. Preberi več . Ko zaženete skript Python, bo tolmač Python prevedel kodo v navodila za OS. Prav tako lahko deluje podobno kot Java: ko uvozite kodo izven aplikacije, jo sestavite tako, da prvič zaženete kodo. Potem bo tolmač vedel, ali se je pri naslednjih potekih prvotna koda spremenila, nato pa jo bo znova sestavil v novo bajt kodo.
Kul stranski produkt tega "na zahtevo" teka je, da lahko tolmač uporabite za interaktivni razvoj svojih skript. Če preprosto vtipkate "python" v ukazni vrstici, boste zagnali tolmač in lahko zaženete kodo in takoj videli rezultate.
To pomeni, da se lahko razvijalci igrajo in spreminjajo stvari "v živo". Potem, ko vrstica kode naredi, kar hočejo, jo kopirajte in prilepite skriptno datoteko (ki je veliko bolj učinkovita od cikla "preizkušanje kode-preizkušanja", ki ga morajo narediti nerazlagani jezikovni programerji).
Tudi ko je programska oprema enaka, verjetno ni
Na žalost za uporabnike tehnološka industrija ni razvila resnično "univerzalnega" formata. In tega morda nikoli ne stori. Uvedba teh vrst standardov ima pogosto za posledico rešitev »najmanj skupnega imenovalca«, pri čemer so ugodnosti v interesu, da se vsi odobrijo.
Kaj misliš? Bi raje imeli univerzalno združljivo programsko opremo, čeprav bi to pomenilo, da ni tako dobra? Ali ste v redu z operacijskim sistemom, ki ga uporabljate, in se ne zanimate za aplikacije z drugih platform? Sporočite nam spodaj v komentarjih!
Slikovni krediti: Masterchief_Productions / Shutterstock
Aaron je bil tehnologijo kot poslovni analitik in vodja projektov že petnajst let in je že tako dolgo zvest Ubuntu uporabnik (od Breezy Badger). Njegova zanimanja vključujejo odprtokodno aplikacijo, aplikacije za mala podjetja, integracijo Linuxa in Android ter računalništvo v navadnem besedilnem načinu.