12. nädal: Häkkerieetika. Kas Robin Hood on häkker?

Ei suutnud vastu panna kiusatusele demonstreerida oma häkkerlikke kalduvusi ja seega analüüsisin Hacker-HOWTO’d pisut äraspidises ja nohiklikus võtmes.

Ruby klass RobinHood defineerib mehikese põhiomadused ja tegevused. Sellele rakendatakse HäkkeriTesti, tulemused allpool.

Kood

class RobinHood

 # Ask for skills: RobinHood.can_shoot_bow?
 SKILLS=[:fight_with_sword, :shoot_bow, :ride_on_horseback,
 :sneak, :survive_in_forest, :get_the_word_out,
 :speak_english]

 # Ask for personality: RobinHood.seeks_problems?
 PERSONALITY = [:seeks_problems, :gets_things_done, :has_fun,
 :loves_adrenaline, :has_style, :outlaw]

 # Ask for activities: RobinHood.does_recruit_followers?
 ACTIVITIES = [:give_to_poor, :help_others, :fight_for_freedom,
 :leak_essential_state_secrets, :recruit_followers,
 :teach_newcomers]

  class << self
     def method_missing(name)
       if name.to_s =~ /^can_/
         bname = name.to_s.sub(/^can_/,"")
         bname = bname.sub(/?$/, "")
         return SKILLS.include?(bname.to_sym)
      elsif name.to_s =~ /^does_/
         bname = name.to_s.sub(/^does_/,"")
         bname = bname.sub(/?$/, "")
         return ACTIVITIES.include?(bname.to_sym)
       elsif name.to_s =~ /?$/
         bname = name.to_s.sub(/?$/, "")
         return PERSONALITY.include?(bname.to_sym)
       end
       return false
     end

   def has_skills?
      !SKILLS.empty?
    end

    def skills
      SKILLS
    end
  end
end

require 'test/unit'
class HackerTest < Test::Unit::TestCase
  def test_hacker_attitude
    assert(RobinHood.seeks_problems?, "Hacker must love problems")
    assert(RobinHood.gets_things_done?, "No problem shoudl ever ahve to be solved twice")
    assert(RobinHood.has_fun?, "Hacker needs to have fun")
    assert(RobinHood.loves_adrenaline?, "Hacker fun must not be trivial")
    assert(RobinHood.does_fight_for_freedom?, "Hacker should be ati-authoritarian")
    assert(RobinHood.has_skills?, "Attitude is no substitude for competence")
  end

  def test_hacking_skills
    assert(RobinHood.has_skills?, "Hacker should have skills in his field")
     assert(RobinHood.skills.size > 1, "Hacker should have more than one skill")
     assert(RobinHood.can_survive_in_forest?, "Hacker should know how to use and survive w/o commercial support")
    assert(RobinHood.can_get_the_word_out?, "Hacker should influence non-hackers lives")
    assert(RobinHood.can_speak_english?, "Hacker must have functional English")
  end

  def test_status_in_hacker_culture
    assert(RobinHood.does_give_to_poor?, "Hacker should open source his work")
    assert(RobinHood.does_help_others?, "Hacker should help others in their problems")
    assert(RobinHood.does_leak_essential_state_secrets?, "Hacker should publish useful information")
    assert(RobinHood.does_recruit_followers?, "Hacker should keep the infrastructure working")
    assert(RobinHood.does_teach_newcomers?, "Hacker should serve the culture itself")
  end

  def test_hacker_nerd_connection
    assert(RobinHood.outlaw?, "Being nerd/outcast helps in being a hacker")
 end

  def test_hacker_style
    assert(RobinHood.can_fight_with_sword? || RobinHood.does_read? ||
      RobinHood.does_listen_to_music?, "Hacker should have activities for non-hacking time")
  end
end

Tulemused

Tulemused võtab kokku programmi käivitus:

Loaded suite robin_hood
Started
.....
Finished in 0.000571 seconds.

5 tests, 18 assertions, 0 failures, 0 errors, 0 skips

Nagu näha, on Robin Hood täisväärtuslik häkker!

11. Nädal – AGPL

GNU General Public License on ilmselt kõige populaarsem copyleft litsents vaba tarkvara maailmas. GPL’il on aga üks fundamentaalne viga – copyleft klauslite rakendumiseks on vajalik tarkvara levitamine kui toiming. Probleem tekib aga tarkvara kui teenuse (SaaS) pakkumisel – vaba tarkvara ei levitata, vaid kasutatakse teenusepakkuja poolt teenuse osutamiseks. Sel juhul standardse GPL’i nõuded koodi avaldada ei rakendu ja pole kuidagi võimalik kaitsta algse tarkvara autori seatud vabadusi.

Affero, Inc

