Mentre in teoria si può scrivere BIOS in qualsiasi lingua, la realtà moderna è che la maggior parte del BIOS è scritta usando Assembly, C o una combinazione dei due .
Il BIOS deve essere scritto in un linguaggio che può essere compilato in base al codice macchina , compreso dall'hardware fisico della macchina. Ciò elimina i linguaggi interpretati direttamente o intermedi (Perl, Python, PHP, Ruby, Java, C #, JavaScript, ecc.) Come appropriato per la scrittura del BIOS. (Sebbene, in teoria, si potrebbe implementare uno di questi linguaggi per compilare direttamente in codice macchina statico o si potrebbe in qualche modo incorporare l'interprete nel BIOS. Esiste, ad esempio, il progetto GCJ diandonware per Java.)
La maggior parte degli OEM implementa un BIOS estendendo implementazioni di BIOS generiche proprietarie da aziende come American Megatrends e Phoenix Techologies . (Probabilmente hai già visto una di quelle aziende mostrate nella prima schermata di avvio di un computer in precedenza.) Il codice sorgente di queste implementazioni non è pubblicamente disponibile, ma alcune di esse sono trapelate. Non voglio collegarmi direttamente a questo al codice sorgente C e assembly, ma ci sono posti su Internet in cui questo codice sorgente viene discusso per coloro che vogliono dare un'occhiata.
Alcuni produttori di hardware, come quelli destinati ai mercati ad alte prestazioni e di gioco, saturano le loro implementazioni BIOS con funzionalità di personalizzazione, statistiche e interfacce utente accattivanti progettate per le loro esatte implementazioni. Molte di queste caratteristiche vanno oltre ciò che viene offerto nei prodotti generici prodotti da American Megatrends e altri. Sfortunatamente, queste aziende vedono spesso il rilascio del loro codice sorgente come un rischio per la sicurezza , quindi si sa poco su queste implementazioni di fascia alta perché poco è condiviso su di loro. Naturalmente si potrebbero trovare modi per accedere e decompilare tali implementazioni del BIOS, ma ciò potrebbe essere difficile e forse illegale.
Tornando alla domanda originale, a causa della necessità di produrre codice macchina nativo, un BIOS dovrebbe essere implementato in un linguaggio di programmazione supportato da un compilatore di codice macchina nativo . Mentre ci sono molti linguaggi di questo tipo e mentre sono sicuro negli ultimi decenni, sono state usate diverse lingue nella sperimentazione, ogni implementazione di BIOS aperta che sono stato in grado di trovare si basa specificamente su una combinazione di C e / o assembly. Le implementazioni del BIOS open source che ho esaminato per formare questa conclusione includono OpenBIOS , tinyBIOS , coreboot , Intel BIOS e Libreboot. Ho anche esaminato alcune implementazioni BIOS molto vecchie che non sono rilevanti oggi, ma hanno anche seguito la regola C e / o assembly.
Penso che sia anche importante guardare altri software creati per interagire direttamente con l'hardware. Sappiamo, ad esempio, che il kernel Linux , il kernel OS X e il kernel Windows sono in gran parte C con alcuni assembly e alcuni linguaggi di livello superiore per compiti specifici. Sappiamo anche che i driver hardware su Linux e i driver hardware su Windows sono scritti in gran parte in C.
Tornando al BIOS, penso che sia anche importante considerare l'economia del linguaggio di programmazione scelto. Il BIOS è generalmente scritto come una necessità per integrare le vendite di hardware. I moderni sistemi BIOS sono noti per essere in gran parte scritti in C e / o assembly. Il passaggio ad altri strumenti aggiungerebbe costi significativi a quelli che sono generalmente considerati prodotti di base che potrebbero influire negativamente sulle vendite. Senza entrare in Economics 101, posso assicurarvi che probabilmente non vale la pena per un OEM discostarsi da strumenti collaudati che sono stati dimostrati nel corso di decenni.
Ovviamente ci sono e ci saranno progetti per hobby anche per scrivere BIOS. Anche questi, finora, sembrano scegliere C e / o assembly. Forse un giorno verranno utilizzate altre tecnologie. Ma oggi, la scelta di è ben definita.