WSL

WSL (ראשי תיבות של: Windows Subsystem for Linux) היא שכבת תאימות להפעלת קובצי הפעלה בינאריים של לינוקס (בפורמט ELF) בסביבות Windows 10, Windows 11, ו- Windows Server 2019.

במאי 2019, הוכרזה WSL 2, ובה שינויים חשובים כגון ליבת לינוקס אמיתית באמצעות תכונות Hyper-V. מהדורת WSL אינה זמינה לכל משתמשי Windows 10 כברירת מחדל. ניתן להתקין אותו על ידי הצטרפות לתוכנית Windows Insider או התקנה ידנית.

סקירה כללית 
המהדורה הראשונה של WSL מספקת ממשק ליבה תואם לינוקס שפותחה על ידי מיקרוסופט, ללא קוד ליבת לינוקס אשר לאחר מכן יכול להריץ מרחב משתמש של GNU, כמו זה של אובונטו, או openSUSE, וכן SUSE Linux Enterprise Server,   Debian וקאלי לינוקס. 

מרחב משתמש כזה עשוי להכיל מעטפת GNU Bash ושפת פקודה, עם כלים מקוריים של שורת הפקודה של GNU (sed, awk וכו'), מתורגמנים לשפת תכנות (Ruby, Python וכו'), ואפילו יישומים גרפיים (באמצעות שרת X11 בצד המארח).

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

פופולריות וזמינות 
WSL בטא הוצגה בגרסה 1607 של Windows 10 (עדכון יום השנה) ב-2 באוגוסט 2016. רק אובונטו (עם Bash כמעטפת ברירת המחדל) נתמכה. WSL בטא נקראה גם "Bash on Ubuntu ב-Windows" או "Bash on Windows".

WSL כבר לא היה בטא בגרסה 1709 של Windows 10 (עדכון "יוצרי הסתיו"), שיצא ב-17 באוקטובר 2017. ניתן היה להתקין הפצות לינוקס מרובות והיו זמינות להתקנה בחנות Windows.

WSL זמין רק בגרסאות 64 סיביות של Windows 10 מגרסה 1607. זה זמין גם ב-Windows Server 2019.

מיקרוסופט הכריזה על WSL 2 ב-6 במאי 2019, שכולל קצה אחורי חדש לחלוטין מבוסס VM (מבוסס על תת-קבוצה של תכונות Hyper-V) במקום שכבת ההתאמה הקודמת לשיחות מערכת. WSL 2 נשלח עם Windows 10 גרסת 2004, והועבר גם ל-Windows 10 גרסאות 1903 ו-1909.

תמיכת GPU עבור WSL 2 הוצגה ב-Windows build 20150. תמיכת GUI עבור WSL 2 הוצגה ב-Windows build 21364. שניהם מוכלים ב-Windows 11.

מיקרוסופט הציגה גרסה של Windows Store של WSL ב-11 באוקטובר 2021 עבור Windows 11.

התפתחות 
הגיחה הראשונה של מיקרוסופט להשגת תאימות דמוית Unix ב-Windows החלה עם Microsoft POSIX Subsystem, שהוחלפה על ידי Windows Services עבור UNIX דרך MKS / Interix, אשר בסופו של דבר הוצאה משימוש עם שחרורו של Windows 8.1. הטכנולוגיה שמאחורי Windows Subsystem עבור לינוקס מקורה בפרויקט Astoria שלא פורסם, שאיפשר לכמה יישומי אנדרואיד לפעול על Windows 10 Mobile. הוא הפך זמין לראשונה ב- Windows 10 Insider Preview build 14316.

הפרויקטים הקודמים של מיקרוסופט והצד השלישי Cygwin התמקדו ביצירת סביבות ייחודיות דמויות Unix משלהם המבוססות על תקן POSIX,אולם WSL שואפת לתאימות לינוקס מלאה. במקום לעטוף פונקציונליות שאינה מקורית לתוך קריאות מערכת Win32 כפי שהמערכות הקודמות הללו השתמשו בהן, התכנון הראשוני של WSL (WSL 1) מינף את מנהל הליבה של NT כדי לשרת תוכניות לינוקס כתהליכים מינימליים מיוחדים ומבודדים (הידועים כ"תהליכי פיקו" ) המחוברים לליבה מצב "ספקי פיקו" לקריאות מערכת וטיפול בחריגים, הנבדלים מזה של תהליך NT "וניל", ובוחרים לנצל מחדש יישומי NT קיימים בכל מקום שניתן.

