WSL - Linux in Windows

1 september 2022
Jakub Rojek Jakub Rojek
Official sites and graphics of Microsoft and Linux
Categories: Deployments, Programming, IT fundamentals, Guides

Microsoft Windows ma niejednoznaczną opinię, jednak nie da się ukryć, że przez lata zawładnął PC-tami i laptopami na całym świecie, stanowiąc wizualnie przystępny, łatwy w obsłudze (przynajmniej z "wierzchu") i wiele umożliwiający system operacyjny. Zwykle jest domyślnie instalowany i użytkowany przez użytkowników, gdyż zapewnia możliwość uruchomienia szerokiej gamy programów. Nie czarujmy się - nie każdy jest programistą czy administratorem, komputery z macOS są dość drogie, a nawet specjaliści nie zawsze chcą korzystać z "pingwina". Tym niemniej, czasem (szczególnie wśród bardziej zaawansowanych użytkowników) zachodzi potrzeba użycia narzędzi dostępnych tylko na systemy unixowe. I tutaj pojawia się problem.

Windows i Linux (czyli najpopularniejsza klasa systemów unixowych) różnią się od siebie - to oczywistość i banał niewarty nawet wspominania (co nie przeszkodziło mi o tym wspomnieć). Jednak dla wielu osób te różnice nie mają aż takiego znaczenia, gdyż zwykle znajdują tzw. porty, a więc wersje poszczególnych programów przygotowanych na dany system operacyjny. Schody zaczynają się w momencie, kiedy port nie działa tak jak powinien, nie jest tak łatwo konfigurowalny lub po prostu nie istnieje. W świecie gier wideo jest to częste, gdyż nie wszystkie produkcje są dostępne zarówno na konsolach, jak i komputerach osobistych, ale gracze się na to godzą. Jednak my dzisiaj skupimy się na potrzebach programistów, gdzie z pogodzeniem się bywa już trudniej, gdy potrzeby klientów dyktują zastosowanie różnych konkretnych rozwiązań.

I tutaj, o dziwo, pomocną dłoń wyciągnął sam Microsoft. To niespotykane, ponieważ przez wiele lat ta firma była uznawana za nieszczególnie otwartą i chętną do współpracy obejmującej Linuxa, ale trzeba przyznać, że od tego czasu trochę się pozmieniało i MS w kilku aspektach wszedł na całkiem przyzwoitą ścieżkę rozwoju i bycia przyjaznym dla społeczności informatycznej. Jednak zanim przyjrzymy się "wynalazkowi" giganta z Redmond, a więc tytułowemu WSL-owi, pokażmy sobie, w jaki sposób programiści mogą sobie radzić, gdy muszą uruchomić program na systemie unixowym.

Jedna uwaga - w tym artykule nie będę wdawał się w szczegóły techniczne, a zamiast tego skupię się na praktycznym zastosowaniu opisywanych narzędzi.

Dotychczasowe sposoby na uruchomienie Linuxa w Windowsie

Z pewnością większości z Was zapali się w głowie teraz lampka podpisana "maszyna wirtualna" i to bardzo dobry trop, gdyż w ten sposób zazwyczaj można poradzić sobie w sytuacji, kiedy na jakiś czas potrzebujemy korzystać ze środowiska linuksowego, ale niekoniecznie chcemy opuszczać łono Windowsa. Takie programy jak VirtualBox czy VMware umożliwiają wygodne wydzielenie zasobów na uruchomienie "podsystemu", w którym można zainstalować i korzystać z dowolnego systemu operacyjnego, do którego posiadamy obraz. Co więcej, w ten sposób wyraźnie oddzielamy od siebie te dwa środowiska, co daje pole do różnych testów. Możemy również odpowiednio przekierować porty, pozwalając na korzystanie na Windowsie z usług uruchomionych na Linuxie, a także nawet wyznaczyć współdzielone foldery do wymiany plików.

