Na systemach PC opartych na procesorach Intel, firmware zwane BIOSem uruchamia komputer i ładuje obraz (image) do uruchomienia z bloku startowego systemu plików DOSu. Jest to mniej więcej to samo, co wykonuje MILO na systemach Alpha, jednakże istnieje kilka interesujących różnic pomiędzy BIOSem a MILO, jedną z nich jest używanie przez MILO niezmodyfikowanych standardowych sterowników urządzeń Linuxa. MILO jest firmware'em, inaczej niż LILO, który jest ładowany przez BIOS. Główne funkcjonalne części MILO to:
Dalsze akapity dokładnie opisują funkcjonalne części MILO.
PALcode jest cienką warstwą oprogramowania dostosowującą procesor do konkretnego systemu operacyjnego. Działa w specjalnym trybie (PALmode), który posiada kilka ograniczeń, ale używa standardowego zestawu instrukcji Alphy i tylko pięciu dodatkowych instrukcji. W ten sposób, na procesorze Alpha mogą być uruchamiane systemy tak różne, jak np. Windows NT, OpenVMS, Digital UNIX i oczywiście Linux. PALcode, którego używa MILO (i przez to sam Linux) jest, jak reszta MILO, darmowa. Pochodzi z przykładu ewaluacyjnych płyt głównych (Evaluation Boards, EB) dla Digital UNIXa. Różnice pomiędzy kodami PAL wynikają z różnic w sposobach obsługi przerwań w procesorach Alpha (płyty główne do 21066 mają inną mapę I/O niż systemy 21064+2107x (2107x to APECS, chipset do 21064 - przyp. tłum.)), oraz z liczby dostępnych płyt głównych.
Żeby MILO działał poprawnie, musi znać ilość dostępnej pamięci i miejsce, w którym Linux będzie działał, musi też być w stanie przydzielić tymczasową pamięć dla sterowników urządzeń Linuxa. Kod utrzymuje mapę pamięci, która posiada rekordy dla permanentnie i tymczasowo przydzielonych stron. W czasie uruchamiania MILO dekompresuje się w poprawne miejsce pamięci fizycznej. Kiedy przekazuje kontrolę jądru Linuxa, zarezerwowywuje pamięć dla skompresowanej wersji samego siebie, kodu PAL (który jest potrzebny jądru) i trochę struktur danych. To zostawia większość pamięci w systemie dla samego Linuxa.
Ostatnia część kodu pamięci to ustawienie i włączenie adresowania wirtualnego w celu zapewnienia poprawnego miejsca w wirtualnej pamięci dla struktur danych, które Linux spodziewa się tam zobaczyć.
MILO zawiera kod grafiki, który inicjalizuje i używa urządzenia graficznego dla systemu. Wykryje i będzie używać urządzenie VGA, jeśli takie istnieje, jeżeli nie, będzie próbował użyć urządzenia TGA (21030). Gdy i to się nie powiedzie, przyjmie, że nie istnieje urządzenie graficzne (tylko np. terminale szeregowe - przyp. tłum.). Emulacja BIOSu, którą posiadają standardowe, skompilowane obrazy MILO, to emulacja Digitala, która obsługuje większość, jeżeli nie wszystkie dostępne standardowe urządzenia graficzne.
Sterowniki urządzeń Linuxa ,,żyją'' wewnątrz jądra i spodziewają się od niego konkretnych usług. Niektóre z nich są zapewniane bezpośrednio przez kod Linuxa, np. obsługa przerwań, a inne działają dzięki specjalnym procedurom wyglądającym dla sterowników jak procedury jądra.
Najsilniejsza cecha MILO, to możliwość osadzenia w nim niezmienionych sterowników
urządzeń Linuxa. Daje to potencjał obsługi każdego urządzenia, które obsługuje
Linux. MILO zawiera wszystkie urządzenia blokowe wkompilowane w jadro,
które zostaje przy nim zbudowane, a także dużo kodu urządzeń (np.
ll_rw_blk()).
MILO ładuje jądro Linuxa z prawdziwych systemów plików, a nie z bloków startowych
i innych dziwnych miejsc. Potrafi czytać systemy plików MSDOS, EXT2 i ISO9660.
Pliki spakowane gzipem są obsługiwane i rekomendowane, zwłaszcza jeżeli ładujesz
[system] z dyskietki, co jest dosyć wolne. MILO rozpoznaje je po rozszerzeniu
.gz.
W MILO zawiera prosty sterownik klawiatury, który razem z równie prostym sterownikiem grafiki pozwala posiadać mu spartański interfejs użytkownika. Interfejs ten pozwala poznać systemy plików na skonfigurowanych urządzeniach, ładować Linuxa, uruchamiać programy do uaktualniania pamięci flash, oraz ustawiać zmienne środowiskowe kontrolujące ładowanie systemu. Tak jak w LILO, możesz przekazywać parametry do jądra.
MILO musi powiedzieć jądru Linuxa na jakim działa systemie, ile pamięci posiada i ile z tej pamięci jest wolne. Robi to używając struktury danych HWRPB (blok parametrów restartowania sprzętu) i skojarzonych z nią opisów części pamięci. Są one umiejscawiane w odpowiednim miejscu pamięci wirtualnej zaraz przed przekazaniem kontroli jądru Linuxa.