Avoin lähdekoodi

Avoin lähdekoodi pintaa syvemmältä

Mitä tarkoittaa avoin lähdekoodi tai vapaa lähdekoodi? Mitä rajoituksia avoimen koodin käyttö asettaa? Miten valita lisenssi sadoista vaihtoehdoista omalle koodille? Tässä artikkelissa tarkastellaan muutamaa modernille ohjelmistokehitykselle yleisintä avoimen koodin lisenssiä.

Avoin lähdekoodi pitää sisällään useita eri lisenssointivaihtoehtoja

Yksinkertaisimmillaan, avoin lähdekoodi (Open Source) tarkoittaa, että ohjelmiston lähdekoodi on saatavilla tarkastelua varten. Käytännössä avoin lähdekoodi viittaa kuitenkin tietyntyyppiseen lisensointiin, jossa ohjelmakoodi annetaan tietyin rajoituksin levitettäväksi ja muokattavaksi. Avoin lähdekoodi ei kuitenkaan välttämättä tarkoita ei-kaupallista. Useiden suurten open source projektien, kuten Linux kernelin, Firefox-selaimen ja MySQL-tietokantapalvelimen taustalla ovat kaupalliset intressit.

Ohjelmakoodilla, kuten monilla muillakin teostyypeillä, on automaattinen kansainvälinen tekijänoikeussuoja maissa, jotka ovat liittyneet Bernin sopimukseen. Ilman erikseen annettua lisenssiä, ohjelmaa eikä siitä tehtyjä johdannaisteoksia saa levittää. Avoimen lähdekoodin lisenssit eivät ohita tekijänoikeuslakia, vaan antavat luvan edelleenjakamiseen ja johdannaisteoksien luontiin kunhan mainittuja ehtoja noudatetaan.

Lisenssejä on lukematon määrä, mutta viisi suosituinta kattaa n. 75% kaikesta julkaistusta koodista [Black Duck Software].

Avoimen lähdekoodin lisäksi käytetään myös termiä Vapaa ohjelmisto (Free/Libre and Open Source Software). Vapaa ohjelmisto on vanhempi termi jonka määritelmän loi Free Software Foundationin perustaja Richard Stallman. Open source on taas peräisin Eric Raymondin perustamasta Open Source Initiative -yhdistyksestä, joka yrittää olla vähemmän poliittinen. Käytännön ero vapaan ohjelmiston ja avoimen lähdekoodin välillä on pieni, mutta vapaan ohjelmiston määritelmä on hieman tiukempi. Suosituimmat avoimen lähdekoodin lisenssit ovat myös vapaan lähdekoodin lisenssejä.

FSF:n määritelmän mukaan ohjelmisto on vapaa jos käyttäjälle on sallittu neljä välttämätöntä vapautta:

  • Vapaus suorittaa ohjelma mitä tahansa tarkoitusta varten
  • Vapaus tutkia miten ohjelma toimii ja muokata sitä. Lähdekoodin saatavuus on esivaatimus.
  • Vapaus levittää kopioita ohjelmasta
  • Vapaus levittää muokattuja versioita ohjelmasta

Yleisen harhaluulon vastaisesti, vapaa lähdekoodi ei kiellä ohjelman kaupallista hyödyntämistä. Itseasiassa, kaupallisen käytön kielto tekee ohjelmasta ei-vapaan! Teos on mahdollista myös lisensoida usealla lisenssillä yhtäaikaa. Esimerkiksi Digian omistama Qt-ohjelmistoalusta on käytettävissä LGPL-lisensillä sekä ostettavalla kaupallisella lisenssillä.

GPL-lisenssi on ehkä tunnetuin vapaan lähdekoodin lisenssi

Erityisesti Linux kernelistä tunnettu GNU General Public License (GPL) lienee ehkä kuuluisin vapaan lähdekoodin lisenssi. GPL on esimerkki copyleft (käyttäjänoikeus) lisenssistä. Copyleft-lisenssit ovat vapaan lähdekoodin lisenssejä jotka vaativat, että johdannaisteokset ovat myös copyleft-lisenssin alaisia.

Copyleft-lisenssejä sanotaan tämän vuoksi myös tarttuviksi lisensseiksi. Kuten suomenkielinen nimi antaa ymmärtää, copyleftin tarkoitus on suojella loppukäyttäjää. Se tekee tämän kieltämällä uusien rajoitteiden lisäämisen lisenssiin ja näin kannustamalla kehittäjiä suosimaan vapaata lähdekoodia.

GPL sallii teoksen levityksen ja muokkauksen, kunhan seuraavia ehtoja noudatetaan:

  • Lisenssiä ei saa muuttaa tai poistaa
  • Muokkauksista pitää lisätä huomio
  • Ohjelman tulee sisältää tieto lisenssistä
  • Lähdekoodi pitää tehdä saataville kaikille, joille ohjelma on levitetty
  • Johdannaisteokset tulee lisensoida samalla lisenssillä

