Mainos
Olet juuri ladannut ominaisuuspakatun päivityksen suosikki avoimen lähdekoodin sovellukseen. Kaikki toimii hyvin, ja käytät sitä muilla laitteillasi - joten on aika levittää se myös niille.
Paitsi, että uusi kiiltävä Linux-kannettava tietokone ei ole yhteensopiva Windows-asennuspaketin kanssa. Entä Android-tablet-laitteesi? iPhone? PS4? Miksi et voi vain ottaa sitä ohjelmistoa ja käyttää sitä missä haluat? Tutkitaan joitain erilaisia esteitä unelmalle: "Osta kerran, juokse mihin tahansa".
Ohjelmistokehitys ja käyttöjärjestelmäarkkitehtuuri
Ymmärtäminen, miksi ohjelmisto ei toimi kaikissa käyttöjärjestelmissä, vaatii vähän (lupaan vain) vähän tietoa siitä, miten ohjelmisto tehdään.
Ohjelmistokehitysprosessi
Hyvin perusteellisessa ohjelmistokehitysvirrassa työpöydälle, palvelimelle ja mobiililaitteelle (ts. ei verkko Ohjelmointi vs. Web-kehitys: Mikä on ero?Saatat ajatella, että sovellusohjelmoijat ja web-kehittäjät tekevät saman työn, mutta se on kaukana totuudesta. Tässä on tärkeimmät erot ohjelmoijien ja web-kehittäjien välillä. Lue lisää ), ohjelmoija:
- Kirjoita jotkut koodi yhdeksi tai useammaksi tiedostoksi.
- Koota koodi jotain, jonka tietokone voi suorittaa.
- Testata varmistaaksesi, että ohjelma toimii odotetulla tavalla.
- Pakkaa ja jaa / ota käyttöön ohjelmisto.

Se on yhdistelmä ensimmäistä ja toista vaihetta, joka koskee meitä täällä. Prosessi kokoaminen ohjelmiston muuttaminen tai sen muuttaminen koodista tietokoneen ymmärtämiin ja nolliin (konekieli) on monimutkaista. Emme pääse siihen yksityiskohtaisesti, mutta on hyödyllistä ymmärtää korkealla tasolla mitä tapahtuu.
OS-arkkitehtuuri
Yksi tärkeä asia ymmärtää on, että käyttöjärjestelmä ei ole yksi kokonaisuus. Pikemminkin se koostuu kerroksista ohjelmistoja.
Käyttöjärjestelmän ytimet
Käyttöjärjestelmä ydin vastaa viestinnästä tietokoneen laitteistojen kanssa. Ohjelmisto välittää komennot ytimeen, joka puolestaan antaa laitteistolle komentoja (esimerkiksi) tiedoston lukemiseksi kiintolevyltä tai piirtää ikkunan näytölle. Periaatteessa se koordinoi kaikki tiedot (riippumatta siitä ovatko ne tallennettua tietoa, laskelmia tai käyttäjän syöttämiä tietoja) laitteiston ja ohjelmiston välillä. Ydin antaa kaiken tämän toiminnallisuuden ohjelmiston käyttöön kautta järjestelmän puhelut.

Jokaisen käyttöjärjestelmän ydin toteuttaa järjestelmäkutsuja eri tavoin sen suhteen, mitkä ovat käytettävissä, mitä heille kutsutaan tai mitä vaihtoehtoja he käyttävät. Seurauksena on, että ohjelmiston on otettava huomioon kunkin kohdistamansa käyttöjärjestelmän ytimen tukemat järjestelmäpuhelut. Järjestelmäpuhelulla, jota käytät tietojen lähettämiseen GPU: lle Linuxissa, voi olla eri nimi, annettava tietoluettelo tai molemmat Windowsissa. Tarkkaa kutsua ei ehkä edes ole siellä ollenkaan.
Järjestelmäkirjastot
Ohjelmisto ei useissa tapauksissa soita suoraan ytimeen. Sen sijaan se vaatii järjestelmäkirjastojatai perustoimintojen kokoelmat. Kirjastot ovat olemassa (esimerkiksi) jokaisen ohjelman, joka tallentaa tiedostot kiintolevylle, ei tarvitse kirjoittaa toimintoa niin tehdä. Sen sijaan se yksinkertaisesti linkkejä järjestelmäkirjasto ja käyttää olemassa olevaa toimintoa. Linuxin GLibC-kirjasto on erinomainen esimerkki, samoin kuin Win32 API: n tai .DLL-tiedostot Macin / Järjestelmä / kirjasto-hakemiston sisältö Kuinka päästä OS X Library -kansioon ja miksi se on käteväSuurin osa OS X Library -kansioista on parasta jättää yksin, mutta on hyödyllistä tuntea tapaasi käyttäjän kirjastossa ja sen ympäristössä. Lue lisää .

