מה זה Bootloader - התוכנית הראשונה שרצה במחשב¶
לפני שיש חלונות, אייקונים, או אפילו מסך התחברות - יש רגע קצרצר שבו המחשב שלכם לא מריץ שום מערכת הפעלה בכלל. הוא פשוט עוד לא הגיע לשם. מי שאחראי לגשר על הפער הזה, בין רגע הלחיצה על כפתור ההפעלה לבין הרגע שבו מערכת ההפעלה מתחילה לרוץ, הוא תוכנית קטנה ומיוחדת שנקראת bootloader.
מה זה בעצם Bootloader¶
ה-bootloader, או "מטען אתחול", הוא התוכנית הראשונה שרצה על המחשב אחרי שהוא מקבל חשמל. ברגע שהמעבד מתחיל לפעול, הוא לא "יודע" שום דבר על מערכת הפעלה, קבצים, או דיסקים - הוא פשוט מתחיל להריץ הוראות מכתובת קבועה בזיכרון שנקבעה מראש בחומרה. שם בדיוק מחכה לו קוד ה-bootloader.
התפקיד שלו פשוט להגדיר אבל מורכב לביצוע - לקחת מחשב שברגע ההפעלה כמעט ולא מאותחל בכלל, ולהביא אותו למצב שבו יש מערכת הפעלה שלמה שרצה ומוכנה לעבודה.
מה בדיוק התפקיד שלו¶
ניתן לחלק את העבודה של ה-bootloader לכמה שלבים עיקריים.
השלב הראשון הוא אתחול חומרה מינימלי. ה-bootloader צריך לוודא שהחומרה הבסיסית ביותר שהוא זקוק לה - כמו גישה לזיכרון ולהתקן האחסון - פועלת. זה עוד לא אתחול מלא של כל המחשב, רק המינימום ההכרחי כדי שהוא עצמו יוכל להמשיך לעבוד.
השלב השני הוא איתור וטעינת הקרנל. ה-bootloader צריך לדעת איפה על הדיסק נמצא קובץ הקרנל של מערכת ההפעלה, לקרוא אותו, ולהעתיק אותו לזיכרון. זה נשמע פשוט, אבל בפועל זה דורש הבנה של מערכת הקבצים, של פורמט הקובץ הבינארי של הקרנל, ולפעמים גם קבלת החלטות - למשל אם יש כמה מערכות הפעלה מותקנות ומשתמש צריך לבחור מאיזו לעלות.
השלב השלישי הוא העברת שליטה. ברגע שהקרנל נטען לזיכרון, ה-bootloader מעביר אליו את השליטה על המעבד ומפסיק לפעול. מכאן, מערכת ההפעלה עצמה לוקחת את ההגה, ותפקידו של ה-bootloader הסתיים.
דוגמאות מוכרות מהעולם האמיתי¶
הדוגמה המוכרת ביותר בעולם הלינוקס היא GRUB, שכנראה ראיתם אם אי פעם התקנתם כמה מערכות הפעלה על אותו מחשב - המסך השחור עם רשימת אפשרויות הבחירה שמופיע לרגע לפני הטעינה. GRUB אחראי בדיוק על מה שתיארנו - למצוא את הקרנל המתאים ולטעון אותו.
באנדרואיד יש bootloader משלו, שהוא חלק חשוב מאוד גם מבחינת אבטחה - זו הסיבה שבמכשירים רבים "פתיחת ה-bootloader" (bootloader unlocking) היא פעולה מכוונת שדורשת אישור מפורש, כי היא פותחת אפשרות להריץ מערכות הפעלה או קרנלים לא רשמיים על המכשיר.
למה יש לפעמים כמה שלבי Bootloader¶
במערכות רבות, תהליך האתחול לא כולל bootloader אחד אלא כמה שלבים ברצף, כאשר כל שלב טוען את השלב הבא אחריו. הסיבה לזה קשורה למגבלות שקיימות ברגע הראשון של ההפעלה.
בשלב הכי מוקדם, המקום שבו קוד יכול לשבת מוגבל מאוד בגודלו - לפעמים רק כמה עשרות או מאות בתים. אי אפשר לדחוס לתוך המקום הזה תוכנית מורכבת שיודעת לקרוא מערכות קבצים שונות, להציג תפריט בחירה, ולטפל בשגיאות. אז הפתרון הוא לחלק את העבודה - שלב ראשון קטן ופשוט מאוד, שהמשימה היחידה שלו היא למצוא ולטעון שלב שני, גדול ומורכב הרבה יותר, שהוא זה שבאמת עושה את כל העבודה הכבדה של איתור וטעינת הקרנל.
זה דומה לרעיון של לפתוח דלת נעולה עם שרשרת מפתחות - המפתח הראשון לא פותח את הדלת הסופית, הוא רק פותח את הארון שבו נמצא המפתח הבא.
הקשר לאבטחה - Secure Boot¶
מכיוון שה-bootloader הוא אחד מהחוליות הראשונות בשרשרת האמון של המחשב, הוא גם נקודה רגישה מבחינת אבטחה. אם תוקף מצליח להחליף את ה-bootloader בגרסה זדונית משלו, הוא יכול לשלוט על כל מה שקורה אחר כך - כולל טעינת קרנל מזויף שמסתיר את עצמו ממערכות הגנה.
בשביל זה קיים מנגנון שנקרא Secure Boot. הרעיון הבסיסי שלו הוא שכל שלב בתהליך האתחול מוודא באמצעות חתימה קריפטוגרפית שהשלב הבא שהוא עומד לטעון הוא באמת מה שהוא אמור להיות, ולא משהו זדוני שהוחלף. ה-firmware מוודא את ה-bootloader, וה-bootloader מוודא את הקרנל, וכך נבנית שרשרת אמון רציפה מהרגע הראשון ועד שהמערכת כולה עולה.
למה זה שווה הבנה מעמיקה¶
הבנה של תהליך האתחול היא בדיוק סוג הידע שמבדיל בין מי שיודע להשתמש במחשב לבין מי שמבין איך הוא באמת עובד מבפנים. בקורס ליבת המחשב אנחנו עוברים על השלבים האלה בפירוט, כולל איך זה מתחבר להמשך תהליך העלייה של הקרנל ומערכת ההפעלה.
לסיכום¶
ה-bootloader הוא הגיבור השקט שאף אחד לא רואה - הוא רץ, עושה את העבודה שלו, ונעלם עוד לפני שהמשתמש בכלל רואה משהו על המסך. אבל בלעדיו, שום מחשב לא היה מצליח לעבור מרגע הלחיצה על הכפתור לכדי מערכת הפעלה חיה ופועלת.
מוזמנים לבוא לדיסקורד לדבר על תהליך האתחול, GRUB, ואיך זה נראה בפועל על מכשירים שונים.