Enquanto, em teoria, é possível escrever BIOS em qualquer idioma, a realidade moderna é que a maioria dos BIOS é escrita usando Assembly, C ou uma combinação dos dois .
O BIOS deve ser escrito em uma linguagem que possa ser compilada no código da máquina , entendida pela máquina de hardware física. Isso elimina as linguagens interpretadas diretamente ou de forma intermediária (Perl, Python, PHP, Ruby, Java, C #, JavaScript etc.) como apropriadas para a gravação de BIOS. (Embora, em teoria, alguém possa implementar uma dessas linguagens para compilar diretamente o código estático da máquina ou de alguma forma incorporar o intérprete no BIOS. Existe, por exemplo, o projeto GCJ abandonware para Java.)
A maioria dos OEMs implementa um BIOS estendendo implementações genéricas e proprietárias de BIOS por empresas como American Megatrends e Phoenix Techologies . (Você provavelmente já viu uma dessas empresas exibida na primeira tela de inicialização de um computador.) O código fonte dessas implementações não está disponível ao público, mas algumas delas vazaram. Eu não quero vincular isso diretamente ao código-fonte C e assembly, mas há lugares na Internet em que esse código-fonte é discutido para aqueles que desejam espiar.
Alguns fabricantes de hardware, como aqueles voltados para os mercados de alto desempenho e jogos, saturam suas implementações de BIOS com recursos de personalização, estatísticas e atraentes interfaces de usuário projetadas para suas implementações exatas. Muitos desses recursos vão além do que é oferecido nos produtos genéricos produzidos pela American Megatrends e outros. Infelizmente, essas empresas costumam ver o lançamento de seu código-fonte como um risco à segurança ; pouco se sabe sobre essas implementações de ponta, porque pouco é compartilhado sobre elas. É claro que é possível encontrar maneiras de acessar e descompilar essas implementações de BIOS, mas isso pode ser difícil e possivelmente ilegal.
Voltando à pergunta original, devido à necessidade de produzir código de máquina nativo, um BIOS teria que ser implementado em uma linguagem de programação suportada por um compilador de código de máquina nativo . Embora existam muitas dessas linguagens e, embora eu tenha certeza de que, nas últimas décadas, várias linguagens tenham sido usadas em experimentação, todas as implementações abertas do BIOS que consegui encontrar dependem especificamente de uma combinação de C e / ou assembly. As implementações de BIOS de código aberto que observei para formar esta conclusão incluem OpenBIOS , tinyBIOS , coreboot , Intel BIOS e Libreboot. Também observei algumas implementações de BIOS muito antigas que não são relevantes hoje, mas também segui a regra C e / ou assembly.
Eu acho que também é relevante olhar para outros softwares criados para interagir diretamente com o hardware. Sabemos, por exemplo, que o kernel do Linux , o kernel do OS X e o kernel do Windows são amplamente C com alguns assembly e algumas linguagens de nível superior para tarefas específicas. Também sabemos que os drivers de hardware no Linux e de hardware no Windows são escritos principalmente em C.
Voltando ao BIOS, acho que também é importante considerar a economia da linguagem de programação escolhida. O BIOS geralmente é escrito como uma necessidade para complementar as vendas de hardware. Sabe-se que os sistemas BIOS modernos são amplamente escritos em C e / ou montagem. Uma mudança para outra ferramenta acrescentaria custos significativos ao que geralmente são considerados produtos de commodities que poderiam afetar adversamente as vendas. Sem entrar na Economics 101, posso garantir que provavelmente não vale a pena que um OEM se desvie das ferramentas testadas e comprovadas que foram comprovadas ao longo de décadas.
É claro que existem e haverá projetos amadores para escrever BIOS também. Até agora, esses também parecem escolher C e / ou montagem. Talvez um dia outras tecnologias sejam usadas. Mas hoje, a escolha de é bem definida.