Programming for EFI:
Why Write for EFI?

by Roderick W. Smith,

Originally written: 5/3/2013

I'm a technical writer and consultant specializing in Linux technologies. This Web page is provided free of charge and with no annoying outside ads; however, I did take time to prepare it, and Web hosting does cost money. If you find this Web page useful, please consider making a small donation to help keep this site up and running. Thanks!

Donate $1.00 Donate $2.50 Donate $5.00 Donate $10.00 Donate another value
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal
Donate with PayPal

Note: This page is a sub-page of my Programming for EFI document. If a Web search has brought you here, you may want to start at the introductory page.

EFI is a pre-boot environment, meaning that it, and the programs that run under it, work before a full OS has been booted. This fact makes EFI the ideal environment for certain types of programs, and a good environment for others. The fact that a full OS need not boot to run an EFI program means that users can run an EFI program quickly, from computer power-on to running program. More importantly, the EFI environment is devoid of certain complications associated with modern OSes, such as multi-tasking, which can wreak havoc with the precision timing requirements of some scientific and industrial uses of a computer. Consider the following broad classes of programs:

Examples of most of these program categories exist, although some are rather thin on the ground. Some programs also span multiple categories—for instance, GRUB 2 is both a boot manager and a boot loader; and the EFI shell could be considered a firmware setup tool, a user program, and a programming language. In any event, it's clear that the EFI's potential as a platform for a wide variety of programs has barely been tapped. To be sure, the EFI's primary job is to boot a more sophisticated OS, but as time progresses, I'm sure we'll see creative programs emerge to help out during that process or to perform important but seldom-needed functions before an OS boots.

Some of these examples assume the presence of a network stack. Such a stack does exist, and is built into some computers' firmware. If your computer lacks such a stack, though, adding it is difficult at best, since you'll need to track down all its components, including drivers for your network hardware. Of course, if you're a good enough programmer, you could write the necessary components yourself!

Go on to "Preparing a Development Environment"

Return to the "Programming for EFI" main page

copyright © 2013 by Roderick W. Smith

If you have problems with or comments about this Web page, please e-mail me at Thanks.

Return to my main Web page.