Na blogu deweloperskim Microsoftu ukazał się w ostatnim czasie interesujący wpis Mike’a Battisty, Senior Program Managera w Microsofcie. Mike przedstawił sposób na to, jak sprawić, by obsługa Windows Subsystem for Linux była – przynajmniej pod względem składni poleceń – równie wygodna i naturalna, jak w natywnym linuksowym terminalu. Efekty jego pracy może już przetestować każdy, po pobraniu niezbędnych plików z repozytorium GitHub.
Windows Subsytem for Linux
Windows Subsystem for Linux to jeden z najciekawszych składników systemu operacyjnego Microsoftu kierowanych do deweloperów czy administratorów. Choć z początku pierwsza wersja była znacznie ograniczona w stosunku do natywnego środowiska linuksowego i brakowało jej wielu narzędzi deweloperskich, to kolejne miesiące rozwoju Windowsa 10 przyniosły niezłe rezultaty na drodze rozwoju warstwy tłumaczącej wywołania systemowe i integracji z dystrybucjami.
Dość niespodziewanie Microsoft zdecydował się jednak na równoległe rozwijanie dwóch wersji WSL-a. Jak wspomnieliśmy, pierwsza opierała się na tłumaczeniu wywołań systemowych, co miało swoje ograniczenia, ale też sprawiało, że WSL uruchamiał się błyskawicznie i miał relatywnie niewielki narzut na sprzęt. W wersji drugiej jednak zdecydowano się na implementację pełnego jądra Linux odpowiednio zmodyfikowanego przez Microsoft i rozwiązanie oparte na wirtualizacji z wykorzystaniem hipernadzorcy Hyper-V.
Choć WSL 2 wypadł w testach wydajnościowych Michaela Larabela zauważalnie słabiej niż pierwsza wersja, to jednak wirtualizacja uruchomiła przed deweloperami i producentami oprogramowania zupełnie nowe możliwości. Najlepszym przykładem będzie tu Docker. Gruntowne zmiany w architekturze zachęciły producenta do całkowitego porzucenia dotychczasowej wersji na Windowsa. Zdecydował on, że jedyną oficjalnie wspieraną będzie właśnie Docker dla Windows Subsystem for Linux 2.
Linuksowe polecenia w PowerShell
Dotąd jednak użytkownicy linuksowego subsystemu napotykali drobną, acz irytującą niedogodność, która każdorazowo przypominała im, że nie mają do czynienia z „prawdziwym” Linuksem, lecz z jego microsoftową implementacją w Windowsie. Chodzi o konieczność poprzedzania poleceń prefiksem wsl
. To właśnie na ten temat pisze Mike Battista i prezentuje sposób, aby się go pozbyć. Słowem – w PowerShell Core można już wprowadzać polecenia zupełnie jak w linuksowym terminalu.
Udało się to z wykorzystaniem odpowiednich funkcje opakowujące, które są generowane dla każdego polecenia oddzielnie na bazie zdefiniowanej wcześniej listy $command
i polecenia Invoke-Expression
. Odpowiednie ścieżki rozpoznawane są dzięki poleceniom Split-Path
i Test-Path
i automatycznie tłumaczone na ścieżki WSL. W ten sposób całkowicie wyeliminowana została konieczność stosowania prefiksu wsl
w składni.
Aby przetestować proponowaną przez Microsoft nowość, wystarczy pobrać z GitHuba odpowiednio przygotowany profil i dokonać importu. Co ważne, nie jest obsługiwana standardowa wersja powłoki PowerShell, pominąć konieczność korzystania z wsl
można wyłącznie w PowerShellu Core. Więcej informacji na temat możliwości edytowania listy poleceń oraz wprowadzania własnych parametrów można zdobyć na łamach bloga deweloperskiego Microsoftu.