Linux jakelujen erot ohjelmoijan kannalta

Kokemukseni / tietoni Linuxeista ovat varsin vähäiset.
Aion kumminkin tehdä monikielisiä, cross-platform käyttöliittymiä QT:llä, nyt kun kohtapuolin QT on saatavissa myös LPGL lisenssillä.
OpenGL saattaa olla mukana tai sitten ei.

Käyttiksien teko vielä aloittamatta, mielessä ollut myös WxWidgets.
Ohjelmien tarkoitus toimia windowsissa, macissakin ja tietysti linuxissa.
Mutta onko ongelmia saada sama binaari toimimaan eri linux versioissa?

Jos asia vaati enemmälti paneutumista, linkit olis tervetulleita.
Olen käyttänyt Ubuntua puolisen vuotta, sen kanssa alan jo pärjäilemään.
Ohjelmointi kokemusta sinällään on aika lailla, mutta linuxin kanssa vielä vähän pihalla

Jakelun valinnalla ei oikeastaan ohjelmoijan näkökulmasta katsottuna ole merkitystä – käytä sitä mistä pidät. Ainut millä saattaisi olla merkitystä on eri ohjelmointityökalujen löytyminen jakelun pakettivarastosta.

Mutta onko ongelmia saada sama binaari toimimaan eri linux versioissa?
(Windows?) binaarit voi saada toimimaan esimerkiksi Winen avulla, en vain näe tälle toimintatavalle mitään syytä. Linuxille on C-kääntäjiä ja myös FreeBASIC-kääntäjäkin löytyy, jolla voi kääntää BASIC -sukusia ohjelmia.

Eri Linux-distrojen binaarien toiminnalla ei ole eroavaisuuksia, kunhan ne on käännetty samalle arkkitehtuurille.

Kyllä niissä jotain eroja tuppaa olemaan, vähän riippuen esimerkiksi käyttämistäsi kirjastoista.

Yleensähän pyritään resurssi- ja tietoturvasyistä suosimaan dynaamista linkitystä kirjastoihin. Tällöin ohjelmasi ei toimita mukanaan omia kopioitaan tarvitsemistaan kirjastoista, vaan olettaa, että nämä löytyvät sitten sieltä järjestelmästä, jossa ohjelmaa lopulta ajetaan.

Ongelmaksi tässä voi muodostua, mikäli tarvitsemastasi kirjastosta on liikkeellä useaa eri versiota, varsinkin jos nämä ovat vielä keskenään epäyhteensopivia.

Epäyhteensopivuus saattaa olla ihan ohjelmointirajapinnan tasolla, jolloin joudut koodaamaan ohjelmasta oman version eri kirjastoversioille tai esim. käyttämään C++:n esikäsittelijämakroja ja jotain älykästä kääntöjärjestelmää valitsemaan kulloinkin sopivan koodin käyttöön käännön aikana. Näitä ongelmia ei yleensä tunnetuissa ja vakiintuneissa kirjastoissa paljoa ole, mutta joissain kuitenkin on.

Helpompi tapaus on pelkkä binääriepäyhteensopivuus, joka lähinnä pakottaa kääntämään ohjelman aina kulloinkin käytössä olevaan kirjastoversiota vasten. Epäyhteensopivia binäärejä aiheuttavat esimerkiksi tietyt kirjastoihin kehityksen yhteydessä tehtävät muutokset, eri kääntäjäversiot, eri prosessoriarkkitehtuurit tai mahdollisesti käyttämiesi kirjastojen riippuvuuksina olevien kirjastojen eri versiot. Usein tunnetut ja paljon käytetyt kirjastot pyrkivät myös näitä välttämään, mutta virheitä sattuu, eivätkä kaikki binääritasolla epäyhteensopivuutta aiheuttavat tekijät edes ole kirjastojen kehittäjien hallittavissa.

Parhaaseen yhteensopivuuteen pääset, jos käytät vakaiksi tunnettuja ja hyvin dokumentoituja kirjastoja, ja julkaiset tuottamiesi ohjelmiesi lähdekoodit, jolloin käyttäjät ja jakelut voivat kääntää ne käytössä oleviin kirjastoversioihin varmasti sopiviksi. Valmiita binäärejä tunnetuille jakeluille voi myös halutessaan levittää, mutta ainakin minä pyrin yleensä niiden tarjolla ollessakin valitsemaan sen lähdekoodina levitettävän paketin.

"Kyllä niissä jotain eroja tuppaa olemaan, vähän riippuen esimerkiksi käyttämistäsi kirjastoista."
Mitä GUI kirjastoa kannattaa käyttää?
Samasta lähdekoodista pitäs saada linuxille, windowsille ja macillekin toimiva ohjelma,
ohjelmointikielenä suosin C/C++
CodeBlocks miellyttää…
QT? wxWidgets? jokin muu?

Eiköhän Qt liene fiksuin valinta. Trolltech ja nyttemmin Nokia ovat kovasti panostaneet siihen, ja sillä tuleekin aika natiivin näköisiä käyttöliittymiä samasta lähdekoodista. C++ on Qt:n äidinkieli. Nokialta on tulossa uusi QtCreator-IDE, jonka testiversioita onkin jo saatavilla. Sen kanssa voisi olla mukava tutustua Qt:hen.

[quote=“mattiaalto, post:4, topic:569”]"Kyllä niissä jotain eroja tuppaa olemaan, vähän riippuen esimerkiksi käyttämistäsi kirjastoista."
Mitä GUI kirjastoa kannattaa käyttää?
Samasta lähdekoodista pitäs saada linuxille, windowsille ja macillekin toimiva ohjelma,
ohjelmointikielenä suosin C/C++
CodeBlocks miellyttää…
QT? wxWidgets? jokin muu?[/quote]

Jos puhdasta C:tä suosit, GTK+ on myös suosittu. C++:lle Qt lienee oiva valinta. Lisäksi kasvavassa suosiossa näyttäisi olevan FLTK, joka on kirjoitettu C++:lla ja ohjelmien pitäisi kääntyä samasta lähdekoodista kaikille mainitsemillesi alustoille.

Minulla on sellainen käsitys, että GUI-kirjaston valinta on vähän makuasia samaan tyyliin kuin työpöytäympäristön valinta. (Usein GNOME-käyttäjät suosittelevat GTK+:aa ja KDE-käyttäjät Qt:tä.) Ehkä olisi viisainta kokeilla useampaa ja valita mikä niistä tuntuu omaan käyttöön sopivalta.