W świecie technologii open source nieustannie pojawiają się nowe rozwiązania, które zmieniają sposób, w jaki tworzymy, wdrażamy i konserwujemy oprogramowanie. Ostatnio dyskusję na nowo rozgrzał Kelsey Hightower — znany ekspert od Kubernetes — który podczas swojego wystąpienia na konferencji Southern California Linux Expo zwrócił uwagę społeczności na coraz popularniejszy system Nix. Zadał również istotne pytanie: czy istnieje inna droga obok tej, jaką obraliśmy z Dockerem?
Hightower opowiedział o swojej fascynacji dokumentem z 2004 roku opisującym podstawowe założenia systemu Nix, określanym przez autora jako rozwiązanie „trudnego i podstępnego problemu zarządzania oprogramowaniem”. Gdy pierwszy raz zagłębił się w architekturę Nixa, miał wrażenie, że natrafił na skarb — zaginioną koncepcję, która mogła zmienić bieg historii technologii. Wspominał, że to właśnie Docker — który zrewolucjonizował konteneryzację około dekady temu — przyciągnął wówczas uwagę branży, choć nie rozwiązywał problemu w sposób tak kompleksowy, jak to dziś oferuje Nix.
W przeciwieństwie do zabieganych czasów pracy w dużej korporacji chmurowej, obecnie Hightower może analizować technologie z czystej ciekawości. Po swoim półformalnym odejściu na emeryturę mówi: „Teraz mam czas, by zająć się rzeczami, które wcześniej musiałem odłożyć: hydrauliką w domu, elektryką… Ale też technologiami takimi jak Nix”.
Czym zatem jest Nix, i dlaczego wzbudza tak duże zainteresowanie? Nix to narzędzie do zarządzania pakietami i systemem operacyjnym, które kładzie szczególny nacisk na powtarzalność i deterministyczne budowanie oprogramowania. To znaczy, że niezależnie od tego, kiedy i gdzie uruchomi się komendę budującą pakiet — wynik będzie identyczny. To ogromna zaleta, zwłaszcza w czasach, gdy bezpieczeństwo łańcucha dostaw oprogramowania zyskuje na znaczeniu. Dla Hightowera to była prawdziwa inspiracja. Jak twierdzi: „Czy nie moglibyśmy uczynić Dockera lepszym, umieszczając w nim Nixa?”
Jednym z argumentów za wykorzystaniem Nixa jest ograniczenie problemów typowych dla Dockerfile’ów, które, jak trafnie zauważa Hightower, często przypominają długie, zautomatyzowane skrypty w Bashu. Instalują zależności „na zapas” i prowadzą do powstania obrazów kontenerów zajmujących setki megabajtów, a nawet gigabajty. Mimo że jest to rozwiązanie technicznie powtarzalne, jego bezpieczeństwo pozostaje wątpliwe. „Skanujemy, aktualizujemy, łatamy — i tak w kółko. To jak powrót do problemów sprzed dwóch dekad, tylko że zamkniętych w ładnym opakowaniu”.
Dochodząc do porównania z Dockerem, Hightower jest uczciwy: „Gdybym miał wybrać jedno, wybrałbym Dockera. Bo jego zadaniem jest przede wszystkim pomoc w transporcie aplikacji, a nie ich idealne pakowanie”. Wskazuje tu na zaletę Dockerowego ekosystemu — dojrzałego, rozpoznawalnego, bogatego w narzędzia i integracje. Deweloperzy wiedzą, jak z niego korzystać, a marka Dockera, symbolizowana przez słynną niebieską wieloryba, stała się ikoną całej branży DevOps.
Jednak w tym wszystkim Hightower dostrzega szansę na pragmatyczne połączenie obu światów. „Dlaczego nie użyć Nixa w środku Dockera? To mogłoby być rozwiązanie, które pozwoli nam budować powtarzalne, przewidywalne systemy, nie rezygnując z wygodnych mechanizmów dostarczania aplikacji, jakie oferuje Docker”. Oba narzędzia mogą współpracować, uzupełniając się nawzajem tam, gdzie każde z nich ma największe atuty.
Z punktu widzenia Hightowera, społeczność rozwijająca Nix powinna jednak pamiętać także o czymś więcej: o użytkownikach. O ludziach, którzy mogą być przytłoczeni techniczną złożonością, jaką narzędzie to potrafi prezentować. Przyrównał Nixa do edytora Vim — potężnego, ale trudnego na początku. Jeśli nowi użytkownicy zderzają się z wysoką barierą wejścia, mogą się po prostu zniechęcić. „Jeśli chcesz przyciągać ludzi, musisz im pokazać wartość jeszcze zanim poprosisz ich o rewolucję w myśleniu”.
Podczas swojego wystąpienia Hightower odniósł się również do historii sukcesu Kubernetes. Początkowo to Docker był platformą kontenerów, którą kochali miliony programistów. Kubernetes dodał do tego skalowalność i elastyczność w zarządzaniu. Ale sukces nie przyszedł od razu — nastąpił dopiero, gdy twórcy Kubernetes zdecydowali się otworzyć się na rozszerzenia i społeczność. „Nie chodzi tylko o technologię — chodzi o ekosystem”, podkreślił. To właśnie dzięki możliwości rozbudowy o własne rozszerzenia (np. poprzez CRD — Custom Resource Definitions), Kubernetes pozwolił innowacjom rozkwitać bez potrzeby zmian w samym rdzeniu systemu.
Na zakończenie Hightower zaapelował do społeczności Nix, by również postawiła na modularność i rozszerzalność. Jego porada? „Dajcie ludziom punkty rozszerzeń. Nie wszystko musi trafiać do jądra systemu — stwórzcie miejsce na innowacje i eksperymenty na obrzeżach projektu.” Według niego to klucz do przetrwania każdego projektu open source: budowanie rozproszonego modelu odpowiedzialności, który umożliwia przekazanie pałeczki następcom — tak jak uczyniły to projekty Vim i Neovim.
Czy Nix przejmie kiedyś pozycję Dockera? Tego nie wiadomo. Pewne jest natomiast, że takie dyskusje jak ta z udziałem Hightowera rzucają światło na przyszłość tworzenia oprogramowania — bardziej powtarzalnego, bezpiecznego i otwartego na adaptację. A sama technologia to jedno — sukces rynkowy zależy także od dostępności, społeczności i… czasem nawet od dobrze zaprojektowanego logo.