קטגוריה: פיתוח תוכנה

כל קוד הוא פתוח

נדמה לי שחסידי הקוד הפתוח נופלים בתוך הפח של הדיאלקטיקה שלהם ושוכחים מהי המשמעות של המילה פתוח בתוך "קוד פתוח". למילה פתוח יש שלושה פירושים מקובלים בהקשר הטכנולוגיה/תיכנותי המיחסים לנגישותו של קוד המקור

  1. כותב התוכנה נותן לך אישור לעשות מה שבא לך עם התוכנה והקוד שלה. תוכנות מהסוג הזה מאופינות בשימוש ברשיונות מסוג BSD.
  2. כותב התוכנה נותן לך אישור לעשות מה שבא לך עם התוכנה והקוד שלה כל עוד תיתן את אותן זכויות לאנשים שאליהם תעביר את התוכנה, גם אם ביצעת בה שינויים. אלו רישיונות מסוג הGPL.
  3. קוד המקור מסופק ביחד עם התוכנה עם אישור לשנות אותו אבל בלי אישור (או אם אישור מגביל מאוד) להפיץ אותו הלאה.

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

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

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

לשפות מודרניות יחסית כמו JAVA וC# יש תוכנות מיוחדות המסוגלות להוציא קוד הדומה במידה מסוימת לקוד המקור מתוך הקובץ אותו המחשב יבצע בזמן הפעלת התוכנה. זה יותר קשה לביצוע בתוכנות שנכתבו במקור בשפת C, אבל לא בלתי אפשרי. למעשה ברגע שהצלחתי לקרוא את הקוד ואני מעונין לבצע בו שינוי, אני יכול בעזרת הכלים המתאימים לקוד שקיבלתי. במקרה הגרוע ביותר ניתן פשוט לשנות את הקבצים של התוכנה על ידי כל עורך שיודע להציג את הערכים הקיימים בקובץ ולא רק את הטקסט.

בעצם יכולתי לקצר ולכתוב – ודאי שכל קוד הוא פתוח. אם קוד שמופץ על ידי מיקרוסופט וחברות קניניות אחרות הוא באמת סגור, איך כל ה"פירטים" מצליחים להבין את הקוד בצורה מספיק טובה ליצירת מעקפים לכל מנגנוני ההגנה?

רווחים מפיתוח תוכנה הם לא בהכרח ענין חד פעמי

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

הבחור עומד ומתווכח עם המשקיעים האם ניתן להפוך את הבנקים ללקוחות של התוכנה, או למכור אותה רק לאנשים פרטיים כך שתהווא למעשה תחרות לשירותי היעוץ של הבנקים.

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

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

זיהוי דפדפנים זה רע

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

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

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

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