Czy Windows nadaje się do "poważnej pracy"? Z pamiętnika linuksiarza.

Wrażenia z lektury

Na łamach tego serwisu często znajduję wspomnienia z nieudanych migracji na Linuksa albo poradniki jak tym wybrakowanym systemem zastąpić Windows i dlaczego się nie da.

Pod artykułami pojawiają długie dyskusje, w których ludzie się obrażają i udowadniają wyższość jednego systemu nad drugim. Najbardziej bawią mnie artykuły, w których puszcza się oko czytelnikom tekstem typu "nowa wersja programu X pojawi się w wydaniu Y w Ubuntu, chyba że jesteś użytkownikiem Archlinuksa albo kompilujesz ze źródeł" ;)

Tak się składa, że jestem użytkownikiem Archlinuksa od 11 lat, wcześniej korzystałem z innych dystrybucji. Prywatnie nie używam systemów Microsoftu od 15 lat, moim ostatnim Windowsem był XP, wcześniej 98. Można więc powiedzieć, że o Windows nie mam pojęcia. Czasem zdarzał się w moim życiu zawodowym okres, kiedy byłem zmuszony korzystać z tego systemu, ale albo wystarczała mi przeglądarka + jakiś program, albo stawiałem wirtualkę z Linuksem.

W poprzedniej firmie miałem Maca. Poza kłopotliwym dla mnie układem klawiatury i koniecznością zainstalowania programu do odwrócenia kierunku kółka myszy, wszystko w zasadzie działało. Pamiętam problemy z rozłączającym Bluetoothem, to że nie dało się odtwarzać poprawnie dźwięku z kilku źródeł naraz i zawieszający się menedżer okien. To jest jednak betka w porównaniu z problemem, który mam teraz.

W obecnej firmie mam problem w postaci Windows 10. Nie wchodząc w szczegóły, zamówienie laptopa z innym systemem miało być formalnością, a w praktyce użeram się z tym już trzeci miesiąc. Jeśli go szybko nie dostanę, po prostu zmienię zleceniodawcę. Nawet na postcovidowym rynku w moim zawodzie i z moim doświadczeniem nie jest to żadnym problemem. 

Czym się zajmuję

I teraz do rzeczy: jestem DevOpsem. DevOps to taki człowiek, który automatyzuje kompilację, testowanie i deployment (instalację) oprogramowania, tworzy wirtualną infrastrukturę w chmurze, automatyzuje tworzenie tej infrastruktury, pisze skrypty między
innymi w Pythonie i Bashu, konteneryzuje aplikacje, konfiguruje serwery (chodzi mi o programy, nie o sprzęt), tworzy loadbalancery sieciowe, korzysta z repozytoriów kodu, integruje ze sobą różne usługi poprzez kolejki, API lub bez niego, czasem nawet pisze całe serwisy webowe lub programy i robi wiele innych ciekawych rzeczy.

W pracy najczęściej wymagane jest ode mnie wykonanie konkretnego zadania w konkretnym czasie, a w jaki sposób to zrobię, jest płacącym za moją pracę obojętne. Mimo, że pracuję w 100% z domu na własny rachunek jako firma, dostęp do infrastruktury firmy dla której wykonuję zlecenia najczęściej wymaga użycia firmowego sprzętu, którego otrzymuję kurierem. Można to obchodzić, ale nie mam czasu na takie zabawy i chcę się stosować do zasad.

Jeszcze odnosząc się do komentarzy, że Linukiarze to pryszczate nastolatki, które siedzą w piwnicy. Ze statystyk Stack Overflow z 2018 roku wynika, że DevOps jest najlepiej opłacaną specjalnością informatyczną poza "Engineering manager", a najczęściej używanym środowiskiem programistycznym jest Vim (taki linuksowy edytor tekstu, z którego zwykli użytkownicy nie wiedzą jak wyjść). Osobiście nie przepadam za Vimem, ale potrafię z niego korzystać w podstawowym zakresie.

Jako DevOps dostałem Windows 10 do pracy. No dobra. Nie będę rozpaczał, szybko się
uczę, ogarnę temat. Ogarnąłem, ale nie powiem żeby na tym się dało wygodnie pracować. Aha, mam 16GB RAM-u jakby ktoś pytał. Nie wiem czy to dużo czy mało, mój prywatny komputer ma 4GB, jakieś stare APU i działa zdecydowanie lepiej. Nie wiem, być może jestem już w tym wieku, kiedy człowiek chce normalnie korzystać z komputera zamiast jarać się cyferkami.

