Vakavasti, WWW oli se tekijä, joka mahdollisti Internetin leviämisen ulos korkeakouluista. Vaan eipä se ollut täydellinen, sillä kuvien ja tekstin selaaminen linkkien avulla ei ollut tarpeeksi, sivujen ulkonäköön päässyt puuttumaan tarpeeksi. WWW-sivuille haluttiin myös multimediaa ja interaktiivisuutta. Multimedia oli helppo toteuttaa, mutta interaktiivisuuden eteen jouduttiin jo tekemään töitä. Luotiin kaavakkeet (forms) ja CGI:t joiden avulla saatiin välitettyä tietoa WWW-palvelinkoneelle, mutta tämä ei ollut tarpeeksi.
Yrityksiä oli monia, mutta vasta Sun Microsystems -yhtiön Java- ohjelmointikieli tuotti tuloksen. Se toteutti haaveen WWW-sivulle liitettävistä, ajettavista ohjelmista.
Jos kaikki käytetyt ohjelmat olisivatkin WWW-sivuilla olevia appletteja, olisi verkkotietokone valmis. Valitettavasti applettien turvallisuus ei ole sitä luokkaa, että niitä uskaltaisi ajella ilman asianmukaisia varmistuksia. Tarvittavien turvallisuus- ja resurssienhallintaominaisuuksien lisääminen kieleen olisi tyhmää, sillä nehän ovat käyttöjärjestelmän, ei ohjelmointikielen, tehtäviä. Niinpä alettiin puhua verkkokäyttöjärjestelmistä tarkoitettaessa käyttöjärjestelmää, joka mahdollistaa resurssien käytön verkon yli, yleisemmin verkon yli hajautetun tietojenkäsittelyn.
Kun sitten vielä rakennetaan verkkokäyttöjärjestelmää tukevat, resursseiltaan PC:tä hieman köyhemmät verkkotietokoneet (Network Computers, NC), on tietotekniikan tulevaisuus käsissämme -- vai onko?
Tuskin kaikki ihmiset haluavat ohjelmoida kahvinkeitintään vaikkapa keittämään kahvin aamuisin hieman vahvemmaksi kuin iltaisin. Useimmista meistä olisi varmasti mukavaa, jos herätyskello osaisi jutella kahvinkeittimen kanssa sen verran, että kellon soidessa kahvi olisi valmista; ja television kanssa sen verran, että se aukeaisi samaan aikaan lempiaamuohjelmakanavalle; ja leivänpaahtimen kanssa sen verran, että se paahtaisi leivät aamiaiselle; ja tohveleiden kanssa sen verran, että ne olisivat kellon soidessa mukavan lämpimät.
Visioita voitaisiin jatkaa paljon pidemmälle, mutta jo ylläolevasta kuvitelmasta huomataan yksi puute nykyisissä järjestelmissä. Vaikka ne ovat kuinka muokattavissa, eri laitteet eivät kommunikoi keskenään. Jotta ne saataisiin kommunikoimaan toisilleen, ne pitäisi yhdistää toisiinsa, verkottaa ne. Verkon ei tietenkään tarvitse olla johdosta riippuvainen. Osa laitteista voisi olla kiinni toisissaan johdolla, osa radioteitse ja osa infrapunalinkillä. Selvää on, että käyttöjärjestelmän pitäisi tukea tätä verkottumista. Tämä onkin käsiteltävien verkkokäyttöjärjestelmien yksi tavoite.
Day was departing, and the darkening air
Called all earth's creatures to their evening quiet
While I alone was preparing as though for war...
Jo päivä painui, hämy illan lankes,
vapautti vaivoistansa kaikki luodut,
maan päällä jotka asuvat ja ovat.Ma yksin valmistauduin kestämähän
niin sotaa tien kuin säälin...
The Inferno of Dante, Canto II Danten Helvetti, Toinen laulu
inferno on Lucentin Bell-Laboratoriesin (BL) kehittämä hajautettu verkkokäyttöjärjestelmä. Inferno sai alkunsa, kun BL:n tutkijat tutustuivat Javaan. Idea oli heidän mielestään hieno, mutta toteutuksessa oli paljon toivomisen varaa. BL:n tutkijoiden mielestä pelkkä kieli ei riittänyt, vaan täyden hyödyn saamiseksi tuli rakentaa ajoympäristö ts. käyttöjärjestelmä, joka tukisi Javan kaltaista kieltä. Sittemmin tämä on osoittautunut oikeaksi ratkaisuksi myös Sunin tutkijoiden mielestä, sillä noin kuukauden Infernon julkistuksen (6.5.1996) jälkeen Sun ilmoitti (29.5.1996) tekevänsä vastaavaa systeemiä, JavaOS:iä. Näistä kahdesta kilpailijasta Inferno (tosin sovelluskehittäjän betana) on vieläkin (6.11.1996) ainut julkisesti saatavilla.
Infernon esi-isä on BL:n edellinen käyttöjärjestelmäluomus Plan 9, joka tehtiin lähinnä tutkimuskäyttöön tarkoituksena suunnitella Unix uudelleen (Bell-Laboratories tunnetaan paremmin puhelimen, laserin, Unixin, C- ja C++-ohjelmointikielten sekä AWKin keksijänä). Inferno onkin perinyt Plan 9:ltä paljon, ja seuraavat Plan 9:n versiot tulevat perimään joitakin ominaisuuksia Infernolta.
Infernon rakenteessa on kolme toimintaperiaatetta:
Emuloitu ympäristö | Natiivi ympäristö | |
Sovellus- kerros |
Sovellukset | Sovellukset |
Limbo ohjelmointikieli | Limbo ohjelmointikieli | |
Dis Limbon virtuaalikone | Dis Limbon virtuaalikone | |
Kernel- kerros |
Styx verkkoprotokolla | Styx verkkoprotokolla |
Inferno kernel emulointiympäristö |
Inferno kernel käyttöjärjestelmä |
|
Laitteisto- kerros |
Käyttöjärjestelmä | Laitteistoriippuvat ajurit |
Laitteistoriippuvat ajurit | Laitteisto | |
Laitteisto |
Inferno-järjestelmä koostuu yhdestä tai useammasta palvelimesta, jotka toimivat allekirjoittajana (signer), tiedostopalvelimena, MPEG-palvelimena ja postipalvelimena. Lisäksi järjestelmässä voi olla nolla tai useampia asiakaskoneita. Palvelimet ja asiakkaat voivat olla toisiinsa kytkettyinä heterogeenisen verkon läpi, jossa osa yhteyksistä voi olla ATM-, osa Ethernet- ja osa vaikkapa ISDN-linjalla.
Käyttöjärjestelmän mukana toimitetaan kehitysympäristö, johon kuuluu Limbo-kääntäjä ja debuggeri, ajonaikainen ympäristö Dis-virtuaalikoneineen, sekä joukko pieniä sovellusohjelmia mm. sähköpostin lukuun ja kirjoittamiseen, sekä WWW:n selaamiseen.
Kieli muistuttaa syntaksiltaan lähinnä C:n ja Pascalin sekoitusta, joskin Plan 9:n ohjelmointikieli Alef on jättänyt siihen jälkensä.
Limbo-ohjelma koostuu moduuleista. Moduulit koostuvat määritelyosasta, jossa esitellään moduulin toteuttamat (ulospäin näkyvät) funktiot, tietotyypit ja vakiot, sekä toteutusosasta, jossa on moduulin toteuttava ohjelmakoodi, sisäiset tietotyypit, tieto ja vakiot. Alla on pieni ohjelma, joka antanee kuvan kielestä. Ohjelma on lainattu Limbon manuaalista.
Edellä oleva ohjelma esittelee ja toteuttaa moduulin Command, joka toteuttaa
yhdistetyn 'Hello world'-ohjelman ja echo-komennon. implement
kertoo toteutettavan moduulin nimen. include-komennot sisällyttävät
sys- ja draw-moduulien esittelyt ohjelman nimiavaruuteen.
Moduulin esittely on module-lohkon sisällä. Esittelystä (ja
toteutuksesta) nähdään, että moduuli toteuttaa vain yhden funktion,
init()-alustusfunktion, joka tulostaa tutun tervehdyksen ja kaiuttaa
argumenttinsa. Argumenttina init()-funktiolle viedään viite ctxt
piirtoympäristöön, jota tässä ohjelmassa ei käytetä suoraan, sekä argv,
joka on lista merkkijonoista, jotka ovat komennolle annettuja argumentteja
(aivan kuten C:n main()-funktion toinen argumentti).
implement Command;
include "sys.m";
include "draw.m";
sys: Sys;
Command: module
{
init: fn (ctxt: ref Draw->Context,
argv: list of string);
}
# The canonical "Hello world" program, enhanced
init(ctext: ref Draw->Context, argv: list of string)
{
sys = load Sys Sys->PATH;
sys->print("hello world\n");
for (; argv!=nil; argv=tl argv)
sys->print("%s ", hd argv);
sys->print("\n");
}
init()-funktio lataa ensin Sys-moduulin tiedostosta, johon Sys->PATH osoittaa, ja tulostaa sitten ko. moduulin avulla tervehdyksen. Tämän jälkeen käydään for-silmukassa läpi merkkijonolista argv, ja tulostetaan jokainen sen alkio. Kuten jo ylläolevasta ohjelmasta näkyy, sisältää Limbo paljon enemmän valmiita perustietotyyppejä kuin Pascal tai C. Perustietotyyppejä ovat kokonais- ja liukuluvut, merkkijonot, tuplet eli n-parit, taulukot, listat ja kanavat. Lisäksi kielestä löytyvät vakiot, nimetyt tyypit, moduulit, abstraktit tietotyypit ja itsemääritellyt funktiot. Näistä ehkä kanavat ovat tuntemattomimpia.
Kanava on tyypitetty putki kahden prosessin välillä. Kirjastofunktioiden avulla saadaan kanavien päitä nimettyä ja näin luotua kanava esimerkiksi asiakaskoneen ohjelman ja palvelinkoneen palvelun välille. Jos kanavaan kohdistetaan luku- tai kirjoitusoperaatio, pysähtyy ohjelman ajo siihen asti, kunnes kyseinen operaatio on toteutettu. Tämä oikeastaan pakottaa käyttämään säikeitä ja prosesseja ohjelmissa. Kanavien operaatioita voidaan myös ryhmittää alt-lohkoon. Tällöin se operaatio, joka on ensimmäisenä suoritettavissa, toteutetaan.
Ehtorakenteita kielessä on if...else ja case, joka eroaa C:n vastaavasta. Toistolauseita ovat while, do...while ja for. Silmukoiden edellä voi olla tunnus, jonka avulla kyseisestä silmukasta voidaan poistua break tunnus-komennolla, tai aloittaa uusi iteraatio continue tunnus.
Varsinaisia muuttujia kielessä ei ole; on vain tunnisteita, jotka voivat olla sidottuja johonkin tiettyyn olioon tai viitteitä tietyn tyyppiseen olioon.
Vaikka kielen yhteydessä puhutaankin olioista, ei kieli ole varsinainen oliokieli. Kielestä puuttuvat olio-paradigmalle tärkeä käsite periytyminen.
Muistin suojaus on toteutettu Disin ja kääntäjän yhteistoimintana. Säikeen muistialue on jaettu koodisegmenttiin ja datasegmenttiin. Koodisegmentti sisältää joko tulkattua tai suorituksen aikana käännettyä ohjelmakoodia. Koodisegmenttiin osoittamiseen ei ole komentoja Disissä. Datasegmenttissä jakautuu moduulien globaalin tiedon alueeseen ja säikeen kehystiedon alueeseen.
Roskien keruu on hoidettu kahden tekniikan yhdistelmänä. Viitelaskulla (reference counting) pyritään poistamaan tieto muistista heti, kun viimeinen viite tietoon on hävinnyt. Sykliset tietorakenteet tuhotaan virtuaalikoneessa pyörivässä itsenäisessä prosessissa. Sykliset tietorakenteet kerätään 'mark-and-sweep'-prosessilla, joka käyttää neljän värin algoritmia vapauttamiseen.
Styx on pyritty luomaan siten, että sen välityksellä on tehokasta siirtää suuriakin tietomääriä pitkin verkkoa. Esittelyjärjestelmä BL:lla esimerkiksi käyttää televisioon liitetystä set-top-boxista käsin videopalvelimena toimivaa Silicon Graphicsin tietokonetta näyttäessään animaatioita (tarkoituksena on demota tilaajavideojärjestelmiä).
Järjestelmässä kulkevat Styx-protokollan viestit voidaan myös salata. Käytettävät salausmenetelmät ovat SHA ja RC4. Yhdysvaltain vientisäädökset ovat kylläkin rajoittaneet näiden menetelmien hyvyyttä Yhdysvaltain ulkopuolella. Salausmenetelmänä voi myös käyttää jotain omaa menetelmää. Myös SSL on tuettuna järjestelmässä.
Inferno tulee sisältämään Java-tuen, joten nähtäväksi jää, ovatko Infernon muut ominaisuudet niin paljon parempia kuin JavaPlatformin/JavaOSin, että Inferno valloittaa maailman, tai edes saa suuren palan verkkokäyttöjärjestelmäkakusta. Suuren puhelinyhtiön tausta taannee systeemille kuitenkin olemassaolon mahdollisuuden.
Kuva 3. Toisen käyttöjärjestelmän päällä toimivan JavaOS:in rakenne.
JavaOS muistuttaa tavallista käyttöjärjestelmää siinä, että
Sovelluskehittäjän hyöty kuvastuu hyvin sanonnasta 'Write Once, Run Anywhere'. Lisäksi hajautetut, uudelleenkäytettävät oliot (JavaBeans, joka tukee myös IIOP/CORBA:a) halventavat ja nopeuttavat sovellusten kehitystä.
Ylläpitäjän hyötyy lähinnä ohjelmien keskittyneisyyden takia niiden helposta päivityksestä ja versionhallinnasta.
Yhtiön kummallisen tutunoloinen tulevaisuuden suunnitelma on nähtävillä osoitteessa http://www.navio.com/.
Mikä on NetscapeONE:in ja Navion välinen yhteys jää vielä tällä hetkellä arvailujen varaan. Ilmeisemminkin Naviosta tulee yksi NetscapeONE:ia tukeva alusta.
Oracle ei aio itse valmistaa verkkotietokoneita, mutta sitäkin innokkaammin se aikoo varustaa ne omilla ohjelmistoillaan. Saatavilla on jo muillekin kuin NC:lle sopiva verkkoselain, sekä NCOS, joka on Oraclen versio verkkokäyttöjärjestelmästä. Valitettavasti NCOS:stä ei löydy julkista tietoa; se kuitenkin ajanee Java-ohjelmia.
Oracle on myös julkaissut Javalla kirjoitetun toimisto-ohjelmistopaketin. Ohjelmisto, HatTrick nimeltään, lienee ensimmäinen suuri Javalla toteutettu ohjelmisto.
Microsoft on kuitenkin hiljattain esitellyt PDA-mikroihin sopivan version käyttöjärjestelmästään, Microsoft Windows CE:n, joka julkaistaan 17.11.1996. Kuten Infernon, JavaOS:n ja Navion valmistajat, myös Microsoft julistaa oman käyttöjärjestelmänsä sopivan kaikkeen verkkotietokoneista, set-top-boxien kautta uuden ajan pelikonsoleihin ja Internet-puhelimiin.
NetPC vaikuttaa paljon NC:tä kalliimmalle ratkaisulle, mutta onhan NetPC:n valmistajilla median suosio takanaan. Nähtäväksi jää, riittääkö se enää, vai onko Microsoft jälleen onnistunut kääntämään takkinsa.