ארכיון

ארכיון לקטגוריה ‘טכנולוגיה’

התארחתי בפודקאסט Out of Memory

OutOfMemory

מעניין שהאותיות O ו M בצבע אחר 🙂

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

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

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

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

די התרגשתי להתארח שם, וכנראה בגלל זה דיברתי עוד יותר לאט מהרגיל שלי.. אז המלצה למי שמאזין – אל תשכחו שאפשר להריץ במהירות של 1.25 ואל תתיאשו! 😀

וכמובן, תודה לעופר ולמיכה!

קישור ישיר לפרק.

[זה פוסט מהסוג של ״זה קרה אבל קצת מזמן״]

קטגוריות:טכנולוגיה, תכנות תגיות:

קצת על קוד פתוח – החזית הטכנולוגית

7 ינואר, 2015 14 תגובות

[הפוסט התפרסם גם בגיקטיים]

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

בפוסט הזה אני אחלוק כאן הדברים שדווקא פחות קשורים לשפת פייתון עצמה, אלא יותר למאקרו: המעבר מפיתוח בסביבת Microsoft, כלומר דוט-נט על Windows, לפיתוח בסביבת open-source: כיום אני מפתח בפייתון וב Clojure על לינוקס.

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

TL;DR

החזית הטכנולוגית נמצאת בסביבת open-source. הנוחות נמצאת בסביבות אחרות, כמו דוט-נט. ויש לזה סיבה.

הכנתם קפה? יפה. נתחיל.

באופן כללי, אחרי יותר משנתיים בסביבת open-source, אני חושב שבסביבה הזו אפשר לראות באופן בולט שני דברים חשובים:

  • מענה אמיתי לבעיות אמיתיות
  • פתרונות חדשניים לבעיות אמיתיות

העולם הישן – פתרונות עקומים לבעיות אמיתיות

הצורך הוא אבי ההמצאה. אבל מהו הצורך? מי מגדיר מהו הצורך?

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

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

נסתכל לרגע על בעיה ידועה: איך אפשר לפתח ל web בצורה מהירה וקלה לתחזוקה?

הפתרון של Microsoft

בואו נצעד אחורה בזמן לתקופה של 2002-2003, כאשר Microsoft הכריזו בקול גדול על דוט-נט (עזבו את 1.0, נלך ישר ל 1.1), ובפרט על ASP.NET עם הפיצ'ר המדהים שנקרא WebForms. על איזה צורך ענה כל הנושא הזה של WebForms ב ASP.NET?

מהנדסי Microsoft חשבו וחשבו, וחשבו עוד קצת, והגיעו למסקנה שמתכנתי web צריכים לאמץ שיטות פיתוח של מתכנתי desktop, כלומר "לצייר" ב Visual Studio אלמנטים ע"י drag-and-drop, והכל בסוף יתרגם ל HTML. אה, והלהיט הגדול: התוצאה הסופית תיקבע על פי הדפדפן עצמו (לפי ה user-agent), כי ככה נוכל לעצב פעם אחת את המסכים שלנו והשרת ייצור HTML (או WML, למי שהתנסה בזה) שמותאם לדפדפן הנוכחי.

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

בקיצור, Microsoft סיפקו פתרון עקום לבעיה אמיתית.

הפתרונות מעולם ה open-source

המודל שמתכנתי web מעדיפים הוא בד"כ מודל פיתוח שנקרא MVC. בסביבת הקוד הפתוח זה מודל שמוכר ועובד היטב כבר שנים:

  • בפייתון יש מספר פרויקטים, והמוכר שבהם נקרא Django, שקיים מ 2005.
  • ברובי יש את Rails, שקיים מ 2005.
  • ב PHP יש את CakePHP שקיים מ 2005.
  • בדוט-נט, בסביבת open-source:
    • פרויקט MonoRail, שהוא תת-פרויקט של Castle. קיים בערך מ 2005-2006. נוהל במשך תקופה ארוכה ע"י חן אגוזי.
    • פרויקט ASP.NET MVC, התחיל בסביבות 2007 ע"י Scott Guthrie, וצבר תאוצה די מהר.

ובינתיים, במשרדי Microsoft, אי שם ברדמונד

