Moviento 0deps: Dependensi za Ndani na Usalama
Watengenezaji wa programu husakinisha mamia ya maktaba za nje katika miradi mingi. Mifumo ya kisasa (frameworks) inategemea maelfu ya dependensi zinazopitishwa (transitive dependencies). Hii ina maana kwamba programu yako inafanya kazi kwa kutumia kodi iliyoandikwa na mamia ya watu wasiojulikana.
Mifumo hii huongeza kasi ya uendelezaji. Pia inatengeneza hatari kubwa katika mnyororo wa ugavi (supply chain risks).
Mwendo wa 0deps unauliza swali rahisi: Je, itakuwaje ikiwa programu yako ingefanya kazi kwa kutumia kodi unayoidhibiti pekee?
Kila dependensi huongeza eneo jipya la mashambulizi (attack surface). Dependensi inaweza:
- Kuleta kasoro za kiusalama.
- Kuwa lengo la mashambulizi ya mnyororo wa ugavi.
- Kuachwa na mwanzilishi wake.
- Kubadilisha API yake ya umma.
- Kuharibu uoanishaji wa nyuma (backward compatibility).
Katika mfumo wa 0deps, unahamisha dependensi zote muhimu moja kwa moja kwenye sehemu yako ya kuhifadhia mradi (project repository). Unaacha kupakua vifurushi (packages) kwa njia ya moja kwa moja wakati wa ujenzi (build time). Kila kitu kinachohitajika ili kuendesha programu kinabaki kwenye sehemu ya kuhifadhia tangu wakati unapoinakili (clone).
Mtindo huu unatoa:
- Ujenzi unaoweza kurudiwa (reproducible builds).
- Utegemezi mdogo wa sajili za nje za vifurushi.
- Ukaguzi wa usalama uliowekwa kitovu.
- Matokeo yanayotabirika.
Lengo si kufanya kodi iwe tuli. Utekelezaji (implementations) na kanuni (algorithms) lazima zibadilike ili kurekebisha hitilafu na kubaki salama. Lengo ni kuweka mkataba wa umma (public contract) ukiwa thabiti.
Kila maktaba huonyesha kiolesura (interface) maalum. Kwa mfano:
authenticate()createSession()verifyPasskey()
Kazi hizi huunda mkataba. Mkataba unabaki vilevile hata kama ukiandika upya kodi ya msingi. Unaweza kubadilisha maktaba au mabadiliko ya itifaki (protocols) bila kuharibu sehemu nyingine ya programu yako.
Wakati udhaifu unapotokea, kwa kawaida unakabiliwa na matatizo mawili:
- Rekebisha hitilafu (bug).
- Angalia ikiwa sasisho hilo linaharibu programu yako.
Katika usanifu wa 0deps, tatizo la pili hutoweka. Unasasisha utekelezaji uliopo nyuma ya kiolesura. API ya umma inabaki vilevile. Programu yako inaendelea kufanya kazi bila mabadiliko ya kodi.
Kwa kutenga kodi ya nje nyuma ya viunganishi vya ndani (internal adapters), unapunguza hatari ya muda mrefu. Ikiwa maktaba itatoweka kesho, unapaswa kusasisha kiunganishi (adapter) pekee.
0deps haipingi chanzo huru (open source). Inabadilisha jinsi unavyokitumia. Maktaba zinakuwa sehemu zilizounganishwa badala ya viunganishi vya nje vya moja kwa moja.
Hii inatengeneza programu inayotabirika, yenye ustahimilivu, na rahisi kudumisha. Utekelezaji unabadilika. Mkataba unabaki.
