2.18 Usimamizi wa utegemezi na mnyororo wa ugavi
Muhtasari na msukumo
Fungua faili ya kufunga ya mradi wako na uhesabu vifurushi. Ukiwa kama timu nyingi, msimbo ulioandika ni safu nyembamba juu ya mamia au maelfu ya utegemezi ambao hukuandika, huuelewi kikamilifu, na huwezi kuukagua kwa urahisi. Huduma ya kisasa ya wavuti huvuta mfumo wa kazi, kiendeshi cha hifadhidata, maktaba ya kumbukumbu, na muundo wa upangaji data, na kila kimoja huvuta zaidi. Matokeo yake ni kwamba programu yako nyingi inayoendesha, mara nyingi sehemu kubwa yake, ilitoka kwa wageni kwenye mtandao. Hiyo si kushindwa. Ni makubaliano yanayoruhusu timu ndogo kusafirisha kwa wiki kile ambacho zamani kilichukua miaka. Hoja ni kukubali makubaliano hayo macho yakiwa wazi.
Kusimamia msimbo huo wa kukopa vizuri ni nidhamu ya kihandisi yenyewe, na sura hii inahusu ufundi wake: jinsi unavyochagua utegemezi, unavyoufunga kwa matoleo, unavyousasisha, unavyozalisha ujenzi upya, na unavyoweka grafu nzima ikiwa wazi inapokua. Upande wa tishio la usalama, ambapo mshambulizi anaitia sumu grafu hiyo kwa makusudi, unashughulikiwa kikamilifu katika sura ya 4.2 kuhusu usalama wa programu. Hapa wasiwasi ni uhandisi wa kila siku: vikwazo vya matoleo, faili za kufunga, migongano ya kupita, mzunguko wa masasisho, na kujua kilichomo kwenye programu yako. Ukiweka hili sawa usalama unakuwa rahisi zaidi sana, kwa sababu huwezi kutetea mnyororo wa ugavi usioweza kuuona.
Kwa timu kubwa, na hasa kwa mashirika makubwa na serikali, dau hupanda kwa ukubwa. Hazina mia tano zinapochagua maktaba zake kila moja, unapata matoleo mia tano yanayotofautiana kidogo ya mfumo uleule wa kumbukumbu, leseni ambayo hakuna aliyeidhinisha, na hakuna njia ya kujibu “je, tumeathirika?” udhaifu mkubwa unapotua. Mashirika makubwa hujibu kwa maktaba zilizoidhinishwa na rejista za pamoja. Serikali zinazidi kujibu kwa maagizo: Amri ya Utendaji ya Marekani 14028 ilisukuma orodha ya vifaa vya programu (SBOM) na asili ya ujenzi kuwa msingi kwa programu wanazonunua. Mashirika yanayobaki watulivu wakati wa mgogoro unaofuata wa utegemezi ni yale yaliyofanya kazi hii kabla ya kuihitaji.
Kanuni kuu
- Programu yako nyingi ni msimbo ambao hukuandika; chukua wajibu hata kama hukuuandika.
- Kila utegemezi ni dhima ya kudumu kama ulivyo mali; uongeze kwa makusudi, si kwa kawaida.
- Funga matoleo kwa faili za kufunga ili ujenzi uweze kuzalishwa upya na kuwa wa uhakika, si “chochote kilichokuwa cha hivi karibuni siku hiyo.”
- Sasisha kwa mzunguko thabiti, kwa hatua ndogo za kiotomatiki, badala ya miruko adimu ya kutisha.
- Jua hasa kilichomo kwenye programu yako; huwezi kulinda wala kutoa leseni kwa usichoweza kukiorodhesha.
- Pendelea utegemezi wachache unaodumishwa vizuri kuliko mwingi wa kurahisisha.
- Dhibiti vifurushi vinatoka wapi; rejista isiyothibitishwa ni mlango wazi.
Mapendekezo
Elewa matoleo na uyawekee vikwazo kwa makusudi
Jifunze jinsi mfumo wako wa ikolojia unavyoeleza matoleo, kwa sababu tabia yako ya kusasisha inaendeshwa kabisa nayo. Wasimamizi wengi wa vifurushi hutumia aina fulani ya uwekaji wa matoleo wa kimaana (SemVer), ambapo toleo linasomeka MAJOR.MINOR.PATCH: ongezeko la patch linaahidi marekebisho ya hitilafu tu, ongezeko la minor linaongeza vipengele vinavyooana nyuma, na ongezeko la major linaashiria mabadiliko yanayovunja. Matamko yako ya utegemezi kisha huweka kikwazo, kama “inaoana na 4.x” au “angalau 2.3.0,” kinachomwambia mtatuzi atembee umbali gani anapochagua matoleo.
Kuwa na nia kuhusu jinsi vikwazo hivyo vilivyo legevu au vikali. Wigo legevu hupokea marekebisho kiotomatiki, kwa gharama ya kuruhusu toleo dogo ulilolipitia kamwe liteleze kwenye uzalishaji; kufunga kwa ukali kunatoa udhibiti kwa gharama ya juhudi za mkono. Jibu la kiutendaji kwa timu nyingi ni kutangaza wigo wenye ruhusa ya wastani kwenye faili yako ya maelezo, kisha ugandishe matoleo hasa yaliyotatuliwa kwenye faili ya kufunga ili wigo utathminiwe tena tu unaposasisha kwa makusudi. Chukulia SemVer kama ahadi ambayo wadumishaji wanajaribu kuitimiza, si hakikisho wanalolitimiza daima; toleo la “patch” bado linaweza kukuvunja, ndiyo maana unajaribu masasisho badala ya kuyaamini.
Weka faili za kufunga kwenye udhibiti na udai ujenzi unaoweza kuzalishwa upya
Faili ya kufunga hurekodi toleo hasa na hashi ya kriptografia ya kila kifurushi kwenye grafu yako ya utegemezi, vya moja kwa moja na vya kupita sawa. Iweke kwenye udhibiti wa matoleo (sura ya 2.6) na iichukulie kama sehemu ya daraja la kwanza ya chanzo chako. Kazi yake ni kufanya ujenzi wako kuwa kazi ya hisabati: ingizo zilezile huzalisha pato lilelile kila mara, kwenye kila mashine, mwaka huu na ujao. Bila hiyo, wahandisi wawili wanaoendesha “install” wiki moja tofauti wanaweza kupata msimbo tofauti, na hitilafu inayoonekana kwenye uzalishaji inaweza kuwa haiwezekani kuzalisha upya kwenye kompyuta mpakato iliyoijenga.
Lenga ujenzi unaoweza kuzalishwa upya kweli, ambapo commit fulani daima huzalisha kitu chenye tabia sawa. Katika ujumuishaji endelevu (sura ya 8.1), sakinisha kwa ukali kutoka kwenye faili ya kufunga na ufeli ujenzi ikiwa faili ya kufunga na faili ya maelezo hazikubaliani, badala ya kutatua matoleo mapya kimyakimya. Hashi zilizo kwenye faili ya kufunga hufanya kazi mbili: zinafunga tabia na zinagundua kuchezewa, kwa sababu kifurushi ambacho maudhui yake hayalingani tena na hashi yake iliyorekodiwa hakitasakinishwa. Uwezo wa kuzalisha upya ndio msingi ambao kila kitu kingine katika sura hii kinasimama juu yake.
Simamia utegemezi wa kupita na migongano ya almasi kwa makusudi
Utegemezi wako wa moja kwa moja ni ule tu uliouita kwa jina. Chini yake kuna grafu kubwa zaidi ya utegemezi wa kupita, vifurushi ambavyo vifurushi vyako vinavitegemea, na hapo ndipo hatari yako nyingi na mshangao wako mwingi unaishi. Kushindwa kwa kawaida ni utegemezi wa almasi: maktaba A inahitaji toleo la 1 la zana ya pamoja, maktaba B inahitaji toleo la 2, na sasa mtatuzi lazima apatanishe ombi lisilowezekana. Mifumo mingine ya ikolojia inaruhusu matoleo mengi kuishi pamoja, ikibadilisha diski na kumbukumbu kwa amani; mingine inalazimisha toleo moja na kukuachia kupatanisha mgogoro.
Fanya migongano hii ionekane badala ya kuiacha ioze. Tumia zana zako kuchapisha mti kamili wa utegemezi na kueleza kwa nini kifurushi fulani kipo na nani alikivuta. Mgongano unapoonekana, uutatue kwa makusudi: sasisha anayechelewa, weka kubatilisha kwa kufunga, au acha utegemezi ambao madai yake huwezi kuyatimiza. Tazama ukuaji wa grafu kwa muda, kwa sababu kuenea kusikodhibitiwa kwa utegemezi wa kupita ni mkusanyiko wa polepole wa deni la kiufundi unaojitokeza hatimaye kama usasishaji usiotatulika au udhaifu usioweza kuuzibwa bila kuandika upya.
Sasisha kwa mzunguko thabiti na maombi ya kuvuta ya kiotomatiki
Mkakati hatari zaidi wa kusasisha ndio ambao timu nyingi huuteleza kwa bahati mbaya: kamwe usisasishe, kisha sasisha kila kitu kwa mara moja chini ya shinikizo la dharura udhaifu muhimu unapolazimisha mkono wako. Kufikia hapo uko nyuma kwa miaka, rekodi za mabadiliko ni ukuta, na usasishaji ni mradi wa wiki nyingi badala ya kazi ya kawaida. Suluhisho ni mzunguko. Pokea kisasishaji cha utegemezi cha kiotomatiki (zana za Dependabot na Renovate ni mifano ya kawaida) kinachofungua ombi la kuvuta kila utegemezi unapokuwa na toleo jipya, kikiwa na rekodi ya mabadiliko na matokeo ya majaribio yako yaliyoambatishwa.
Kisha rekebisha mtiririko ili ukusaidie badala ya kukuzamisha. Mkondo mkali wa maombi ya kuvuta ya mtu mmoja mmoja kila asubuhi huwafunza watu kuyapuuza, jambo baya kuliko kutokuwa na uotomatishaji kabisa. Weka masasisho ya hatari ndogo kama matoleo ya patch kwenye makundi, yaache yaunganishwe kiotomatiki majaribio yakipita, na uhifadhi umakini wa binadamu kwa ongezeko la matoleo makuu na chochote kinachogusa maktaba nyeti. Weka mdundo ambao timu inaweza kuudumisha, labda mapitio ya kila wiki, ili kusasisha kubaki kodi ndogo, thabiti badala ya bili adimu yenye maumivu. Hapa ndipo mkakati imara wa majaribio (sura ya 2.4) unapolipa, kwa sababu masasisho ya kiotomatiki ni salama tu ikiwa majaribio yako yanaweza kunasa yanachovunja.
Punguza ukubwa wako na tathmini kabla ya kupokea
Kila utegemezi unaoongeza ni ahadi ya kudumu: kwa hitilafu zake, udhaifu wake, leseni yake, kuendelea kwa mdumishaji wake kupendezwa, na grafu yake inayokua ya vitegemezi vidogo. Utegemezi wa bei nafuu zaidi kusimamia ni ule ambao hukuuongeza. Kabla ya kufikia kifurushi, uliza kama mistari michache ya msimbo wako ingetosha, hasa kwa utendaji mdogo. Historia ya mifumo ya ikolojia ya vifurushi imejaa hadithi za tahadhari ambapo kifurushi kidogo, kinachotegemewa na wengi kiliondolewa au kutekwa na kuvunja nusu ya mtandao.
Unapopokea, tathmini mgombea kama uhusiano wa muda mrefu ulivyo. Angalia afya ya matengenezo: commit za hivi karibuni, wadumishaji wanaoitikia, historia halisi ya matoleo, na zaidi ya mtu mmoja mwenye funguo. Angalia leseni na uthibitishe iko kwenye orodha yako iliyoidhinishwa (sura ya 10.3). Angalia rekodi yake ya usalama, ukubwa wake, na alama yake ya kupita, kwa sababu kipengele kidogo hakistahili kuvuta vifurushi mia. Andika vigezo hivi ili “tuongeze hiki?” iwe orodha hakiki ambayo timu yako nzima inaitumia kwa uthabiti, si hisia.
Zalisha SBOM na unase asili ya ujenzi
Huwezi kujibu “je, tumeathirika na udhaifu huu?” haraka isipokuwa tayari unajua kilichomo kwenye programu yako. SBOM ndilo jibu: orodha inayosomeka na mashine ya kila kijenzi katika ujenzi, na matoleo na leseni, katika muundo wa kawaida kama SPDX au CycloneDX. Izalishe kiotomatiki kama sehemu ya bomba lako la ujenzi, ihifadhi kando ya kitu kilichotengenezwa, na uiweke kwa muda wote kitu hicho kinaendeshwa popote. Udhaifu mkuu unaofuata unapotua, hoja dhidi ya SBOM zako hugeuza wiki ya grep ya kuhangaika kuwa ripoti ya dakika tano.
Nenda hatua moja zaidi na unase asili: rekodi iliyosainiwa, inayoonyesha kuchezewa ya jinsi kitu kilijengwa, kutoka commit ipi ya chanzo, na bomba lipi. Jumuiya ya programu huria imekutana kwenye mfumo wa SLSA (Supply-chain Levels for Software Artifacts) kama mfano wa madaraja kwa hasa jambo hili, ukitoka “tunaweza kueleza ujenzi wetu” hadi “tunaweza kuthibitisha, na uthibitisho unastahimili mfumo wa ujenzi ulioathirika.” Uthibitisho huwaruhusu watumiaji kuthibitisha kwamba kitu kilitoka kweli kwenye bomba lako. Kwa kazi ya serikali hili linazidi kuwa si la hiari; asili na SBOM ziko ndani ya maagizo ya ununuzi, kwa hiyo kujenga uwezo mapema kunakuweka unastahili kuomba zabuni.
Dhibiti vyanzo vyako kwa rejista, vioo, na uhifadhi wa moja kwa moja
Mahali vifurushi vyako vinatoka ni muhimu kama vifurushi unavyochagua. Vuta moja kwa moja kutoka mtandao wa umma kila ujenzi na unarithi kukatika kwake, matoleo yake yaliyoondolewa, na washambulizi wake. Weka rejista ya vifurushi ya ndani au kioo cha kuhifadhi kinachopitisha mfumo wa ikolojia wa umma, ili ujenzi uwe wa haraka, unaorudiwa, na uliotengwa na kutoweka kwa chanzo cha juu. Rejista pia inakuwa mahali pa asili pa kutekeleza sera: zuia matoleo mabaya yanayojulikana, tenga matoleo mapya kwa muda mfupi wa kuiva, na ukatae vifurushi vinavyoshindwa malango yako ya leseni au usalama.
Sanidi rejista hiyo kwa uangalifu kuepuka mitego miwili mahususi. Mkanganyiko wa utegemezi hutokea pale zana ya ujenzi, inapopewa kifurushi cha ndani cha faragha na cha umma cha jina lilelile, inapovuta cha mshambulizi cha umma; unajilinda kwa kuweka majina ya ndani katika wigo na kufunga vifurushi vya ndani kwenye chanzo cha ndani waziwazi. Kuiga majina kwa makosa ya kuandika hutokea pale kifurushi hasidi kinatumia jina lililo mbali na kimoja maarufu kwa kibonyezo kimoja na kusubiri kidole cha makosa; rejista iliyochaguliwa yenye orodha ya kuruhusu huikataa mlangoni. Kwa seti ndogo ya utegemezi muhimu au unaosonga polepole, fikiria uhifadhi wa moja kwa moja, kuweka chanzo halisi cha utegemezi kwenye hazina yako mwenyewe, ili ujenzi wako usiwe na utegemezi wa nje kabisa. Hubadilisha urahisi wa kusasisha kwa udhibiti kamili, ambao wakati mwingine ndio hasa unaofaa.
Mabadilishano: faida na hasara
| Mbinu | Faida | Hasara |
|---|---|---|
| Wigo legevu wa matoleo | Marekebisho ya kiotomatiki; juhudi ndogo ya mkono | Msimbo ambao haujapitiwa hufika uzalishaji; si wa uhakika bila faili ya kufunga |
| Kufunga kwa ukali pamoja na faili ya kufunga | Ujenzi unaoweza kuzalishwa upya, kukaguliwa | Inahitaji kazi ya makusudi ya kusasisha; inaweza kuchelewa kwa marekebisho |
| Mzunguko mkali wa kusasisha | Hatua ndogo, salama; daima karibu na ya sasa | Msukosuko wa mara kwa mara; inahitaji umakini thabiti wa wapitiaji |
| Usasishaji adimu, wa kundi kubwa | Usumbufu mdogo siku hadi siku | Wa kutisha, hatari, ghali unapolazimishwa |
| Utegemezi mwingi wa kurahisisha | Haraka kujenga vipengele | Uso mkubwa wa shambulio; mzigo mzito wa matengenezo |
| Ukubwa mdogo pamoja na uhifadhi wa moja kwa moja | Udhibiti, uso mdogo, hakuna hatari ya chanzo cha juu | Msimbo zaidi unaoumiliki; unabeba masasisho mwenyewe |
| Rejista ya umma moja kwa moja | Hakuna usanidi | Kukatika, kuondolewa, mkanganyiko na kuigwa majina |
| Rejista ya ndani na kioo | Kasi, utekelezaji wa sera, kutengwa | Miundombinu ya kuendesha na kudumisha |
Mvutano wa msingi uko kati ya kasi na udhibiti. Kila chaguo hapo juu ni kipiga kilekile kinachotazamwa kutoka pembe tofauti: msimbo wako wa kukopa kiasi gani utautawala kikamilifu, na kiasi gani utaruhusu kuingia kwa uaminifu? Egemea sana udhibiti na unazama katika mapitio ya mkono, unaachwa nyuma kwenye marekebisho ya usalama, na kupunguza kasi ya timu ambayo utegemezi ulipaswa kuiharakisha. Egemea sana kasi na unaamka siku moja ukiwa na grafu isiyokaguliwa, isiyoweza kusasishwa na ukiukaji wa leseni usioweza kuueleza kwa wakili. Suluhisho ni msimamo, si nukta isiyobadilika: funga na uzalishe upya kila kitu, sasisha mfululizo kwa hatua ndogo, punguza unachochukua, na utekeleze sera kwenye kiwango cha kuchuja unachodhibiti. Mchanganyiko huo unakununulia kasi na usalama, biashara inayostahili kufanywa kwa ukubwa.
Maswali ya kujadili na timu yako
Mzunguko wenu halisi wa kusasisha ni upi, na je, usasishaji wa dharura wa kulazimishwa ungechukua saa au wiki? Timu nyingi haziwezi kujibu hili kwa uaminifu hadi udhaifu muhimu ulazimishe suala. Sura inachukulia usasishaji thabiti, wa kiotomatiki, wa hatua ndogo kama njia salama na usasishaji adimu wa mlipuko mkubwa kama hatari, kwa sababu pengo unaloliacha wazi ndilo utalazimika kulivuka kwa kasi chini ya shinikizo baadaye. Leta ushahidi: utegemezi wenu ngapi uko nyuma kwa zaidi ya toleo moja kuu, na usasishaji wenu mkubwa wa mwisho ulichukua muda gani kweli. Jadilini kama mnaweza kupokea kisasishaji cha kiotomatiki, jinsi mtakavyoweka masasisho ya hatari ndogo kwenye makundi ili watu wasizime, na majaribio gani mnahitaji ili kuunganisha kiotomatiki kuwe salama. Jibu linapaswa kubadilisha jinsi mnavyopanga bajeti ya muda wa kihandisi, likigeuza mgogoro adimu kuwa kodi ya kawaida ya kila wiki. Jibu la uaminifu likiwa “wiki,” hiyo ni hatari ya kutajwa sasa, si ya kugunduliwa katikati ya tukio.
Udhaifu mkubwa ukitangazwa katika maktaba ya kawaida sasa hivi, mngeweza kuorodhesha kila kitu kilichoathirika mnachoendesha kwa kasi gani? Hili ndilo swali ambalo SBOM ipo kulijibu, na kasi ya jibu lenu ni kipimo cha moja kwa moja cha ukomavu wenu wa mnyororo wa ugavi. Bila orodha mnabaki kutafuta kwa grep kwenye hazina na kuhoji timu, ambalo huchukua siku ambazo huenda hamna wakati saa inapokimbia. Leta ishara madhubuti: je, mnazalisha SBOM kwa kila ujenzi, imehifadhiwa wapi, na je, mnaweza kweli kuhoji kuvuka zote leo? Jadilini kama mnajua si utegemezi wa moja kwa moja tu bali grafu ya kupita, kwa kuwa kifurushi chenye udhaifu kwa kawaida ni kile msichokiita kamwe. Jibu huamua kama tukio lenu linalofuata ni hoja au zoezi la moto, na linastahili kujenga uwezo kabla ya kuuhitaji. Serikali sasa zinaamuru hili kwa sababu hiyo hiyo.
Mnaamuaje kama utegemezi mpya unastahili kupokelewa, na je, kila mtu anatumia kigezo kilekile? Sura inasema kila utegemezi ni dhima ya kudumu kama ulivyo urahisi, na kwamba wa bei nafuu zaidi kusimamia ni ule ambao hukuuongeza kamwe. Hata hivyo kwenye timu nyingi uamuzi hauonekani: mhandisi anahitaji kipengele, anapata kifurushi, na kiko kwenye faili ya kufunga kabla ya chakula cha mchana bila mapitio ya matengenezo yake, leseni, historia ya usalama, au ukubwa. Leta mifano kutoka grafu yenu ya vifurushi ambavyo hakuna anayekumbuka kuvipokea na asingeweza kuvitetea leo. Jadilini kama orodha hakiki ya tathmini iliyoandikwa na orodha ya maktaba zilizoidhinishwa (sura ya 10.3) ingesaidia au ingeongeza msuguano tu, na mstari uko wapi kati ya wasaidizi wadogo mnaopaswa kujiandikia na miundombinu halisi inayostahili kutegemewa. Jibu linaumba uzito wa muda mrefu ambao timu yenu inabeba, uamuzi mdogo mmoja kwa wakati.
Je, mnatawala utegemezi wenu wa kupita kweli, au ule tu mlioutaja kwa jina? Hatari yenu nyingi inaishi ngazi moja chini, katika vifurushi ambavyo vifurushi vyenu viliingiza, na mgongano wa almasi ambapo maktaba mbili zinadai matoleo yasiyooana ya zana ya pamoja unaweza kuzuia usasishaji wakati mbaya zaidi unaowezekana. Hii ni muhimu kwa ukubwa kwa sababu kifurushi kimoja cha kupita kisichoweza kupachikwa kinaweza kugandisha marekebisho ya usalama kuvuka mamia ya hazina, na mvuto unaoshindana ni halisi: kufichua na kufunga grafu kamili hugharimu juhudi endelevu, huku kuipuuza kubadilisha juhudi hiyo na mkusanyiko wa polepole wa deni linalojitokeza kama usasishaji usiotatulika. Leta ushahidi: je, zana zenu zinaweza kuchapisha mti kamili na kueleza kwa nini kifurushi chochote kipo na nani alikivuta, na matoleo mangapi tofauti ya maktaba zenu za kawaida zaidi yanaishi pamoja leo? Kwa mashirika makubwa na serikali, ongeza kama orodha na sera yenu hata zinafika vijenzi vya kupita, kwa sababu agizo la kujua kilichomo kwenye programu yako halina maana ikiwa nusu ya grafu haionekani kwako. Jibu linakuambia kama usasishaji wenu unaofuata wa kulazimishwa ni uunganishaji wa kawaida au uchimbaji wa timu nyingi.
Vifurushi vyenu vinatoka wapi kweli, na nini kinamzuia mshambulizi kuteleza kimoja ndani? Kila ujenzi unaovuta moja kwa moja kutoka mtandao wa umma unarithi kukatika kwake, matoleo yake yaliyoondolewa, na mashambulizi mawili mahususi: mkanganyiko wa utegemezi, ambapo zana ya ujenzi inavuta kifurushi cha umma kinachofunika chenu cha faragha, na kuigwa majina, ambapo kifurushi hasidi kiko kibonyezo kimoja kutoka jina maarufu. Hii ni muhimu kwa timu kubwa kwa sababu uvutaji mmoja wenye sumu unaweza kuenea kuvuka eneo lenu lote kabla mtu yeyote hajaona, na biashara ni halisi: rejista ya ndani au kioo cha kuhifadhi kinakupa kiwango cha kuchuja sera na kutengwa na chanzo cha juu, lakini ni miundombinu ambayo mtu lazima aiendeshe na kuiweka ya sasa. Leta ishara madhubuti: je, majina ya vifurushi vya ndani yanawekwa katika wigo na kufungwa kwenye chanzo cha ndani waziwazi, kuna orodha ya kuruhusu, na je, toleo lolote jipya linapata karantini fupi kabla ya kutumika? Kwa wanunuzi wa serikali na wanaodhibitiwa, funga hili na orodha ya programu iliyoidhinishwa na msimamo wa kutokuwa na mtandao wa moja kwa moja ambao ununuzi unazidi kudai, na uwe mkweli kama usanidi wenu wa sasa ungepita kiwango hicho leo.
Je, mnaweza kuzalisha upya na kuthibitisha jinsi vitu vyenu vilijengwa kweli? Faili ya kufunga iliyowekwa yenye hashi za kriptografia inapaswa kufanya ujenzi wenu kuwa kazi, ingizo zilezile zikizalisha pato lilelile kwenye kila mashine mwaka huu na ujao, na asili inapaswa kumruhusu yeyote kuthibitisha kwamba kitu kilitoka kweli kwenye bomba lenu na commit ya chanzo. Hii ni muhimu kwa sababu ujenzi usioweza kuzalishwa upya hugeuza hitilafu ya uzalishaji kuwa fumbo lisilotatulika na kukuacha huwezi kuthibitisha kuchezewa hakukutokea, na mazingatio yanayoshindana ni juhudi dhidi ya uhakikisho: usakinishaji mkali wa faili ya kufunga, uthibitisho uliosainiwa, na asili iliyopangiliwa na SLSA hugharimu usanidi na nidhamu ambazo mtiririko wa “sakinisha la hivi karibuni tu” huuepuka. Leta ushahidi: je, ujumuishaji endelevu unafeli faili ya kufunga na faili ya maelezo zisipokubaliana, mnazalisha na kuhifadhi SBOM na rekodi ya asili iliyosainiwa kwa kila ujenzi, na je, yeyote amewahi kuthibitisha moja? Kwa kazi ya mashirika makubwa na hasa serikali, asili na SBOM zinazidi kukaa ndani ya maagizo ya ununuzi, kwa hiyo jibu la uaminifu hapa huamua kama mnabaki mnastahili kuomba zabuni au mnafungiwa nje.
Mtazamo wa sekta
Kampuni changa. Ukiwa na timu ndogo na bila kikundi cha jukwaa, tegemea chaguo-msingi na uotomatishaji badala ya mchakato. Weka faili za kufunga tangu siku ya kwanza, washa kisasishaji cha kiotomatiki kinachoweka matoleo ya patch kwenye makundi na kuunganisha kiotomatiki majaribio yakipita, na weka kanuni moja nyepesi ya kuongeza vifurushi: pendelea maktaba za kawaida, zinazodumishwa vizuri na fikiria mara mbili kuhusu ndogo. Hutajenga rejista ya ndani bado, na hiyo ni sawa, lakini hashi zilizowekwa peke yake tayari zinakulinda: toleo lenye sumu halitasakinishwa tu.
Biashara ndogo. Huna mtaalamu wa utegemezi na bajeti ni finyu, kwa hiyo nunua nidhamu badala ya kuijenga. Tegemea uotomatishaji wa kusasisha ambao jukwaa lako la mwenyeji na msimbo tayari linatoa, pendelea seti ndogo ya maktaba zilizokomaa ili masasisho yabaki ya bei nafuu, na utumie kizalishaji cha SBOM cha bure kwenye bomba lako ili uweze kujibu “je, tumeathirika?” bila kuajiri. Tumia umakini wako adimu kwa ukaguzi wa leseni na kutopokea vifurushi vidogo ambavyo ungeandika kwa mistari kumi na miwili.
Biashara kubwa. Tatizo ni uthabiti kuvuka timu nyingi: rejista ya ndani ya pamoja inayoakisi mfumo wa ikolojia wa umma na kutekeleza sera ya leseni, chanzo, na toleo kwenye kiwango kimoja cha kuchuja, pamoja na seti iliyochaguliwa ya maktaba za dhahabu kama chaguo-msingi na njia iliyoandikwa ya vighairi kwa kitu kingine chochote. Toa SBOM kwa kila ujenzi kwenye hifadhi kuu ili hoja moja ijibu mfiduo wenu kuvuka eneo zima, toa masasisho yaliyoratibiwa kupitia maombi ya kuvuta ya kiotomatiki, na uchukulie afya ya utegemezi kama jalada linalopimwa, linalotawaliwa badala ya ajali ya kila hazina.
Serikali. Kanuni za ununuzi na uwajibikaji wa umma huumba kila kitu. Hitaji wauzaji watoe SBOM inayosomeka na mashine na asili ya ujenzi iliyopangiliwa na SLSA kwa kila toleo, sakinisha ndani tu kutoka orodha ya programu iliyoidhinishwa inayotolewa na kioo kisicho na njia ya moja kwa moja kwenda mtandao wa umma, na upendelee utegemezi wenye matengenezo thabiti na leseni wazi kwa sababu mfumo unaweza kuendesha miaka kumi na mitano na lazima uweze kupachikwa kwa yote. Panga uhamishaji wa mwisho wa maisha kwa makusudi badala ya kama dharura, na uhifadhi rekodi zinazomruhusu mkaguzi kufuatilia kitu chochote kilichosafirishwa hadi chanzo chake.
Mifano
Kampuni changa. Kampuni changa ya watu sita inasafirisha programu ya wavuti iliyojengwa juu ya mfumo wa kazi, maktaba ya malipo, na takriban vifurushi vya kupita mia tisa ambavyo hawajawahi kuvikagua. Hawawezi kumudu timu ya jukwaa, kwa hiyo wanategemea uotomatishaji: faili za kufunga zimewekwa tangu siku ya kwanza, kisasishaji cha kiotomatiki kinachoweka matoleo ya patch kwenye makundi na kuyaunganisha majaribio yakipita, na saa moja ya kila mwezi ya kupitia ongezeko la matoleo makuu yaliyorundikana. Kanuni yao ya aya moja ya kuongeza utegemezi hasa ni “pendelea maktaba za kawaida, zinazodumishwa vizuri, na fikiria mara mbili kuhusu ndogo.” Kifurushi maarufu kilipoathiriwa, hashi za faili yao ya kufunga zilimaanisha toleo lenye sumu halingesakinishwa tu, na walisoma kuhusu tukio badala ya kuliishi.
Biashara kubwa. Benki yenye hazina mia nne inaendesha rejista ya ndani ya vifurushi inayoakisi mfumo wa ikolojia wa umma na kutekeleza sera kwenye kiwango hicho cha kuchuja. Seti iliyochaguliwa ya maktaba za dhahabu, mfumo mmoja ulioidhinishwa wa kumbukumbu, mteja mmoja wa HTTP, kichanganuzi kimoja cha JSON, ndiyo chaguo-msingi, na kitu kingine chochote kinahitaji kighairi kilichoandikwa. Mfano wa chanzo cha ndani unaruhusu timu yoyote kuchangia maktaba hizo za pamoja huku kikundi kidogo cha jukwaa kikimiliki afya yake. Masasisho yaliyoratibiwa yanasambaza kiraka cha usalama kuvuka hazina zote mia nne kupitia maombi ya kuvuta ya kiotomatiki ndani ya siku, na kila ujenzi hutoa SBOM kwenye hifadhi kuu. Udhaifu muhimu unapotangazwa, wanaendesha hoja moja na kujua mfiduo wao kabla mzunguko wa habari haujaisha.
Serikali. Wakala wa shirikisho unanunua programu chini ya mahitaji ya asili na SBOM yanayofuatiliwa hadi Amri ya Utendaji 14028. Wauzaji lazima watoe SBOM inayosomeka na mashine kwa kila toleo na waonyeshe asili ya ujenzi iliyopangiliwa na mfumo wa SLSA, ili wakala uthibitishe kwamba kila kitu kilitoka kwenye chanzo kilichodaiwa. Ndani, wasanidi wanaweza kusakinisha tu kutoka orodha ya programu iliyoidhinishwa inayotolewa na kioo cha ndani kisicho na njia ya moja kwa moja kwenda mtandao wa umma. Uwezo wa kuhudumia kwa muda mrefu unaendesha chaguo: wanapendelea utegemezi wenye matengenezo thabiti na leseni wazi, kwa sababu mfumo unaweza kuendesha miaka kumi na mitano na lazima uweze kupachikwa kwa yote. Kijenzi kinapofikia mwisho wa maisha, uhamishaji uliopangwa unakibadilisha badala ya dharura.
Kesi ya biashara: sababu, ROI, na TCO
Mapato ya nidhamu ya utegemezi hupimwa hasa katika maafa ambayo hayatokei kamwe. Faili ya kufunga iliyowekwa na ujenzi unaoweza kuzalishwa upya hugharimu karibu hakuna kupokea na huondoa darasa zima la kasoro za “inafanya kazi kwenye mashine yangu” na hitilafu za uzalishaji zisizoweza kuzalishwa upya, kila moja ikiweza kuchoma siku za muda wa wahandisi wakuu. Mzunguko wa kiotomatiki wa kusasisha hubadilisha usasishaji wa dharura wa mara kwa mara wa wiki nyingi, aina inayokwamisha ramani ya barabara na kuchosha timu, kuwa mvumo thabiti wa chini wa mabadiliko madogo yaliyounganishwa. Kuvuka jalada la hazina nyingi, badiliko hilo kutoka adimu-na-kubwa hadi mara-kwa-mara-na-dogo ni mojawapo ya mabadiliko ya mchakato yenye kiegemeo cha juu zaidi yanayopatikana kwa shirika la kihandisi.
Hoja ya jumla ya gharama ya umiliki ni kuhusu unachobeba kwa miaka, si unachotumia sprint hii. Utegemezi usiosimamiwa hujilimbikiza kimyakimya: matoleo ya zamani yasiyoweza kusasishwa tena bila kuandika upya, leseni zinazounda mfiduo wa kisheria ambao hakuna aliyeupa bei, na grafu iliyochanganyika sana kiasi kwamba kiraka kimoja kinachohitajika huchochea mfululizo wa mabadiliko yanayovunja. Gharama ya kutofanya hili inafika yote kwa mara moja na wakati mbaya zaidi, wakati wa tukio la usalama au ukaguzi au uhamishaji wa kulazimishwa, bili ya miaka ya matengenezo yaliyoahirishwa inapodaiwa na riba. Kujenga hoja kwa uongozi, itaje kwa lugha yao: ujenzi unaoweza kuzalishwa upya hupunguza gharama ya matukio, SBOM hupunguza muda wa kujibu udhaifu kutoka siku hadi dakika, na maktaba zilizoidhinishwa pamoja na asili vinakuweka unastahili kwa kandarasi zinazodhibitiwa na za serikali ambazo vinginevyo ungefungiwa nje.
Mifumo mibaya na mitego
- Hakuna faili ya kufunga, au isiyowekwa kwenye udhibiti: ujenzi unatatua upya kila mara, kwa hiyo hakuna anayeweza kuzalisha upya kwa uhakika kilichosafirishwa au kilichovunjika.
- “Latest” inayoelea kwenye uzalishaji: chochote rejista ilichotoa dakika hiyo kinakuwa toleo lenu, bila kupitiwa na kisichoweza kufuatiliwa.
- Kutosasisha hadi kulazimishwa: miaka ya kuteleza huporomoka kuwa usasishaji mmoja wa kutisha, wa hatari kubwa chini ya shinikizo la udhaifu.
- Uchovu wa roboti ya kusasisha: mkondo usiowekwa kwenye makundi wa maombi ya kuvuta huwafunza timu kuyapuuza yote, ikiwemo yale ya dharura.
- Kuenea kwa utegemezi: kuongeza vifurushi kwa kawaida kwa vipengele vidogo, kukuza grafu isiyodumishika na uso mpana wa shambulio.
- Hakuna orodha: bila SBOM, kujibu “je, tumeathirika?” kunamaanisha siku za uchimbaji wa kiakiolojia wa mkono kuvuka hazina.
- Kuamini rejista ya umma bila kuhoji: uvutaji wa moja kwa moja unakuweka wazi kwa kukatika, matoleo yaliyoondolewa, mkanganyiko wa utegemezi, na kuigwa majina.
- Kupuuza utegemezi wa kupita: kutawala tu ulichokitaja huku hatari nyingi ikijificha ngazi moja chini.
- Leseni zisizokaguliwa: kuvuta msimbo ambao leseni yake inapingana na jinsi unavyosafirisha, ikigunduliwa wakati wa ukaguzi au ununuzi tu.
Kielelezo cha ukomavu
- Ngazi ya 1, Kuanzisha: Utegemezi unaongezwa kwa uhuru bila tathmini. Hakuna faili ya kufunga iliyowekwa, ujenzi hauwezi kuzalishwa upya, masasisho hufanyika tu katika dharura za kulazimishwa, na hakuna anayeweza kuorodhesha kilichomo kwenye programu.
- Ngazi ya 2, Kuendeleza: Baadhi ya timu huweka faili za kufunga na kupata ujenzi unaoweza kuzalishwa upya kwa sehemu kubwa, na kiasi kidogo cha uotomatishaji hufungua maombi ya kuvuta ya kusasisha, lakini mazoea hayana uthabiti kutoka hazina hadi hazina. Ufahamu wa leseni na hatari ya kupita si rasmi, bila sera ya pamoja, orodha, au udhibiti wa mahali vifurushi vinatoka.
- Ngazi ya 3, Kusawazisha: Mazoea yameandikwa na kutekelezwa shirika zima. Kisasishaji cha kiotomatiki huendeshwa kwa mzunguko thabiti na uwekaji wa makundi wenye busara, ujenzi husakinisha kwa ukali kutoka faili za kufunga na kufeli faili ya kufunga na ya maelezo zisipokubaliana, SBOM inazalishwa kwa kila ujenzi, rejista ya ndani inatekeleza sera ya chanzo na leseni, na utegemezi mpya unatathminiwa dhidi ya orodha hakiki iliyoandikwa ambayo kila timu inaitumia.
- Ngazi ya 4, Kusimamia: Eneo la utegemezi linapimwa na kudhibitiwa kwa data dhidi ya vipimo vya msingi. Unafuatilia ucheleweshaji wa toleo (utegemezi mangapi uko nyuma zaidi ya toleo moja kuu), muda wa wastani wa kupachika udhaifu muhimu kuvuka vitu vyote, viwango vya kuunganishwa kwa masasisho ya kiotomatiki, ufikiaji wa SBOM kama asilimia ya ujenzi uliosafirishwa, na hesabu ya migongano ya almasi ambayo haijatatuliwa na vighairi vya sera. Vipimo hivi vinadhibiti matoleo na kuendesha mahali unapotumia juhudi, kwa hiyo masasisho na urekebishaji husimamiwa kwa ushahidi badala ya yeyote anayepiga kelele zaidi.
- Ngazi ya 5, Kuratibu: Usimamizi wa utegemezi unaboreshwa kila wakati na kuunganishwa kuvuka shirika. Asili ya ujenzi na uthibitisho vinanaswa na kuthibitishwa, SBOM zinaweza kuulizwa kuvuka jalada zima kwa jibu la papo hapo la udhaifu, masasisho yaliyoratibiwa yanasambaa kuvuka hazina nyingi kiotomatiki, maktaba za dhahabu zinachaguliwa na kuchangiwa ndani, na mfumo mzima hubadilika mfumo wa ikolojia, vitisho, na maagizo ya ununuzi yanapohama.
Mawazo ya kujadili
- Mstari uko wapi sahihi kwa timu yenu kati ya kujiandikia zana ndogo na kuchukua utegemezi kwa ajili yake?
- Vikwazo vya matoleo yenu vinapaswa kuwa legevu au vikali kiasi gani, na je, jibu hutofautiana kwa programu dhidi ya maktaba zilizochapishwa?
- Je, masasisho ya patch ya hatari ndogo yanapaswa kuunganishwa kiotomatiki majaribio yakipita, na safu yenu ya majaribio ingehitaji nini kufanya hilo kuwa salama?
- Je, rejista ya ndani au kioo kina thamani ya gharama ya uendeshaji kwa ukubwa na wasifu wa hatari wa shirika lenu?
- Mngeweka vipaumbele vipi vya utegemezi wa kuhifadhi moja kwa moja kwa udhibiti wa juu zaidi, na upi wa kuacha kwenye rejista ya umma?
- Ingechukua nini kuzalisha na kutumia SBOM kweli kwa kila kitu mnachosafirisha, kuanzia robo hii?
Mambo muhimu ya kukumbuka
- Programu yako nyingi ni msimbo wa kukopa; kuusimamia vizuri ni nidhamu ya msingi ya kihandisi, si wazo la baadaye.
- Weka faili za kufunga kwenye udhibiti na udai ujenzi unaoweza kuzalishwa upya, wa uhakika ili ingizo zilezile daima zizalishe pato lilelile.
- Sasisha mfululizo kwa hatua ndogo za kiotomatiki badala ya miruko adimu, ya kulazimishwa, ya kutisha.
- Ongeza utegemezi kwa makusudi dhidi ya kigezo kilichoandikwa; wa bei nafuu zaidi kusimamia ni ule ambao hukuuchukua kamwe.
- Zalisha SBOM na unase asili ili ujue daima kilichomo kwenye programu yako na kilikotoka.
- Dhibiti vyanzo vyako kwa rejista ya ndani ili kujilinda dhidi ya mkanganyiko, kuigwa majina, na kushindwa kwa chanzo cha juu.
Marejeo na usomaji zaidi
- U.S. Executive Order 14028, Improving the Nation’s Cybersecurity (2021)
- National Institute of Standards and Technology (NIST), Secure Software Development Framework (SP 800-218)
- SLSA (Supply-chain Levels for Software Artifacts) framework specification, Open Source Security Foundation
- OWASP CycloneDX specification and the SPDX specification, for SBOM formats
- Tom Preston-Werner, Semantic Versioning Specification (SemVer)
- The Reproducible Builds project documentation
- Nicole Forsgren, Jez Humble, Gene Kim, Accelerate: The Science of Lean Software and DevOps