Substituir o firmware está longe de ser fácil, pelo menos como regra geral. O problema é que o firmware é necessariamente escrito especificamente para uma placa-mãe, ou pelo menos um chipset - o firmware do Chipset A irá provavelmente travar, ou pelo menos ter um desempenho ruim, se instalado no Chipset B. Eu não tenho um exato contar, mas deve ter havido centenas (talvez milhares) de chipsets de PCs produzidos ao longo dos anos. Pesquisando no NewEgg, vejo que eles listam 20 chipsets para placas-mãe Intel disponíveis atualmente e mais 12 para placas-mãe AMD atualmente disponíveis.
No momento, a principal solução para o firmware de substituição de código aberto (ou próximo a ele) é CoreBoot. Isso fornece um kit de ferramentas para criação de um núcleo simples de inicialização de hardware, em cima do qual você pode ajustar qualquer uma das várias "cargas úteis" para fornecer funcionalidade - por exemplo, um BIOS de código aberto, um UEFI de código-fonte aberto, GRUB ou um kernel Linux. A lista de placas-mãe suportadas do CoreBoot é bastante pequena em comparação com o histórico total de PCs x86. (É claro que o CoreBoot provavelmente funcionará em uma variedade maior de hardware do que a lista oficialmente suportada, mas você estará em busca de algo que não esteja na lista.)
Este é, naturalmente, um problema para aqueles, como Richard Stallman, que são ideologicamente opostos ao software proprietário; a maioria dos computadores depende do firmware proprietário, mesmo que eles executem um sistema operacional e uma pilha de aplicativos totalmente abertos. Embora o CoreBoot seja uma opção para alguns, é bastante obscuro, não testado o suficiente e limitado o suficiente em computadores suportados, o que limitará severamente suas escolhas de hardware e provavelmente exigirá um grande esforço extra se você insistir em usá-lo. A maioria das pessoas não se importa o suficiente para ir a qualquer problema para se livrar do firmware proprietário. Para aqueles que o fazem, as limitações do CoreBoot são um problema; você não pode simplesmente colocar o CoreBoot como um substituto do jeito que você pode deixar o Linux em um computador como um substituto para o Windows.