Skoro mamy takie rozwiązanie (które jest szeroko wykorzystywane przy stawianiu serwerów), to dlaczego w ogóle rozpatrujemy inne? Głównym powodem jest słaba wydajność takiej konfiguracji i jej odczuwalny "ciężar". Oczywiście, wszystko zależy od maszyny i przydzielonych zasobów, ale nie da się ukryć, że wirtualny Linux nie będzie działał tak sprawnie i obsługiwany tak wygodnie jak system zainstalowany w tradycyjny sposób. Dodatkowo, nie zawsze programy do wirtualizacji są tak komfortowe i bezawaryjne, a przy bardziej zaawansowanych operacjach wymagają już pewnej wiedzy, którą nie wszyscy posiadają lub mają czas zgłębiać. A zatem, o ile jest to świetny sposób na szybkie postawienie sobie Linuxa do testów, to nie jest pozbawiony niedogodności.

Innym rozwiązaniem jest, oczywiście, instalacja Linuxa jako drugiego systemu i korzystanie z niego w razie potrzeby. Jest to natywna droga i bardzo wydajna, jednak tutaj oczywistą wadą jest konieczność przełączania się i możliwość korzystania z zasobów tylko jednego systemu w danej chwili. Często jednak bywa to pierwszym etapem całkowitego zaprzyjaźniania się z systemem spod znaku pingwina i znam osoby, które w ten sposób całkowicie odrzuciły Windowsa, przenosząc się w pełni na Linuxa. Tym niemniej, nie da się ukryć, że w kontekście szybkiej weryfikacji narzędzi unixowych, to rozwiązanie należy ocenić znaną frazą "kilka niedociągnięć jest".

Niektóre rzeczy można uruchomić za pomocą Cygwina, który udostępnia część narzędzi bezpośrednio w Windowsie za pomocą specjalnej konsoli. W pewnym stopniu z Cygwina (aczkolwiek zubożałego) korzystamy instalując na Windowsie Gita, który przy okazji dostarcza Git Basha. W wielu przypadkach jest to narzędzie bardzo pomocne i funkcjonalne, aczkolwiek nie do końca tożsame Cygwinowi.

Oczywiście, jakąś ścieżką jest też zainwestowanie w sprzęt od Apple'a, w którym mamy dostęp do macOS-a łączącego wygodę działania Windowsa z fundamentami uniksowymi i w ten sposób mając dwa światy w jednym oraz podstawowy system operacyjny do pracy. Do większości zastosowań jest to znakomite rozwiązanie - nawet osoby zajmujące się zawodowo utrzymywaniem systemów webowych i tzw. DevOpsy niekiedy przyznają, że wolą korzystać z MacBooka z uwagi na komfort oraz wystarczający pakiet narzędzi. Jednak tak, jak wspomnieliśmy - jest to rozwiązanie dość drogie i mimo wszystko nie jest to pełnoprawny Linux.

Na szczęście, jest jeszcze jeden sposób, który jest bohaterem dzisiejszego tekstu.

Windows Subsystem for Linux

Tak rozwija się skrót WSL i dosłownie jest to windowsowy podsystem dla Linuxa. Można to w skrócie opisać jako kolejny program, który umożliwia otwarcie natywnego Linuxa wewnątrz okienek. Jest to bezpieczne (oczywiście, w większości przypadków), a przy okazji w naturalny sposób oba systemy ze sobą się łaczą i korzystają ze swoich zasobów - przykładowo, otwierając serwer na porcie X na Linuxie mamy do niego dostep także z poziomu Windowsa. O szczegółach działania WSL-a i jego wewnętrznej konstrukcji możecie dowiedzieć się z oficjalnej dokumentacji, ale też z polskich opracowań, jak choćby tego bardzo dobrego filmu autorstwa kanału Pasja Informatyki oraz blogu CupOfCodes.pl.

Bardzo istotne jest to, że mamy tutaj do czynienia z dwiema wersjami oprogramowania - pierwszą i drugą. Dla większości osób wystarczy "jedynka", która już umożliwia instalację Linuxa w ramach Windowsa. Jednak do "profesjonalnych" zastosowań poleca się używać wersję drugą, która jest inaczej zbudowana (zawiera faktyczny kernel, czyli jądro Linuxa), a przez to szybsza i - co dla wielu będzie przełomem - pozwala korzystać z Dockera pod okienkami. Natomiast do prostego zainstalowania Linuxa w Windowsie wersja pierwsza powinna być całkowicie satysfakcjonująca.

