Termillä reverse engineering voidaan tarkoittaa monenlaisia asioita. Yleisesti sen voisi sanoa tarkoittavan menetelmiä, joilla selvitetään ohjelmaa tutkimalla, millä periaatteilla, menetelmillä ja tekniikoilla ohjelma on tehty.
Siltä osin kuin tarkoitetaan ohjelman ideoiden ja periaatteiden selville saamista ohjelman toimintaa tutkimalla, siihen soveltunee tekijänoikeuslain 25j § 3. mom., joka sallii kyseisenlaisen menettelyn eräin ehdoin: se, jolla on oikeus käyttää ohjelmaa, saa ”tarkastella, tutkia tai kokeilla tietokoneohjelman toimintaa niiden ideoitten ja periaatteiden selvittämiseksi, jotka ovat ohjelman osan perustana”. Tähän ei liity selvittämisen tarkoitusta koskevaa rajoitusta mutta kylläkin se menettelytapoja koskeva ehto, että selvittely on tehtävä ”ohjelman tietokoneen muistiin lukemisen tai ohjelman näyttämisen, ajamisen, siirtämisen tai tallentamisen yhteydessä”. Kyseisen pykälän 4. mom. säätää edellä kuvattua oikeutta rajoittavat sopimusehdot pätemättömiksi.
Toisaalta reverse engineeringissä usein käytetään jonkinlaista disassemblointia (dekompilaatiota) eli konekielisen ohjelman muuntamista luettavampaan, ihmisen helpommin tarkasteltavissa olevaan muotoon. Asiaa käsittelee melko laveasti tekijänoikeuslain 25k §. Tulkitsen sitä niin, että disassemblointi eli lain kielellä sanottuna ”ohjelman koodin muodon kääntäminen” on sallittua, jos tarkoituksena on saavuttaa yhteentoimivuus muiden ohjelmien kanssa eikä siihen tarvittavaa tietoa ole muutoin helposti ja nopeasti saatavissa. (Tulkinnasta ks. myös hallituksen esityksen HE 211/1992 perusteluja.) Toimenpiteiden tulee rajoittua ohjelman niihin osiin, jotka ovat yhteentoimivuuden saavuttamisen kannalta tarpeen. – Pykälän viimeinen momentti sanoo, että sopimuksen ehto, jolla rajoitetaan pykälän mukaista tietokoneohjelman käyttöä, on tehoton.
Mieleeni tulee esimerkkinä tilanne, jossa ohjelman käyttämää tiedostoformaattia ei ole dokumentoitu eikä sitä voi helposti päätellä tiedostoja tutkimalla vaan täytyy itse koodista selvittää, miten se oikein kirjoittelee. Ja tämä siis olisi sallittua, jos tarkoituksena on esimerkiksi mahdollistaa se, että itse kirjoittaa ohjelman, joka lukee kyseisessä formaatissa olevan tiedoston.
Kyseessä siis on poikkeussäädös, joka sallii disassembloinnin eräin ehdoin. Yleissääntönä, joka seuraa tekijänoikeutta koskevista säädöksistä, on se, että disassemblointi ei ole sallittua. (Tarkkaan sanottuna se on sallittua vain tekijänoikeuden omistajan luvalla, mutta jos sellaisen luvan voisi saada, niin eiköhän samalla saisi lähdekoodinkin…) Tosin niiden yleisten säädösten tulkinta ei aina ole helppoa eikä yksiselitteistä, mutta edellä mainitun pykälän olemassaolo on mielestäni selkeä osoitus siitä, että laki on tarkoitettu siten tulkittavaksi. Miksi olisi olemassa säädös jonkin asian sallimisesta tarkoin määritellyissä olosuhteissa, jos asia ei yleisesti ottaen olisi kielletty?