Windows on perinteisesti taaksepäin yhteensopiva aiempien versioiden kanssa, joskin rajoitteita on syntynyt operoinnista eri suoritinarkkitehtuureilla. Loppuvuodesta julkaistava Windows 11 laajentaa yhteensopivuutta Android-appeihin, mutta joidenkin ohjelmistojen kohdalla tuki päättyy. Yhteensopivuutta koskevien ongelmien ennakointi vaatii teknologian syvällistä tuntemusta. Aiheesta on kirjoitettu vähän, joten kokosimme kaksiosaisen tietopaketin. Ensimmäinen osa käsittelee vanhojen Windows-sovellusten toimivuutta Windows 11:sta. Toinen osa tarkastelee Android- ja Linux-yhteensopivuutta sekä Windowsin ARM-versiota.

Ohjelmiston toimivuuden tärkein ja tyypillisesti riittävä edellytys on binääriyhteensopivuus käyttöjärjestelmän ja tietokoneen suoritinarkkitehtuurin kanssa. Varhaisimmat Windows-ohjelmistot, joihin törmääminen suurissa organisaatioissa ei ole täysi mahdottomuus, toimivat 16-bittisellä Intel x86-arkkitehtuurilla. Joissain tapauksissa 16-bittinen osa piilottelee pääasiassa 32-bittisen ohjelmiston osana. Se on silti huomattavasti harvinaisempaa kuin kokonaan 32-bittinen koodi, joka elää yhä 64-bittisen (x86-64) rinnalla. Siirtymä 64-bittisyyteen alkoi yli 15 vuotta sitten ja 32-bittisiä suorittimet poistuivat nopeasti markkinoilta. Silti esimerkiksi osaa Microsoft Office -laajennuksista ei ole päivitetty yhteensopivaksi 64-bittisen Office-version kanssa.

Bittisyyteen liittyvät rajoitteet ovat pääasiassa käyttöjärjestelmä- ja sovellustasolla. X86-64-suorittimet kykenevät yhä ajamaan paitsi 32- myös 16-bittistä koodia. Tämä tosin edellyy suoritinta siirtyvän yhteensopivuustilaan. Siirtyminen tilojen välillä on pääsyy, miksi 32- ja 64-bittinen koodi eivät vaikkapa Office-laajennusten tapauksessa kykene toimimaan yhdessä.

Vanhat Windows- ja .NET-ohjelmistot

Windows 11 toimii pääasiassa x86-64-alustalla, mutta ARM nousee teknisesti aiempaa tasa-arvoisemmaksi. Kaupallisesta tasa-arvossa jäädään kauemmas, koska ARM-version saatavuus rajoittunee OEM-valmistajiin. Toisin sanoen versio voidaan toimittaa vain esiasennettuna ARM-arkkitehtuuria käyttäviin pieniin, tyypillisesti edullisen hintaluokan mobiililaitteisiin. Suorituskykyiset Windows-tabletit perustunevat yhä Intel-arkkitehtuuriin, joskin laitevalmistajilla tulee olemaan täysi vapaus poiketa tähän astisesti konventiosta. (Keskitymme tässä tarkastelemaan käyttöjärjestelmän ja ohjelmistojen yhteensopivuutta. Mutta selvyyden vuoksi täsmennettäköön Windows 11:n tukevan vain uudehkoja x86-64-suorittimia alkaen 2017 markkinoille tulleesta Intelin 8. sukupolvesta.)

Piilosanoma edellä on Windows 10:n olevan viimeinen Windows-versio, josta on saatavilla 32-bittinen versio. Kuten tähänkin asti, 64-bittinen Windows osaa ajaa myös 32-bittisiä ohjelmistoja, mutta ei 16-bittisiä. Teknisesti ilmaistuna 64-bittisissä Windowsissa on 32-bittinen alijärjestelmä (WoW64), joka toteuttaa yhteensopivuuden. 32-bittisissä Windowseissa puolestaan on alijärjestelmä 16-bittisille ohjelmille. Näiden tuki rajoittuu siis käyttöjärjestelmän versioon, jota ei siis enää tulla julkaisemaan. Paras tapa ajaa 16-bittistä koodia Windows 11 -koneessa on virtualisoida vanhempi 32-bittinen Windows.


Kuva 1: 16-bittinen Windows 1.0 -ohjelma voi toimia vielä Windows 10:ssä, kuten yllä näkyvä esimerkki osoittaa. Kuvitus lainattu tältä sivulta.

.NET-kehyksen ohjelmistot toimivat .NET-virtuaalikoneen sisällä, mutta niille määritellään silti kohdearkkitehtuuri 64- ja 32-bittisen väliltä. Kehittäjille tuttu ”Any CPU” -valinta tuottaa paljolti saman lopputuloksen kuin x86-valinta. Käyttöjärjestelmän 32-bittisen version poistuminen on hyvä syy käyttää jatkossa pelkästään 64-bittistä kohdearkkitehtuuria ja siirtää vanhojakin projekteja sille. Ainoan poikkeuksen muodostaa tarve käyttää kolmannen osapuolen DLL-kirjastoa, josta ei ole saatavilla 64-bittistä versiota.

Virtuaalikoneen joustavuuden ansiosta vanhojen .NET-ohjelmien toimivuuteen Windows 11:sta voi suhtautua melko luottavaisesti. Mikäli rajoitteita tulee, ne koskevat kehyksen varhaisimpia versioita. Näitä käyttävät ohjelmistot tulisi kääntää uudemmalle kehysversiolle, mikä vaatii tyypillisesti minimaalisia muutoksia alkujaan hyvin kirjoitettuun lähdekoodin.

Windows App SDK ja edeltäjät

Perinteinen Windows-ohjelmointirajapinta (tunnetaan Win32:na, myös 64-bittisenä) eli API ei ole saanut kunnolla vakiintunutta seuraajaa, mutta tilanne toivottavasti korjaantuu Windows 11:sta myötä. Ensimmäinen ehdokas oli WinRT, joka tuli käyttöön Windows 8:ssa sekä Server 2012:ssa. Windows 10:n myötä alusta sai nimen Universal Windows Platform (UWP), eikä ollut taaksepäin yhteensopiva nopeasti kuopatun Windows 8:n kanssa. UWP ei ole saavuttanut toivottua jalansijaa, kuten Microsoft Storen puutteellisesta tarjonnasta voi todeta.

Windows 11:n myötä UWP saa seuraajakseen Windows App SDK:n, jonka tärkein tavoite on siirtää Win32 historiaan tekemällä siirtymä kehittäjille helpommaksi. Windows 11:sta tehdyt App SDK -ohjelmistot ovat taaksepäin yhteensopivia Windows 10:n syksystä 2018 alkaen (build-numero 1809) julkaistujen Windows 10 -versioiden kanssa. SDK:n päivittyessä Windows 11:n rinnalla Windows 10 -yhteensopivuus todennäköisesti kapenee. Mikäli päivityksissä tulevia parannuksia ei tarvita, yhteensopivamman SDK-version käyttöä voi tietenkin jatkaa.

Werdialla on yli 20 vuoden kokemus Microsoft-ekosysteemistä. Autamme mielellämme kaikissa siihen liittyvissä ohjelmisto- ja järjestelmähaasteissa, myös yhteensopivuudessa.