Mitä teidän mielestänne tarkoittaa ohjelmien tai pakettien riipuuvuus? Osaisiko joku kuvata asiaa havainnollisesti hyvällä suomenkielellä.
Onko kyse ohjelmien hierarkisuudesta, vai siitä että ohjelmat rakentuvat jo valmiina olevista muista ohjelmista?
Mikä kernelin rooli on tässä suhteessa?
Onko kyse ohjelmien hierarkisuudesta, vai siitä että ohjelmat rakentuvat jo valmiina olevista muista ohjelmista?
Mikä kernelin rooli on tässä suhteessa?
Vastaukset 6
Vanhimmat
"Onko kyse ohjelmien hierarkisuudesta, vai siitä että ohjelmat rakentuvat jo valmiina olevista muista ohjelmista?"
Jälkimmäisestä vaihtoehdosta, (vaikka kyllä ohjelmasta ja sen asentamista paketeista voi hierarkisen havainnollisesn kuvankin piirtää. Näin voi esim. havainnollistaa ohjelman toimintaa.) eli jokin ohjelma vaatii toimiakseen muita ohjelmia. Otetaan esimerkiksi vaikka graafinen polttosofta, joka on itseasiassa vain graafinen GUI ja tarvitsee toimiakseen dekoodereita (jotka ovat siis itsenäisiä ohjelmia ja käytettävissä myös komentoriviltä), erilaisia plugineja, kirjastoja jne. Riippuvuudet jonkin ohjelman osalta voi tarkistaa paketinhallinan työkaluilla.
Riippuvuudet (eli tarvittavat paketit) ovat myös usein versioriippuvaisia ja ohjelmien asentelu paketinhallinnan ulkopuolelta saattaa aiheuttaa jossakin vaiheessa ongelmia, paketinhallinta 'särkyy'.
Joskus palstalla on esitetty kysymys miksi ohjelma X tai siihen kuuluvia paketteja on asennettu järjestelmään, vaikka ohjelmaa ei ole asennettukaan. Juuri näiden riippuvuuksien vuoksi, jokin toinen asennettu ohjelma tarvitsee toimiakseen ohjelmaa X.
Kernelin merkitys on sellainen, että jotkin ohjelmat vaativat vähintään tietyn kernelin version, tiettyjen moduulien lataamisen tai kääntämisen kerneliin.
En ole suunnitellut koskaan ohjelmia, mutta otetaan hatusta esimerkki.
Jos suunnittelisin esimerkiksi näytönsäästöohjelman joka muuttaisi asteittain näytölle jääneen nettisivun kellonkuvaksi jonka muoto ja väri muodostuisivat kyseisen nettisivun mukaisesti, niin miten itse ohjelma rakentuisi?
Itse idean koodaaminen olisi kai aika simppeli, mutta täällä linuksessako se pitäisi rakentaa jo muiden olemassa olevien ohjelmien avulla. Silloinhan pitäisi olla iso kirjasto jossa olisivat edellämainitut riippuvuudet ja ohjelmien tarkat kuvaukset muuttujineen. Vai miten? Onko tähän olemassa yleistä menettelytapaa? (miten ohjelman suunnittelu rakentuu)
Jos saisin ohjelman valmiiksi, niin mikä osa huolehtisi niistä riippuvuuksista tai miten tämä yksittäinen ohjelma sijoittuisi linuxen ohjelmahierarkisuudessa. Ymmärränkö oikein jos ajettelen että riippuvuudet ovat mitä tahansa toisia ohjelmia joita voisin käyttää aliohjelmina vaikka tuon näytönsäästämisen toteuttamiseen? Eikö vastaava periaate ole kaikissa ohjelmointiympäristöissä mm. windowsissa?
Linux eroaa Windowsista sikäli, että graafinen käyttöliittymäkin on selkeästi erotettu itse Linuxista. Käyttöliittymä on itseasiassa kuin mikä tahansa sovellusohjelma (toki hyvin monimutkainen) ja siksi myös helposti vaihdettavissa. Useimmat ohjelmat toimivat myös samalla periaatteella, eli ohjelmat ovat hyvin modulaarisia.
Kaikista GPL-lisenssin alaisuudessa julkaistavista ohjelmista on lähdekoodi ja dokumentointi saatavilla, joten oman ohjelman toimintojen 'ulkoistaminen' jo olemassa olevalle ohjelmalle ei ole ongelma. Esimerkiksi tiedoston konvertointi johonkin toiseen muotoon on omassa ohjelmassa helppo 'ulkoistaa': tiedosto lähetetään konvertoinnin hallitsevalle ohjelmalle syötteeksi, annetaan sen tehdä tehtävänsä ja luetaan syöte. Ohjelmointikielen kannalta kyseessä on vain 'ulkoinen aliohjelma'.
Tietenkin ohjelmoitaessa tarvitaan tietoa käyttöjärjestelmäkutsuista sekä rajapinnoista mutta näinhän se menee Windowsissakin.
"Ymmärränkö oikein jos ajettelen että riippuvuudet ovat mitä tahansa toisia ohjelmia joita voisin käyttää aliohjelmina vaikka tuon näytönsäästämisen toteuttamiseen? Eikö vastaava periaate ole kaikissa ohjelmointiympäristöissä mm. windowsissa?"
Riippuvuudet voivat olla ohjelmia tai kirjastoja, usein jonkun toisen kirjoittamaa koodia jota ohjelmasi tarvitsee toimiakseen.
Erona Windowsiin on, että Windowsissa ohjelmat ovat kuitenkin yleensä suljettua koodia ja niiden hyödyntäminen omassa ohjelmassa mahdotonta eikä edes sallittua. Windows ohjelma on itsenäinen paketti siinä mielessä ettei se voi hyödyntää muiden ohjelmien koodia käyttöjärjestelmää lukuunottamatta. Eli sen mitä siitä 'puuttuu' sen se löytää käyttöjärjestelmästä. Windowsissa ohjelmoija pääsee kiinni vain käyttöjärjestelmärutiineihin, availemaan erilaisia dialogeja ja kirjoittamaan tai lukemaan levyä jne.
Linuxissa ei tarvitse keksiä aina pyörää uudestaan vaan voi hyödyntää vaikka kokonaista toimivaa sovellusta osana omaa projektiaan käyttöjärjestelmä rutiinien lisäksi.
Linuxillekin on nykyisin jo graafisia ohjelmointiympäristöjä esim. Kylix ja Mono, jotka muistuttavat Windowsin vastaavia.
"Jos suunnittelisin esimerkiksi näytönsäästöohjelman joka muuttaisi asteittain näytölle jääneen nettisivun kellonkuvaksi jonka muoto ja väri muodostuisivat kyseisen nettisivun mukaisesti, niin miten itse ohjelma rakentuisi?"
En tiedä kuinka Linuxin näytönsäästäjä toimii ilmeisesti jonkinlainen 'moottori' erilaisten kuvavääristymienkin luomiseen löytyy, koska niitä ja erilaisiin matemaattisiin funktioihin perustuvia näytönsäästäjiä on paljon.
Periaatteessa näytönsäästäjä yksinkertaistettuna lienee toimii niin, että se käynnistää ennalta määrätyn sovelluksen annetun aikarajan täytyttyä, kun näppäimistöön tai hiireen ei ole koskettu. Tämän jälkeen kontrolloi ja valvoo ohjelmaa. Eli erillinen ohjelma loisi tuon vääristymän ja ohjelma päivittäisi kuvan vaikkapa minuutin välein, näytönsäästäjä odottaisi näppäimenpainallusta tai hiiren liikettä ja sen tultua käynnistäisi loginin ja pyytäisi salasanaa.
Yritän kysymyksilläni hahmottaa linux-käyttöjärjestelmän rakennetta nyt vain käytön ja asennuksien kannalta. Ohjelmien modulaarisuus ja ohjelmakirjastojen käyttö tuntuu periaatteena jotenkin ymmärrettävältä, mutta tietenkään en tiedä esimerkiksi mitään joistakin käyttöjärjestelmäkutsuista. Ohjelmien asennusvaiheessa joutuu joskus arvailemaan jo graafisen asennusvalikon kohdalla mitä -osia- pitäisi valita ja vielä sen jälkeen tulee riippuvuustarkistuksen jälkeen lista muista ohjelmista...yritin vain niinkuin sanoin hahmottaa asiaa.
Eri käyttöjärjestelmillä on varmaankin paljon samoja tehtäviä joiden kautta voisi niiden kokonaiskuvaa myös hahmotella. Ohjelmien keskinäiset suhteet, hierarkisuus tai riippuvuudet olivat se mihin nyt hyvien vastauksien jälkeen tyydyn.
Noin juuri ajattelin. Pitäisi olla siis jonkinlainen kirjasto missä olisi valmiita ohjelmia näytönsäästäjään liittyen, joiden avulla sen muuttujia hyväksi käyttäen rakentaisi oman ohjelman. Siinä kuvanvääristymä voisi olla se "oma" osa...jolle ei sitten saa kai patenttia:) Sitä että ovatko nämä riippuvuudet juuri viittauksia noihin valmiisiin ohjelmiin jäin miettimään. Minusta tuntuu jotenkin myös siltä, että nämä riippuvuudet tarkoittavat niin isoja ohjelmia, että olisi väärin sanoa niitä oman ohjelman aliohjelmiksi. En tiedä minäkään...