Współczesna mitologia
Idea programowania czegokolwiek w assemblerze, nie licząc niezbędnych wstawek podyktowanych okolicznościami wydajnościowymi, wydaje się karkołomna bądź nieżyciowa, w dobie języków zarządzanych. Programiści decydują się na naukę języków wysokiego poziomu, chociażby z powodu składni konkretnego języka i mnemoniki, słowa-kody assemblera, mogą ich odstraszać za sprawą hieroglificzności. Być może jest to mitem współczesności, być może sztuką dla sztuki było zaprogramowanie kompletnego systemu operacyjnego, w tym z obsługą sieci, mediów i GUI, przez programistę Ville M. Turjanmaa, który wespół z deweloperem Madisem Kalme, zaimplementowali wzmiankowane w postaci MenuetOSa.
Zobacz też: Alternatywne systemy operacyjne. Część 1 - Haiku
Niemniej uzmysłowili, iż zwyczajowa opinia traktująca o programowaniu w assemblerze jest tożsama poglądowi pochodzącemu z zamierzchłych czasów, że nie można płynąć dokądś statkiem bowiem wypadnie się poza płaską ziemię lub zostanie pożartym przez Lewiatana; w jednym z wywiadów Ville Turjanmaa odpowiedział, że natrafił w internecie na krótkie skrypty, jakie działały wyjątkowo wolno na jego nowym komputerze, toteż doszedł do wniosku, że ludzie zawsze znajdą potrzebę wykorzystania wydajności (w sensie użytych narzędzi i języków), aż do ostatniego cyklu procesora, przez co samemu pójść przeciwległy biegun ekstremum.
Kultura techniczna
MenuetOS mieści się na dyskietce 1,44 MiB, jak niegdyś wersja demonstracyjna systemu QNX. Jądro MenuetOSa jest monolityczne i czasu rzeczywistego, stosuje wywłaszczenia i wieloprocesorowość (kernel jest zdolny do pracy na 32 rdzeniach CPU i zaadresuje 32 GiB RAMu), nadto wielowątkowość i oferuje ochronę ring-3. Regulator czasu (timer) schedulera wywołuje przerwania w częstotliwości 1000Hz. W przypadku potrzeby przechowywania danych na dysku twardym, MenuetOS korzysta z systemu plików FAT32. Istnieje w wersji 32 i 64-bitowej dla architektury x86, zaprogramowanej w FASM, przy czym pierwsze zostało wydane na licencji GPL v2, a drugie dystrybuowane jest bez kodu źródłowego i upoważnia do darmowego użytku, w celach osobistych i edukacyjnych. Licencja 64-bitowego wydania jest własnościowa, tamże znajduje się klauzula zabraniająca dezasemblacji. Założeniem projektowym MenuetOSa jest utworzenie ekosystemu ułatwiającego naukę i pisanie oprogramowania przy użyciu assemblera, toteż MenuetOS oferuje wysokopoziomowe wywołania systemowe, a FASM makroinstrukcje, oprócz tego towarzyszy im także m.in. Mathlib, uprzednio oparte o SLEEF autorstwa Naoki Shibaty, które są funkcjami matematycznymi wykonywanymi przez jednostki wektorowe procesora, w przypadku Mathlib mowa jest o SSE i SSE2. Jednakże nie wyłącza to z możliwości użytku języków wysokiego poziomu, takich jak C, jakiego biblioteki przeportował Jarosław Pelczar, bazując na libc pochodzącemu z zestawu narzędzi DJGPP. Wymagało to konkretnych zmian i dopisania warstwy emulacji, aby biblioteka współpracowała z kernelem MenuetOSa.
Kod stosu TCP/IP (ze wsparciem dla Loopback i PPP) zaprojektował i wdrożył Mike Hibbett. Powłoka graficzna uruchamiana jest w trybie VESA i obsługuje rozdzielczości do 1920 x 1080. MenuetOS posiada także sterowniki zezwalające na korzystanie z szeregu peryferiów podłączanych do USB 2.0. Na froncie audio wspiera kodeki AC97 i IntelHDA. Pomyślano także o obsłudze kamerek internetowych i telewizji cyfrowej. Aktualne wydanie MenuetOSa o numerze 1.32.60, tyczy się to wersji 64-bitowej, ukazało się 23 stycznia 2020 roku i wprowadziło obsługę urządzeń MIDI podłączanych do portów USB. Pierwsze wydanie miało miejsce 16 maja 2000 roku, a więc MenuetOS liczy już sobie 19 lat.
MenuetOS nie jest wzorowany na żadnym systemie operacyjnym, nie utrzymuje także kompatybilności z POSIX. Intencją programistów było pozbycie się zbędnych warstw pomiędzy elementami systemu, jakie powodują błędy i utrudniają proces pisania kodu, nadto straty w wydajności - MenuetOS na procesorze Pentium MMX 200 MHz (miał premierę w 1997 roku) dokonuje rozruchu w ok. pięciu sekund. Wzornictwo GUI zawiera się w definicji klasycznej metafory biurka, ze wsparciem dla przezroczystości i skórek.
MediaPlayer
Odrębnego opisu wymaga także wymagający pobrania program dedykowany odtwarzaniu multimediów - MediaPlayer. Jego komponenty zostały w całości napisane w assemblerze, stąd też nie czerpie kodu z innych bibliotek lub programów tego typu. MPlayer v1.21 zawiera w sobie dekodery mpeg-2 i mp3. Element TV/Radio player obsługuje standard DVB-T, gdzie video kodowane jest w MPEG-2, a audio w MPEG-1 w warstwach I,II i III. Prócz tego dołączono do obrazu systemu aplikację Tuner. NIestety napisy nie są obsługiwane. MP3 Player dekoduje mpeg-1 w warstwach dźwięku I,II i III (trzecia warstwa to popularne mp3). Obsługuje zmienną przepływnosć bitów (VBR) i towarzyszy mu 32-pasmowy korektor dźwięku. Dekoder plików filmowych wyświetla filmy w formacie MPEG-2 PS, w rozdzielczościach 720x576 i 720x480, i dźwięk MP3 o przepływności 112 - 224 kbps. Odtwarzacz filmów DVD odtwarza niezabezpieczone płyty w standardzie PAL, zakodowane w MPEG-2 z dźwiękiem PCM, lecz Dolby Digital nie jest wspierane. Napisanie MediaPlayera możliwe było dzięki wygaśnięciu, w wielu krajach, patentów dotyczących standardów MPEG-2 i MP3. Jest to o tyle ciekawe, że na ogół oprogramowanie służące do odtwarzania mediów bazuje na FFmpeg, a tutaj mamy do czynienia z napisaniem całości od nowa.
Fork
Znanym i 32-bitowym forkiem MenuetOSa jest KolibriOS, na licencji GPL v2. Fork nastąpił w 2004 roku i ówcześnie miał poskutkować optymalizacjami skierowanymi na zmniejszenie rozmiarów i zwiększeniu ogólnej produktywności. Do uruchomienia wymaga komputera klasy Pentium (i586) i 8 MiB RAMu. Pomimo braku wersji 64-bitowej zdaje się być, w pewnych aspektach, bardziej zaawansowany technicznie i posiadać więcej aplikacji od MenuetOS bowiem jego kod wciąż jest otwarty i rozwijany, kiedy MenuetOS w wersji 32-bitowej sprawia wrażenie porzuconej dawno gałęzi kodu. KolibriOS jest w stanie zapisać i odczytać systemy plików EXT 2 i 3, oprócz FAT32 jak MenuetOS. Oba systemy nie są ze sobą kompatybilne binarnie ze względu na zmiany w API. Subiektywnie oceniam, iż GUI KolibriOS jest przyjemniejsze dla oka.
Wydajność
Przeprowadzając research na potrzeby artykułu, natrafiłem na interesujący dokument PDF, zawierający artykuły naukowe opisujące przebieg “Drugiej konferencji studiów podyplomowych poświęconych komputerologii: wdrożenia i teoria” (PCCAT 2011), z Uniwersytetu w Exeter, jaka odbyła się w 2011 roku. Artem Jerdev, na stronie dwudziestej, opisał własną potrzebę stworzenia pakietu oprogramowania, krytycznego pod wzglęem czasu, a wykorzystywanego do kontroli nad specjalnie zbudowanym aparatem wyposażonym w matrycę CMOS. Pierwotnie próbował wykorzystać Linuksa ku temu zagadnieniu, jednakże opóźnienia systemu okazały się zbyt wolne, nadto kwestię sterowników odczuł jako nazbyt skomplikowaną, toteż skierował swoje oczy na inne, niszowe, systemy operacyjne i wybrał KolibriOS. Zanim wprowadził własne optymalizacje (na jakich zyskał 30% wydajności) to zmierzył wydajność systemu w zakresie rysowania GUI. Komputer posiadał Athlona II x3 taktowanego 3 GHz i chipset AMD RS780.
Najprowdopodobniej gorsze wyniki akcelerowanego kartą graficzną Windowsa XP można wytłumaczyć nieoptymalnymi implementacjami w GDI+ lub w samym sterowniku. Innym powodem może być fakt, iż wiele niszowych systemów operacyjnych nie posiada akceleracji 3D bowiem przeportowanie samej Mesy 3D i dopisanie czegoś w rodzaju DRI jest wyjątkowo pracochłonne, co więcej utrzymanie tego także. W efekcie programiści starają się ad hoc usprawnić rysowanie GUI i ogólnie rendering na procesorze. Artem Jerdev zwrócił ówcześnie uwagę na wysoką responsywność systemu, miało to wynikać z faktu, że wiele z wywołań systemowych kosztowało poniżej tysiąca cykli procesora.
Kwestia nazewnictwa
Na zakończenie pragnę zaznaczyć, że jestem świadomy, iż assembler jest narzędziem konwertującym kod napisany w języku assembly do postaci maszynowej, lecz zdaje się, iż ów błąd językowy stał się powszechny w Polsce, toteż assembler, jako lapsus, jest tutaj używany przeze mnie jako synonim języka programowania.
Zobacz też: Alternatywne systemy operacyjne. Część 2 - ReactOS.