נתחיל ברקע. לפני מספר שבועות פתחתי פרוייקט קוד פתוח חדש (כן, עוד אחד). שמו הוא fakeroot-ng, ואפשר לראות אותו ב-sourceforge.
הפרוייקט משתמש בטכנולוגיה שנקראת “ptrace”. אחת הבעיות הידועות של הטכנולוגיה הזו היא שהיא מאוד מאוד תלויית פלטפורמה. בפרט, יש לי בעיה. לינוקס החליט, באמצעות הרחבות פרטיות, לספק ממשק שהוא נוח יותר למתכנת מאשר הממשק שמוגדרת בתקן של Posix. זה משאיר אותי בבעיה לגבי מערכת לפיתוח שעליה אני יכול לבדוק worst case. כדי להתגבר על הבעיה הזו החלטתי להתקין OpenBSD בתוך מכונה וירטואלית (אני משתמש ב-VirtualBox).
אני יכול לסכם את חווית ההתקנה במילה אחת: מזעזעת
נעיר בהערת אגב שמהמעט שהסתכלתי, המערכת המותקנת לא כל כך נוראה (בהנחה שאתם יודעים למה לצפות).
אם נחזור להתקנה, אבל, נראה שמעל עשור של שיפור הדרגתי בתהליך ההתקנה שעבר על לינוקס פסח על OpenBSD ברגל קלה ובלי להביט לאחור. הייתי מוכן לזה שמאוד קשה להבין מה צריך להוריד כדי להתחיל את ההתקנה, מכיוון שמה שהם באמת רוצים זה שתקנו את הדיסקים. הייתי מוכן לזה שההתקנה היא במוד טקסטואלי. הייתי מוכן לזה שמותרות כמו היסטוריה או tab completion לא קיימים. הייתי מוכן לזה שצריך לבצע partition פעמיים. הייתי אפילו מוכן לזה שמאוד קשה לחשב מה ואיזה גודל צריך לתת לכל partition.
מה ששבר אותי זו העובדה שכדי לייצר את המחיצות היה צריך להשתמש בכלי command line, אבל כשלוחצים “?” כדי לקבל את רשימת הפקודות שהכלי מציע, השורות הראשונות נעלמות מהמסך. אם זה לא מספיק גרוע, הפקודה אותה הייתי צריך כדי להוסיף מחיצה התחילה ב-a, וכתוצאה מכך פשוט לא הופיעה על המסך! בסביבה שבה ההתקנה שולטת על הכל, זה חסר כל תירוץ.
ראוי לציין שאני התקנתי לא את הגרסה האחרונה (4.2), אלא את זאת שלפניה. הסיבה היא בעיקר שמראה הישראלית אין את הגרסה האחרונה, וכל המראות האחרות היו פשוט איטיות מידי מכדי להיות שימושיות.
נראה שהמערכת הותקנה כבר עם דפי העזרה למתכנתים (לא שאני מתלונן, אבל למה?). עכשיו נשאר יהיה לראות אילו בעיות ייחודיות וחדשות OpenBSD מציע למי שמשתמש ב-ptrace.
שחר
אוקי, עוד משהו להוסיף לך לביאוס הכללי 🙂 BSD (כל ההפצות), משתמשות בכל מיני פקודות POSIX אשר לא באמת תואמות את התקן.
כך שioctl, למשל הוא מספר שלם חיובי בלבד ב BSD, כאשר בלינוקס/POSIX (לשם שינוי לינוקס תומך לפעמים ב POSIX), זה בכלל מספר שלם שיכול להיות גם שלילי.
זה משפיע בעיקר על הפקודות שאתה מנסה להשתמש אם אותה הפקודה, מכילות מינוס (כן, יש גלישת מספר).
וזה רק להבנה הכוללת, שאין שום מערכת תואמת POSIX ב100% שאני מכיר, ולכל אחת יש את החוסר תאמות שלה, וזה יכול להשפיע לך על כל הפיתוח.
עכשיו מה אמרת לגבי ההתקנה ? 🙂
מה שאמרת היה מבאס אותי מאוד אלמלי התוכנה שאני כותב נמצאת מלכתכילה באיזור
הדימדומיםהלילה האפל. בניגוד לפקודות Posix הסטנדרטיות, שאמורות להתמך במלואן, ובניגוד מסויים לפרוקודות כמו ioctl, שבהן יש סטנדרטיות ויש פחות, אנחנו מדברים על ptrace, שבו בהגדרה (כמעט) שום דבר לא מובטח לך.אז, נכון, מטריד אותי שבתיעוד של הפקודה בלינוקס כתוב שאם אתה עושה Attach לתהליך, האבא שלו מפסיק להיות האבא שלו בעוד שב-BSD לא מצויין שום דבר בנידון, אבל בתכנון התוכנה מלכתכילה לקחתי בחשבון הבדלים כל כך גדולים בין הפלטפורמות שאני לא בטוח שהבדל כזה מפחיד אותי. למעשה, התקנתי BSD רק כדי להתחיל לקבל ריח כללי של עד כמה שונות הפלטפורמות אחת מהשניה. בהחלט הייתי יכול פשוט לכתוב את המערכת כך שתעבוד על לינוקס, ואז להתחיל לראות מה עוד יש שם בחוץ.
כמובן שאם הייתי עושה את זה, הייתי מוצא את עצמי עם תוכנה בעלת קוד מקור שנראה כמו זה של strace. יש סיבה שלא השתמשתי בקוד שלהם. הוא בלתי קריא לחלוטין.
שחר