אף על פי ש-WSL (באמצעות עיצוב ראשוני זה) היה הרבה יותר מהיר וללא ספק הרבה יותר פופולרי מאחיו פרויקטי UNIX-on-Windows, מהנדסי ליבת Windows מצאו קושי בניסיון להגביר את הביצועים ותאימות המערכת של WSL על ידי ניסיון לעצב מחדש את ליבת ה-NT הקיימת כדי לזהות ולפעול נכון על ה-API של לינוקס. בכנס של Microsoft Ignite בשנת 2018, מהנדסי מיקרוסופט נתנו סקירה ברמה גבוהה של טכנולוגיית Hyper-V VM חדשה "קלת משקל" עבור קונטיינריזציה שבה ליבה וירטואלית יכולה לעשות שימוש ישיר בפרימיטיבים של NT במארח. בשנת 2019, מיקרוסופט הכריזה על ארכיטקטורת WSL (WSL 2) שתוכננה מחדש באמצעות טכנולוגיית VM זו המארחת אימאג' ליבת לינוקס (מותאמת אישית) בפועל, תוך שהיא טוענת לתאימות מלאה ל-Sycall.

מיקרוסופט רואה ב-WSL "בעיקר כלי למפתחים - במיוחד מפתחי אינטרנט וכאלה שעובדים על או עם פרויקטים בקוד פתוח". בספטמבר 2018 אמרה מיקרוסופט כי "WSL דורש פחות משאבים (CPU, זיכרון ואחסון) מאשר מכונה וירטואלית מלאה" (שלפני WSL הייתה הדרך הישירה ביותר להריץ תוכנת לינוקס בסביבת Windows), תוך שהיא מאפשרת למשתמשים להשתמש ביישומי Windows ובכלי Linux על אותה קבוצת קבצים.

באפריל 2021, מיקרוסופט פרסמה מבנה מבחן של Windows 10 הכולל גם את היכולת להריץ יישומי ממשק משתמש גרפי של לינוקס (GUI) באמצעות WSL 2 ו-CBL-Mariner. מערכת המשנה של Windows עבור Linux GUI (WSLg) שוחררה רשמית בכנס Microsoft Build 2021. זה כלול ב-Windows 10 Insider build 21364 ואילך.

ארכיטקטורה

WSL 1

שירות מנהל LXSS 
LXSS Manager Service הוא השירות שאחראי על האינטראקציה עם תת-המערכת (דרך מנהלי ההתקן  ו- ), והדרך שבה Bash.exe (שלא להתבלבל עם ה-Shells המסופקים על ידי הפצות לינוקס) משיק את הלינוקס תהליכים, כמו גם טיפול בקריאות מערכת לינוקס ובנעילות הבינאריות במהלך ביצוען.

כל תהליכי לינוקס המופעלים על ידי משתמש מסוים נכנסים ל-"Linux Instance" (בדרך כלל, התהליך הראשון שהופעל הוא init). ברגע שכל האפליקציות נסגרות, המופע נסגר.

wsl.exe 
הפקודה wsl.exe משמשת לניהול הפצות בתת-מערכת Windows עבור לינוקס בשורת הפקודה. זה יכול לרשום הפצות זמינות, להגדיר הפצת ברירת מחדל ולהסיר הפצות. ניתן להשתמש בפקודה גם כדי להפעיל קבצים בינאריים של לינוקס משורת הפקודה של Windows או Windows PowerShell. כאשר wsl.exe מחליף את lxrun.exe שהוצא משימוש החל מ-Windows 10 1803.

דוגמאות 
הפעלת uname ב-WSL באמצעות PowerShell.PS C:\temp> wsl uname --all
Linux WikiMachine 4.4.0-18362-Microsoft #1-Microsoft Mon Mar 18 12:02:00 PST 2019 x86_64 x86_64 x86_64 GNU/Linuxדוגמה לשימוש ב sudo משורת הפקודה.C:\temp> wsl sudo apt-get update
[sudo] password for username:
Hit:1 https://archive.ubuntu.com/ubuntu xenial InRelease
Get:2 https://security.ubuntu.com/ubuntu xenial-security InRelease [94.5 kB]

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

