Tietokoneohjelmisto, jota kutsutaan myös ohjelmistoksi, on joukko ohjeita, tietorakenteita ja dokumentaatiota, jotka kertovat tietokoneelle, mitä tehdä ja miten suorittaa erilaisia tehtäviä. Ohjelmistoihin kuuluvat kaikki tietokoneen eri ohjelmat, kuten sovellukset ja käyttöjärjestelmä. Sovellukset ovat ohjelmia, jotka on suunniteltu suorittamaan tietty toiminto, esimerkiksi peli tai tekstinkäsittelyohjelma. Käyttöjärjestelmä (esim. Mac OS, Microsoft Windows, Android ja erilaiset Linux-jakelut) on ohjelmistokerros, joka tarjoaa perustan sovellusten suorittamiselle ja ohjaa laitteiston käyttöä, kuten näyttöä, näppäimistöä ja muistinhallintaa.

Mitä ohjelmisto on käytännössä

Ohjelmisto koostuu lähdekoodista, joka käännetään tai tulkitaan suoritettavaksi konekielelle, sekä tueksi tulevasta dokumentaatiosta ja resursseista (kuvat, datatiedostot, asetukset). Ohjelmiston tehtävä voi olla käyttäjän kanssa kommunikoiminen graafisen käyttöliittymän kautta, taustalla suoritettavien palvelujen tarjoaminen verkkopalveluissa tai suora laitteiston ohjaaminen.

Historia ja kehitys

Sanaa ohjelmisto alettiin käyttää laajemmin 1960‑luvulla korostamaan sen eroa tietokonelaitteistosta, joka on fyysisesti havaittavissa. Aikaisemmin ohjelmia syötettiin ja tallennettiin monilla eri tavoilla, kuten paperisilla reikäkorteilla, magneettilevyillä tai magneettinauhoilla. Myöhemmin ohjelmat jaettiin levykkeillä, CD‑levyillä ja lopulta Internetin myötä ladattaviksi paketeiksi ja pilvipalveluiksi. Ohjelmistokehitys on kehittynyt yksinkertaisista räätälöidyistä ohjelmista monimutkaisiksi järjestelmiksi, joissa merkittävä rooli on standardeilla, avoimella lähdekoodilla ja modulaarisuudella.

Firmware ja sulautetut järjestelmät

Sanaa firmware käytetään kuvaamaan ohjelmistoa, joka on tehty erityisesti tiettyä laitetta varten ja joka on yleensä tallennettu tietokoneen Flash-muistiin tai ROM‑sirulle. Firmware ohjaa suoraan laitteistoa ja tarjoaa perustason toiminnallisuutta; esim. CD-aseman laiteohjelmisto tai modeemin laiteohjelmisto ovat esimerkkejä tällaisesta toteutuksesta. Sulautetuissa järjestelmissä ohjelmisto on usein tiukasti sidottu laitteistoon ja suorituskyky-, turvallisuus- sekä energiavaatimuksiin.

Ohjelmistojen tyypit

  • Järjestelmäohjelmisto: sisältää käyttöjärjestelmät, laiteajurit ja muut perustoiminnot, joiden avulla laitteistoa ja sovelluksia voidaan käyttää.
  • Sovellusohjelmisto: loppukäyttäjälle suunnatut ohjelmat, kuten tekstinkäsittely, sähköposti, pelit ja taloushallinnon ohjelmat (sovellukset, tekstinkäsittelyohjelma).
  • Kehitystyökalut: kääntäjät, tulkit, IDE‑ympäristöt ja muut työkalut, joita ohjelmoijat käyttävät ohjelmiston tuottamiseen.
  • Kirjastot ja komponentit: uudelleenkäytettäviä ohjelmakomponentteja, joita sovellukset ja järjestelmät hyödyntävät.
  • Väliohjelmisto (middleware): ohjelmistokerros, joka yhdistää eri sovellusosat tai palvelut toisiinsa.
  • Sulautettu ohjelmisto: laitteeseen integroitu ohjelmisto, joka usein toteuttaa reaaliaikavaatimuksia ja laitekohtaisia rajapintoja.