Terminal

W Windows 10 brakuje porządnego terminala, czyli podstawowego narzędzia pracy DevOpsa i administratora systemów. Mimo, że Windows wzbogacił się o swój "odpowiednik" Basha w postaci PowerShella oraz o WSL czyli o taki jakby emulator Linuksa, to nie ma wygodnego sposobu na korzystanie z tych dobrodziejstw. Po szybkim przeszukaniu Google'a zainstalowałem Cmdera. Ponoć ten program wziął się z frustracji z powodu bylejakości istniejących terminali, tak twierdzi autor. Ja tam jestem całkiem sfrustrowany korzystając z Cmdera. Choćby dlatego, że załadowanie powłoki, w
której można wykonywać polecenia zajmuje jakieś 10 sekund, a w cmderowym Bashu nie działają poprawnie ścieżki do plików i nie da się na przykład ustawić katalogu roboczego w dockerze poleceniem:

docker run -w katalog_roboczy

Na Macu korzystałem z wbudowanego terminala, który spełniał swoje zadanie i nie
sprawiał żadnych problemów. Jedyne co mnie zdziwiło na początku to nieco inne zachowanie znanych narzędzi (sed, grep), ale można zainstalować bez problemu ich odpowiedniki GNU.

Docker

To jest kompletna tragedia. Na początku wyjaśnienie: docker został stworzony jako typowo linuksowe narzędzie i nie da się z niego natywnie korzystać na innych systemach operacyjnych. To, że w ogóle działa, jest kwestią uruchomienia przez niego w tle maszyny wirtualnej z niewielką dystrybucją Linuksa. Na Macu właściwie nie widać prawie żadnej różnicy w stosunku do natywnej linuksowej wersji. Nie można tego powiedzieć o Windows. Poza wspomnianym już problemem ze ścieżkami dostępowymi wszystko po prostu trwa wieki. Wyświetlenie listy kontenerów poleceniem docker ps trwa chyba z 5 sekund, docker build, który ma zbudować prosty obraz oparty o Alpine'a (dystrybucję Linuksa, która waży 2,5MB) zajmuje z 5 minut (na Linuksie zajęłoby to kilka sekund). Trzeba oczywiście to powtarzać, bo człowiek programując czasem robi literówki. Docker jest w zasadzie nieużywalny. Jest to oczywiście moje podstawowe narzędzie pracy.

Hyper-V

Wiedzieliście, że nie można mieć Dockera i Virtualboxa? Ja nie wiedziałem, bo dokładnie taką konfigurację miałem zawsze na Macu. Okazuje się, że Docker pod Windows korzysta do uruchomienia maszyny wirtualnej z Linuksem z wbudowanego wirtualizatora Hyper-V, który nie wiedzieć dlaczego "blokuje miejsce" na procesorze innym wirtualizatorom. Oczywiście wyłączenie lub włączenie Hyper-V wymaga restartu systemu. Doszedłem więc do racjonalnego wniosku, że jeśli chcę mieć maszynę wirtualną pod Windows, to powinienem skorzystać z Hyper-V Managera. Niestety przez default switch nie udało mi się połączyć z siecią korporacyjną, przez ustawienie NAT-u też nie. Straciłem na to cały dzień. Pod Virtualboksem po prostu działa od razu. No ale mając Virtualboksa nie mogę korzystać z windowsowej wersji Dockera.

WSL

WSL czyli Linux dostępny z poziomu Windows. WSL jest fajny, chyba że chcesz
uruchomić Dockera (albo jakąkolwiek inną usługę systemową). Ponoć to działa już na WSL 2.0, ale firmowy laptop nie może należeć do Windows Insider program, co jest wymagane, aby mieć WSL 2.0. Sytuacja ma się wkrótce zmienić. Poza tym z WSL-a dostępny jest tylko tekstowy interfejs. Tak, my linuksiarze lubimy czasem też skorzystać z GUI.

NTFS

Robiliście kiedyś git pull większego repozytorium i czekaliście pół godziny na
odtworzenie wszystkich plików? Nie? Spróbujcie na Windows.