מה קרה בינתיים, בתקופה של 2005-2010? בתקופה הזו, Microsoft התעלמו לחלוטין ממודל MVC לפיתוח web, לפחות כלפי חוץ. רק בסביבות 2010 פרויקט ASP.NET MVC "אומץ" ע"י Microsoft והפך להיות חלק מ Visual Studio, בתור תוסף.

רק ב 2012, Microsoft הטמיעו באופן רשמי פרוייקטים מסוג MVC ב Visual Studio.

לזה קוראים הצתה מאוחרת.

מענה אמיתי לבעיות אמיתיות

מההתרשמות שלי, הספריות והפריימוורקס שקיימים בסביבת open-source נותנים מענה אמיתי לבעיות אמיתיות.

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

איך Microsoft פותרים את בעיית C10K בדוט-נט? כנראה ע"י מספר שרתי Windows Server עם load-balancer רציני לפניהם. כלומר, הבעיה נופלת על ה load-balancer, והפתרון הזה עולה די הרבה כסף בסופו של דבר. אמנם, כבר בדוט-נט 2.0 הוצג הפיצ'ר שנקרא Asynchronous Pages, וידידו ה"קל" יותר IHttpAsyncHandler שכבר קיים (!) מגירסה 1.1.

אלה פתרונות חלקיים לבעיה. באופן כללי, ASP.NET זו מערכת שנבנתה עם מערכת שיקולים משלה, וכנראה בזמן ה design, לא ייחסו חשיבות גבוהה מדי לכל הנושא של concurrency ושל non-blocking execution. רק בשנת 2012, החל מגירסה 4.5 של דוט-נט, יש סוף-סוף התייחסות סבירה ל async I/O בתבנית של async/await. בלי להכנס לפרטים, אסביר רק שהכוונה ב async I/O היא להעביר למערכת ההפעלה עצמה (ולמעשה לבקר החומרה הרלוונטי) את הביצוע ברקע של משימות I/O, כגון כתיבה/קריאה לדיסק, או שליחה/קבלה של נתונים ממשאבי רשת. בזמן הביצוע ברקע, ה thread ה"נוכחי" מתפנה למשימות אחרות. אפשר לקרוא עוד פה, כאן ופה. זה עדיין פתרון חלקי אם דרוש thread לכל חיבור.

ואיך בסביבת open-source פותרים את בעיית C10K? כאן כבר יש התייחסות ענפה לבעיה, ויש פתרונות טובים וזולים, כבר משנת 2009. שלוש דוגמאות בולטות:

  1. node.js, שתוכנן מראש להיות event-driven, כולל non-blocking I/O, והוא נותן מענה יפה ל concurrency. קיים מ 2009.
  2. הפריימוורק/שרת שנקרא Tornado, שוחרר כ open-source, כתוב בפייתון, משתמש ב Reactor pattern. יש בו שימוש אינטנסיבי ב async I/O. הוא מאוד קל לפיתוח והוא מאוד סקאלבילי (אין לי סטטיסטיקה מדויקת, אבל אתם יודעים, פייסבוק קנו את FriendsFeed, החברה שכתבה את זה…). קיים מ 2009.
  3. הפריימוורק שנקרא Twisted, כתוב בפייתון, open-source. באופן כללי הוא "כבד" יותר מ Tornado. קיים מ 2002.

אלו רק שלוש דוגמאות, אבל היד עוד נטויה. ב open-source יש פתרונות מלאים וזמינים לבעיית C10K.

פתרונות חדשניים לבעיות אמיתיות

בסביבת open-source, יש פרויקט פתוח (!), ואפשר בד"כ לשפר אותו ולהוסיף פיצ'רים שמתבססים על צרכים אמיתיים, שהגיעו "מהשטח". פרוייקטי open-source צומחים מהשטח, וחופש הבחירה שיש לנו, המפתחים, מאפשר לפרויקטים המוצלחים יותר – להמשיך ולהתקיים, ולפחות מוצלחים – להתפוגג לאיטם.

זוהי אבולוציה במיטבה. המוצלח – שורד. הפחות מוצלח – מתפוגג.

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

