Mistä johtuu että Linux:in eri distrot ovat epäyhteensopivia keskenään?
Epäyhteensopivuus johtuu lähinnä siitä, että distroissa on eroja.
Jos haluat parempia vastauksia, tarkenna kysymystä vähän. Mitä yhteensopivuutta tarkoitat?
No esimerkiksi jotkut ohjelmat vaativat uudelleen kääntämisen kun siirytään distrosta toiseen.
Eihän siinä tarvitse välttämättä edes siirtyä distrosta toiseen, vaan saman distron eri versioiden välillä saattaa olla sama tilanne.
No joo, mutta mistä se johtuu?
Johtuu varmaan samasta syystä kuin ettei kaikki meistä vain oo yhteensopivia Googlen kans. Tosin kai sen nyt voisi päätellä ihan itsekin, että koodi muuttuu ja kehittyy ja aikanaan erot muodostuvat niin suuriksi, ettei vanha ja uusi koodi osaa enää keskustella toistensa kanssa. (Saati eri ympäristöissä käännetyt binäärit.)
Suurin ongelma yhteensopivuudessa on jaetut kirjastot. Distroissa on käytössä eri versioita, eikä binääriyhteensopivuuteen versioiden välillä ole panostettu. Linux-ohjelmat ovat pääsääntöisesti avointa lähdekoodia, joten ne voidaan kääntää uudelleen aina tarvittaessa.
Windows-puolella tilanne on toinen, sillä ohjelmat jaetaan lähes poikkeuksetta binääreinä. Sen takia binääriyhteensopivuus on hyvin tärkeää, ja sen ylläpitoon kuluukin huomattavan paljon resursseja. Vielä nykyäänkin Windowsin 32-bittiset versiot tukevat ikivanhoja DOS-ohjelmia.
Linux on kovin yhteensopiva distrosta toiseen mielestäni. Sama koodi kääntyy lähes joka paikassa ja jopa eri arkkitehtuureillakin. Binäärit ovatkin sitten eri asia.
Ensimmäinen asia binääreissä on pacman, dpkg ja muut pakettimanagerit. Vaikka kaikki paketit ovatkin pakettuja tidostopuita, niissä on lisäominaisuuksia. Jokainen ohjelma tulee paketoida erikseen eri jakelulle, jos haluaa binääriyhteensopivuuden distrolle.
Toinen ominaisuus on jo mainitut jaetut kirjastot. Ne on voitu kääntää eri optioilla, niistä olla eri binääriepäyhteensopivia versioita ja niin edelleen. Jos kuitenkin haluaa käyttää jotain suljettua binääriä joka toimii jossain, voi kirjastoja kääntää ja antaa LD_PRELOAD muuttujaan polun ja ladata ne sieltä. Jaetut kirjastot ovat hieno juttu. Parilla kilotavulla saa graafisen ohjelman aikaseksi binäärissä. Saman verran mikrokontrollerista menee tilaa yksinkertaisen grafiikkanäytön ajurissa noin vertailukohteeksi (AVR ja KS1080).
Kolmas on valinnan vapaus. Ohjelmille ei tarjota kirjastoja ja ympäristöjä. Siksi se kannattaa laittaa pakettiin, joka pyytää sitten asentamaan lisää paketteja.
Ääriesimerkkinä läppärissäni esimerkiksi ei ole pahemmin mitään puunhalailuja ja siinä pyörivät vain ne softat, jotka olen itse jaksanut virittää toimimaan. Tosin sen käyttötarkoitus on jokin muu kuin kissavideoiden katselu. Ja tuossakin laitteessa olen saanut kääntymään kaiken tarpeellisen. Jokin D-bus, KDE härveliviritys itkisi lujaa, kun ystävällinen ikkanamanagerini sanoo, että olet tuossa ja tuon kokoinen, äläkä yritä hölmöillä.
Neljäs paikka millä Linux on rikki on vain pöljät jakelut. Ubuntussa levisi oma järjestelmän tarkkailuskripti, kun xsetroot ei toimikaan. Jokin skripti lahosi Arch linuxissa, koska ifconfig heivattiin pois. Mutta jokaisessa ympäristössä on omat venkulointinsa ja se minne virheet kirjataan on toisinaan mystistä.
On muuten sitten ronkeleitakin softia. Ghdl tarvitsee jonkin version GCC:stä toimiakseen ja jotta VHDL simulaatioon voi lyödä C kielen palikoita, olisi syytä kääntää myös tällä samalla kääntäjällä.
Eli koska Linux taipuu niin moneen ympäristöön ja alustaan ja monet jutut ovat käännettävissä eri jakeluihin, on ihme että se ei ole enempää rikki. Rullaavat jakelut ovat hankalampia, kuin staattiset. Rullaavissa ohjelman voi joutua kääntämään monta kertaa sen elinaikana. Mutta parasta tässä on, että jos ympäristö toimii pöljästi, vaihda toiseen. Itse ajan tiettyihin asioihin orientoituneita distroja (elektroniikka, turvallisuus, videojutut ja verkon reititys) ja sen lisäksi työpöydällä Archia, läppärissä Gentoo. Kaikille kummallista kyllä on omista ohjelmistani lähdekoodipaketit omalla serverilläni ja ne soivat joka paikassa. Turvallisessa ympäristössä turhanaikainen säätö on vähentynyt merkittävästi.
Toivottavasti osuin edes yhteen ongelmaasi vastaamaan.
vuokkosetae kirjoitti:
Neljäs paikka millä Linux on rikki on vain pöljät jakelut. Ubuntussa levisi oma järjestelmän tarkkailuskripti, kun xsetroot ei toimikaan. Jokin skripti lahosi Arch linuxissa, koska ifconfig heivattiin pois. Mutta jokaisessa ympäristössä on omat venkulointinsa ja se minne virheet kirjataan on toisinaan mystistä.
Ilmeisesti puhut nyt siitä, että sinun omat skriptisi ovat hajonneet. Mielestäni siitä voit syyttää vain itseäsi: jos tarvitset tietyn version ohjelmasta tai kirjastosta, älä päivitä äläkä varsinkaan poista tarpeellista ohjelmaa. Toki ei se ifconfig olisi ikuisesti toiminutkaan enää muuten päivitetyssä ympäristössä, mutta ei se silti itsestään hävinnyt koneelta.
Sinänsä ifconfigin häviäminen ei varmasti ollut yllätys, kun uudempi iproute2 on ilmestynyt jo vuonna 1999 ja näiden vaihdoksesta on Archissa muistaakseni paljon keskusteltu ja hyvin tiedotettu. Jos on tarpeeksi taitava kirjoittamaan omia skriptejä, pitäisi olla myös tarpeeksi taitava ylläpitämään niitä Linux-jakelujen kehittyessä. Tavallista käyttäjää tällaisen ongelman ei pitäisi koskea lainkaan.
Tilanne ei periaatteessa ole sen kummempi kuin sekään, että QB ei toimi uusissa Windowsin versioissa, mutta Linuxissa päivityksiä tulee tiheästi pienissä erissä ja – toisin kuin Windowsissa – niistä voi päästä yli kääntämällä ohjelmat uudestaan.
vuokkosetae kirjoitti:
Rullaavat jakelut ovat hankalampia, kuin staattiset.
Jos mielestäsi on hankalaa nimenomaan joutua kääntämään ohjelma uudestaan, ehkä näin. Kuitenkin monessa muussa asiassa rullaavat jakelut ovat parempia: ohjelmista saa uusia versioita nopeammin, ja jakelun versiosta seuraavaan päivittämisestä ei tarvitse huolehtia. Esimerkiksi Ubuntussa taas pakettien asentaminen oli usein hidasta ja puolivuosittain tapahtuva jakelun versiopäivitys oli vaivalloinen ja aiheutti yleensä ongelmia.
-tossu- kirjoitti:
Suurin ongelma yhteensopivuudessa on jaetut kirjastot. Distroissa on käytössä eri versioita, eikä binääriyhteensopivuuteen versioiden välillä ole panostettu. Linux-ohjelmat ovat pääsääntöisesti avointa lähdekoodia, joten ne voidaan kääntää uudelleen aina tarvittaessa.
Joskus kirjastot ovat muuttuneet vain vähän, jolloin epäyhteensopiviakin ohjelmia voi saada ajettua tekemällä sopivat symlinkit kirjaston väärään versioon. :)
Tottahan metabolixin ajatukset ovat. Joskus pääsee helpolla, joskus vaikealla. Useimmiten joku muuTM rikkoo vain jotain ja sitten itse joutuu säätämään tai uudelleen kääntämään, joka on normaalia sellaisissa ympäristöissä jotka eivät pyöri kuolleella koodilla.
Aihe on jo aika vanha, joten et voi enää vastata siihen.