NetBSD w Google Summer of Code 2025

Fundacja NetBSD ponownie uczestniczy w roku 2025, podobnie jak w poprzednich latach (z małymi przerwami - rezultaty poprzednich edycji dostępne są z lat: 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2016, 2017, 2018, 2019, 2020, 2021, 2022, 2023, 2024) w programie Google Summer of Code.
GSOC to inicjatywa stworzona przez Google, która umożliwia studentom z całego świata współpracę z projektami open source podczas wakacji. Studenci otrzymują stypendium za swoją pracę nad konkretnym projektem pod okiem doświadczonych mentorów. Program ten wspiera rozwój oprogramowania open source, jednocześnie umożliwiając studentom zdobycie praktycznego doświadczenia w rzeczywistych projektach programistycznych. Dla projektów takich jak NetBSD, GSOC stanowi doskonałą okazję do pozyskania nowych kontrybutorów oraz przyspieszenia rozwoju konkretnych funkcjonalności systemu.
W tym roku zakwalifikowały się następujące projekty:
Rozszerzenie wsparcia dla translacji protokołu NAT64 w NetBSD
Mentorzy: Emmanuel Nyarko
Technologie: C, shell script, make, unix, bsd
Obszary: networking, kernel, packaging, userland, unix, bsd
NAT64 to mechanizm przejściowy z IPv6 do IPv4, który umożliwia klientom korzystającym wyłącznie z IPv6 komunikację z serwerami działającymi tylko w IPv4. Mimo rosnącego wdrażania IPv6, wiele starszych systemów nadal opiera się na IPv4. Implementacja wsparcia dla NAT64 w NPF (NetBSD Packet Filter) zwiększy jego możliwości sieciowe, zapewniając płynną komunikację między sieciami IPv6 i IPv4.
Cele projektu:
- Rozszerzenie NPF o obsługę translacji IPv6 na IPv4
- Optymalizacja przetwarzania NAT64 w NPF dla zminimalizowania opóźnień i zwiększenia wydajności obsługi pakietów, szczególnie w środowiskach o dużym ruchu
- Przekazywanie informacji do jądra i modyfikacja kodu filtra pakietów jądra w celu przetwarzania opcji filtrowania użytkownika/grupy oraz zezwalania/odrzucania pakietów, a także implementacja solidnego i wydajnego mechanizmu NAT64 w filtrach pakietów NPF
Asynchroniczny framework I/O
Mentorzy: zoulasc, jhigh
Technologie: C
Obszary: systemy operacyjne, POSIX, I/O
Projekt zakłada refaktoryzację ścieżki I/O w jądrze NetBSD w celu obsługi asynchronicznego wejścia/wyjścia. Obejmuje to utworzenie nowego protokołu, który będzie działać jako warstwa pośrednia w ścieżce I/O. Protokół ten będzie obsługiwał zarówno tryby asynchroniczne, jak i synchroniczne, zapewniając bezkosztową warstwę abstrakcji dla operacji synchronicznych w szerszym frameworku asynchronicznym.
Powstaną pule obsługi, które będą działać równolegle, aby jednocześnie wywoływać wiele operacji w ramach jednego wątku bez blokowania poszczególnych operacji. Jest to kluczowe, ponieważ blokowanie pojedynczej operacji wymagałoby utworzenia nowego wątku, co jest dokładnie tym, czego projekt stara się uniknąć. Biorąc pod uwagę, że obecna implementacja jest w dużej mierze synchroniczna i opiera się głównie na blokowaniu, niektóre podstawowe prymitywy I/O na najniższej warstwie abstrakcji w ścieżce będą musiały zostać przebudowane.
Po wdrożeniu, integracja protokołu z systemem rozpocznie się od najniższej warstwy abstrakcji w ścieżce I/O, a następnie będzie przesuwać się w górę, finalnie prowadząc do rewizji interfejsu POSIX AIO.
Wykorzystanie bubblewrap do dodania sandboxingu w NetBSD
Mentorzy: The NetBSD Foundation, Christoph Badura
Technologie: C, Linux, kernel
Obszary: systemy operacyjne, kernel, emulacja
NetBSD umożliwia wykonywanie binarek Linuksa dzięki compat_linux - modułowi jądra NetBSD, który tłumaczy wywołania systemowe Linuksa na wywołania systemowe NetBSD. Jednakże nie wszystkie wywołania systemowe Linuksa zostały zaimplementowane w compat_linux, co oznacza, że nie wszystkie aplikacje Linuksowe mogą być uruchamiane na NetBSD. Jedną z istotnych aplikacji, która obecnie nie działa, jest bubblewrap - narzędzie do tworzenia środowisk sandboxowych.
Śledząc wywołania systemowe wykonywane przez binarki bubblewrap dla Linuksa i porównując je z tymi w kodzie źródłowym compat_linux, możemy zidentyfikować wywołania systemowe, które muszą zostać zaimplementowane. Jednym z wymaganych, ale obecnie brakujących wywołań systemowych Linuksa jest unshare - wywołanie systemowe do tworzenia przestrzeni nazw Linuksa, które zapewniają izolację wielu części od hosta, co czyni je skomplikowanym wywołaniem do emulacji.
Unshare będzie głównym wywołaniem systemowym tego projektu, ale będą również inne, takie jak rodzina wywołań systemowych capabilities. Każde wywołanie systemowe zostanie indywidualnie przeanalizowane, aby zrozumieć, czy potrzebne jest utworzenie całkowicie nowego wywołania systemowego, czy też można po prostu przetłumaczyć argumenty wywołania systemowego Linuksa na te używane przez równoważne wywołanie systemowe NetBSD.
Pomyślne ukończenie tego projektu zaowocuje łatką do compat_linux, która umożliwi uruchamianie bubblewrap na NetBSD, wprowadzając nowy sposób sandboxingu do systemu.
Poprzednie osiągnięcia
Warto przypomnieć, że projekty GSOC z poprzednich lat przyniosły NetBSD wiele istotnych ulepszeń, które są dziś integralną częścią systemu. Do najbardziej znaczących należą: implementacja DTrace - potężnego narzędzia do dynamicznego śledzenia i debugowania, ulepszenia w systemie pakietów pkgsrc, implementacja sterowników dla wielu urządzeń sieciowych, wsparcie dla nowoczesnych systemów plików jak ZFS, czy też usprawnienia w warstwie kompatybilności z Linuxem. Dzięki tym projektom NetBSD zyskał nie tylko na stabilności i funkcjonalności, ale również rozszerzył swój zasięg na nowe platformy sprzętowe i zwiększył kompatybilność z popularnym oprogramowaniem.
Podsumowanie
Być może powyższe projekty nie są czymś, co na pierwszy rzut oka wydaje się "sexy" dla użytkownika końcowego, ale jeżeli zakończą się sukcesem i zostaną włączone do gałęzi -current, a następnie do docelowego wydania 11, to nasz ulubiony system wzbogaci się o szereg istotnych usprawnień.
NAT64 umożliwi płynniejsze przejście między światem IPv6 i IPv4, co jest kluczowe w obecnej fazie transformacji internetu. Asynchroniczny framework I/O może znacząco poprawić wydajność systemu przy intensywnych operacjach wejścia/wyjścia, szczególnie w środowiskach serwerowych, umożliwiając obsługę większej liczby równoczesnych połączeń bez nadmiernego zużycia zasobów.
Z kolei implementacja wsparcia dla bubblewrap otworzy drzwi do uruchamiania nowoczesnych aplikacji Linuksowych, które dotychczas nie działały na NetBSD. Na przykład, umożliwi to potencjalnie uruchomienie aplikacji dystrybuowanych przez Flatpak (popularny w świecie Linuksa system dystrybucji aplikacji), który silnie opiera się na bubblewrap do izolacji aplikacji. Również nowoczesne środowiska desktopowe i ich aplikacje, które coraz częściej wymagają mechanizmów sandboxingu, mogłyby zyskać lepszą kompatybilność z NetBSD.
Te techniczne ulepszenia, choć niewidoczne dla przeciętnego użytkownika, tworzą solidne fundamenty dla przyszłego rozwoju systemu i zapewniają, że NetBSD pozostaje nowoczesnym, wydajnym i bezpiecznym systemem operacyjnym, gotowym na wyzwania przyszłości, jednocześnie rozszerzając zakres aplikacji, które można na nim uruchomić.