LAKI PINGVINI<>
042013<><>

Razvoj Linux kernela

Kako se „kuva” Linux

Razvoj Linuxa, tačnije Linux kernela, jedan je od najdinamičnijih i najvećih open source projekata današnjice. Hiljade programera (kako nezavisnih tako i onih koji rade za kompanije uključene u projekat) svakodnevno učestvuje u pisanju izvornog koda i dodaju nove funkcionalnosti ili rešavaju postojeće probleme, a sve sa ciljem dobijanja što kvalitetnijeg krajnjeg proizvoda. Ovom prilikom bliže ćemo se upoznati sa načinom na koji ovako kompleksan sistem funkcioniše. Prvi čovek Linuxa, pod čijom se dirigentskom palicom odigrava ceo proces, svakako je Linus Torvalds. On daje poslednju reč kada je razvoj kernela u pitanju, ali je više nego jasno da jedan čovek ne može sam da upravlja celim sistemom, pa je odgovornost za pojedine celine (drajveri, mreža, podsistemi kernela itd.) poverena i drugim ljudima, takozvanim maintainerima (u bukvalnom prevodu – održavalac). Ovakvom delegacijom dužnosti stvara se hijerarhija obaveza i odgovornosti, kao i sistem poverenja, o čijem ćemo značaju nešto kasnije govoriti. Takođe, vođa projekta tako može lakše da koordiniše i upravljanja celokupnim projektom jer ima daleko manji broj ljudi sa kojima dolazi u direktan kontakt i neuporedivo manje posla oko samog izvornog koda kernela, a ne treba smetnuti s uma ni činjenicu da kernel trenutno ima više od 15 miliona redova.Kako se uopšte piše i ispravlja izvorni kôd? Svaki programer koji želi da napravi neku izmenu u kernelu radi to tako što napiše ispravku (eng. patch), koju zatim odgovarajućim kanalima prosledi u sistem. Jedan peč menja postojeći kôd tako što briše, dodaje ili menja postojeće redove. Međutim, daleko od toga da bilo čija izmena automatski postaje i sastavni deo sledećeg izdanja Linuxa, pošto postoji čitav niz preduslova koje je potrebno ispuniti da bi se osiguralo da željene izmene ne utiču negativno na krajnji rezultat. Najlakše će biti da na primeru jedne takve ispravke vidimo kako čitav sistem funkcioniše.

Ukoliko programer napiše peč kojim se, na primer, dodaje upravljački softver (drajver) za određeni uređaj, on će ga, poštujući propisane konvencije o pisanju ispravki, proslediti osobi nadležnoj za taj deo kernela (maintainer). Nakon revizije ostalih učesnika projekta i, naravno, ukoliko se predložena promena prihvati, nadležni održavalac će odobriti peč tako što će ga potpisati i proslediće ga višoj instanci (tj. uključiti u podsistem za koji je zadužen). Proces revizije i potpisivanja ponavlja se nekoliko puta dok se ne dođe do vrha, čime se smanjuje mogućnost da dođe do problema sa drugim delovima kernela. Na kraju, ukoliko je sve u redu, izmena se uključuje u kernel i postaje njegov sastavni deo. Iako deluje kao jednostavan i brz proces, u stvarnosti situacija može da bude drugačija. Peč testira više učesnika i ukoliko naiđu na problem, on može da bude odbijen ili vraćen na doradu. To produžava vreme njegove implementacije, ali je taj proces neophodan kako se ne bi ugrozile stabilnost i sigurnost samog kernela i kako ne bi dolazilo do problema u radu (nemojte zaboraviti da isti kernel mora da radi na mnogo različitih računarskih konfiguracija i da pritom treba da obavlja najraznovrsnije zadatke).