Warto wspomnieć o tym, że aby zainstalować WSL-a, wymagany jest co najmniej Windows 10 w wersji 19041. Tym niemniej większość użytkowników już taką wersję posiada. Nieco więcej zachodu jest z drugą wersją narzędzia, która wymaga wyższej łatki i/lub zainstalowania dodatkowej aktualizacji. Należy też pamiętać, że można przełączać maszyny i wybiórczo aktualizować je do danej wersji.

Jak zainstalować WSL-a?

Instalowanie tego komponentu jest podzielone na kilka etapów, które można wykonać w sposób graficzny lub konsolowy. Co prawda, jako profesjonaliści powinniśmy podążąć drugą ścieżką i udawać, że GUI nie istnieje, ale nie ukrywajmy - ta pierwsza jest bardziej komfortowa dla wielu użytkowników, a obie i tak prowadzą do tego samego celu.

Przede wszystkim, poprzez ekran wyszukiwania lub panel sterowania należy znaleźć opcję "Włącz lub wyłacz funkcje systemu Windows" i tam wybrać do instalacji następujące składniki:

  • Platforma maszyny wirtualnej (ang. Virtual Machine Platform)
  • Podsystem Windows dla systemu Linux (ang. Windows Subsystem for Linux)
Komponenty Windowsa potrzebne do obsługi WSL

Włączenie tych pozycji wiąże się z ponownym uruchomieniem Windowsa. Następny krok jest opcjonalny, ale niezwykle ułatwia pracę - zainstalujcie Windows Terminal. To multiterminal dla Windowsa, który obsługuje PowerShella, zwykłego CMD, ale też konsole Linuxów zainstalowanych w naszym WSL-u. Dodatkowo, umożliwia otwarcie ich w zakładkach, co nie jest bez znaczenia dla osób, które często poruszają się w konsoli w systemie okienkowym. Po małej modyfikacji można też skłonić go do otwarcia wspomnianego już dzisiaj Git Basha, co sprawi, że tak naprawdę w 99% przypadków będziemy mogli uruchomić tylko jedno okno z wieloma konsolami w zakładkach o różnym typie. To bardzo wygodne i choć program nie jest idealny, to pozwala ograniczyć przełączanie się pomiędzy wieloma oknami.

Przykładowy widok Windows Terminala

Jak zainstalować Windows Terminala? Wystarczy skorzystać z aplikacji Microsoft Store dostępnej domyślnie w Windowsie 10 i 11. Spokojnie - nie trzeba zakładać konta i niczego płacić. Wystarczy wpisać nazwę aplikacji, wejść na jej kartę oraz zainstalować jednym przyciskiem. Przy czym tak, jak pisałem - ta aplikacja nie jest obowiązkowym składnikiem instalacji WSL-a, a raczej dość sporym udogodnieniem, którym warto się zainteresować z wielu powodów.

Wróćmy do głównego wątku - skoro mamy już WSL-a zainstalowanego po włączeniu odpowiednich komponentów, to teraz można już wprowadzić Linuxa. Mamy wiele dystrybucji do wyboru. Najczęściej wybierany jest popularny Ubuntu, jednak niektórzy będą z małym niesmakiem patrzeć na rozmiar pobieranej paczki, zwłaszcza jaśli chcą Linuxa tylko do prostego zadania, jak np. uruchomienia pewnego programu serwerowego. W takim układzie warto zainteresować się minimalną instalacją Debiana, do której zawsze później można doinstalować takie pakiety, jeśli są potrzebne, w tym nawet graficzny interfejs użytkownika. Dystrybucji jest więcej - warto poszperać w sklepie.

Po instalacji, wybrana dystrybucja Linuxa jest dostępna z poziomu Linuxa lub Windows Terminala

