הנזק ארוך הטווח שגרמה Windows לתעשיית ההייטק

הפרודקשן רץ על Linux. גם הפיתוח היה צריך

הנה עובדה שאמורה להטריד כל מנהל בתעשיית ההייטק: כמעט כל תשתית הפרודקשן כיום רצה על Linux. שרתי ענן, קונטיינרים, אשכולות Kubernetes, צינורות CI/CD, מערכות משובצות, ציוד תקשורת, מחשבי־על — Linux, כל הדרך למטה. ובכל זאת, במשך עשורים הכשירה התעשייה את המפתחים שלה על Windows.

חוסר ההתאמה הזה עלה לנו ביוקר רב.

דור שהוכשר על מערכת ההפעלה הלא נכונה

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

  • מפרידי נתיבים ורגישות לאותיות — Windows משתמשת בקו נטוי הפוך ובשמות קבצים שאינם רגישים לאותיות גדולות/קטנות. Linux משתמשת בקו נטוי קדימה ורגישה לאותיות. כמה באגים בפרודקשן נגרמו מחוסר ההתאמה הזה לבדו? יותר משאפשר לספור.

  • סיומות שורה — CR+LF מול LF. עשורים של כלים, קונפיגורציות git ועקיפות לבעיה שקיימת רק משום שמפתחים משתמשים במערכת הפעלה שונה מזו של הפרודקשן.

  • אנאלפביתיות בסקריפטים של שֶׁל — מפתחי Windows גדלו על CMD ומאוחר יותר על PowerShell, ואף אחת מהן אינה מתורגמת ל-Bash/POSIX shell שמריץ כל סקריפט פרודקשן, כל Dockerfile וכל צינור CI. כך נוצר פער כישורים שנמשך עד היום.

  • מודלי הרשאות — ACLs של Windows והרשאות POSIX של Linux שונות מן היסוד. מפתחים שמעולם לא השתמשו ב-Linux לרוב אינם מבינים הרשאות קבצים, בעלוּת, או את עיקרון ההרשאה המזערית כפי שהוא ממומש במערכות פרודקשן.

  • ניהול תהליכים — סיגנלים, דמונים, systemd, cgroups, namespaces — אבני הבניין של הקונטיינריזציה המודרנית — כולם מושגים של Linux שמפתחי Windows נאלצו ללמוד מאפס כשהתעשייה עברה ל-Docker ול-Kubernetes.

הנזק התרבותי

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

  • ממשקים גרפיים הם העיקר, ושורת הפקודה משנית. בפרודקשן ההפך הוא הנכון. אתם מתחברים לשרתים ב-SSH. אתם כותבים סקריפטים לאוטומציה. אתם קוראים לוגים עם grep, awk ו-sed. תפיסת ה-GUI תחילה הפכה את המפתחים לפחות אפקטיביים בתפעול.

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

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

מס הכלים

התעשייה השקיעה מאמץ עצום בבניית גשרים בין עולם הפיתוח של Windows ובין עולם הפרודקשן של Linux:

  • Vagrant ומאוחר יותר Docker Desktop for Windows — פרויקטים שלמים שקיימים בעיקר כדי לאפשר למפתחי Windows להריץ סביבות Linux מקומית.

  • WSL (Windows Subsystem for Linux) — מיקרוסופט עצמה הודתה בסופו של דבר בבעיה על ידי הטמעת Linux בתוך Windows. חשבו על זה: הפתרון לפיתוח על Windows היה להריץ Linux בתוכה.

  • מערכות בנייה חוצות פלטפורמות — CMake, הפשטות CI שונות, ואינספור קובצי Makefile עם הסתעפויות ייחודיות ל-Windows. סיבוכיות שקיימת אך ורק משום שסביבות הפיתוח והפרודקשן לא תאמו זו לזו.

  • Cygwin ו-MSYS — מאמצים הרואיים להביא כלי POSIX ל-Windows, ששימשו מיליוני מפתחים שהיו זקוקים לכלי Unix אך נתקעו על מכונות Windows.

השנים המבוזבזות

אוניברסיטאות לימדו מדעי המחשב על Windows במשך שנים. סטודנטים סיימו תואר בלי לדעת להשתמש בטרמינל ביעילות, בלי לדעת לכתוב סקריפט שֶׁל, ובלי לדעת כיצד עובד ניהול חבילות ב-Linux. העבודה הראשונה שלהם דרשה את כל הכישורים האלה.

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

מה עלינו ללמוד מכך

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

סביבת הפיתוח שלכם צריכה להתאים לסביבת הפרודקשן שלכם.

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

כיום התעשייה מתכנסת סוף סוף. שולחנות עבודה של Linux הם אופציה ריאלית למפתחים. macOS מספקת סביבה דמוית Unix. WSL קיימת עבור מי שנשארים על Windows. סביבות פיתוח מבוססות ענן רצות על Linux באופן טבעי. מפתחים חדשים נוטים יותר להיתקל ב-Linux מוקדם.

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

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