Q#1: Or, to be more general, what pieces of software are common amongst all Linux distributions, i.e. define a Linux distribution?
Se estamos falando de uma distribuição GNU / Linux, posso certamente adivinhar que o userland é praticamente o mesmo entre as distribuições.
Eu não consigo pensar em um que seja removido sem usar o GNU Coreutils, o GNU Binutils, o GNU Bash, o GNU Compiler Collection, etc.
Agora, se tudo o que você quer é uma definição do que é uma distribuição Linux, então, em uma frase, é o kernel do Linux e uma userland, que é um conjunto de software executado no kernel. para torná-lo útil para você .
A maioria das distribuições Linux também usa algum tipo de sistema de gerenciamento de software , para facilitar a instalação e configuração de software, por exemplo, (seja pelo gerenciamento de pacotes binários como o Debian ou pelo gerenciamento de pacotes fonte como o Gentoo), e ocasionalmente, algum software específico de distro , como por exemplo ferramentas de administração (eu posso pensar em debconf
para o Debian, ou yast
para o OpenSuse por exemplo). Se você quiser uma resposta mais definitiva, você deve definitivamente dar uma olhada em Linux From Scratch
Q#2: Is the part of Linux that runs before chrooting into rootfs common to all Linux distros (and that's why the initial boot worked for both Arch and Ubuntu)?
Sim e não. A maioria das distros usa uma versão ligeiramente modificada das etapas abaixo, mas as opções da tecnologia para as diferentes peças podem ser diferentes. Diferentes carregadores de inicialização (GRUB, Lilo, etc.), por exemplo.
trecho do artigo da Wikipédia intitulado: Processo de inicialização do Linux
- The BIOS performs hardware-platform specific startup tasks
- Once the hardware is recognized and started correctly, the BIOS loads and executes the partition boot code from the designated boot device, which contains phase 1 of a Linux boot loader. Phase 1 loads phase 2 (the bulk of the boot loader code). Some loaders may use an intermediate phase (known as phase 1.5) to achieve this since modern large disks may not be fully readable without further code.
- The boot loader often presents the user with a menu of possible boot options. It then loads the operating system, which decompresses into memory, and sets up system functions such as essential hardware and memory paging, before calling start_kernel().
- start_kernel() then performs the majority of system setup (interrupts, the rest of memory management, device initialization, drivers, etc.) before spawning separately, the idle process and scheduler, and the Init process (which is executed in user space).
- The Init process executes scripts as needed that set up all non-operating system services and structures in order to allow a user environment to be created, and then presents the user with a login screen.
Mais detalhes
Grande parte da aparente complexidade (fase 1 da fase de chamada do carregador de boot 2) tem a ver com o histórico no qual o PC cresceu, onde as coisas foram corrigidas enquanto IBM e outros padronizam o design de vários subsistemas e como eles trabalhamos juntos.
A outra complexidade vem da natureza do Linux, onde vários componentes são modulares e intercambiáveis. Este design modular vem com um preço, que você está vendo aqui com o excesso de design da arquitetura. Lembre-se que o Linux pode inicializar em uma infinidade de plataformas de hardware e suporta uma variedade de sistemas de arquivos, e isso é parcialmente uma conseqüência de todas essas escolhas.