Wybraną wersję Linuxa można zainstalować w identyczny sposób jak każdą aplikację w Microsoft Store, a następnie uruchomić z głównego menu Windowsa. Za pierwszym razem należy ustawić dane konta i... już. Zainstalowany w WSL system będzie działał w tle i można w każdej chwili do niego przejść poprzez odpowiednią aplikację w komputerze, jak i wspomniany wcześniej Windows Terminal, pozwalający od razu uruchomić terminal w danym środowisku.

Zainstalowane dystrybucje można podejrzeć za pomocą polecenia konsolowego wsl -l -v, widząc przy tym status uruchomienia oraz wersję WSL.

Do czego można wykorzystać WSL?

Ta platforma udostępniona przez Windowsa daje szerokie możliwości programiście, który nie musi już kombinować, w jaki sposób testować narzędzia linuxowe w nieprzyjaznym im środowisku. Dzięki temu warsztat i stos technologiczny znacznie się powiększa stosunkowo małym kosztem.

Przede wszystkim dużą zaletą i najczęstszym powodem korzystania z WSL-a jest Docker, a więc popularne narzędzie do konteneryzacji, a co za tym idzie - ustalonego sposobu zarządzania komponentami oprogramowania, przynajmniej na etapie realizacji projektu. Z racji tego, że ta dziedzina jest ściśle powiązana z jądrem Linuxa, Docker jest dostępny wyłącznie w drugiej wersji WSL, ale sam fakt, że jego uruchomienie jest możliwe w Windowsie, już jest dużą zaletą.

Innym docelowym zastosowaniem jest Redis, a więc prosta, ale bardzo szybka baza typu klucz-wartość, która dobrze wykorzystana bardzo pomaga w cache'owaniu (zapisywaniu wcześniej pobranych wartości do pamięci podręcznej i ich późniejszym odtwarzaniu w celu przyspieszenia aplikacji), ale nie ma portu na Windowsa. Jej konfiguracja i wykorzystanie są bardzo proste, efekty bardzo interesujące, a testowanie na okienkach możliwe i przyjemne właśnie po instalacji Linuxa w ramach WSL.

Także osoby chcące bawić się w testy penetracyjne mają ułatwione zadanie dzięki dostępności dystrybucji Kali Linux i tym samym łatwiejszym dostępie do zawartych w niej narzędzi. Co prawda, tego typu zadaniami zajmują się specjaliści od cyberbezpieczeństwa, którzy raczej system spod znaku pingwina traktują jako swój podstawowy, jednak sytuacje bywają różnie i czasami potrzebne (lub kuszące) jest sprawdzenie czegoś przez "laika" lub po prostu na Windowsie.

Oczywiście, te i inne narzędzia można uruchomić również w inny sposób, choćby posiłkując się maszyną wirtualną. Jednak tak, jak już wspomniałem na początku, WSL bije na głowę "wirtualkę" pod kątem prostoty użycia, wydajności, a także możliwości integracji z głównym Windowsem.

Podsumowanie

Programiści lub osoby lubiące poznawać różne narzędzia i eksperymentujące choćby z komponentami wykorzystywanymi przy budowaniu aplikacji, prędzej czy później natkną się na potrzebę bliższego zapoznania się z Linuxem, przetestowania czegoś lub użycia konkretnego narzędzia unixowego. Dzięki WSL-owi jest to bardzo proste i komfortowe, a przede wszystkim niezaburzące cykl pracy osoby, której macierzystym systemem jest Microsoft Windows.

Pozdrawiam i dziękuję - Jakub Rojek.

We can do quite a bit and what is more, our skills and resources are at your disposal. Take a peek at what we can offer you.

About author

Jakub Rojek

Lead programmer and co-owner of Wilda Software, with many years of experience in software creation and development, but also in writing texts for various blogs. A trained analyst and IT systems architect. At the same time he is a graduate of Poznan University of Technology and teaches at this university. In his free time, he enjoys playing video games (mainly card games), reading books, watching american football and e-sport, discovering heavier music, and pointing out other people's language mistakes.

Jakub Rojek