Avointa lähdekoodia (open source) mainostetaan kaikenlaisen hyvän lähteenä. Suurimmasta osasta olen samaa mieltä. Esimerkiksi, avoin lähdekoodi auttaa (varsinkin julkisten toimijoiden) palveluita olemaan:
Tietysti, monet muut tekijät kuin lähdekoodin lisenssi (josta avoimessa lähdekoodissa pohjimmiltaan on kyse) vaikuttavat myös. Jokaisen yllä olevista pystyy mämmäämään tekemällä asiat muuten huonosti. Avoin lähdekoodi vain auttaa parantamaan näitä asioita.
(Tein tästä muuten vuoden 2017 Mindtrekiin esityksen: https://docs.google.com/presentation/d/1rLdGXjxx5bdKPdtHVjW_8EKzpuZEVq6QH5tqUc677cE/edit?usp=sharing)
Mutta olen myös huomannut, että avoimen lähdekoodin mainostetaan auttavan asioissa, joista en ole niinkään varma. Siellä täällä (esim. eilen kääntämässäni julkisen koodin standardin johdannossa, https://github.com/publiccodenet/community-translations-standard/tree/Finnish/fi) lupaillaan, että avoin lähdekoodi auttaa palveluita olemaan myös:
... ja tämä ei taas oman kokemukseni mukaan ollenkaan pidä paikkaansa. Useimmissa näistä on pohjimmiltaan kyse siitä, että ne ovat yhteisöjen tuomia etuja, mutta lisenssillä ei voi luoda yhteisöä; lisenssi on vain yksi tärkeä osa, jolla ollaan pelottelematta yhteisöä pois.
Mutta uudelleenkäytettävyys (reusability) on tekninen ominaisuus, joten se erottuu joukosta. Ja uskon oikeastaan, että syy miksi avoin lähdekoodi ei juuri tue ohjelmistojen / palveluiden uudelleenkäytettävyyttä, on se että uudelleenkäytettävyys on vaan saakelin vaikeaa. Lisäksi uudelleenkäytettävyys ei ole vain koodin ominaisuus, vaan myös sen ympärillä olevan dokumentaation ja työkalujen. Esimerkiksi, jos verkossa oleva ohjelmointirajapinta (eli API) on helppo käyttää, ymmärtää ja tutkia, sen uudelleenkäytettävyys ei paljonkaan riipu taustalla olevan koodin avoimuudesta.
Mutta uudelleenkäytettävyytta on tosi monenlaista. Yksi tapa parantaa palveluiden / ohjelmistojen uudelleenkäytettävyyttä on rakentaa niihin "liittymärajapintoja", hookeja. Tämä monimutkaistaa softaa yleensä aika lailla, ja asiat, jotka olivat ennen suoraviivaisia, muuttuvat monen uudelleenohjauksen kautta tehdyiksi. Esimerkkejä ovat niin Chrome-pluginit kuin vaikkapa Githubiin rajapinnoitse liittyvät 3. osapuolen sovellukset.
Toinen on faktoroida softa pieniksi palasiksi, jolloin tyypillisesti nämä palaset ovat uudelleenkäytettävämpiä kuin niiden muodostama kokonaisuus. Esimerkiksi käy vaikkapa se, että Gtk-käyttöliittymäkomponentit olivat alun perin osa Gimp-ohjelmaa ja ne vain eriytettiin omaksi kirjastokseen, koska niillä oli hyvin ilmeisesti käyttöä muissakin yhteyksissä. Samoin esimerkiksi tietojen tallentaminen on nykyisissä webbiohjelmistoissa yleensä eristetty omiin palveluihinsa, jotka ovat erilaisia tietokantoja. APIen toteuttamiseenkin on yleisluontoisia komponentteja. Tämä on hyvä tapa luoda uudelleenkäytettävyyttä, mutta kaikki ei vain ole faktoroitavissa.
Kolmas tapa on konfiguroitavuus, jossa ohjelman toimintaa on helppo muuttaa muulla kuin ohjelmakoodilla. Siinä on yleensä hookien/pluginien ongelmat mutta myös haaste kehitellä hyvä kieli konfiguroimiseen. (Minulla on muutenkin sellainen olo, että tosi monet tietojenkäsittelyn ongelmat ovat oikeastaan kysymys siitä, millaisella "kielellä" jokin ilmaistaan.)