מודל הגרסאות היציבות של ליבת Linux התחיל בשנת 2005, כשנקבע שמודל הפיתוח הקיים של הליבה (גרסה חדשה כל 2-3 חודשים) לא עומד בצרכים של רוב המשתמשים. המשתמשים רצו תיקוני באגים במהלך 2-3 החודשים האלה, ולמפתחי הפצות לינוקס היה קשה לעדכן את הליבות בלי משוב מקהילת הליבה. באופן כללי, הניסיונות לשמור על אבטחת ליבות נפרדות ולעדכן אותן בתיקוני הבאגים האחרונים היו מאמץ גדול ומבלבל של הרבה אנשים שונים.
גרסאות הליבה היציבות מבוססות ישירות על הגרסאות של Linus Torvalds, והן פורסמות כל שבוע בערך, בהתאם לגורמים חיצוניים שונים (עונה, תיקונים זמינים, עומס העבודה של המנהלים וכו'). המספר של הגרסאות היציבות מתחיל במספר של גרסת הליבה, ומספר נוסף מתווסף בסוף. לדוגמה, לינוס משחרר את הליבה 4.4, ואז הגרסאות היציבות של הליבה שמבוססות על הליבה הזו ממוספרות 4.4.1, 4.4.2, 4.4.3 וכן הלאה. בדרך כלל, כשמדברים על עץ גרסאות יציב של ליבה, מקצרים את הרצף הזה למספר 4.4.y. כל עץ גרסאות יציב של הליבה מתוחזק על ידי מפתח ליבה אחד, שאחראי על בחירת התיקונים הנדרשים לגרסה ועל ניהול תהליך הבדיקה וההפצה.
ליבות יציבות מתוחזקות לאורך מחזור הפיתוח הנוכחי. אחרי ש-Linus משחרר ליבה חדשה, עץ הגרסאות היציב הקודם של הליבה מפסיק לפעול והמשתמשים צריכים לעבור לליבה החדשה שפורסמה.
ליבות יציבות לטווח ארוך
אחרי שנה של תהליך הגרסאות היציבות החדש, הוחלט שמשתמשים רבים ב-Linux רוצים לקבל תמיכה בליבה למשך זמן ארוך יותר מכמה חודשים. בתגובה לכך, נוצרה גרסה של הליבה עם תמיכה לטווח ארוך (LTS), והליבה הראשונה עם תמיכת LTS (2.6.16) שוחררה בשנת 2006. מאז, ליבה חדשה של LTS נבחרת פעם בשנה, וקהילת הליבה מטפלת בליבה הזו במשך שנתיים לפחות.
נכון למועד כתיבת המאמר, הליבות של LTS הן הגרסאות 4.4.y, 4.9.y, 4.14.y, 4.19.y, 5.4.y ו-5.10.y. ליבה חדשה מוצגת מדי שבוע. בגלל הצרכים של חלק מהמשתמשים וההפצות, מפתחי הליבה שומרים על כמה ליבות ישנות יותר במחזור הפצה איטי יותר. בדף kernel.org releases אפשר למצוא מידע על כל הליבות היציבות לטווח ארוך, על הגורמים שאחראים עליהן ועל משך זמן התחזוקה שלהן.
בממוצע, אנחנו מאשרים 6-8 תיקונים ביום לגרסאות הליבה של LTS, ואילו לגרסאות הליבה היציבות הרגילות אנחנו מאשרים 10-15 תיקונים ביום. מספר התיקונים משתנה בכל גרסה, בהתאם למועד הנוכחי של גרסת הליבה התואמת לפיתוח, ולמשתנים חיצוניים אחרים. ככל שהגרסה של הליבה עם תמיכת LTS ישנה יותר, כך יש פחות תיקונים שרלוונטיים לה, כי תיקוני באגים רבים מהזמן האחרון לא רלוונטיים לליבות ישנות יותר. עם זאת, ככל שהליבה ישנה יותר, כך קשה יותר להעביר לאחור את השינויים שצריך להחיל, בגלל השינויים בקוד הבסיסי. לכן, למרות שיכול להיות שמספר התיקונים הכולל שיוחלו יהיה נמוך יותר, המאמץ הנדרש לשמירה על ליבה של LTS גדול יותר מזה שנדרש לשמירה על ליבה יציבה רגילה.
כללי תיקונים של ליבה יציבה
הכללים לגבי מה שאפשר להוסיף לגרסה יציבה של הליבה נותרו כמעט זהים מאז ההשקה, והם מפורטים בהמשך:
- הן צריכות להיות נכונות באופן ברור ועברתן בדיקה.
- לא יכול להיות גדול מ-100 שורות.
- צריך לתקן רק דבר אחד.
- נדרש תיקון של משהו שדווח עליו כבעיה.
- יכול להיות מזהה מכשיר חדש או תכונה ייחודית לחומרה, אבל לא יכול להוסיף פונקציונליות חדשה משמעותית.
- הקוד כבר צריך להיות משולב בעץ של Linus Torvalds.
הכלל האחרון, 'הקוד חייב להיות כבר מוזג לתוך העץ של Linus Torvalds', מונע מקהילת הליבה לאבד תיקונים. הקהילה לא רוצה לעולם שתיקון ייכנס למהדורת ליבה יציבה שלא נמצאת כבר בעץ של Linus Torvalds, כדי שאף אחד שמבצע שדרוג לא יראה נסיגה. כך אפשר למנוע הרבה בעיות שפרויקטים אחרים שמתחזקים גרסה יציבה ופיתוח יכולים להיתקל בהן.
עדכוני ליבה
קהילת הליבה של Linux הבטיחה למשתמשי הליבה שלה שאף שדרוג לא יפגע בדברים שפועלים בגרסה קודמת. ההתחייבות הזו עדיין בתוקף. נסיגות כן קורות, אבל אלה באגים ברמת העדיפות הגבוהה ביותר, והן מתוקנות במהירות או שהשינוי שגרם לנסיגה מבוטל במהירות בעץ הליבה של Linux.
ההתחייבות הזו תקפה גם לעדכוני הליבה המצטברים והיציבים וגם לעדכונים המשמעותיים הגדולים יותר שמתרחשים כל שלושה חודשים. עם זאת, קהילת הליבה יכולה להבטיח זאת רק לגבי הקוד שמשולב בעץ הליבה של Linux. כל קוד שמשולב בליבה של מכשיר ולא נכלל במהדורות של kernel.org הוא לא ידוע, ואי אפשר לתכנן אינטראקציות איתו או אפילו להביא אותו בחשבון.
במכשירים מבוססי Linux עם קבוצות תיקונים גדולות יכולות להיות בעיות משמעותיות בעדכון לליבות חדשות, בגלל מספר השינויים הרב בין כל גרסה (10,000-14,000 שינויים לכל גרסה). ערכות התיקונים של SoC נוטות במיוחד לבעיות בעדכון לליבות חדשות יותר, בגלל הגודל הגדול שלהן והשינוי המשמעותי בקוד הליבה שספציפי לארכיטקטורה, ולפעמים גם לליבה עצמה. כתוצאה מכך, רוב ספקי המעבדים המוטמעים מתחילים להשתמש בגרסאות LTS במכשירים שלהם, כדי לאפשר למכשירים האלה לקבל עדכוני אבטחה ותיקוני באגים ישירות מקהילת הליבה של Linux.
אבטחה
כאשר משחררים גרסאות של הליבה, קהילת הליבה של Linux כמעט אף פעם לא מגדירה שינויים ספציפיים כתיקוני אבטחה. הסיבה לכך היא הבעיה הבסיסית של הקושי לקבוע אם תיקון באג הוא תיקון אבטחה או לא בזמן היצירה. בנוסף, הרבה תיקוני באגים נקבעים כקשורים לאבטחה רק אחרי שחולף הרבה זמן, ולכן קהילת הליבה ממליצה מאוד תמיד להטמיע את כל תיקוני הבאגים שמתפרסמים.
כשמדווחים על בעיות אבטחה לקהילת הליבה, הן מתוקנות בהקדם האפשרי ומשוחררות באופן ציבורי לעץ הפיתוח ולגרסאות היציבות. כפי שמתואר למעלה, השינויים כמעט אף פעם לא מתוארים כ'תיקון אבטחה', אלא נראים כמו תיקון באגים אחר בליבה. המטרה היא לאפשר לגורמים הרלוונטיים לעדכן את המערכות שלהם לפני שהמדווח על הבעיה יפרסם אותה.
במדריך למשתמש ולאדמין של ליבה של Linux באתר www.kernel.org מוסבר בהרחבה איך מדווחים על באגים באבטחה לקהילת הליבה כדי שהם יטופלו ויושלמו בהקדם האפשרי.
מאחר שצוות הליבה לא מכריז על באגים באבטחה לציבור, מספרי ה-CVE לבעיות שקשורות לליבה של Linux מתפרסמים בדרך כלל שבועות, חודשים ולפעמים שנים אחרי שהתיקון מוזג להסתעפויות היציבות והפיתוח.
שמירה על מערכת מאובטחת
כשפורסים מכשיר שמשתמש ב-Linux, מומלץ מאוד שהיצרן יטפל בכל עדכוני הליבה של LTS ויפיץ אותם למשתמשים שלו אחרי שבדיקה מתאימה תראה שהעדכון פועל היטב. יש לכך כמה יתרונות:
- המפתחים של הליבה בדקו את הגרסאות כמכלול, ולא בחלקים נפרדים.
- קשה לקבוע אילו תיקונים מתקנים בעיות "אבטחה" ואילו לא. כמעט כל גרסה של LTS מכילה לפחות תיקון אבטחה ידוע אחד, ויש עוד הרבה תיקונים שעדיין לא ידועים.
- אם בבדיקה מתגלה בעיה, קהילת מפתחי הליבה מגיבה במהירות כדי לפתור את הבעיה.
- ניסיונות לסנן רק את השינויים שאתם מריצים יגרמו ליצירת עץ ליבה שלא ניתן למזג בצורה נכונה עם גרסאות עתידיות של upstream.