Cóż. Dzisiaj chciałbym poruszyć pewien temat który nurtuje mnie od pewnego czasu. Mianowicie do napisania własnego systemu operacyjnego w stylu np. linuxa androida czy windowsa jakiego języka się najlepiej uczyć ?
Większość kodu jest napisana w C. Jednak na początek może napisz sobie jakieś kółko krzyżyk bo to nie takie hop siup napisać system ;P
Większość kodu systemu operacyjnego to C i częściowo Assembly. Generalnie to ze swojej strony napiszę, że odkąd wszedłem w nisko-poziomowe programowanie to moim celem jest napisanie jakiegoś własnego OS'a. (oczywiście mniej zaawansowanego) Niestety, ale jest to bardzo trudna sprawa i myślę, że jeszcze dużo przede mną, żeby stworzyć coś co miałoby ręce i nogi.
Dla przykładu trzeba zaimplementować bezpieczne i wydajne zarządzanie pamięcią, przejść z trybu 16-bitowego do trybu 32-bitowego, żeby załadować kernela (16-bitowy Assembly tam wchodzi w grę). Ciekawe są też na przykład biblioteki dynamiczne i linkery, kompilatory, a dodatkowo na Twoim OS'ie przecież będzie całkiem czysto więc jest możliwość, że trzeba by zaimplementować bibliotekę - coś jak libc. Dochodzi do tego multitasking, logowanie użytkowników, oddzielenie sesji, obsługa wątków. (scheduler) Najciekawsza może być np. bezpośrednia interakcja ze sprzętem, a co za tym idzie implementacja user-mode i kernel-mode. Generalnie bardzo trudną sprawą jest też bezpieczeństwo takiego OS'a.
Podsumowując: Pisanie OS'a to chyba jeden z najtrudniejszych projektów do napisania, ale według mnie też jeden z najciekawszych. Jest to do zrobienia i bardzo wiele można się przy tym nauczyć, ale na początek lepiej zająć się "mniejszymi rzeczami". Możesz pobawić się na przykład projektami, które pozwolą na niskie zarządzanie pamięcią w C, napisać coś w Assembly - zrozumieć mniej więcej jak działa procesor, stos, sterta, ale na pewno zabieranie się od razu za OS to nie jest zbyt dobry pomysł.
Niemniej powodzenia jeśli chciałbyś się w to bawić!
W każdym razie jeśli chciałbyś looknąć jak zacząć tworzyć taki OS i jakie trudności możesz napotkać to polecam krótką serię od @Gynvael Coldwind ->
+ https://wiki.osdev.org/Main_Page.
Myślę, że ciekawa jest również strona odnośnie kernela Linuxa dla początkujących - taka mini seria poradników -> https://kernelnewbies.org/
przełączanie do 32 bitów można szybko załatwić użyciem gotowego bootloadera takiego jak GRUB :) ale bez assembly i tak się nie obejdzie
Ok dzięki wszystkim za pomoc. Dzięki wam już wiem od czego mam zacząć. Jeszcze raz wielkie dzięki.
A ja dla odmiany proponuję "wejść w temat", masz przewagę, że nie wiesz czego jeszcze nie wiesz :) Bo gdybyś wiedział z czym to się je to oczywiście temat byś sobie odpuścił.
A tak bardziej na serio to proponuję zacząć od stworzenia własnej dystrybucji Linux, tak od zera. Chodzi mi o zbudowanie wszystkiego łącznie z bootloader'em ze źródeł, skonfigurowanie kernela i poskładanie w działającą całość. Najlepiej na jakąś platformę nie-x86, np. RPi, tak aby korzystać z cross-compiler'a. Zdobędziesz mnóstwo wiedzy, zrozumiesz dlaczego koledzy napisali takie a nie inne porady i zorientujesz się że język programowania to akurat najmniejszy problem.
Moim zdaniem szkoda życia na pisanie własnego OSa, czy języka programowania. Świata tym nie zawojujesz. W przypadku tak zaawansowanych tworów, najlepiej dołożyć cegiełkę do istniejących produkcji, czy to w postaci jakiejś aplikacji, czy usprawnień na niższym poziomie, zamiast budować cały chiński mur z ciężkich cegieł...