Bash na Ubuntu w systemie Windows umożliwia uruchamianie natywnych plików binarnych systemu Linux ELF64 w systemie Windows za pośrednictwem podsystemu Windows dla systemu Linux (WSL). Chociaż wiele osób było zszokowanych ogłoszeniem Bash on Ubuntu, warto wspomnieć, że otwiera on nowe drzwi dla kompatybilności między różnymi systemami operacyjnymi. Microsoft robi kolejny krok naprzód i ujawnia, jak działa WSL, abyśmy mogli lepiej zrozumieć, w jaki sposób oba systemy komunikują się ze sobą.
WSL został stworzony przez zespół jądra systemu Microsoft Windows i zawiera zarówno składniki trybu użytkownika, jak i trybu jądra. Dokładniej, system składa się z:
- usługa menedżera sesji trybu użytkownika obsługująca cykl życia instancji Linuksa
- Sterowniki dostawcy Pico (lxss.sys, lxcore.sys), których rolą jest emulacja jądra Linuksa poprzez tłumaczenie wywołań systemowych Linuksa
- Procesy Pico obsługujące niezmodyfikowany tryb użytkownika Linux (np. /bin/bash).
Połączenie między trzema komponentami jest opisane w następujący sposób:
Jest to przestrzeń pomiędzy plikami binarnymi Linuksa trybu użytkownika a komponentami jądra Windows, gdzie dzieje się magia. Umieszczając niezmodyfikowane binaria Linuksa w procesach Pico umożliwiamy kierowanie wywołań systemowych Linuksa do jądra Windows. Sterowniki lxss.sys i lxcore.sys tłumaczą wywołania systemu Linux na API NT i emulują jądro Linux.
Głównym wyzwaniem w tym procesie jest doprowadzenie do współpracy tych dwóch systemów:
WSL wykonuje niezmodyfikowane pliki binarne Linux ELF64 przez wirtualizację interfejsu jądra Linux na szczycie jądra Windows NT. Jednym z interfejsów jądra, które ujawnia, są wywołania systemowe (wywołania systemowe). Syscall to usługa dostarczana przez jądro, którą można wywołać z trybu użytkownika. Zarówno jądro Linux, jak i jądro Windows NT udostępniają kilkaset wywołań systemowych w trybie użytkownika, ale mają one inną semantykę i generalnie nie są bezpośrednio kompatybilne. Na przykład jądro Linuksa zawiera takie elementy, jak fork, open i kill, podczas gdy jądro Windows NT ma porównywalne NtCreateProcess, NtOpenFile i NtTerminateProcess.
Podsystem Windows dla systemu Linux zawiera sterowniki trybu jądra (lxss.sys i lxcore.sys), które są odpowiedzialne za obsługę żądań wywołań systemowych systemu Linux w koordynacji z jądrem systemu Windows NT. Sterowniki nie zawierają kodu z jądra Linuksa, ale zamiast tego są implementacją interfejsów jądra kompatybilnych z Linuksem. W natywnym systemie Linux wywołanie systemowe tworzone z pliku wykonywalnego trybu użytkownika jest obsługiwane przez jądro systemu Linux. W WSL, gdy wywołanie systemowe jest wykonywane z tego samego pliku wykonywalnego, jądro Windows NT przekazuje żądanie do lxcore.sys. Tam, gdzie to możliwe, lxcore.sys tłumaczy wywołanie systemowe Linuksa na równoważne wywołanie systemu Windows NT, które z kolei wykonuje ciężkie zadanie.
Biorąc pod uwagę zainteresowanie Microsoftu platformami open-source, wiele osób zastanawiało się, czy gigant technologiczny powinien przejąć duże firmy skupione na Linuksie, takie jak Canonical, firma stojąca za systemem operacyjnym Ubuntu. Chociaż Microsoft i Canonical współpracowały nad oprogramowaniem typu open source, żadne z nich nie skomentowało tej możliwości.
Jeśli interesuje Cię, jak ewoluuje interakcja Linux – Windows, przejdź do bloga Microsoft. Zespół obiecał, że pojawi się więcej wpisów na blogu na ten temat.
POWIĄZANE HISTORIE, KTÓRE MUSISZ SPRAWDZIĆ:
- Użytkownicy systemu Linux zgłaszają problemy „Słuchawki przestały działać w systemie Windows 8.1”
- Microsoft i Canonical wprowadzają Bash do systemu Windows 10 podczas kompilacji 2016
- Monachium rozpoczyna dystrybucję bezpłatnych płyt CD z Ubuntu wśród użytkowników Windows XP