Videli samo kako jedan peč putuje do kernela, a sada treba da vidimo kako gomila predloženih izmena postaje Linux kernel. Vremenski okvir objavljivanja Linux kernela nema strogo fiksiranu vrednost, ali se projekat drži ritma da od tekuće do sledeće stabilne verzije protekne dva do tri meseca. Jedan razvojni ciklus započinje Linusovom objavom da je „merge window” otvoren, što predstavlja poziv maintainerima da prikupljene izmene (koje su prošle prethodno opisani proces) pošalju u mainline kernel (koji održava Linus). Ovaj prozor traje dve do tri sedmice i tokom tog perioda pečevi se spajaju sa kernelom brzinom koja dostiže i hiljadu izmena na dan. Onog momenta kada se „merge window” zatvori, dobijamo -rc1 kernel (release candidate 1, npr. od aktuelne 3.7 verzije kernela dobijamo 3.8-rc1). Do kraja tekućeg razvojnog ciklusa nove izmene se ne uključuju u kernel (osim u izuzetnim slučajevima) i radi se samo na popravci uočenih nedostataka, pri čemu se približno na svakih sedam dana objavljuje sledeća rc verzija. Na kraju ciklusa, kada je sve (najčešće) popravljeno i upeglano, Linus objavljuje finalnu verziju kernela, a sledeći razvojni ciklus započinje novim „merge window” pozivom.

Nakon što smo se upoznali sa osnovnim principima po kojima funkcioniše jedan kompleksan projekat kao što je razvoj Linux kernela, ostaje da vidimo na koji se način odvija međusobna komunikacija i kako se obavlja posao spajanja pečeva u postojeći kernel. Kako se mnogobrojni programeri uključeni u posao nalaze u različitim zemljama širom sveta i pošto većina ima različito radno vreme na samom projektu, kao najlogičnije i najpogodnije sredstvo komunikacije nametnule su se mail liste, od kojih se najvažnije vode na lkml.org (Linux Kernel Mailing List) sajtu, mada postoje i druge. Različite teme vezane za razvoj, kao i pojedini pečevi, podsistemi ili drugi bitni elementi kernela imaju svoje teme u okviru ovih lista, pošto bi bilo nemoguće pratiti apsolutno sve što se dešava u ovako dinamičnom projektu.

Na kraju, pomenimo i alat kojim se obavlja konkretan posao upravljanja kernelom i manipulacija dostupnim izmenama. Nakon perioda koji je izazvao dosta polemike, a u kojem je korišćen vlasnički (proprietary) sistem za distribuiranu reviziju i mendžment izvornog koda BitKeeper, Linus Torvalds je 2005. godine, nezadovoljan performansama drugih rešenja (CVS i SVN), započeo razvoj sopstvenog po imenu Git. Ovaj alat je trenutno najpogodniji za poslove upravljanja razvojem kernela pošto je od starta pisan upravo za tu namenu, a izradila ga je osoba koja vodi projekat.

Iako podugačak, ovaj tekst je tek zagrebao po površini svega onog što čini zajednicu koja stvara, možemo slobodno reći, najznačajniji projekat slobodnog softvera danas – Linux kernel. Zainteresovani za ovu temu na adresi http://goo.gl/owWvp mogu naći detaljnije objašnjenje razvojnog procesa, namenjeno programerima koji žele da se uključe projekat.

Goran STRIČIĆ

 
systemd
qBittorrent 3.0.8
NixNote 1.4
Razvoj Linux kernela
Šta mislite o ovom tekstu?
Home / Novi brojArhiva • Opšte temeInternetTest driveTest runPD kutakCeDetekaWWW vodič • Svet igara
Svet kompjutera Copyright © 1984-2018. Politika a.d. • RedakcijaKontaktSaradnjaOglasiPretplata • Help • English
SKWeb 3.22
Opšte teme
Internet
Test Drive
Test Run
PD kutak
CeDeteka
WWW vodič
Svet igara



Naslovna stranaPrethodni brojeviOpšte informacijeKontaktOglašavanjePomoćInfo in English

Svet kompjutera