Harakati ya 0deps: Dependensi za Ndani na Mikataba Isiyobadilika
Watengenezaji programu mara nyingi husakinisha mamia ya maktaba za nje katika kila mradi. Mifumo ya kisasa (frameworks) inategemea maelfu ya dependensi zinazopitishwa (transitive dependencies). Hii ina maana kwamba programu yako inatumia kodi kutoka kwa wahusika mamia wasiojulikana.
Kasi hii inatengeneza hatari kubwa kwa mnyororo wako wa usambazaji wa programu (software supply chain).
Harakati ya 0deps inauliza swali rahisi: Je, itakuwaje ikiwa programu yako ingetumia kodi unayoidhibiti wewe mwenyewe?
Kila dependensi huongeza eneo lako la mashambulizi (attack surface). Inaweza kuleta mianya ya kiusalama, kuachwa bila matengenezo, au kuharibu kodi yako kupitia sasisho jipya. Unapoteza udhibiti wa kodi inayofanya kazi katika mazingira yako ya uzalishaji (production environment).
Katika mfumo wa 0deps, unaleta dependensi zote moja kwa moja kwenye repository ya mradi wako. Huisakinishi kwa njia ya kidijitali (dynamically) wakati wa usakinishaji. Kila kitu kinachohitajika kujenga na kuendesha programu yako kiko tayari hapo.
Njia hii inatoa faida kadhaa:
- Ujenzi unaoweza kurudiwa (reproducible builds)
- Kutegemea kidogo mifumo ya nje ya vifurushi (external package registries)
- Ukaguzi wa usalama uliowekwa kitovu
- Utabiri bora zaidi
- Hatari ndogo ya mnyororo wa usambazaji
Kanuni kuu si kuzuia kodi isibadilike. Algorithim na marekebisho ya usalama lazima yaendelee kubadilika. Kinachobaki imara ni mkataba wa umma (public contract).
Kila maktaba huonyesha kiolesura (interface) kilichoundwa kwa uangalifu.
- authenticate()
- createSession()
- verifyPasskey()
Kazi hizi (functions) zinaweka mkataba. Mkataba huo haubadiliki kamwe. Unaweza kuandika upya kodi ya msingi au kubadilisha maktaba nzima. Sehemu nyingine ya programu yako inabaki vilevile kwa sababu inawasiliana na mkataba pekee.
Udhaifu unapojitokeza, unaurekebisha ndani. Unasasisha utekelezaji (implementation) uliopo nyuma ya kiolesura. API ya umma inabaki vilevile. Programu yako inaendelea kufanya kazi bila mabadiliko ya kodi.
Muundo huu unatumia adapter ya ndani ili kutenga kodi ya nje: Application ↓ Public Interface ↓ Adapter ↓ Implementation
Ikiwa maktaba ya nje itatoweka, unasasisha adapter pekee. Hakuna sehemu nyingine ya programu yako itakayoharibika.
Harakati ya 0deps haipingi chanzo huru (open source). Inabadilisha jinsi unavyokitumia. Maktaba zinakuwa sehemu zilizounganishwa ambazo unazikagua na kuzipa matoleo (versioning) mwenyewe.
Hii inatengeneza programu inayodumu kwa miongo kadhaa. Utekelezaji unabadilika, lakini mikataba yako inabaki. Utulivu huu unafanya programu yako iwe na uwezo wa kutabirika na ustahimilivu.
