WSL

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

במאי 2019, הוכרזה WSL 2,<ref name="announcing-wsl-2"></ref> ובה שינויים חשובים כגון ליבת לינוקס אמיתית<ref name="about-wsl-2"></ref> באמצעות תכונות Hyper-V. מהדורת WSL אינה זמינה לכל משתמשי Windows 10 כברירת מחדל. ניתן להתקין אותו על ידי הצטרפות לתוכנית Windows Insider או התקנה ידנית.<ref></ref>

== סקירה כללית ==
המהדורה הראשונה של WSL מספקת ממשק ליבה תואם לינוקס שפותחה על ידי מיקרוסופט, ללא קוד ליבת לינוקס<ref></ref> אשר לאחר מכן יכול להריץ מרחב משתמש של GNU, כמו זה של אובונטו,<ref></ref><ref></ref><ref></ref><ref></ref> או openSUSE,<ref>[https://www.microsoft.com/store/apps/9njvjts82tjx Get openSUSE Leap 42 - Microsoft Store]</ref> וכן SUSE Linux Enterprise Server, <ref>[https://www.microsoft.com/store/apps/9p32mwbh6cns Get SUSE Linux Enterprise Server 12 - Microsoft Store]</ref> <ref></ref><ref name="fall"></ref> Debian<ref></ref> וקאלי לינוקס.<ref></ref>

מרחב משתמש כזה עשוי להכיל מעטפת GNU Bash ושפת פקודה, עם כלים מקוריים של שורת הפקודה של GNU (sed, awk וכו'), מתורגמנים לשפת תכנות (Ruby, Python וכו'), ואפילו יישומים גרפיים (באמצעות שרת X11 בצד המארח).<ref name="ms-faq"></ref>

הארכיטקטורה עוצבה מחדש ב-WSL 2,<ref name="announcing-wsl-2" /> עם ליבת לינוקס הפועלת בסביבת מכונה וירטואלית "קלת משקל".

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

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

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

מיקרוסופט הכריזה על WSL 2 ב-6 במאי 2019,<ref name="announcing-wsl-2" /> שכולל קצה אחורי חדש לחלוטין מבוסס VM (מבוסס על תת-קבוצה של תכונות Hyper-V) במקום שכבת ההתאמה הקודמת לשיחות מערכת. WSL 2 נשלח עם Windows 10 גרסת 2004,<ref name="shipping-wsl-2"></ref> והועבר גם ל-Windows 10 גרסאות 1903 ו-1909.<ref name="backporting-wsl-2"></ref>

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

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

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

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

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

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

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

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

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

==== wsl.exe ====
הפקודה <code>wsl.exe</code> משמשת לניהול הפצות בתת-מערכת Windows עבור לינוקס בשורת הפקודה. זה יכול לרשום הפצות זמינות, להגדיר הפצת ברירת מחדל ולהסיר הפצות.<ref>[https://docs.microsoft.com/en-us/windows/wsl/wsl-config Manage and configure Windows Subsystem for Linux]</ref> ניתן להשתמש בפקודה גם כדי להפעיל קבצים בינאריים של לינוקס משורת הפקודה של Windows או Windows PowerShell.<ref>[https://docs.microsoft.com/en-us/windows/wsl/interop Windows Subsystem for Linux interoperability with Windows]</ref> כאשר <code>wsl.exe</code> מחליף את <code>lxrun.exe</code> שהוצא משימוש החל מ-Windows 10 1803.<ref>[https://docs.microsoft.com/de-de/windows/wsl/reference Command Reference for Windows Subsystem for Linux]</ref>

===== דוגמאות =====
הפעלת <code>uname</code> ב-WSL באמצעות PowerShell.<syntaxhighlight lang="doscon">
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
</syntaxhighlight>דוגמה לשימוש ב <code>sudo</code> משורת הפקודה.<syntaxhighlight lang="doscon">
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]
</syntaxhighlight>

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

ישנם מיקומים מסוימים (כגון תיקיות מערכת) ותצורות שהגישה/שינוי שלהן מוגבלים, גם כאשר הם פועלים כ-root, עם sudo מהמעטפת. יש להפעיל מופע עם הרשאות גבוהות על מנת לקבל "sudo" לתת הרשאות שורש אמיתיות, ולאפשר גישה כזו.<ref name="ms-faq" />
==== מגבלות ====
WSL 1 אינו מסוגל להריץ את כל תוכנות לינוקס, כגון קבצים בינאריים של 32 סיביות,<ref name="32bit-elf3"></ref><ref name="32bit-elf22"></ref> או כאלו הדורשות שירותי ליבת לינוקס ספציפיים שאינם מיושמים ב-WSL. עקב מחסור בליבת לינוקס "אמיתית" ב-WSL 1, לא ניתן להפעיל מודולי ליבה, כגון מנהלי התקנים. עם זאת, WSL 2 עושה שימוש במופעי ליבת לינוקס וירטואליים חיים.

אפשר להפעיל כמה יישומים גרפיים (GUI) (כגון Mozilla Firefox) על ידי התקנת שרת X11 בתוך סביבת Windows (מארח) (כגון VcXsrv או Xming),<ref name="pcworld-x112"></ref> אם כי לא ללא אזהרות, כגון היעדר תמיכת אודיו (אם כי ניתן לתקן זאת על ידי התקנת PulseAudio ב-Windows באופן דומה ל-X11) או האצת חומרה (כתוצאה מכך ביצועים גרפיים גרועים). גם תמיכה ב־OpenCL ו־CUDA אינה מיושמת כרגע, אם כי מתוכננת לשחרורים עתידיים.<ref></ref><ref></ref>

מיקרוסופט ציינה ש-WSL תוכנן לפיתוח יישומים, ולא עבור מחשבים שולחניים או שרתי ייצור, והמליצה להשתמש במכונות וירטואליות (Hyper-V), Kubernetes ו- Azure למטרות אלו.<ref name="ms-faq" />
=== WSL 2 ===
גרסה 2 מציגה שינויים בארכיטקטורה. מיקרוסופט בחרה בווירטואליזציה באמצעות קבוצת משנה שעברה אופטימיזציה גבוהה של תכונות Hyper-V, על מנת להפעיל את הליבה וההפצות (בהתבסס על הליבה), מה שמבטיח ביצועים שוות ערך ל-WSL 1. למען תאימות לאחור, מפתחים לא צריכים לשנות שום דבר בהפצות שפורסמו. ניתן לשנות את הגדרות WSL 2 על ידי התצורה הגלובלית של WSL, הכלולה בקובץ INI בשם <code>.wslconfig</code> בתיקייה User Profile .<ref name="Loewen, Microsoft devblog, 2019"></ref><ref name="Hillis, GitHub, 2019"></ref>

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

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

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

==== דרישות מוקדמות להפעלת WSLg ====
* Windows 11 או Windows 10 Insider Preview (build 21362 ואילך)<ref name=":1" />
* הפעל WSLg על מערכת עם GPU וירטואלי (vGPU) מופעל עבור WSL (אופציונלי, אולם זה מאפשר עיבוד OpenGL מואץ בחומרה)<ref name=":1" />

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

* 
* [https://devblogs.microsoft.com/commandline/ Windows Command Line] blog
* [https://docs.microsoft.com/en-us/windows/wsl/about WSL] on Microsoft Docs
* WSL on GitHub
* WSL2-Linux-Kernel on GitHub
* [https://blogs.msdn.microsoft.com/commandline/ Windows Command Line Tools For Developers blog]
* 

== הערות שוליים ==

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