Käyttöjärjestelmät ja niiden tehtävät

Käyttöjärjestelmät hoitavat keskeisiä tehtäviä, kuten prosessien hallintaa, muistinhallintaa, tiedostojärjestelmää, laiteajureita ja käyttöliittymää. Ne tarjoavat rajapinnan sovelluksille ja turvaavat resurssien hallintaa, moniajoa sekä käyttäjän ja laitteiston välistä kommunikointia. Esimerkiksi Mac OS, Microsoft Windows, Android ja Linux‑jakelut ovat käyttöjärjestelmiä, jotka eroavat arkkitehtuuriltaan, käyttöliittymältään ja sovellusympäristöiltään.

Ohjelmistokehitys ja elinkaari

Ohjelmiston kehittäminen sisältää useita vaiheita: vaatimusmäärittely, suunnittelu, toteutus (koodaus), testaus, käyttöönotto ja ylläpito. Testaus voi jakautua yksikkötestaukseen, integraatiotestaukseen, järjestelmätestaukseen ja hyväksymistestaukseen. Ohjelmiston elinkaari jatkuu usein käyttöönoton jälkeenkin korjauksilla, päivityksillä ja uusien ominaisuuksien lisäämisellä.

Erilaisia kehitysmallinnuksia ja prosesseja ovat muun muassa perinteinen Build and Fix, vesiputousmalli (Waterfall) sekä ketterät menetelmät (Agile). Nykyään DevOps‑käytännöt, jatkuva integraatio (CI) ja jatkuva toimitus (CD) yhdistävät kehityksen ja ylläpidon tiiviimmin, mikä nopeuttaa julkaisutahtia ja parantaa laatua.

Jakelu, lisenssit ja liiketoimintamallit

Ohjelmistot on aiemmin jaettu fyysisillä tallennusvälineillä, mutta nykyisin yleisiä jakelukanavia ovat verkkolataukset, sovelluskaupat ja pilvipalvelut (SaaS). Aikaisempia fyysisiä tallennusmuotoja olivat esimerkiksi reikäkortit, magneettilevyt ja magneettinauhat.

Lisenssimallit vaihtelevat suljetusta kaupallisesta lisenssistä avoimen lähdekoodin lisensseihin. Lisäksi on olemassa ilmaista ohjelmistoa (freeware), kokeiluversioita (shareware) ja yrityskohtaisesti räätälöityjä ratkaisuja. Lisenssit määrittävät, miten ohjelmistoa saa käyttää, muokata ja jakaa.

Tietoturva, laatu ja ylläpito

Ohjelmistot altistuvat haavoittuvuuksille, virheille ja väärinkäytölle, joten turvallisuus ja ylläpito ovat keskeisiä osa‑alueita. Päivitykset ja tietoturvakorjaukset (patchit) ovat tärkeitä ohjelmiston turvallisuuden ylläpitämiseksi. Ohjelmistoinsinöörien sekä testaajien tavoitteena on vähentää virheitä ja parantaa luotettavuutta, mutta täydellinen virheettömyys on käytännössä harvoin täysin saavutettavissa — siksi iteratiivinen kehitys, automaattinen testaus ja hyvät ylläpitokäytännöt ovat olennaisia.

Ohjelmistot ovat nyky-yhteiskunnassa keskeisiä monilla elämänalueilla: viestinnässä, liikenteessä, terveydenhuollossa, taloudessa ja viihteessä. Niiden suunnittelu korostaa usein muun muassa muutettavuutta (muokattavuutta), yhteensopivuutta ja käytettävyyttä, jotta ohjelmistot pysyvät ylläpidettävinä ja hyödyllisinä muuttuvissa tarpeissa.