Pipedija - tautosaka, gandai, kliedesiai ir jokios tiesos! Durniausia wiki enciklopedija durnapedija!
Forkas
Forkas - nuo angl. fork - išsišakojimas. Tai toksai veiksmas, kai open source programuotojai dėl kažkokių priežasčių susipeša, nepasidalina ko nors ir tada atsiskiria.
Atsiskyrę programuotojai pradeda programuoti kokią nors savo produkto versiją. Tuo tarpu senoji versija kartais toliau ima gyventi savo gyvenimą, vis labiau toldama nuo forko, o forkas vis labiau tolsta nuo pradinės versijos. Kitais gi atvejais būna, kad tos versijos visgi persimaišo ar netgi sugrįžta atgal, bet apie pastarąjį variantą tai girdėti dar neteko. Tiesiog teoriškai taip įmanoma.
Dažniausia forko baigtis - kad naujas forkas tiesiog neturi daug pajėgumų, o yra organizuotas vos vieno ar kelių žmonių, todėl po kiek laiko nudūsta. Kartais kokius nors gerus dalykus iš to forko pasiima pagrindinės šakos programuotojai, taigi tokiais atvejais iš to forko būna bent jau kažkokios naudos. Kadangi tokie forkai būna trumpalaikiai ir niekam neįdomūs, tai ilgainiui juos visi užmiršta ir niekas neprisimena.
Retais atvejais būna taip, kad forkas paaiškėja besąs daug sėkmingesnis ar daug daugiau programuotojų pritraukęs, tokiu atveju forkas lieka gyvuoti, o nudūsta bazinė šaka. Kartais šioji nudūsta tik po daugelio metų vegetacijos. Čia būna ir sėkmingų forkų pavyzdžių:
- Firefox atsiforkino nuo Mozilla taip, kad galų gale visa Mozilla grupė pasidavė ir prisijungė prie Firefox kūrimo
- LibreOffice atsiforkino nuo OpenOffice, o šis faktiškai numirė ir dabar tik vaizduoja egzistenciją
- Calligra Office atsiforkino nuo KOffice, o šis po kelerių metų irgi išsibaigė
Ypatingai retais atvejais būna taip, kad daugelį metų egzistuoja ir forkas, ir bazinė versija, dar ir tarpusavy kažkiek keisdamiesi papildymais:
- Kažkada senovėje BSD išsiskaidė į FreeBSD, NetBSD ir OpenBSD, bet visos šios OS kažkaip vis dar irgi egzistuoja
- MariaDB atsiskyrė nuo MySQL, bet abi duomenų bazės vis dar egzistuoja
Bendrai forikinimasis yra natūralus programavimo procesas, nes kartais prireikia palaikyti kelias produkto versijas, kurios nelabai tarpusavy susiderina. Tačiau dažniausiai forkinimas sukelia daug bėdų, išsklaido resursus ir kartais išvis baigiasi tuo, kad nustoja egzistuoti ir bazinė, ir išsiforkinusi versijos. Žodžiu, programos kūrėjai susipjauna, viskas pasidaro tarpusavy nesuderinama, palaikymui pritrūksta energijos ir viskas baigiasi.
Kita rūšis forkų programavime
Yra dar kita rūšis forkų programavime - tai toksai UNIX sistemoms bendras programų vykdymo mechanizmas, kuris labai paprastas, bet kartu prikuriantis visokių problemų tais atvejais, kai reikia labai labai daug programų paleidinėjimų daryti.
UNIX sistemose, norint paleisti naują programą, reikia sukurti jai ir aplinką, o aplinka kuriama tokia, kokia buvo pas paleidžiančią programą. O kadangi ta paleidžianti programa gali prikurti neaišku ko ir neaišku kiek (visokių aplinkos kintamųjų ir panašiai), tai UNIX tam yra labai parastas sprendimas: OS nukopijuoja seną programos procesą su viskuo ir sukuria naują. Gaunasi du absoliučiai vienodi procesai, kurie yra toje pačioje būsenoje. Toks kopijavimas gaunamas, iškvietus OS funkciją fork().
Paskui po to forkinimo galima iškviesti kitą funkciją - exec(). Šiai tiesiog nurodoma, kokį programą užkrauti į buvusios programos vietą. Tada gaunasi taip, kad naujai paleista programa turi visą ankstesnės programos aplinką, įskaitant ir visokius kintamuosius.
Toksai mechanizmas yra labai geras, nes leidžia lengvai atsiriboti nuo kitų procesų ir viską padaryti labai paprastai, pvz., kokia nors paleidžianti programa sukuria aplinką (pvz., serverio startavimo programa), o paskui gali likti procesas, kuris nei neturi kažkokių konfigūravimo priemonių, todėl yra mažas ir greitas.
Problema iš forkinimo yra tik viena - jei reikia labai dažnai pakraudinėti kokią tai kitą programą, tai tas programų tarpusavio kopijavimasis labai jau daug resursų ėda, kartais netgi šimtus kartų daugiau, nei pats tos paleidžiamos programos vykdymas. Todėl dabar atsiranda visokie kitokie būdai, pvz., vykdyti per gijas (threadus), bibliotekines funkcijas ar panašiai. Bet tai jau atskira ir nelabai susijusi tema.