Você está falando sério? Quero dizer, existem muitos sistemas operacionais fanmade, mas é um trabalho pesado e pesado!
Para começar, um sistema operacional deve ter, pelo menos:
-
Um Bootloader: Para empurrar o kernel para a RAM, prepare os TLBs e faça algumas tarefas domésticas
-
Um Kernel: o kernel é a parte mais essencial de um sistema operacional, e gerencia aspectos cruciais como os mapeamentos de memória física / virtual entre programas, multitarefa, agendamento de I / O, IPC, mutexes e assim por diante . Dependendo do SO, existem várias filosofias (monolíticas, como a arquitetura Linux; híbridas, como a arquitetura OS X; ou microkernel, como o inacabado Hurd). Dependendo disso, é o código do kernel ou código de usuário aquele que gerencia cada aspecto individual do sistema.
-
Aplicativos de Userland, que darão ao usuário alguma interação com a máquina.
No mundo GNU / Linux e BSD, temos vários deles, como:
Bootloaders: GRUB2, GRUB, LILO, ISOLINUX ...
Kernels: Linux, kFreeBSD ...
Aplicativos de Userland: GNU [ou] Coreutils, Bash, Xorg e inúmeros mais:)
De qualquer forma, se essa é a sua pergunta, aqui está sua resposta, e para mais informações, há muitas delas sobre como começar a coçar suas decisões de design em cada aspecto do seguinte wiki: link
Há muitas informações sobre como os bootloaders funcionam, como programar no baremetal sem commodities como o stdio.h e, na verdade, muitas informações úteis.