הבכיינות של FSF

ישנו ארגון שנקרא Free Software Foundation שמנסה לקדם את התוכנות החופשיות תחת כל עץ רענן, ולארגון יש גם דף שמסביר מדוע הוא אינו תומך בהפצות לינוקס רבות.

לאחרונה נוספה לרשימה הפצת Debian, דבר שיגרום למשתמשים ותיקים בקהילת הלינוקס להרים גבה. אחרי הכל, Debian תמיד היתה בברירת המחדל כוללת אך ורק חלקים חופשיים בקוד פתוח, אולם הסיבה של ה-FSF לביטול התמיכה בדביאן היא מוזרה לגמרי: ההפצה הנ"ל כוללת מאגר (REPO) בשם Contrib (וחשוב לשים לב: הוא אינו נכלל בהגדרות ה-REPO בברירת המחדל של ההפצה!) שכולל, השם ישמור, סקריפטים וכלים להתקין דרייברים וקבצים בינאריים אחרים שאינם בקוד פתוח.

כאן, לדעתי, מגיע השלב, בו הארגון הנכבד הנ"ל נראה כמנותק מהמציאות…

בין אם תיקחו ותקימו שרת, או דסקטופ או Laptop או כל מערכת לינוקס משובצת – תצטרכו את ה-blobs, שהם אותם חלקים שה-FSF מתנגד להם, אבל אין שום אפשרות להסתדר בלעדיהם. רוצה להשתמש ב-GPU שלך מעבר לשימוש סופר בסיסי ולא מואץ? אתה חייב את הקושחות הרלוונטיות, כנ"ל לגבי תאורת המקלדת, רוב מוחלט של ציוד ה-USB, כרטיסי רשת, כרטיסי קול, ועוד ועוד. מה שקורה הוא שבמהלך השנים הושגה מעין "הסכמה" עם יצרני חומרה, שהם יתמכו בלינוקס (בין אם ישירות ובין אם השכרת שרותי פיתוח דרייברים של SuSE או רד-האט, ולפעמים קנוניקל), אך את ה-Crown Jewls, החלקים הסופר חשובים וסודיים בדרייבר, הם ישחררו כקושחה בינארית בלבד, כך שהדרייבר יטען ויפעיל את הקושחה, ומשם בד"כ יהיו כלים ברמת User Space שיעזרו לנהל את הציוד.

אבל FSF, כמו כל מיני אנשים שמנותקים מהמציאות וחיים באיזו שהיא בועה (RMS…) – מסרבים להכיר במציאות הזו ומבחינת עדיף שאנשים יסבלו מציוד לא פעיל, ובלבד שהכל הכל יהיה בקוד פתוח וחופשי, דבר שאף חברת חומרה לא מוכנה לכך כיום (וכן, זה כולל את AMD, אינטל, ברודקום ומאות חברות נוספות).

הדרך היחידה כיום לגרום ליותר ויותר משתמשים לאמץ הפצות לינוקס (ולא חשוב איזו הפצה) היא ידידותיות ותמיכה כמה שיותר רחבה בחומרה. כיום, רוב המשתמשים לא יסכימו לקבל את התירוץ של "יצרן XYZ רצה לתרום דרייבר, אבל זרקנו אותו ואת הדרייבר שלו כי זה כולל קושחה/Blob בינארית בלבד", וחבל ש-FSF, ארגון שסייע רבות בתחילת הדרך בהתפתחות לינוקס (אוקיי, GNU/Linux), כיום גורם לרבים להתרחק ממנו.

האם NVIDIA פתחה את הקוד לדרייבר ה-GPU שלה?

החדשות שהופיעו באתרים שונים (לדוגמא: Phoronix) לפיו חברת NVIDIA החליטה לפתוח את קוד המקור של הדרייברים לכרטיסי ה-GPU שלהם – גרמו ללא מעט אנשים לחייך ואולי לאמר "ניצחנו", חברת NVIDIA נכנעה ופתחה את הקוד לדרייברים שלה!

אז זהו. שלא.

הדבר הראשון שכדאי להבין – זו הסיבה מדוע NVIDIA התעקשה להשאיר את הדרייברים כקוד סגור, והסיבה לכך קשורה להיסטוריה: NVIDIA קנתה חברות שונות והשתמשת בקניין הרוחני. בנוסף, NVIDIA חתמה על הסכמי רישוי שונים כולל השכרת פטנטים מחברות כמו S3, IBM וכו' הקשורים למימוש פונקציות שונות בדרייברים, והסכמים אלו אסרו על NVIDIA לפתוח את הקוד לחלקים אלו, כך של-NVIDIA לא נותרה ברירה ודרייברים ל-GPU ביתיים ומקצועיים – נשארו סגורים. לעומת זאת, בכל הקשור לציוד משובץ (Embedded) – ב-NVIDIA (עם דרייברים ל-Tegra, ה-GPU למערכות משובצות שלהם) התחילו הכל מאפס, כך שהם יכלו מהרגע הראשון לפתוח את הקוד לדרייברים, ואכן הדרייברים הללו נמצאים בחלקים השונים בלינוקס, כמו ב-Kernel, ב-Mesa ובמקומות אחרים.