Järjestelmäkirjastot toimivat eräänlaisena kääntäjänä sovellusten ja ytimen välillä rutiinitehtävissä. Sovellukset tekevät toimintopuhelut näihin kirjastoihin, jotka käsittelevät paljon matalan tason yksityiskohtia. He voivat myös soittaa järjestelmän ytimeen mukavuuden vuoksi. Kuten olet ehkä arvata, tämä tarkoittaa, että nämä kirjastot on kirjoitettu tietylle ytimelle, joten niitä ei voida käyttää käyttöjärjestelmissä, joissa on eri ytimiä.
Käyttöjärjestelmän suoritusotsikot
Viimeinen yleisen ohjelmiston este on käyttöjärjestelmien suoritettavien tiedostojen muoto. Käyttöjärjestelmä odottaa sen käyttämien tiedostojen seuraavan tiettyä binaaritiedostomuoto Kaikki mitä sinun tarvitsee tietää tiedostomuodoista ja niiden ominaisuuksistaKäytämme sanatiedostoa keskenään: musiikki, kuva, laskentataulukko, diaesitys ja niin edelleen. Mutta mikä tekee tiedostosta joka tapauksessa "tiedoston"? Yritetään ymmärtää tämä olennainen osa tietojenkäsittelyä. Lue lisää . Esimerkiksi ELF-tiedostot, jotka toimivat käyttöjärjestelmissä, kuten Linuxin ja FreeBSD: n on määritettävä tiedoston tietyt ominaisuudet tietyissä tavuissa, kuten alla esitetään kuva.

sovelluksen binaariliitäntä (ABI) osoitettu kyky on erityisen tärkeä. Prosessorin, ytimen ja järjestelmän libaarioista saatavien puhelujen yhdistelmä, ABI on samanlainen kuin sovellusohjelmointirajapinta (API) siinä, että se määrittelee kuinka kaksi ohjelmaa kommunikoivat keskenään. Mutta sovellusliittymä on jotain, jota ohjelmoijat (ihmiset) käyttävät lähdekoodissa osoittamaan kaksi ohjelmistopalaa pitäisi puhua toisilleen. ABI antaa heidän tosiasiallisesti tehdä niin, kun ohjelmisto on käännetty ja suoritettu. Jokainen käyttöjärjestelmä toteuttaa tietyn ABI: n, joka voi muuttua tai muuttua saman käyttöjärjestelmän versioiden välillä.
Yleensä käyttöjärjestelmät toteuttavat oman ABI: n, joka määritetään prosessorin tyypin, ytimen ja mahdollisten standardijärjestelmäkirjastojen yhdistelmällä. Mutta joskus käyttöjärjestelmä toteuttaa useita. FreeBSD tukee esimerkiksi Linux-binaareja, koska se tarjoaa Linux ABI: n lisäyksenä FreeBSD-ytimelle (Linux-ytimen sijasta). Tämä on erilainen kuin virtualisointiohjelmat Mikä on virtuaalikone? Kaikki mitä sinun tarvitsee tietääVirtuaalikoneiden avulla voit käyttää muita käyttöjärjestelmiä nykyisellä tietokoneellasi. Tässä on mitä sinun pitäisi tietää heistä. Lue lisää kuten VMWare tai VirtualBox, jotka käyttävät ohjelmistoja simuloimaan koko konetta (laitteisto ja kaikki). Seurauksena on, että tämäntyyppinen ABI-yhteensopivuus on nopeampaa, mutta ylläpito vaatii paljon enemmän. Siksi se on kuitenkin harvinaista Microsoft näki arvon äskettäin Ubuntu on nyt saatavana Windows-kaupastaWindows Insiders voi nyt ladata ja asentaa Ubuntun Windows 10: ään. Tämä tuo Linuxin ja Windowsin yhteen epäpyhään unioniin, jonka muutama koskaan kuvitellut elävänsä tarpeeksi kauan todistaakseen. Lue lisää tekemällä sitä.
Poikkeus: tulkittu ohjelmisto
Edellä esitetyn perusteella olemme oppineet, että kehittäjät kirjoittavat ohjelmistoja yhdelle ja vain yhdelle kohdejärjestelmälle. Paitsi silloin, kun he eivät. On monia sovelluksia, jotka voit ladata ja suorittaa Macilla, kopioida ja suorittaa Windowsissa ja ehkä jopa kopioida uudelleen ja ajaa Linuxissa ilman ongelmia. Kuinka tämä on mahdollista?
Makuusin tähän mennessä?
Kuten osoittautuu, siellä on luokka ohjelmistoja, jotka näyttävät pinnalta kuin "vain juoksevat kaikkialla". Voit ladata ja suorittaa sen missä tahansa tuettu alusta - avainsana on ”tuettu”. Itse olet lataamassa sovelluksen lähdekoodin, kun taas toinen sovellus (jäljempänä tulkki) on eräänlainen lähdekoodin suorittaminen suoraan reaaliajassa. Tämä on yksinkertaistamista, joten tarkastellaan tarkalleen, miten tämä toimii parin kielen kanssa.
Jaava
Kun Java julkaistiin ensimmäisen kerran, lupaus oli (kirjaimellisesti) ”kirjoittaa kerran, aja minne tahansa”. Ajatuksena oli luoda sovelluksia Java-toimintojen avulla tiedostojen tallentamiseksi, laskelmien tekemiseksi tai sovelluksen luomiseksi ikkuna. Sitten eräs Java Runtime Enviornment (JRE) jokaiselle tuetulle tietokoneympäristölle suoritettaisiin koodi ja käännetään nämä alkuperäisiin käyttöjärjestelmän toimintoihin. Java-temppu on siis, että se ei toimi "suoraan" käyttöjärjestelmässä. Se toimii osassa JRE-nimistä Java-virtuaalikone ja juuri se toimii käyttöjärjestelmässä.
Lisäämällä tämä ylimääräinen ohjelmistokerros sovelluksen ja käyttöjärjestelmän väliin, Java antaa sinun keskittyä joukkoon toimintoja, jotka ovat samat kaikissa käyttöjärjestelmissä. Sanot Java: lle, mitä haluat tehdä, ja annat järjestelmän JVM: n huolehtia siitä, miten se todella tehdään. Alla oleva kuva näyttää tämän toiminnassa missä JIDE-ohjelmiston Java Desktop Application Framework näyttää saman sovelluksen Macille (ylhäällä), Windowsille (vasen keskellä), ”puhdas Java” (oikealla keskelle) ja Linuxille (alhaalta).

