Sunday, July 4, 2010

על שתי פרגמנטציות

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

1. פרגמנטציה סופנית היא כזו בה קיימות תשתיות פיתוח (SDK) בלתי חופפות בשתי גרסאות של מערכת ההפעלה, כך שתוכנה שעובדת על גרסה X של מערכת, לא תעבוד על גרסה Y, ולעתים להיפך. המצב הזה קשה לפתרון וגורם לבעיה אמיתית - היכולת לפתח באופן אחיד למערכת ההפעלה נפגעת באופן בלתי הפיך ומבריחה מפתחים, שמבינים שהם כותבים תוכנה מורכבת שתשמש רק שני גיקים, ולא את כלל המשתמשים. ברגע שה-SDK עובר שינויים, מערכת ההפעלה המבושלת לא תואמת למערכת המקורית - וזה יכול להוביל למוות של אחת המערכות (או הפיכתה למערכת נישה, שבמקרה של מערכת נישה גם ככה - כמו במקרה של לינוקס - הופכת למערכת המשמשת את מפתחיה ואת שלושת חבריהם), או לצורך בעצי תלויות מסתעפים - כמו במקרה של לינוקס ומערכות ניהול החלונות הפופולאריות KDE ו-gnome.
כיום, בהתקנה של אובונטו (או הפצה מבוססת אובונטו כמו Mint), התקנה של תוכנה אחת, אפילו תוכנת עיבוד תמלילים פשוטה כמו kwrite, עלולה להיות כרוכה בהתקנת כל ספריות הפיתוח של KDE, מספריות הגרפיקה הכבדות כמו QT ועד ספריות הקונפיגורציה. כך קורה גם כאשר מנסים להתקין תוכנה כמו Gedit על התקנה מבוססת KDE. לצורך העניין - זה עוד מצב סביר. בהנתן מחסור ב-SDK איכותיים כמו אלה של QT, מפתחים כותבים API משלהם לכל שטות, עד שבסופו של יום ישנן מאות מערכות חצי בנויות, כל אחת מחוסרת תאימות לחברתה, ובסוף רק שתיים שורדות ולומדות לחיות זו לצד זו בדו-קיום מבוסס סטטוס קוו. למרבה המזל, השכילה גוגל לספק SDK ממצא ומוצלח, ראוי ופשוט לאנדרואיד, ואין צורך בפרגמנטציה מהסוג הנורא הזה. למעשה, נקווה שלא נראה עוד פרגמנטציות כאלה בעולם הקוד הפתוח.

2. פרגמנטציה כרונית לא פחות אך קלה ובטח שלא סופנית היא פרגמנטציית השימוש - מערכות שונות משתמשות בכלים שונים כברירת מחדל, עושות שימוש בתוכנות שונות, ומתבססות לעתים על מראה ויכולות ניהול שונות. דוגמא ראויה לכך בעולם ה-PC היא לינוקס אובונטו ולינוקס מינט. שתי מערכות לינוקס כאשר אחת מבוססת על השנייה, מספקת מראה ותחושה שונה, וכלי ניהול אחרים - ומתחת למנוע, הכל אותו הדבר. כך קורה באנדרואיד, כל מי שמחזיק במכשיר מבוסס אנדרואיד 1.6 יוכל להריץ את כל האפליקציות עד גרסתו, וכך גם לגבי 2.1 ו-2.2. המערכות יכולות להיראות שונות לבלי הכר, להריץ כלי ניהול אחרים, להשתמש בשירותי רשת וסנכרון שונים - אך המשותף להן הוא ה-SDK הפתוח של אנדרואיד על כל חלקיו, והיכולת, באפס מאמץ - להתקין תוכנה מאנדרואיד אחד על אחר.
כאן מוטורולה מעדיפה עיצוב חברתי במכשיריה הזולים (moto blur) ו-HTC כותבת את ה-HTC Sense, סוני אריקסון בונה ממשק אחר לגמרי משלה עבור אקספיריה ולו מפתחים עצמאיים כותבים את ADW launcher. כך מערכות שונות נראות אחרת ומפתקדות אחרת, אך במהותן - נותרות נאמנות למקור. הפרגמנטציה הקצת יותר עמוקה היא בין גרסאות אנדרואיד, שם SDK חדש לא נתמך במכשיר ישן, ויש צורך לעשות עבודה להביא את כל המכשירים בשוק לגרסה האחרונה - אבל למרבה המזל, במקום בו היצרניות נכשלות, מצליחה הקהילה. ועל זה, ד"א, יכולים רק לחלום משתמשי אפל.