Sellise probleemi ees seisis sajandi algul Affero, Inc, kes probleemist üle saamiseks pidas nõu Free software Foundationi (FSF) juristidega, kes koostasid Afferole täiendava klausli, mis käsitles SaaS-juhtumeid ja nõudis ka sellisel juhul lähtekoodi avaldamist. Täienduse rakendamiseks nõutas Affero FSF’ilt ka õiguse GPL tervikteksti muutmiseks ja kasutamiseks. Nii sündiski 2002. aasta märtsis Affero GPL, mille ainukeseks oluliseks erinevuseks GPLv2-st oli tarkvarateenusepakkujate kohustamine tarkvara koodi avalikustamiseks.

FSF juristide hinnangul aga on GPL ja Affero GPL omavahel sobimatud, kuna mõlemad nõuavad kombineeritud töö avaldamist just sama litsentsi all. Sellest üle saamiseks koostati 2007. aatal  GPLv3-ga samaaegselt uus ka litsents, nimega GNU Affero General Public License ehk AGPLv3 (versioon 3, et märkida seost GPLv3-ga). AGPLv3 ja GPLv3 sisaldavad mõlemad klausleid, mis muudavad need litsentsid vastastikku sobivaks.

AGPLv1 ehk algne Affero litsents (ja kogu sellega litsenseeritud tarkvara) oli aga endiselt GPL-sobimatu. Selle probleemi lahenduseks andis Affero samal aastal  välja üleminekulitsentsi AGPLv2, mille ainukeseks erinevuseks oli luba litsenseerida AGPLv1 tarkvara ja tuletatud töid edaspidi AGPLv3 all.

Kokkuvõtteks

Kuna AGPL sisaldab SaaS-klausleid, siis soovitab ka FSF ise kõikidel juhtudel, kui loodavat tarkvara võib keegi teine pakkuda kui teenust, kasutada GPL asemel AGPLv3 litsentsi. Näiteks on selle litsenti all välja antud multimeediaserveri tarkvara Kaltura.org. Kõige esimene tarkvara, mis AGPLv3 all välja anti, oli stet – dokumendi kommenteerimise vahend, mille abil FSF GPL 3. versiooni välja töötas.

10. nädal: Intellektuaalne omand

Olles ise programmeerijana potentsiaalne autor, olen üldiselt selle poolt, et hästi tehtud tööld tuleks vääriliselt tasustada. Samas, tasustamiseks on päris mitmeid võimalusi, alates tavapärasest palgast, lõpetades patendeeritud leiutise listsentsitasudega ja mitte kõikidega nendest ei ole ma nõus.

Patendisüsteem

Minumeelest on patent, kui selline, väga efektiivne õiguste kaitsmise vahend. Ideeliselt on ka patendisüsteem üsna lihtne ja arusaadav kõigile – mingi uue asja leiutaja kirjeldab selle olemust ka kindlustab sellega, et tema higi ja vaev järgnevate 20 aasta jooksul tema peret ülal peavad, kuni leiutaja ise järgmise asja kallal vaeva näeb ja võibolla mingit lisapalka ei saagi.

Vaene riik, rikas ärimees

Patendisüsteemi on aga sisse programmeeritud omalaadne võistlusmoment – patendi taotleja üritab seda sõnastada võimalikult laialt, et kaitsta ennast ka konkurentide pisut modifitseeritud alternatiivide vastu. Patendiandja ülesanne on aga seda läbi näha ja nõuda patendi konkreetsemat sõnastamist. Samuti nõuda tõestusi asja uudsuse kohta ja leiutaja enda töö kohta asja leiutamisel (et ei patendeeritaks kellegi teise loomingut).

Probleem on aga selles, et patendiametnik peab ühtaegu olema üsna hea jurist ja vastava valdkonna ekspert, et kõiki nüansse läbi näha. Taolisi inimesi on loomulikult olemas või saaks moodustada meeskonnad juristidest ja ekspertidest (nagu tavapäraselt ka tehakse), kuid ka patendi taotlejate poolel on neidsamu inimesi vaja ja paratamatu on, et kommertssüsteemis võib sellesse valdkonda matta oluliselt suuremat raha, kui riik on nõus oma patendiametnike palkadeks loovutama. Tulemus on selles, et paremad eksperdid ja juristid ostetakse patenditaotlejate poolele, viies süsteemi tasakaalust välja.

Selle probleemi ainukeseks lahenduseks on riigipoolne suurem eelarve, et patendisüsteemi tuua paremaid eksperte.

Samuti pole harv, et valdkonna eksperdid ise mõne patendeeritava leiutise või muuga hakkama saavad, liikudes niiviisi teiselepoole võistlusjoont. See on aga asjade normaalne käik ja tasakaalustamiseks piisab lihtsalt suurema ekspertide kolleegiumi hoidmine, et igaks olukorraks leiduks mõni erapooletu ekspert.

