A może chcesz od razu stworzyć własny system operacyjny od podstaw? Z własnym jądrem, itd.? Tworzenie dystrybucji, to nie umiejętność programowania, a raczej zarządzania projektem i kompilacji rzeczy. Z programowanie, to musisz jedynie znać się na flagach kompilacji - które pod jaką architekturę. Musisz poza tym nawiązać współpracę z twórcami jakiś projektów, by przyjmowali twoje raporty o błędach, przekazywali Ci pewne informację, i w ogóle poświęceli Ci swój czas.
Napisz lepiej, jakie to mają być programiki. Może ktoś się przyłączy do ich rozwoju i wydacie je normalnie? Do pisania mini programów nie musisz tworzyć własnej dystrybucji 
Jeżeli to zrozumiesz, to pojawiają się kolejne pytania:
-
Ile chcesz na to czasu poświęcić?
-
Ile materiału jesteś w stanie opanować?
-
Chcesz pisać naprawdę dobre programy, czy tylko te działające?
-
Mają to być bardziej programy użytkowe - na słabe komputery - skrypty w bash, itd.
Ja poleciłbym zacząć od nauki Pythona.
PS: to nie odpowiedni dział na zadawanie takich pytań.
Jeżeli chcesz robić tego typu rzeczy, jak śtodowisko graficzne, to jeden język może nie wystarczyć. Od dawien dawna w środowisku OS panuje moda na umożliwianie oskryptowania/oprogramowania różnych elementów systemu w wielu różnych językach. Zjawisko te się nasiliło, kiedy Microsoft podążył tą samą ścieżką. Jeżeli chcesz tworzyć środowisko graficzne samemu, to dobrze byłoby znać kilka języków programowania. Jeżeli chcesz tworzyć bardzo mało złożone środowisko graficzne, z małą ilością opcji, to wystarczy znajomość C. Do tworzenia środowiska graficznego koniecznie poznaj XLib. Musisz też poznać GTK+ lub QT. Bardzo przydatna jest też znajomość DBus-a, jak i usług systemowych, typu menadżer sesji(ConsoleKit), serwer drukowania(CUPS), itd. Koniecznie musisz się zapoznać z obecnymi menadżerami okien, jak i menadżerami pulpitów.
Do tworzenia środowiska graficznego bardzo pomocna jest znajomość standardów. Wiele z nich znajdziesz na stronach freedesktop.
Co do tworzenia menu start, to nie jest to nic trudnego. Zwyczajnie tworzysz jakiś przycisk, który obsługuje odpowiednie zdarzenia. Podczas wyświetlania przechwytuje(wywołuje XGrabMouse) kursor, by się ukryć w razie kliknięcia w inne miejsce. Menu start, to normalne menu - działa tak samo, jak menu dostępne pod prawym klawiszem myszki. Może QT4 ma już odpowiednią klasę, jak menu - na pewno ma. GTK+ ma, bo sprawdzałem.
Zastanów się najpierw, co chcesz robić, bo jedna osoba, to chyba za mało.
– Dodane 22.09.2010 (Śr) 11:42 –
Ja się dalej nie będę wtrącać. Podejrzewam, że chcesz utworzyć dystrybucję przypominające do złudzenia Windows. Zajrzyj najpierw na Mandrivę, Linspire, a także Linpus XP. To są wielcy przegrani, gdyż chceli się upodobnić do Windows.
Na programowaniu środowiska graficznego się mało znam - większość elementów pewnie się programuje, jak normalne aplikacje. Jedynie menadżer okien i sesji są rzeczmi specyficznymi. Menadżer okien decyduje nieco o charakterze środowsika graficznego - to on zarządza oknami, a więc również oknami twojego środowiska(paski, pulpit, menu, itd.). Menadżer sesji jest wymagany, by to wszystko jakoś działało.
Zdecydowanie menadżer sesji i okien są najtrudniejszymi elementami do wykonania.
Jeżeli chcesz nadal się interesować tworzeniem własnego środowiska graficznego, to spytaj się na forum programowania, z jakich bibliotek graficznych korzystać.
Jeżeli chcesz tworzyć własną dystrybucję - np. zbliżoną do Windows - zainteresuj się lepiej przerobieniem obecnego środowiska graficznego(KDE4) tak, by tobie odpowiadało. Jeżeli nie chcesz korzystać z obecnych środowisk graficznych, to najpierw zajmij się stworzeniem własnego środowiska, a nie całej dystrybucji. Wtedy w razie problemów będziesz mieć szansę osiągnąć przynajmniej połowę sukcesu.