Alustariippumattomuus

**Alustariippumattomuudella** () tarkoitetaan ohjelmointikieltä tai sovellusohjelmaa, joka ei ole sidoksissa tiettyyn alustaan (tietokonelaitteistoon tai käyttöjärjestelmään).

Toisaalta alustariippumaton ohjelmointikieli tai sovellus ei tarkoita, että siitä olisi olemassa toteutus kaikille mahdollisille käyttöjärjestelmille, vaan sitä, että kielen kääntäjän, tulkin tai sovellusohjelman toteutuksessa ei ole laitteistoalustaan tai käyttöjärjestelmään sidottuja ominaisuuksia, 
tai ne on toteutettu erikseen kullekin alustalle siten, että niiden toiminta on mahdollisimman samanlaista kaikissa ympäristöissä.

Alustariippuvaisia piirteitä ovat esimerkiksi monitavuisten lukujen tavujärjestys, säikeiden (jos niitä on) ja prosessien toteutus, hakemistoerottimet ja mahdolliset levyasematunnukset, grafiikkakirjastot ja useimmat järjestelmäkutsut, joita ohjelma voi
suorittaa. Näin esimerkiksi yksinkertainen tekstinkäsittelyohjelmisto voidaan toteuttaa helpohkosti alustariippumattomasti, kunhan huomioidaan eri käyttöjärjestelmissä olevat rajoitukset hakemisto- ja tiedostonimille sekä levyasematunnuksille (jos sellaisia käytetään).

## Esimerkkejä
Ohessa kuvitteellinen esimerkki pseudokoodina alustaan sidostusta ja alustariippumattomasta ohjelmakoodista:

```text
# sidottu alustaan, koska hakemistoa /proc/sys/loadavg ei löydy koskaan Windows- tai Mac-järjestelmistä
 def get_system_load()
     info_path = '/proc/sys/loadavg'
     load_avg0 = get_current_loads(info_path)
     now = time.time()
     sys.sleep(1)
     load_avg1 = get_current_loads(info_path)
     elapsed = time.time()-now
     return load_avg1-load_avg0/elapsed
```



```text
# laitteistoalustariippumaton, käyttää kielen omaa funktiota, joka on
 # toteutettu erikseen eri käyttöjärjestelmille
 def get_system_load()
     load_avg0 = system.loadavg()
     now = time.time()
     sys.sleep(1)
     load_avg1 = system.loadavg()
     elapsed = time.time()-now
     return load_avg1-load_avg0/elapsed
```


Useimmat ohjelmointikielet ovat nykyään alustariippumattomia, kun taas
sovellukset toteutetaan tyypillisesti vain yhdelle tai muutamalle
suosituimmalle käyttöjärjestelmälle. Toisaalta useimmat
Microsoftin suosituimmatkin sovellukset ovat saatavissa vain
Windows-järjestelmiin, joka rajoittaa samalla laitteistoalustan PC-koneisiin.

## Historiaa
Alustariippumattomuus ei ole verrattain uusi asia. Niin sanottua P-koodia käytettiin
vuodesta 1966 - 1980 luvulle ennen kuin IBM PC koneita oli. Tietotekniikan
historian alkuvaiheissa kaikki ohjelmat olivat usein paitsi
käyttöjärjestelmäriippuvaisia, myös hyvin sidottuja tiettyyn
tietokonearkkitehtuuriin tai jopa tietokonemalliin. Myöhemmin
käyttöjärjestelmä toimi yhä enenevässä määrin abstraktiokerroksena
laitteelle ja salli siten ohjelmoinnin useille erilaisille
tietokoneille, kunhan niissä toimi sama käyttöjärjestelmä.

Eräs ehkä merkittävimmistä syistä WWW:n nopeaan laajenemiseen ja
suosioon oli juuri sen alustariippumattomuus - yksi Tim Berners Leen 
motiiveista WWW:n kehittämiseen olikin juuri dokumenttien helppo
vaihto eri käyttöjärjestelmien välillä. Sen avulla voidaan tuottaa ja
lukea dokumentteja www-selaimen avulla, joita on saatavilla kaikille
yleisille käyttöjärjestelmille aina tietokoneista
matkapuhelimiin asti.