תנועת 0deps: תלויות מקומיות וחוזים בלתי משתנים
מפתחי תוכנה מתקינים לעיתים קרובות מאות ספריות חיצוניות. פריימוורקים מודרניים מסתמכים על אלפי תלויות עקיפות (transitive dependencies). המשמעות היא שהאפליקציה שלכם מריצה קוד של זרים שאינכם מכירים.
המהירות הזו מגיעה עם מחיר. אתם מתמודדים עם סיכוני שרשרת אספקה של תוכנה (software supply chain risks).
כל תלות מגדילה את שטח התקיפה (attack surface) שלכם. תלויות יכולות:
- להכניס פרצות אבטחה.
- להפוך למטרות להתקפות שרשרת אספקה.
- להינטש על ידי המחברים שלהן.
- לשנות את ה-API הציבורי שלהן.
- לשבור תאימות לאחור.
תנועת ה-0deps משנה זאת. היא שואלת: מה אם האפליקציה שלכם תסתמך רק על הקוד שאתם שולטים בו?
במודל 0deps, אתם מביאים את כל הקוד הדרוש ישירות אל מאגר הפרויקט (repository) שלכם. אינכם מורידים חבילות (packages) בזמן ההתקנה או בזמן הבנייה (build time). כל מה שאתם צריכים נמצא שם ברגע שאתם עושים clone ל-repo.
זה מספק מספר יתרונות:
- בנייה ניתנת לשחזור (reproducible builds).
- אי-תלות ברישומות חבילות (package registries) חיצוניות.
- ביקורות אבטחה מרכזיות.
- יכולת חיזוי גבוהה יותר.
- סיכון נמוך יותר בשרשרת האספקה.
המטרה אינה למנוע מהקוד להשתנות. אלגוריתמים ותיקוני אבטחה חייבים להתפתח. מה שנשאר קבוע הוא החוזה הציבורי (public contract).
אתם מעצבים ממשק יציב עבור כל ספרייה. לדוגמה:
authenticate()createSession()verifyPasskey()
המימוש שמאחורי הפונקציות הללו יכול להשתנות לחלוטין. אתם יכולים לכתוב מחדש את הלוגיקה או להחליף את הספרייה. שאר האפליקציה שלכם לעולם לא תדע על ההבדל.
זה פותר את הכאב ראש הגדול ביותר בזמן עדכונים. בדרך כלל, אתם דואגים שתיקון באג לא ישבור את האפליקציה שלכם בו-זמנית. עם 0deps, ה-API הציבורי נשאר זהה. האפליקציה שלכם ממשיכה לעבוד ללא שינויי קוד.
אתם מבודדים כלים חיצוניים מאחורי מתאמים (adapters) פנימיים. אם ספרייה תמות מחר, אתם רק מעדכנים את המתאם. שאר המערכת שלכם נשארת בטוחה.
0deps לא שונאת קוד פתוח. היא רוצה להשתמש בקוד פתוח בצורה בטוחה יותר. במקום התקנות דינמיות, אתם מתייחסים לספריות כמרכיבים משולבים. אתם מבצעים להן ביקורת (audit). אתם מנהלים להן גרסאות (versioning). אתם עוטפים אותן (encapsulate).
תוכנה חיה עשרות שנים. ספריות ופריימוורקים מתים. 0deps מבטיחה שהאפליקציה שלכם תמשיך לפעול לאורך כל השינויים הללו.
Optional learning community: https://t.me/GyaanSetuAi