Usuwaliście kiedyś plik, który jest otwarty w jakimś programie? Ja to robię non-stop.
Oczywiście nie na Windows, bo plik jest używany. Nawet jeśli nie jest.

A co jeśli trzeba zacommitować w repozytorium plik z konkretnymi uprawnieniami? No ja
to robię z WSL-a, bo na NTFS-ie się nie da.

Atom

W wielu artykułach przeciwko Linuksowi pojawia się argument, że oprogramowanie X nie działa albo działa gorzej na Linuksie niż na Windows. Pojawiają się wtedy kontrargumenty, że przecież to nie wina Linuksa. I odpowiedź, że nie opłaca się robić dopracowanego oprogramowania na mało popularny system.

Developerzy Atoma widać uważają to samo o Windowsie, ponieważ na tym systemie ten edytor tekstu zjada po jakimś czasie 100% procesora, niczego nie robiąc. Sprawdziłem kilka wersji wstecz i jest tak samo. Na Linuksie i Macu działa.

Instalacja programów i Windows Update

Po zainstalowaniu czegoś w rodzaju Dockera czy Hyper-V albo Virtualboxa trzeba robić
restart systemu. DLACZEGO?? Nie mam na to czasu. Nie mam czasu czekać, aż docker odpali się po 5 minutach od startu systemu (w Linuksie trwa to dokłanie 0,856s, a instalacja zajmuje około 7 sekund). Poza tym restartując system muszę czekać aż znowu poinstalują się aktualizacje. Raz system nie wyświetlił żadnego komunikatu na ten temat, po prostu była animacja i informacja, że system startuje. Trwało to tak długo, że zaniepokojony zadzwoniłem do helpdesku i zdążyłem po angielsku założyć ticket na to, że system przestał mi się uruchamiać.

Na RedHacie skonfigurowanym na moim roboczym laptopie przez inną dużą firmę,
w której pracowałem, też były automatyczne aktualizacje. Przez ponad 2 lata mojej pracy system jednak nigdy nie wymagał z tego tytułu restartu i nigdy nie uruchamiał się dłużej niż normalnie. Kiedyś pojawiła się na pulpicie ikonka OPCJONALNEGO przejścia z RedHata 6 do 7 i to oczywiście trwało dłużej i wymagało restartu. Jednego. Wszystko działało potem normalnie.

Anywirus

Tak, wiem, na Maca i Linuksa też są wirusy. Ale jakoś przez ponad rok w pracy na Macu i przez 16 lat w domu obywam się bez antywirusa. Na Windows jest to natomiast coś, czego nie mogę się bezpiecznie pozbyć. Być może gdyby nie Norton, to część problemów opisanych pod nagłówkiem NTFS nie miałoby miejsca?

CRLF

Windows ma inny znak końca linii niż systemy uniksowe. Podobnie ma inny znak
przechodzenia między folderami. Cieszę się, że nie korzystają już z kodowania Windows-1250 i przestawili się wreszcie na UTF-8. Mogę przynajmniej robić i udostępniać napisy do filmów bez cudowania. Częściowo też ogarnęli korzystanie z ukośników. Czekamy na LF. Jeśli kiedyś wrzucisz do repozytorium skrypt, który się wywali z powodu jakiegoś tabulatora, którego nigdy nie wstawiałeś, to wiedz że to wina innego znaku przejścia do nowej linii. Trzeba tego za każdym razem pilnować, szczególnie kiedy inni pracownicy korzystają z Windows.

Słowem podsumowania

Jak wykazują podane przykłady, Windows, co jest często argumentem podnoszonym w tym serwisie w stosunku do Linuksa, "nie nadaje się do poważnej pracy".

DevOps jako praktykant zarabia 3,5 tys. zł, jako mid 11-16 tys., a jako senior ok. 16-22 tyś. netto na fakturze. Oczywiście otrzymuje ciekawe projekty i zlecenia od największych światowych korporacji. Zatem to chyba jest całkiem poważna praca. Nie ma DevOpsa, który nie zna się na Linuksie. Nie da się ominąć tego tematu przy wytwarzaniu i publikowaniu aplikacji webowych. Jak widać jednak na moim przykładzie, jest DevOps, który nie zna się na Windows. I nie musi się znać, bo już zamówił Maca (zdecydowała lepsza matryca).