Zeleni programski kôd
Već je Karl Marks bio svestan značaja i efekata ekološke degradacije i uticaja koji (industrijski) razvoj civilizacije može imati na klimu, lokalne eko-sisteme i narušavnaje uslova života biljnog sveta.
Tehnološki razvoj u oblasti informacijsko-komunikacijske tehnologije (ICT) učinio je računare dovoljno jeftinim i pristupačnim za masovnu upotrebu. Gotovo uvijek računar će posao uraditi brže od čovjeka, a za većinu svakodnevnih životnih problema sa kojima možemo susresti i pomisliti da bi se mogli riješiti putem računara, vjerovatno već postoje gotova softverska rješenja. ICT industrija poprimila je globalno velike razmjere, sva računarska oprema, a naročito softver se rijetko posmatra kroz prizmu energetske efikasnosti. Prema procjenama, ICT u kojeg se ubrajaju serveri i osobni računari, telefoni, tableti, TV uređaji, routeri, switchevi i druga komunikacijska oprema kao trošilo energije emituje oko 2% stakleničkih gasova, što je u rangu emisija kompletne avioindustrije. Pored pomenute fizičke opreme ili hardvera, smisleno je reći i da softver, indirektno, troši energiju1Nijedan programski kod ne troši energiju! Hardverske komponente na kojima radi troše, a rad komponenti podređen je softveru..
Održivost
Održivost je najkreće rečeno, pristup određenoj industrijskog grani koji nastoji spriječiti potpunu eksploataciju prirodnih resursa, kako bi oni ostali dostupni dugoročno. Svijet ICT tehnologije, u potpunosti kao energet pokreće električna energija. Primarni cilj energetske održivosti jeste osigurati napajanje kompletnog sektora el. energijom iz obnovljivih izvora energije. Kako bi se što prije stiglo do stanja održivosti, potrebno je djelovati paralelno. Sa jedne strane težiti zamjeni neobnovljivih izvora energije obnovljivim, a sa druge povećavati energetsku efikasnost industrije. Zbog povećanja energetskih potreba nemoguće je djelovati samo na jedan način. Dostizanje samoodrživosti će za posljedicu imati smanjenje emisije stakleničkih gasova, od kojih najveći udio ima ugljendioksid. Naravno, kao što važi i za druge, ekološki pristup u ovoj industriji dugoročno donosi benefite svim stanovnicima naše planete. Sama kupovina uređaja i prije njegove upotrebe generiše emisiju stakleničkih gasova nastalih u proizvodnom procesu. Okvrni emisionih podaci su2How bad are banas? – carbon footprint of everything, by Mike BRENERS-LEE:
Računarska mašina | |
200 kg CO2e | jeftini laptop |
720 kg CO2e | premium iMac |
800 kg CO2e | gejmerski desktop |
Tabela 1 : Pregled nekih emisionih podataka
Poređenja radi prosječan benzinski automobil, kakvog najčešće možemo sresti na ulici, Euro4 standarda star 12 godina emituje oko 1g CO2e po pređenom kilometru.3https://dieselnet.com/standards/eu/hd.php
Hardver
Glavna filozofija razvoja svakog proizvođača računarske opreme jeste rješavanje problema maksimalnom brzinom, sa minimalnim zauzećem memorije. U proteklih 70 godina energetska efikasnost računara se postepeno povećavala. Broj računarskih operacija po jedinici utrošene količine energije udvostručavao se svake 1.5 godine, od tehnologije vakuumskih cijevi do integriranih el. kola i mikročipova.4https://energy.mit.edu/news/energy-efficient-computing/ Efikasnost je pratila rast je performansi i zbog same promjene u tehnologije izrade. Napredak tehnologije izrade mikročipova od 2000. do 2013. omogućio je da se količina tranzistora na čipu istih dimenzija poveća za 50% svake dvije godine5https://www.technotification.com/2021/06/what-is-nm-in-processors-4nm-7nm-and-10nm-in-cpus.html. Zbog malih dimenzija mikročipova reda nanometra (10-9) potreba za efikasnosti postala je neizostavan dio tehničkog zahtjeva izrade svake nove generacije. Sve manji i manji tranzistori kao osnovni gradivni elementi mikročipova novijih generacija moraju raditi pri manjim vrijednostima napona i struje, da ne bi pregorili. Uz druge optimizacije i nove arhitekture, nove generacije čipova troše manje količine energije za istu količinu urađenog posla od prethodnih.
Od 2013. do danas tehnologija izrade mikročipova doseže fizička ograničenja6http://www.prometej.ba/clanak/drustvo-i-znanost/fundamentalna-grupa/kraj-mooreovog-zakona-ili-zasto-svaka-naredna-serija-pametnih-telefona-nije-vise-puno-bolja-od-prethodne-5035. Daljnje smanjivanje dimenzija, koje je činilo okosnicu razvoja postalo je nemoguće zbog nepredvidljivog ponašanja komponenti uslijed dosezanja dimenzija molekularnog nivoa. Procesori pak, postaju brži zbog optimizacija arhitekture, internog seta instrukcija i mogućnosti hardverske paralelizacije izvršavanja određenih zadataka. Također, mikročipovi sastavni su elementi i svih drugih dijelova uređaja – memorijskih sklopova, ekrana, kamera itd., a proizvođači posvećuju sve više pažnje efikasnosti kako bi se njihov hardver mogao koristiti i u mobilnim uređajima, čije je napajanje ograničeno kapacitetom baterija. Ukoliko uporedimo glavne (flagship) uređaje vodećih proizvođača pametnih telefona, možemo vidjeti da se kapacitet baterije u proteklih 10 godina povećao dva i po puta, odnosno sa kapaciteta reda 1800 mAh na kapacitet reda 5000 mAh. Međutim, sa većim mogućnostima, hardvera, javljaju se i veći korisnički zahtjevi, pa prosječan korisnik i dalje uređaj puni jednom dnevno.
To znači da je globalni utrošak energije za punjenje takvih uređaja najmanje udvostručen. Broj korisnika mobilnih uređaja se također iz godine u godinu kontinuirano raste, pa je 2016. godine 49% svjetske populacije posjedovalo mobilni uređaj, a taj udio krajem 2021. godine iznosi 78%7https://www.statista.com/statistics/203734/global-smartphone-penetration-per-capita-since-2005/. Zbog predstave o razmjerima uticaja na našu životnu okolinu trenutno je u upotrebi oko 6 milijardi, a u protekloj godini prodano je 1,43 milijarde novih mobilnih uređaja8https://www.statista.com/statistics/203734/global-smartphone-penetration-per-capita-since-2005/.
Softver
Razvojem hardvera stvorene su pretpostavke za novi brži, jači i bolji softver. U momentu pisanja ovog članka u maju 2022. godina, samo na jednoj platformi Google Play-u objavljeno je 7490 novih aplikacija, a broj preuzimanja aplikacija u 2021. godini iznosio je 113 milijardi9https://appinventiv.com/blog/google-play-store-statistics/. Softver ulazi u sve pore našeg života, a nemali broj uređaja u opticaju razlog je za analizu energetske efikasnosti ne samo hardvera, već i softvera. Analogno proizvođačima hardvera koji se u proizvodnom procesu bave i njegovom efikasnošću, softver inžinjeri bi trebali činiti isto kada je u pitanju softver. Težnja ka efikasnosti industrijskog softvera uglavnom proizlazi iz finansijskih motiva – porasta troškova energenta, dok je u svijetu osobnih korisnika zbog ekspanzije mobilnih uređaja i laptopa efikasnost prvenstveno motivirana ograničenim kapacitetom baterije.
Bez obzira o namjeni softvera, prvo pravilo efikasnosti je da softver u svom radu koristi što manje hardvera. Efikasan softver će trošiti manje procesorskih ciklusa, manje memorije, stvarati manje mrežno opterećenje i u konačnici potrošiti manje energije. Prva radnja koja se možemo preduzima u tom smislu, a naročito u industrijskom sektoru je da se softver pokreće samo onda kada je potreban. Situacija u kojoj se pokrenuti softver ne koristi, je češća nego što se na prvu pomisli. Takav softver koji ne radi ništa i zauzima resurse i naziva zombi softver. Studijskom analizom podatkovnih centara u 2017. godini kojom je obuhvaćeno oko 16.000 virtualinih i fizičkih servera, uočeno je 25% fizičkih i 30% virtualnih zombi mašina10ZOMBIE/COMATOSE SERVERS REDUX, J. Koomey, J. Taylor, Stanford University, 2017. U domenu mobilnih uređaja ili osobnih računara količina zombi softvera zavisi od svakog korisnika pojedinačno, svaki se korisnik susreo najmanje jednom sa nekorištenom, a pokrenutom aplikacijiom od strane operativnog sistema ili sa aplikacijom koja nije upotrebljiva zbog obustave korisničke podrške.
Drugo pravilo jeste da softver treba da koristi što manje memorije. Računarska memorija za svoj rad troši energiju čak i kada se ne koristi. Jedan gigabajt radne (RAM) memorije, prema podacima različitih proizvođača memorije troši oko 2Wh energije, što se možda i ne čini mnogo, međutim na godišnjem nivou ušteda od 2GB memorije je ušteda ~140 kWh energije11Enabling More Agile and Sustainable Business Through Carbon-Efficient Digital Transformations, IDC, VMWare 2020.
Treći pristup održivog softvera je relokacija posla. Velike softverske kompanije globalnog tržišta posjeduju servere, koji se nalaze na različitim geografskim lokacijama i napajaju iz različitih izvora12npr. solarna energija ili energija vjetra, zavisi od vremenskih uvjeta, doba dana geografske lokacije na kojoj se server nalazi . Računarski zadatak putem interneta moguće proslijediti na drugu geografsku lokaciju, koja se u tom momentu napaja obnovljivim izvorima energije13A Low Carbon Kubernetes Scheduler, Daniel SCHIEN, University of Bristol, UK.
Grafik 1: Proizvodnja solarne energije je parabolična kriva, sa maksimalnom proizvodnjom u sunčeve energije sa pomjeranjem opterećenja (load shifting)
Šta je zeleni kôd?
Danas programeri proizvodeći softver raspolažu različitim vrstama alata – programskim jezicima. Kao i alati u stvarnom svijetu, programski jezici imaju svoju primarnu namjenu i najefikasniji način upotrebe. Zbog velike tržišne utakmice ovakve prakse međutim nisu uvijek u prvom planu.
Kada se govori samom razvoju i implementaciji programskih rješenja zeleni kôd je novi termin a koji u suštini znači da su algoritmi, kao sastavni dijelovi nekog programskog koda koncipirani tako da troše najmanju moguću količinu energije. Zeleni kôd također predstavlja ekološki osviješten pristup programerskim praksama, koji nije opozitan sa dosadašnjim praksama pisanja brzog i efikasnog programskog koda. Zeleni kod integriše pozitivne prakse u jednu cjelinu. Laički rečeno kôd će biti zelen ukoliko za njegovo stvaranje koristimo ispravan alat na ispravan način, a na kraju da i sami kod koristimo kako je i zamišljen. Alati programera su programski jezici, a način korištenja tih alata su programerske prakse.
Radi ilustracije filozofiju zelenog koda možemo predstaviti kao penjanje čovjeka na sprat. Iako dok se penjemo iz stepenice ne razmišljamo o tome, ali možemo se popeti tako što ćemo svaku stepenicu savladati posebno, stati, razmisliti o slijedećoj, odlučiti kojom nogom se penjati, da li ćemo preskočiti jednu itd. Ponavljajući niz koraka stepenica-po-stepenica lijevom pa desnom nogom naizmjenično je zapravo algoritam kojim se čovjek penje uz stepenice. Prilagođavanje visine koraka – penjanje po jednu, dvije ili tri stepenice, lijevom pa desnom nogom ili obratno, predstavlja izbor najboljeg algoritma u datoj situaciji. Izbor obuće i odjeće u kojoj se penjemo uz stepenice je alat koji koristimo za penjanje uz stepenice. Sigurno da je lakše u obući koja se ne kliže. Kada bi ovaj primjer preveli u programiranje izrada algoritma penjanja uz stepenice tako da penjač provede najmanje vremena na stepenicama, da se najmanje umori u najudobnijoj obući i odjeći predstavljala bi filozofiju zelenog koda.
Algoritmi predstavljaju sekvence koraka koje se ponavljaju prilikom rješavanja nekog problema. Za različite vrste problema, kao rješenja razvijani su različiti algoritmi. Brzina kojom će korišteni algoritam biti izvršen naziva se vremenska kompleksnost, a količinu memorijskog prostora koju će algoritam prilikom izvršavanja zauzeti naziva se prostorna kompleksnost. Obje dimenzije kompleksnosti važne su zato što postoji više načina na koje možemo koncipirati izvršavanje algoritamskog koda. Jednostavan primjer prostorne i vremenske kompleksnosti algoritma bila bi situacija u kojoj nastavnik sortira kontrolne radove učenika po abecedi. Da li će poredati sve radove po stolu i zauzeti više prostora, te potom birati po slovu prezimena ili će jednostavno uzimati jedan po jedan kontrolni rad i stavljati na hrpu koju prilikom svakog novog umetanja sortira po abecedi, ovisi od nastavnika. Takav postupak u razredu do 30 učenika ne doima se naročito velikim, međutim u digitalnom svijetu, sa potrebom sortiranja više hiljada kontrolnih radova, razlika u brzini sortiranja i upotrebi prostora će postati i više nego očigledna.
Kompleksnost algoritma predstavlja broj ponavljanja koraka u algoritma odnosu na broj podataka koje on obrađuje, te on može biti konstantan, logaritamski, linearan ili eksponencijalan. Bolja vremenska kompleksnost znači manje vrijeme izvršenja. Prostorna kompleksnost posmatra se na sličan način, s obzirom da smještanje i premještanje stotina hiljada elemenata nekog niza memoriji također zauzima slobodni prostor. Za zeleni kod možemo reći da je programerska praksa traženja naboljeg omjera vremenske i prostorne kompleksnosti algoritama. Za sada pronalazak idealnog omjera u smislu potrošnje energije utvrđen je empirijski simulacijama, provedenim korištenjem različitih programskih jezika.14https://www.researchgate.net/publication/320436353_Energy_efficiency_across_programming_languages_how_do_energy_ time_and_memory_relate
Simulacije efikasnosti programskih jezika provođene su tako što su testni algoritmi napisani kao programski kôd 27 najkorištenijih programskih jezika današnjice. Potom, taj je kôd izvršavan.
Tabela2: efikasnosti programskih jezika po kriterijima, normalizirani pregled od najboljeg ka najgorem
U tabeli su poredani programski jezici normalizirani po najboljem u svakoj kategoriji, odnosno najbrže vrijeme izvršenja ima programski jezik C, dok je slijedeći Rust, kojem je potrebno 1.04 puta više vremena da izvrši isti kod. S obzirom da se fizička veličina Energije mjeri u Džulima(J), a da se u elektronici može izraziti kao proizvod snage i vremena E[energija] = P[snaga] · t[vrijeme] proizvod mjerenih vrijednosti aproksimira energetsku efikasnost programskog jezika. Analizom dobivenih rezultata pokazala je da energetski najefikasniji jezik nije uvijek i najbrži.
Odgovor na pitanje “Koji je programski jezik najzeleniji?” je nemoguće dati, uzimajući u obzir različite namjene programskih jezika, njihove mogućnosti, kao i ograničenja ovakve vrste simulacije. Testni algoritmi predstavljaju mali uzorak u odnosu na količinu programskog koda u upotrebi, a programski jezici imaju širok spektar osnovne namjene poput upravljanja kućanskim aparatima poput veš mašine, za kompleksne matematske operacije ili za obradu slike. Dakle ponovno programiranje svih aplikacija iz nekog sporijeg u brži programski jezik je teško izvodljivo ili nemoguće zbog količine softvera kojeg bi trebalo ponovno programirati i zbog hardverske podrške. Programski jezici također naperduju sa vremenom, pa je njihovo pozicioniranje na tabeli promjenjiva kategorija. Razvoj i drugih komponenti sistema koji omogućavaju izvršavanje kôda poput interpretera ili kompajlera, zbog malih razlika između testiranih programskih jezika imaće uticaj na rezultat. Međutim, ovakav test efikasnosti programskih jezika ima svoj značaj i pokazuje da prilikom odabira jednog od pet najboljih programskih jezika nema značajne razlike, u smislu energetske efikasnosti, a da će u najgorem slučaju odabir “pogrešnog jezika” prilikom pisanja kôda imati višestruko manji utjecaj od odabira pogrešnog algoritma 15posmatrano na nizu od 10.000 elemenata – najeefikasniji jezik će na izvršenje nekog koda uticati sa relativno malim linearnim faktorom (veličina reda hiljade), a greške odabira pogrešnog algoritma mogu biti eksponencijalne prirode (veličina reda milijarde).
Zaključak
Nijedan proizvod ne može trajati vječno, međutim neprihvatljivo je da proizvođači softvera zloupotrebljavaju napredak hardvera. To čine tako što nove verzije aplikacija postaju nekompatibilne sa starim uređajima ili što alociraju više resursa, koje u konačnici i ne koriste. Najveći uticaj na okoliš ima upravo proizvodnja uređaja, pa je onda prijevremena zamjena najuticjanija. Zeleni softver je relativno nova i neistražena oblast, koja ima logičkog smisla, a njen okolinski uticaj je još uvijek nepoznatih razmjera. Ovu oblast treba posmatrati kao interdisciplinarnu u kojoj ulogu imaju svi – proizvođači hardvera, softvera i korisnici.
Ali, važno je ostati realan: većinu korisnika, većinu vremena performanse i ne zanimaju.16https://benchmarksgame-team.pages.debian.net/benchmarksgame/ Uređaj će zadatak svakako uraditi prije nas. U poređenju sa ekološkim promjenama u drugim granama najveća prednost upotrebe zelenog kôda je što njegovu primjenu korisnici, koji se inače protive promjenama, neće ni primijetiti.