כדוגמה לפרויקט מוצלח אתן את Kafka. זה פרויקט מדהים, שבא מצורך אמיתי, של distributed message queue עם יכולות מאוד מתקדמות, וכתוב ב Scala. האם חברה כמו Microsoft תספק מוצר חדשני כמו זה בעתיד?

יש עוד הרבה פרויקטים מוצלחים וחדשניים. רשימה קצרה: Redis, Couchbase, Storm, Hadoop, Cassandra ועוד ועוד. כל פרויקט מוצדק בפני עצמו, ונותן מענה חדשני לבעיה מסויימת. לרובם קהילה פעילה ומדריכים טובים.

למה כל זה קורה?

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

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

למה זה קורה?

להבנתי, יש כאן שני עניינים שמסבירים את זה:

Microsoft היא חברת תוכנה לשוק ה Enterprise

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

Microsoft היא חברה שמפתחת פתרונות לשוק ה Enterprise. תחשבו על זה רגע:

  • כל הסיפור הזה שנקרא MS-SQL-Server הוא ל Enterprise, כיום בתחרות ישירה מול Oracle.
  • כל הסיפור הזה שנקרא Windows Server – לשוק ה Enterprise.
  • הסיפור עם Dynamics – שייך ל Enterprise.
  • וגם SharePoint – שייך ל Enterprise.

ע"פ הערכה מ 2013, כל פריט מהרשימה הזו מכניס ל Microsoft למעלה ממיליארד דולר בשנה.

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

אני חוזר: Microsoft היא חברה ששייכת ל Enterprise. ולכן הפתרונות שהיא מספקת הם פתרונות Enterprise:

  • יש עומס? -לא הבעיה שלנו. שימו load-balancer.
  • יש ביקוש לפיצ'ר מסויים? -חכו לגירסה הבאה, שתצא אולי עוד חצי שנה במקרה הטוב.
  • יש באג? חכו ל fix הבא. או גרוע מזה: חכו ל service-pack הבא. או גרוע מזה: זה מה יש.

כלומר:

  • הדרישות לסקאלביליות גבוהה מקבלות פתרון Enterprise מצד Microsoft. או שפשוט תלכו על Azure (בהצלחה!)
  • קצב האבולוציה של המוצרים של Microsoft הוא קצב של Enterprise.

הסטארט-אפים התרבו

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

אזור הנוחות של Microsoft

חברה רווחית כמו Microsoft יכולה להרשות לעצמה לעמוד מן הצד ולראות לאן השוק הולך. למעשה המודל הזה הצליח לה לא רע עד עכשיו:

  • דוט-נט זו העתקה טובה של Java
  • Excel זו העתקה טובה של Lotus 1-2-3
  • ואולי Windows זו גם העתקה של משהו?

הדפוס של Microsoft הוא כזה:

  • הבשלה: להמתין ולראות אם רעיון מסויים הוא רעיון רווחי
  • העתקה: להעתיק את הרעיון, לעיתים גם להשביח אותו
  • ליטוש: לכתוב תיעוד מצוין
  • שיוק ומכירות: לשווק אותו בצורה אגרסיבית

ככה יוצרים אזור נוחות למשתמשים של המוצרים עצמם.
למעשה, ככה גם Microsoft יצרה לעצמה את אזור הנוחות שלה.

כיום, עם שגשוג סביבת ה open-source, המודל הזה לא עובד מספיק טוב עבור מתכנתים. סביבת ה open-source מכתיבה קצב שונה, מהיר הרבה יותר ממה ש Microsoft יכולה לעמוד בו באופן מסורתי. שלב ההבשלה עצמו יכול להימשך שנתיים ומעלה. המשמעות היא שמי שמאמץ את הכלים של Microsoft הוא בסביבות שנתיים אחורה לעומת המוצרים הכי חדשים בשוק. אז שסטארט-אפ יקח על עצמו דווקא את הכלים האלה?!

התפכחות ושינוי כיוון

נכון להיום, רוב הפרויקטים המשמעותיים ב open-source מיועדים לריצה על מערכות לינוקס. חלק קטן מהם רץ גם על Windows (למשל Apache httpd). בשנים האחרונות יש מעבר של מתכנתים מסביבת Microsoft לסביבת open-source (כלומר, אני לא היחיד שעשה את המעבר הזה), ומכאן שיש גם מעבר של מתכנתים מ Windows ללינוקס.

