System nad systemem

Pod koniec ub.r. ukończono pierwszą wersję dostępnego bezpłatnie, wirtualnego systemu operacyjnego Argante.

Pod koniec ub.r. ukończono pierwszą wersję dostępnego bezpłatnie, wirtualnego systemu operacyjnego Argante.

W Polsce powstał wirtualny system operacyjny Argante - śro-dowisko przeznaczone do uruchamiania aplikacji na systemach unixowych. Może on być traktowany jako całkowicie niezależny, docelowy system operacyjny w procesie tworzenia oprogramowania. Może być również wykorzystywany jako bezpieczny, stabilny, efektywny i prosty system do testowania krytycznych części oprogramowania w procesie jego tworzenia. System jest jeszcze we wczesnej fazie rozwoju, ale udostępniono już wersję Release 1. Ma to na celu przede wszystkim uzyskanie informacji zwrotnych od użytkowników. W ciągu najbliższych miesięcy autorzy zapowiadają przygotowanie wersji Release 2. Argante jest dostępny na zasadach licencji LGPL, co oznacza, że jest to oprogramowanie typu open source, dostępne bezpłatnie. Strona domowa projektu:http://agt.buka.org.

Albo, albo

Argante to kompletny system operacyjny. Ma własną implementację procesów i zapewnia komunikację między nimi. Oferuje własny system plików oraz kontrolę dostępu, jednak funkcjonuje na rzeczywistym systemie operacyjnym niskiego poziomu. Dotychczas był testowany na systemach Linux, Solaris, FreeBSD, OpenBSD, NetBSD i Irix, a wstępne testy przeprowadzono także na AIX i HP/UX.

Bezpośrednią przyczyną powstania Argante było niezadowolenie jej twórców z istniejących rozwiązań. Ich zdaniem, biorąc pod uwagę bezpieczeństwo i stabilność oprogramowania, standardowa architektura systemów operacyjnych i procesorów jest zawodna. Spowodowane jest to faktem, że większość z nich nie była tworzona po to, by zapewnić wygodę i przenośność. Bezpieczeństwo i stabilność to funkcje, które wdrożono dopiero później.

Przede wszystkim brakuje wsparcia na niskim poziomie dla ogólnej kontroli dostępu i odporności na błędy. "Na całkowicie błędnych założeniach opiera się architektura stosu czy wykorzystanie segmentów danych" - uważa Michał Zalewski, lider projektu Argante. - "Standardowe mechanizmy zarządzania alokowaną dynamicznie pamięcią powodują, iż jej bloki leżą obok siebie i - przy braku kontroli zakresu wartości zmiennych, jak ma to miejsce w C - łatwo popełnić błąd, który spowoduje, że pracując na jednym bloku, uszkodzimy inne". Jego zdaniem, podobnie wygląda sytuacja ze stosem, który jest używany zarówno do przechowywania lokalnych buforów, lokalnych zmiennych, jak i adresów powrotnych. W Argante natomiast istnieje jeden wewnętrzny, niejawny stos wykorzystywany do skoków oraz możliwość korzystania z dowolnej ilości metastosów, które mają dwu- lub więcej wymiarową strukturę logiczną.

Próby naprawienia tych błędów i skonstruowania systemów opartych na efektywnych założeniach podejmowane na wysokim poziomie nie były skuteczne. Twórcy Argante postrzegają je jako ryzykowne i zwykle nie przynoszące pożądanych efektów. Jako przykład podawana jest Java, powolna i nie zawsze bezpieczna, posiadająca ograniczony zasięg aplikacji. Co więcej, twórcom Javy nie udało się zmusić programistów do wykorzystywania bezpiecznych modeli architektury oprogramowania. "W pewnym momencie musiałem podjąć decyzję: czy mam modyfikować istniejące implementacje czy stosując tymczasowe rozwiązania, poprawiać je i godzić się na kompromisy, czy napisać wszystko od początku" - twierdzi Michał Zalewski.

Więcej niż Java

Nie należy jednak postrzegać Argante jako odpowiednika Javy, choć faktycznie wewnątrz systemu istnieje interpreter wirtualnego kodu, który jest jej odpowiednikiem. "W przypadku Javy wirtualny bytecode operuje na wysokim poziomie abstrakcji, tzn. obiekty, złożone operacje tłumaczone są na setki poleceń assemblerowych. Interpreter jest bardzo złożony, trudny do kontroli, weryfikacji i zabezpieczenia. Z tego wynikają m.in. ciągłe błędy implementacji Javy osadzonej w przeglądarkach" - mówi Michał Zalewski.