GPL ei ole kuitenkaan EULA, eli se ei koske ohjelmiston käyttäjää. Ehdot koskevat ainoastaan levittäjiä. Omia muutoksia ei myöskään tarvitse julkaista kenelle tahansa, vaan ainoastaan niille kenelle muokatusta ohjelmasta on annettu kopio. Eli sisäiseen käyttöön tehtyjä muutoksia ei ole pakko julkaista.

Tällä hetkellä uusin GPL versio on GPLv3, mutta versio 2 on edelleen yleisin. Suositeltu tapa käyttää GPL-lisenssiä on sisällyttää pykälä joka sallii päivityksen uudempaan GPL-versioon, joten suurta osaa GPLv2-lisensoitua koodia voi vapaasti käyttää GPLv3-lisensoiduissa projekteissa.

GPLv3 selkeyttää lakiteknistä kieltä kansainvälisyyden parantamiseksi, parantaa yhteensopivuutta muiden lisenssien kanssa sekä antaa käytäjille lisäsuojaa suljettuja järjestelmiä sekä patentteja vastaan.

GPL-lisenssistä on myös versio ohjelmistokirjastoja varten: Lesser General Public License (LGPL). LGPL höllentää lisenssiehtoja niin, että ohjelman joka käyttää LGPL-lisensoitua modulia ei tarvitse itse olla LGPL-lisensoitu. LGPL on siis vähemmän tarttuva kuin tavallinen GPL. FSF:n tulkinnan mukaan, käyttämiseksi lasketaan linkitys niin, että moduli on teknisesti mahdollista korvata toisella joka toteuttaa saman rajapinnan.

Koska GPL koskee ainoastaan ohjelmiston levitystä, siinä on nk. ”sovellustarjoajan porsaanreikä.” Software as a Service tarjoaja voi käyttää GPL-lisensoitua koodia ilman, että hänen tarvitsee antaa käyttäjilleen lähdekoodia, koska sovellusta itsessään ei levitetä.

Affero GPL on hieman harvinaisempi variaatio GPL-lisenssistä joka lisää vaatimuksen, että lähdekoodin on oltava saatavilla käyttäjille jotka käyttävät sovellusta verkon yli. Affero GPL ei ole yhteensopiva muiden GPL-lisenssien kanssa, lukuunottamatta GPLv3-versiota.

BSD-lisenssit

BSD on vapaan lähdekoodin lisenssi joka edustaa toisenlaista suuntausta kuin GPL. Toisin kuin copyleft-lisenssit, joka kieltävät lisenssin vaihdon, BSD sallii johdannaisteoksen uudelleenlisensoinnin. Koska BSD-lisenssi asettaa vähemmän rajoituksia uudelleenkäytölle, sitä kutsutaan permissiivikseksi lisenssiksi.

BSD-lisenssi on peräisin Berkeley Software Distribution UNIX-käyttöjärjestelmästä. Siitä on olemassa kolme versioita, joista tosin vain kaksi on nykyään yleisessä käytössä.
Vanhinta BSD-lisenssiä (4 pykäläinen) ei enää suosita sen sisältämän hankalan ”mainostuspykälän” vuoksi. Yleisin versio on 3 pykäläinen (new BSD license/modified BSD license) joka on muuten sama kuin alkuperäinen, mutta mainostuspykälä on jätetty pois.

Kolmas BSD-variaatio (2 pykäläinen/simplified BSD license/FreeBSD license) poistaa kiellon käyttää alkuperäisen kehittäjän nimeä mainostustarkoituksiin.

MIT- ja Apache-lisenssit

MIT-lisenssi on BSD:n kaltainen ei-copyleft vapaan lähdekoodin lisenssi, joka on saavuttanut suosiota yksinkertaisuutensa ansiosta. Se on käytännössä vastaava kuin 2 pykäläinen BSD-lisenssi.

Apache Software License 2.0 -lisenssi on Black Duck Softwaren tilastojen mukaan toiseksi suosituin vapaan lähdekoodin lisenssi. Vanhemmat Apache versiot (1.0 ja 1.1) eivät ole GPL-yhteensopivia, mutta 2.0 lisensoitua koodia voi yhdistää GPLv3-lisensoituun koodiin. Vaikkei Apache 2.0 ole copyleft-lisenssi, se on huomattavasti monimutkaisempi kuin BSD- tai MIT-lisenssit. Kuten GPLv3, se sisältää patenttisuojapykälän.

Patenttisuojapykälä vaikuttaa ohjelmiston tuottajaan (lisensoivaan tahoon) sekä ohjelmiston käyttäjään. Tuottaja antaa käyttäjälle oikeuden käyttää kaikkia omistamiaan patentteja lisensoidun ohjelman suoritukseen. Tämä oikeus raukeaa automaattisesti mikäli käyttäjä yrittää haastaa toisen käyttäjän oikeuteen patenttirikkomuksesta saman ohjelman käytöstä.

Creative Commons -lisenssit

Tähän asti mainitut lisenssit ovat kaikki suunniteltu ohjelmistojen lisensointiin. Avoin lähdekoodi on inspiroinut Creative Commons lisenssiperheen perinteisemmille teoksille kuten kuville, videoille ja artikkeleille. Mm. Wikipedia sisältö on CC-lisensoitua.