Rahvusvaheline konkurents

Vaese riigi aspektile tugineb ka teine probleem – riik on alati täpselt nii rikas või vaene, kui tema maksumaksjad. Maksumaksjatest suurema osa moodustavad loomulikult ettevõtted ja nendest parimad – need, kes ka rohkem raha sisse toovad – on need, kes on rahvusvahelisel plaanil edukad ja innovatiivsed. Viimane aspekt aga on otseselt seotud patendisüsteemiga – kui ettevõttel on suur patendiportfell, siis järelikult on tal suurem konkurentsieelis teiste ees. Patendid peab küll igas õigussüsteemis eraldi taotlema ja kaitsma, kuid arvatavasti on oluliselt lihtsam uutes piirkondades patente saada, kui sama asja eest mujal on patent juba välja antud.

Sellest tulenevalt on iga riigi salajaseks unistuseks, kas seda tunnistatakse või mitte, et just selle riigi maksumaksjad omaks maailmas kõige rohkem patente. See tingib ühtlasi paradoksi – ühest küljest peaks riik hea seisma, et patendid oleks ausad ja konkreetsed, kuid see on oluline vaid siseriiklikult. Rahvusvahheliselt on riigile kasulik anda välja võimalikult palju võimalikult laiahaardelisi patente, et tagada oma ekspordile eelis.

Selle paradoksi vastu aitaks ainult rahvusvahelise patendisüsteemi sisse seadmine, kus patente annab välja rahvusvaheline ekspertide kogum (lootuses nende suuremale erapooletusele). Selle süsteemi puhul oleks loomulikult mitmeid plusse, sh ühtlane õiguskaitse kõikides piirkondades, aga ka mitmeid puudusi, näiteks arvatavalt keerulisem edukas patendi taotlemine, aga ka võimalus, et kehtestatakse ühe õigussüsteemi (nt USA) patendiõigus kogu maailmas.

Autoriõigusest ja muust

Kui patendid kõrvale jätta ja rääkida autoriõigustest ja litsentsidest, siis ka siinkohal on sama probleem – kõiksugu veidrad litsentsid (nagu Microsofti EULA), mis on lausa iseendaga vastuolus, kuivõrd pakendi avamine kohustab litsentsiga nõustuma ja mittenõustumise korral peab tagastama toote avamata pakendis. Kuidas aga litsentsi tingimused teada saab, kui selle terviktekst on pakendi sees. Selliste litsentside puhul oleks abi, kui keegi piisavalt rahakas võtaks kätte ja oma juristidearmeega purustaks sellise litsentsi kõrgeimal kohtutasemel. Aga ka siinkohal on probleem erinevates õigussüsteemides – mõnes on selline paradoks ilmselgelt seadusevastane, teistes jällegi mitte. Seetõttu peaks litsentsi kohtusse kaebama igas õigussüsteemis (sh isegi igas ELi liikmesriigis eraldi, nagu tõestas Sandiski MP3 litsentsi saaga), et sellest ülemaailmne kasu tõuseks.

Kokkuvõtteks

Minu seisukoht patentide puhul on seega üldiselt positiivne ja tunnustan patendi vajadust. Samuti ei heida ette isegi, et nt Applel lõpuks viimane tilk karikasse kukkus ja ta puhtast solvumisest konkurendid kohtusse kaebas, kuna need rikkusid mitut tema uut leiutist. See on mõistetav, kuna tõesti iPhone oli üsna edumeelne ja teistest erinev toode. Siia Steve Jobsi tsitaat antud teemal:

“We can sit by and watch competitors steal our patented inventions, or we can do something about it. We’ve decided to do something about it. We think competition is healthy, but competitors should create their own original technology, not steal ours.” – Steve Jobs.

Rõhk on sõnadel: “…konkurendid peaks looma nende endi algupärase tehnoloogia, mitte varastama…”

Samas ei kiida ma heaks armutut patendisõda puhta kasu lõikamise eesmärgil, kui kõnealused patendid ja leiutised ise on juba küsitava väärtusega ja pole isegi teada, kes on leiutise tegelik omanik, nagu MP3 puhul hetkeseis on. Samalaadne juhtum on ju UNIXi koodi ja muude sinnajuurde kuuluvate patentidega, mille puhul Microsoft ja Novell omavahel kookõla leidsid (või pigem avastasid, et on tekkinud omalaadne külja sõja laadne olukord, kuna kummagi patendiportfellid oleks piisavalt mahukad, et teine maamunalt pühkida ja otsustati kohtusse mitte minna). Teisest küljest SCO piinlik kohtuskäik Novelli ja IBMi vastu lõppes õnneks esimese kaotusega, kuid sellise asja võimalikkus näitab siiski patendisüsteemi nõrkusi – liiga ümaralt sõnastatud patendid annavad alust ka aastaid peale objekti müümist esitada nõudeid ostja vastu.