Java-ohjelmat eivät tarkkaan "käännä" itseään reaaliaikaisesti. Pikemminkin Java-kääntäjä tekee niistä ”tavukoodit”. Voit ajatella tavukoodia puolivalmiina ohjelmana. Kun kehittäjä julkaisee sovelluksen, se kootaan niin paljon kuin se voi olla tietämättä, mitä käyttöjärjestelmää se käyttää. Kun tosiasiallisesti käynnistät sen, JVM “leipoo sen loppuun asti” sopimaankseen isäntäjärjestelmän tiettyihin toimintoihin.
pytonkäärme
Suosittu tulkittu kieli on pytonkäärme 5 syytä, miksi Python-ohjelmointi ei ole hyödytöntäPython - Rakastat sitä tai vihaan sitä. Saatat jopa kääntyä päästä toiseen kuin heiluri. Siitä huolimatta, Python on kieli, josta on vaikea olla ambivalenttia. Lue lisää . Kun suoritat Python-komentosarjan, Python-tulkki kääntää koodin käyttöjärjestelmän ohjeiksi. Se voi toimia myös samalla tavalla kuin Java: kun "tuo" -koodia sovelluksesi ulkopuolelta, se on koottu tavukoodiksi ensimmäisen kerran käydessäsi. Sitten tulkki tietää, onko myöhempien ajojen aikana alkuperäinen koodi muuttunut, jolloin se kääntää sen uuteen tavukoodiin.
Tämän "on-demand" -suorituksen hieno sivutuote on, että voit käyttää tulkkia kehittämään skriptejäsi vuorovaikutteisesti. Kirjoita yksinkertaisesti komentoriville ”python”, jolloin tulkki käynnistyy. Voit suorittaa koodin ja nähdä tulokset heti.

Tämä tarkoittaa, että kehittäjät voivat leikkiä ja mukauttaa asioita "elävästi". Kun sitten koodirivi tekee haluamansa, kopioi ja liitä se skriptitiedosto (joka on paljon tehokkaampi kuin ”code-compile-test” -sykli, jonka tulkitsemattomien kieliohjelmoittajien on tehtävä).
Vaikka ohjelmisto on sama, se ei todennäköisesti ole
Valitettavasti käyttäjille teknologiateollisuus ei ole kehittänyt todella “universaalia” muotoa. Ja se ei ehkä koskaan tee niin. Tämän tyyppisten standardien käyttöönotto johtaa usein ”vähiten yleiseen nimittäjään” ratkaisuun, joka sisältää myönnytyksiä kaikkien hyväksynnän saamiseksi.
Mitä mieltä sinä olet? Haluaisitko mieluummin yleisesti yhteensopivan ohjelmiston, vaikka se tarkoittaisi, ettei se ole niin hyvä? Vai oletko käymässäsi käyttöjärjestelmässä kunnossa, etkä kiinnosta muiden käyttöympäristöjen sovelluksia? Kerro meille alla kommentteissa!
Kuvapisteet: Masterchief_Productions / Shutterstock
Aaron on työskennellyt kyynärpäässä liiketoiminnan analyytikkona ja projektipäällikkönä viidentoista vuoden ajan, ja hän on ollut uskollinen Ubuntun käyttäjä melkein yhtä kauan (Breezy Badgerin jälkeen). Hänen kiinnostuksen kohteisiinsa kuuluvat avoimen lähdekoodin, pienyrityssovellukset, Linuxin ja Androidin integrointi sekä tietojenkäsittely pelkän tekstin tilassa.