Saindo um pouco do muito que já foi falado, não vou te falar que precisa 2 encarnações como programador(dos bons!) pra fazer essa tarefa. Mas vou tentar te deixar mais animado com a ideia.
Primeiro você precisa entender que sistema operacional é diferente de kernel, e linux não é sistema operacional, é kernel(estou falando isso porque você mencionou ele na pergunta). Logo, pra construir um sistema operacional, você não precisa obrigatóriamente conhecer o abismo do assembly, mas vai precisar ser um bom programador C/C++ e conhecer MUITO bem o kernel que vai usar(obviamente, linux!). O sistema operacional precisa fazer chamadas ao kernel, então terá que prover uma boa integração entre os dois sistemas. Isso é o básico. Vai precisar implementar varias bibliotecas para o sistema, o proprio sistema de arquivos, etc.
Caso vá fazer um sistema completo com kernel e tudo, então terá que usar assembly para varias funções do kernel, incluindo o bootloader. Assembly é o MAXIMO! recomendo aprender, e não é tão dificil como todo mundo fala, vai por mim e experimenta! Outra dica é conferir o fonte de sistemas antigos e ver como eram legais e até 'faceis', na verdade, eles tem bem menos arquivos do que se imagina! Dê uma olhada no fonte do MS-DOS e procure o livro do MINIX. Se você quer experimentar algo prático e didatico, escreva seu MINIX!
E pra inspirar você, vou te falar que conheci um cara no Twitter que construiu o proprio sistema operacional e kernel!! tudo em Assembly! e ele é brasileiro, dev junior e tudo mais! Inclusive eu fiquei de escrever um escalonador para o projeto dele e perdi o contato com o amigo(por conta do meu trabalho) então não sou ainda contribuidor do projeto, mas por ser brasileiro e muito legal, vou compartilhar/promover aqui: https://github.com/hexagonix/Doc