9. nädal – vabavara

Esimesed kogemused vabavaraga ulatuvad mul juba möödunud sajandisse, kui gümnaasiumi esimese aasta lõpus, 1998. aasta kevadel kutsus füüsika/arvutiõpetaja mind suveks C-d õppima. Arendamiseks kasutasime mingisugust Linuxit (ilmselt Red Hat Linux 5 või 6), kuid võis olla ka mõni BSDlane, kuna kompilaator tegi üsna kindlasti a.out faile, kuid Linux lülitus ELF binaaridele juba mõned aastad varem. Sellest kõigest ei teadnud ma tollal muidugi midagi ja minu jaoks jäi üsna kaugeks ka eufooria, millega õpetaja tervitas pika ponnistuse peale käima saadud X windowsi kursorit, millega tühjal ekraanil suurt millelegi klõpsida polnud, kuid tundus olevat saavutus omaette.

Edasised kokkupuuted

Vahepeal kulges elu oma rada ja kuigi ma aeg-ajalt Linuxi ja eriti Apachega kokku puutusin, ei kujunenud need põgusad randevuud tõsisemateks enne esimest töökohta 3. kursusel 2002. aastal süsteemiadministraatorina, kus ma tollal üsna julgelt vette kargasin ja kahe FreeBSD serveri ning mõnekümne samasisulise töökoha haldamise oma õlule võtsin. Kui veebiserverid jmt asjasse puutuv kõrvale jätta, siis esimene tõsisem töö, mille jaoks ma tavainimestele mõeldud töövahenditest valides vaba tarkvara eelistasin, oli minu lõputöö, mille vormistuseks kasutasin OpenOffice.org paketti, rakendades ka selliseid võimalusi, nagu sisukord, jooniste nummerdamine ja pealkirjad ning automaatne kirjanduse loetelu, mille kasutamisest mul MS Offices aimugi polnud ning ka enamus mu kursakaaslasi kummaski töövahendis teha ei osanud.

Aasta hiljem vahetasin töökohta ja muutus nii hallatavate serverite arv suuremaks, kui ka OS Linuxiks (esmalt Debian, hiljem Gentoo Linux ja lauaarvutites openSuSE). Kindlasti poleks ilma vabavarata võimalik olnud ehitada meie oma, versioonihaldusega kontrollitud, vastavalt retseptile kohapeal kompileeritud ja üle võrgu buutivat serverite platformi, millel töötavad nüüd kõik EENeti peamised teenusserverid. Tasulistel OS-idel on küll ka taolisi vahendeid, kuid need maksavad reeglina eraldi, või ei paku piisavat võimekust, ega võimalust kohandada vastavalt vajadusele.

Alternatiiv või põhitöövahend

Tulles aga tagasi kontoritöövahendite juurde, mis on enamikule inimkonnast mõistetav valdkond, nimetaksin kolm töövahendit, mille valin alati, isegi konkureerivate alternatiivide olemasolul, pelgalt seetõttu, et pean ennast nendes keskmisest kõrgema tasemega kasutajaks.

Esmalt muidugi OpenOffice.org, mis on nii käe järgi, et Wordis jään hätta juba õigete nuppude üles leidmisega, et teha juba baastoimetust, rääkimata tõsisemast stiiliga automaatsest vormindamisest.

Teine tarkvara, milles ennast juba päris kõrgel tasemel oskajaks julgen nimetada, on pilditöötlusvahend GIMP, milles saan hakkama pisematest sodimistest kuni kihimaske kasutava pildimanipulasioonini. Ülikooli päevil sai Script-Fu’s isegi mingi pisipiltide genereerimise plugin kirjutatud, kuid see on kuhugi ära kadunud. Pole mõeldav, et ma selliseid asju üritakski mõnes teises, näiteks Photoshopis teha, kasvõi juba selle pärast, et esmalt Windowsis, siis Linuxis ja nüüd Macil kasutades oleks tulnud 3 litsentsi osta (rääkimata, et Photoshopi Linuxi all ei olegi saada)

Kolmas abivahend langeb jällegi pilditöötluse valda – selleks on vektorgraafika programm Inkscape, millele lülitusin ümber, kui selle esivanema, eestlase Lauri Kaplinski arendatud Sodi Podi tundus mitte nii hästi töötavat. Nüüdseks on Sodi Podi arendus juba aastaid lõppenud, kuid Inkscape on tuule tiibadesse saanud ja sellega suuremaid või väiksemaid pilte või ikoone joonistada on lausa lust. Nii näiteks kannab Kuutõrvaja logo minu autorimärki.