כדי לבלום את התנועה הזו, Microsoft פצחה במספר מהלכים של שחרור (איטי) של קוד ל open-source. המהלך הבולט מכולם הוא שהיא הוציאה את ה core של דוט-נט לקוד פתוח (בעיקר ברישוי MIT, אבל לא רק). לא סתם הוציאה ל open-source, אלא ל github, ולא ל CodePlex, האתר הרשמי שבבעלות Microsoft לאחסון פרוייקטים ב open-source.
למה? כי לדבריהם שם נמצאת קהילת המקודדים של ה open-source. סוג של התפכחות?

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

אני סקפטי

לגבי פעולות ההצלה האלו, אומר רק שאני סקפטי. כל המעבר ל open-source כאילו נכפה על Microsoft. זו אסטרטגיה כל כך שונה מהמהות של Microsoft שאני לא יודע עד כמה הם יכולים לעשות את השינוי הנדרש:

  • האבולוציה של פרוייקטים בסביבת open-source מתרחשת בקצב מהיר. האם Microsoft תעמוד בו? לא בטוח.
  • כל ה eco-system שמתקיים באופן טבעי כבר שנים בסביבות שהן לא Microsoft, לדוגמה פייתון, רובי, Java וכד' – כבר התפתח מאוד. קשה מאוד להדביק את הפער הזה באופן מלאכותי. דוגמה לכך אפשר לראות מהנסיון של Microsoft ליצור eco-system סביב האפליקציות והחנות של Windows Phone – זה פשוט תהליך שקשה מאוד להאיץ אותו.
  • כל ה tooling מסביב לקוד ולאפליקציה עצמה – הרבה יותר עשיר בלינוקס מאשר ב Windows. אני מתייחס כאן לרכיבים הבאים: מערכת ההפעלה עצמה, ה shell (ויסלחו לי כולם, אבל PowerShell זה צעד חשוב אבל רחוק שנות אור מ bash והכלים שבו), האוטומציה (גם של ה deployment), כלי ה monitoring ועוד.

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

יש "הייפ" סביב open-source, וזה לא דבר רע. הטיעון ש open-source הוא cool אמנם מתבסס על ה"הייפ" הזה, אבל אם סביבת ה open-source הייתה רק cool, אז היא לא הייתה מצליחה כל כך, ולא הייתה מאיימת על חברות ענק כמו Microsoft.

אז מהי החזית הטכנולוגית?

נכון להיום בעולם התוכנה, החזית הטכנולוגית היא זו של האינטרנט להמונים, של סקאלביליות גבוהה, של throughput גבוה.

נכון להיום, החזית הטכנולוגית קיימת וזמינה בסביבת open-source, הרבה יותר ממה שקיים בסביבת דוט-נט.

ברור לי שחברות תוכנה ענקיות כמו גוגל, פייסבוק, אמאזון וכד', נמצאות בחזית הטכנולוגית של ימינו, ומחזיקות כלים ייחודיים משלהן ולא חושפות אותן כ open-source. זה הגיוני, כי זה הביזנס שלהן. יחד עם זאת, לעיתים החברות האלו משחררות כלים מסויימים החוצה ל open-source כדי "להחזיר משהו בחזרה" לקהילה עצמה, ואגב כך גם לזכות במוניטין. נכון לשנת 2014, גוגל שחררה מעל 900 פרוייקטים. גם אם רק חלק קטן מהם הוא רלוונטי וחדשני, זה נחמד.

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

חברת Microsoft מנסה לשנות משהו במהות שלה ולהכניס דריסת רגל בעולם ה open-source. ההתפכחות של Microsoft, או ההכרה שלה (סוף סוף) בעולם ה open-source נראית לי מגושמת. להבנתי, מדובר בשתי "תרבויות" שונות כל כך, שהמאמצים של Microsoft הם בחזקת "מעט מדי, מאוחר מדי".

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

יש לכם זמן?

קטגוריות:טכנולוגיה, תכנות תגיות:, ,
Quantcast