ישנם מיקומים מסוימים (כגון תיקיות מערכת) ותצורות שהגישה/שינוי שלהן מוגבלים, גם כאשר הם פועלים כ-root, עם sudo מהמעטפת. יש להפעיל מופע עם הרשאות גבוהות על מנת לקבל "sudo" לתת הרשאות שורש אמיתיות, ולאפשר גישה כזו.

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

אפשר להפעיל כמה יישומים גרפיים (GUI) (כגון Mozilla Firefox) על ידי התקנת שרת X11 בתוך סביבת Windows (מארח) (כגון VcXsrv או Xming), אם כי לא ללא אזהרות, כגון היעדר תמיכת אודיו (אם כי ניתן לתקן זאת על ידי התקנת PulseAudio ב-Windows באופן דומה ל-X11) או האצת חומרה (כתוצאה מכך ביצועים גרפיים גרועים). גם תמיכה ב- OpenCL ו- CUDA אינה מיושמת כרגע, אם כי מתוכננת לשחרורים עתידיים.

מיקרוסופט ציינה ש-WSL תוכנן לפיתוח יישומים, ולא עבור מחשבים שולחניים או שרתי ייצור, והמליצה להשתמש במכונות וירטואליות (Hyper-V), Kubernetes ו- Azure למטרות אלו.

WSL 2 
גרסה 2 מציגה שינויים בארכיטקטורה. מיקרוסופט בחרה בווירטואליזציה באמצעות קבוצת משנה שעברה אופטימיזציה גבוהה של תכונות Hyper-V, על מנת להפעיל את הליבה וההפצות (בהתבסס על הליבה), מה שמבטיח ביצועים שוות ערך ל-WSL 1. למען תאימות לאחור, מפתחים לא צריכים לשנות שום דבר בהפצות שפורסמו. ניתן לשנות את הגדרות WSL 2 על ידי התצורה הגלובלית של WSL, הכלולה בקובץ INI בשם .wslconfig בתיקייה User Profile .

התקנת ההפצה שוכנת בתוך מערכת קבצים בפורמט ext4 בתוך דיסק וירטואלי, ומערכת הקבצים המארחת נגישה בשקיפות באמצעות פרוטוקול 9P,  בדומה לטכנולוגיות אחרות של מכונות וירטואליות כמו QEMU. עבור המשתמשים, מיקרוסופט הבטיחה עד פי 20 מביצועי הקריאה/כתיבה של WSL 1. מ-Windows מסופק מפנה רשת של IFS עבור גישה לקובצי אורח של Linux באמצעות קידומת נתיב UNC של \\wsl$ .

WSL 2 דורש Windows 10 גרסה 1903 ומעלה, עם Build 18362 ומעלה, עבור מערכות x64, וגרסה 2004 ומעלה, עם Build 19041 ומעלה, עבור מערכות ARM64.

WSLg 
WSLg הוא קיצור של Windows Subsystem for Linux GUI שנבנה במטרה לאפשר תמיכה בהפעלת יישומי Linux GUI (X11 ו-Wayland) ב-Windows בחוויית שולחן עבודה משולבת במלואה. WSLg שוחרר רשמית בכנס Microsoft Build 2021. זה כלול ב-Windows 10 Insider build 21364 ואילך. עם זאת, עם הצגת Windows 11 WSLg יוצאת עם מבנה ייצור של חלונות המביא תמיכה עבור גרפיקה ואודיו גם באפליקציות WSL.

דרישות מוקדמות להפעלת WSLg 
 Windows 11 או Windows 10 Insider Preview (build 21362 ואילך)
 הפעל WSLg על מערכת עם GPU וירטואלי (vGPU) מופעל עבור WSL (אופציונלי, אולם זה מאפשר עיבוד OpenGL מואץ בחומרה)

קישורים חיצוניים 

 
 Windows Command Line blog
 WSL on Microsoft Docs
 WSL on GitHub
 WSL2-Linux-Kernel on GitHub
 Windows Command Line Tools For Developers blog

הערות שוליים 

רכיבי Windows
אובונטו לינוקס
דפים עם תרגומים שלא נסקרו