Ouvi dizer que podemos personalizar o Linux (digamos, Ubuntu) como desejamos, alterando seu código-fonte e criar um novo sistema operacional. Eu baixei o código fonte do kernel do linux no site www.kernel.org. Mas, vendo isso, não consigo entender nada, há muitos diretórios, arquivos em arquivos (como acho que haveria um único programa grande). Quero fazer isso como um projeto de faculdade e também quero contribuir com o Linux, fazendo as alterações necessárias. Mas depois de fazer essa pergunta em alguns sites, eles disseram que o código fonte do Linux é muito grande. Você pode tentar o minix. Agora estou muito confuso.
Por favor, me dê sugestões com detalhes sobre como devo iniciar essa jornada (de alterar o código fonte para personalizar o Linux) com as etapas necessárias, juntamente com alguns livros de nível iniciante.
Respostas:
Bem-vindo ao unix.stackexchange.com!
Não há uma resposta fácil para sua pergunta, e pessoas muito melhores do que eu escreveram livros inteiros sobre o kernel do Linux e os sistemas operacionais em geral.
Sobre o escopo do projeto: escrever um sistema operacional não é uma tarefa simples! Mesmo um sistema operacional propositadamente mínimo como o Minix é uma coisa bastante complexa! Para ter uma idéia do Linux, pense nos programas C que você escreveu até agora. O curso médio da universidade tende a ter alguns milhares de linhas de C no máximo. Acho que meu projeto do último ano foi de cerca de 30 a 35.000 linhas de C ++. O kernel do Linux tem aproximadamente 13.000.000 de linhas de código C.
Por que tudo está em arquivos separados? Projetos consideráveis são armazenados em arquivos separados por razões logísticas e práticas. Basta considerar carregar um arquivo de 13.000.000 de linhas em um editor! Antes de abordar um grande projeto como o Linux, você deve aprimorar suas habilidades em C ao ponto em que a pergunta "por que vários arquivos" se responde. Você também deve conseguir ler o código C , não apenas escrevê-lo. (mais difícil do que parece à primeira vista)
Você definitivamente deve ser muito proficiente em C. O kernel é mantido por milhares de pessoas, e você será chamado a entender os idiomas C pessoais de cada uma delas (concedido, dentro dos padrões de codificação do kernel bastante rígidos, mas ainda assim - todos têm estilo próprio de resolução de problemas).
Depois de obter seu C fu, certifique-se de entender os sistemas operacionais. Isso ajudará você a entender o código. Nem todo o Linux é essencial. O kernel propriamente dito é bem pequeno! O que é inchaço:
Um problema que você encontrará imediatamente é que esses componentes não são tão fáceis de desconectar, alterar e conectar novamente. Existem inúmeras inter-relações. Em suma, alterar bits do kernel é complicado.
A razão pela qual as pessoas sugeriram o Minix para você é simples: é um sistema operacional completo, mas não é sobrecarregado pelas necessidades de um sistema tão complexo quanto o Linux. O código é pequeno, mas ainda oferece funcionalidade completa. Afinal, as primeiras versões do Linux foram inspiradas no Minix.
Certamente, o Minix tem menos suporte de hardware atualmente. E daí? Isso é uma benção! Computadores modernos virtualizam muito bem. Use isso para sua vantagem: uma VM para executar o Minix é tão leve que tornará o desenvolvimento um desastre.
Se o seu projeto é construir um sistema operacional, você pode fazer pior do que começar estudando o Minix. Você também pode comprar e ler o livro que o Minix foi escrito para acompanhar, ' Modern Operating Systems de Andrew Tanenbaum '.
Você também deve definir suas metas e definir seus termos com precisão . Se sua própria definição de sistema operacional é da Microsoft (um sistema operacional com uma interface gráfica do usuário e um conjunto de software completo), você pode ter um projeto muito longo! Centenas de milhares de pessoas trabalham desde a década de 1960 para nos levar aonde estamos agora, afinal.
Por fim, lembre-se do grito de guerra do cientista da computação: ' nunca reinvente a roda! '(gostamos de fazer exceções ao aprender, é claro. E por diversão :))
fonte
Verifique o projeto Linux From Scratch . Como o nome sugere, ele contém todos os detalhes necessários para criar sua própria distribuição Linux
fonte
Eu acho que a primeira coisa que você precisa definir é "quais são as alterações que você deseja trazer para o sistema operacional". Até você decidir isso, você realmente não chegará a lugar algum. Não existe um "caminho único" para aprender.
Além disso, acho que você deve definir melhor o que você entende por sistema operacional. Uma grande parte (a maior parte) do código fonte do Ubuntu está fora do Linux. O Linux é apenas o kernel (às vezes é chamado de sistema operacional , especialmente nos círculos acadêmicos, daí a confusão) e, portanto, tem o trabalho "simples" de:
Qualquer outra mudança que aconteceria em um nível diferente, se é os utilitários núcleo userland (muitas vezes referida como utils ), a GUI, os aplicativos básicos de uma distro, etc.
Se, no entanto, você ainda está aprendendo a hackear o kernel, talvez deva começar com esta pergunta , a pergunta mais votada neste site;)
fonte
Isso pode ser um pouco irrelevante, mas se você deseja aprender sobre o kernel do Linux e começar a desenvolvê-lo, deve realmente procurar iniciantes no kernel . É um site que fornece informações sobre a mecânica do kernel (como o Alexios fez de uma maneira excelente), mas também permite que você escolha uma pequena tarefa a ser realizada (sendo o chamado zelador do kernel). É uma ótima maneira de aprender, e eu recomendo!
fonte