W Argante bytecode operuje na poziomie najniższym. System ma niezależny od rzeczywistej architektury assembler, dzięki któremu kod jest prosty i łatwy do zrozumienia, a w efekcie łatwiejszy do modyfikowania i weryfikacji. Przede wszystkim jest bardziej wydajny. "Natomiast implementacje obiektowości, różnych zaawansowanych konstrukcji zrzucamy na kompilatory, które tłumaczą kod w dowolnym języku na ów wewnętrzny assembler Argante, który nie jest w ten sposób sztywno związany z określonym językiem wysokiego poziomu" - wyjaśnia Michał Zalewski.

Żadnych kompromisów

Prace nad Argante podporządkowano czterem celom. Starano się, żeby Argante był bezpieczny i stabilny, ale zarazem funkcjonalny, wydajny i prosty. Autorzy zdecydowali się nie przyjmować żadnych rozwiązań kompromisowych. Ich zdaniem w tradycyjnych systemach zwykle stajemy przed wyborem: albo bezpieczeństwo, albo funkcjonalność.

O stworzeniu systemu wirtualnego, a nie rzeczywistego zdecydowało kilka kwestii, z których najważniejszą jest to, że takie rozwiązanie nie wymusza na użytkowniku zmiany systemu operacyjnego. Dzięki integracji z istniejącymi rozwiązaniami na platformach uni- xowych pierwsze kontakty z systemem są łatwiejsze i przyjemniejsze. Ponadto system, który może korzystać z istniejących sterowników czy urządzeń i funkcji systemowych, sprawia, że programiści mogą skoncentrować się wyłącznie na swoim głównym zadaniu, zamiast analizować szczegóły implementacyjne.

Jako zastosowania optymalne dla Argante wskazywane są rozwiązania hybrydowe, np. aplikacje rzeczywistego systemu skoordynowane z nim i chronione przez ten system. Argante pozwala na tworzenie redundantnych, heterogenicznych klastrów. Jest również przyjazny programistom. "Złożone prace programistyczne są znacznie łatwiejsze. Przykładowo, by zaprojektować rozproszony, odporny na błędy wirtualny router, trzeba napisać jedynie kilka tysięcy efektownego, czytelnego kodu, który bez ryzyka może być utrzymywany przez lata" - twierdzi Michał Zalewski.

Odporność na błędy

Argante oferuje wirtualną maszynę niskiego poziomu, mającą uniwersalną funkcjonalność niezależną od architektury. Ma budowę modularną. Składa się ze stanowiącego jej centrum mikrojądra oraz dołączalnych modułów. Chcąc wprowadzić nową funkcję do Argante, wystarczy dopisać prosty moduł napisany w dowolnym języku, np. C, C++ czy Visual Basic. System zapewnia konwerter języków wysokiego poziomu, co czyni programy łatwiejszymi do odczytania.

System jest w pełni przenoś-ny między platformami i nie wymaga uruchamiania na dedykowanych maszynach. Może także współistnieć z innymi wdrożonymi wcześniej rozwiązaniami na większości popularnych Unixów. Jak zapewniają autorzy, jest ona jednocześnie szybsza, bardziej dokładna, a także prostsza niż maszyny wirtualne wysokiego poziomu.

Mechanizm kontroli hierarchicznego dostępu dostarcza jednolitej interpretacji dla wszystkich obiektów i operacji I/O oraz przypisanych im uprawnień. Dzięki temu system jest łatwy do wizualizacji, rozwijania i wdrażania. Natomiast wirtualny system plików może być wykorzystany do uzyskania niezależnej od platformy jednolitej kontroli wszystkich zasobów przy jednoczesnym zintegrowaniu ich z obiektami zewnętrznymi.

Przy tym Argante jest bezpieczny. Wirtualny kod nie może być zastąpiony, tzn. nadpisany lub wstawiony. Oznacza to, że kod nie może być wykorzystany przez hakerów poprzez użycie błędów typu overflow. "Kontrola przywilejów i ścisłe zasady komunikacji między procesami mają wymuszać na programistach precyzyjne projektowanie interfejsów komunikacyjnych. W środowiskach unixowych każde niedopasowanie czy różnica pomiędzy oczekiwanym a rzeczywistym interfejsem dla zewnętrznych narzędzi i usług mogą być naprawdę szkodliwe" - mówi Michał Zalewski. Przestrzeń robocza dla procesów i zarządzania systemem są całkowicie odseparowane, co oznacza, że wirtualne procesy nie mogą przejąć przywile- jów przysługujących administratorowi.

Co dalej?

Prace nad Argante wciąż trwają. Obecnie prowadzone są testy, ale dodawane są także nowe fragmenty kodu. Wkrótce ma się ukazać wersja Release 2. Autorzy planują dodanie do niej większej liczby narzędzi wysokiego poziomu. Ich zdaniem umożliwi to napisanie wirtualnego routera nawet w kilkuset liniach kodu oraz dostarczenie bardziej uniwersalnych rozwiązań programistycznych. Obecnie Argante jest wyposażony w serwer WWW i wirtualny router.


TOP 200