CC-lisenssejä on kuusi kappaletta, joista kaikki sallivat teoksen levittämisen maksutta kunhan alkuperäinen tekijä mainitaan:

  • CC BY: sallii muokkaamisen ja käyttämisen kaupallisiin tarkoituksiin.
  • CC BY-SA: kuten CC-BY, mutta johdannaisteos on oltava myös CC BY-SA lisensoitu. Vrt. copyleft lisenssit.
  • CC BY-ND: sallii kaupallisen käytön, mutta kieltää johdannaisteoksien luomisen.
  • CC BY-NC: Sallii muokkaamisen, mutta kieltää kaupallisen käytön.
  • CC BY-NC-SA: Kuten CC BY-SA, mutta kieltää kaupallisen käytön
  • CC BY-NC-ND: Kieltää johdannaisteokset ja kaupallisen käytön.

Avoin lähdekoodi – monta lisenssiä valittavana

Lisenssi on välttämättömyys jos lähdekoodi halutaan julkaista muiden käyttöön. Äskettäin tehdyn tutkimuksen mukaan, alle 15% githubissa julkaistuista projekteista sisältää lisenssitiedoston. Vaikka tarkoitus on epäilemättä ollut julkaista projekti vapaasti käytettäväksi, ellei lisenssiä ole kerrottu ei projektia tekijänoikeuslain mukaan saa käyttää.

Lisenssin valinnan ensimmäinen askel on tarkistaa yhteensopivuus projektissa mahdollisesti käytetyn lisensoidun koodin kanssa (esim. kirjastot.) Tämä askel pitäisi tehdä jo ennen kuin vierasta koodia otetaan käyttöön. Esimerkiksi BSD- ja GPL-lisensoitua koodia voi sekoittaa, mutta kokonaisuuden on oltava GPL-lisensoitu, kun taas esimerkiksi GPLv2- ja AGP- koodia ei saa laillisesti sekoittaa lainkaan. Yhteensopivuus pitää tarkistaa lisenssikohtaisesti.

Uudessa projektissa jossa ei ole riippuvuuksia (tai riippuvuudet ovat niin permissiivisesti lisensoituja ettei niillä ole vaikutusta) on edessä valinnan paljous. Oman, sekä tulevien käyttäjien elämän helpottamiseksi kannattaa kuitenkin valita jokin suosituimmista lisensseistä.

Esimerkkejä lisenssivalinnoista:

Linux kerneli GPLv2
Apache HTTP palvelin ASL 2.0
MySQL GPLv2
MariaDB GPLv2/LGPLv2
PostgreSQL (oma BSD tyylinen lisenssi)
nginx BSD
Django BSD
Ruby on Rails MIT
Drupal GPLv2
Joomla GPLv2
WordPress GPLv2
Magento OSL/AFL
jQuery MIT

Ensimmäinen valinta on: copyleft vai ei? GPL estää koodin käytön suljetuissa tuotteissa, mutta se saattaa karkoittaa myös osan käyttäjistä. Esimerkiksi Apple on pikkuhiljaa korvaamassa kaikkia GPL-lisensoituja komponentteja käyttöjärjestelmistään permissiivisemmin lisensoiduilla vastineilla, ja Googlen Androidin avoimet osat ovat kerneliä lukuunottamatta ASL 2.0 -lisensoitu.

Jos copyleft-lisenssejä ei haluta käyttää, on valinta käytännössä yksinkertaisten lisenssien kuten MIT tai BSD ja monimutkaisempien mutta enemmän suojaa antavien kuten ASL välillä. Lisenssin valintaa helpottaa palvelut kuten ChooseALicense ja tl;drLegal.

Esimerkkejä lisensseistä:

Permissiivinen Copyleft
PD* MIT ASL LGPL GPL AGPL
Saa tehdä mitä vain Saa sisällyttää suljettuun koodiin Saa sisällyttää suljettuun koodiin.
Sisältää patenttilisenssin.
Saa käyttää suljetusta koodista.
Sisältää patenttilisenssin
Ei saa sisällyttää suljettuun koodiin.
Sisältää patenttilisenssin.
Ei saa sisällyttää suljettuun koodiin.
Sisältää patenttilisenssin.
Verkkopalvelun lähdekoodi pitää olla saatavilla.

* Public Domainissa tekijä luopuu kaikista oikeuksistaan. Suomen laissa ei ole tätä käsitettä.

Yhteenveto

Vapaan lähdekoodin lisenssit voidaan jakaa kahteen ryhmään: copyleft- ja ei-copyleft-lisenssit. GPL-lisenssiperhe on lähes synonyyminen copyleftin kanssa. Ei-copyleft lisensseistä suosituimmat ovat Apache Software License, BSD sekä MIT.

Copyleft-lisenssit ovat ”tarttuvia” lisenssejä, eli ne vaativat, että johdannaisteokset lisensoidaan samalla tavalla. Permissiivisemmät lisenssit sallivat koodin käytön myös osana muulla lailla lisensoitua tuotetta.

Uudet lisenssit kuten ASL 2.0 sekä GPLv3 sisältävät myös automaattisen patenttilisenssin.

Lue lisää aiheesta