אז מה בעצם השוני הגדול הפעם?

מה שקורה, הוא ש-NVIDIA פיתחה מיקרו מעבד חדש מבוסס RISC-V שנמצא בתוך ה-GPU (זה נקרא GSP) ואותו מעבד מבצע את מה שהדרייברים הקודמים עשו עם ה-CPU במחשב, במהלך איתחול ה-GPU כשה-OS עולה, רק שעכשיו הכל נעשה עם ה-GSP, באופן עקרוני:

  1. הדרייבר ב-Kernel מאתחל את ה-GPU ואת ה-GSP (ללא האיתחול, הדברים היחידים שאפשר לעשות עם ה-GPU זה בחירת מצב טקסטואלי ממה שנתמך דרך VESA, ומצב Frame Buffer mode, אם בא לך לשנן מחדש את קטלוג הקללות שאתה יודע..).
  2. הדרייבר מעלה קושחה סגורה ומוצפנת וה-GSP "לוקח פיקוד"
  3. בסיום, הכרטיס מודיע ל-Kernel לגבי מהות הציוד, כניסות, יציאות, פונקציות אפשריות, יכולות וכו'
  4. לאחר שהמודול הופעל בהצלחה, חלקים אחרים (User space) מתחילים לפעול מול המודול בזכרון

במילים אחרות, מכיוון שהכל נעשה עתה בחומרה ללא צורך בכל הדרייבר הבינארי ש-NVIDIA בנתה ושחררה (שימו לב, דרייבר בינארי. עדיין צריך את הקושחה הבינארית וזה דבר שתמיד תצטרכו) – אין מניע ל-NVIDIA שלא לשחרר את הקוד החדש, הוא לא מגלה שום דבר למתחרים מצד אחד, ולא מאפשר למשתמשים להפעיל פונקציונאליות בלתי מורשית מצד שני.

האם זה אומר שממחר בבוקר הדרייבר הפתוח הוא המענה החדש של NVIDIA? לא ממש. הדרייבר החדש הוא רק בראשית דרכו, יש לו עוד דרך חתחתים לעבור (והפעם כל יצרני הפצות לינוקס משתתפים בבניה ושילוב הדרייבר והכנת חבילות התקנה), כך שלבינתיים ממשיכים לעבוד עם הדרייברים הבינאריים הרגילים. בנוסף, ה-GSP בגירסה החדשה קיים רק בכרטיסים מבוססי Turing. שאר הכרטיסים הישנים יותר – ממשיכים לקבל תמיכה רק דרך הדרייברים הבינאריים הרגילים.

אז האם NVIDIA "ראתה את האור" בכך שהיא פותחת דרייבר חדש בקוד פתוח? רחוק מכך. אם תרצה לקודד וידאו, אם תרצה להעלות מהירות שעון של ה-GPU ואם תרצה להריץ קוד המצריך CUDA או OpenGL או דברים אחרים – תצטרך לעבוד מול החלקים האחרים (User Space) ש-NVIDIA משחררת כקוד סגור בלבד, ובשלב זה לא נראה ש-NVIDIA הולכת לפתוח את הקוד הזה.

ועוד משהו קטן לגבי המתחרה הגדולה של NVIDIA – חברת AMD. האם גרסאות הדרייברים בקוד פתוח שלהם נותנים בעצם יותר מעצם העובדה שהם פתוחים? לא תמיד. ב-AMD פשוט מחביאים את הפונקציות העיקריות והחשובות – בתוך קושחה בינארית מוצפנת. כמו ב-NVIDIA, רק שב-AMD החלקים הקשורים ל-User space – פתוחים. אגב, גם במקרה של אינטל, הדברים זהים למה ש-AMD מבצעים (אם כי גם שם יש חלקים סגורים, היי Intel Media SDK), ויש גם קוד חופף ל-AMD ואינטל בחלקים כמו Mesa וכו'.

לסיכום: NVIDIA מעולם לא חיפשה לעשות "דווקא" ולא היתה "אנטי קוד פתוח". אין שום כיף בכך שצריך לתחזק דרייבר משותף לכל מערכות ההפעלה, להכין קבצים בינאריים ולוודא שוב ושוב ששום דבר לא תוקע את ה-OS עקב באגים בדרייבר (ב-NVIDIA זוכרים את הלקח הכואב הזה בצורה חזקה מ-Windows Vista). אני מאמין שהם יפתחו לאט לאט גם את החלקים האחרים, אבל בכל מקרה, צריך לתת מחמאות ולעודד חברות שמחליטות לפתוח את הקוד לחלקים שונים (ולא מסתכלות על קוד פתוח כ"בית קברות" לפרויקטים שלא יתוחזקו לעולם).