If you follow the software engineering industry, in even the most shallow way, you’ve probably heard the term “full stack developer”.  All the recruiters are looking for full stack developers.  They want the front-end.  They want the back-end.  They want full stack developers.

Training companies are falling all over themselves to cater to full stack developers:



Seriously, how difficult can being a “full stack developer” be, if you can be one in 19 weeks?

Here’s the best definition I can find of a “full-stack developer”:


So, “full stack” apparently means knowing a handful of easy-to-learn web technologies.


Web Development?  Seriously?

At the risk of being confrontational, I would like to say:  web development may be challenging for small, fragile children.  However, if you want to talk about seriously difficult software development, you have to talk about firmware and BIOS development.  With this in mind, I humbly present my idea of a true full stack developer, the Full Stack BIOS Developer!


Full Stack BIOS Development

Here is my list, beginning at the “top” of the stack and working to the “bottom”.  The idea is that a BIOS developer who has mastered the following list can be considered “full stack”, meaning he has a comprehensive understanding of BIOS firmware and can be counted on to solve a variety of problems in all domains of the BIOS boot process:

1. Industry Standards (pick 2 to master)

  • ACPI
  • DASH
  • Smart Battery Data Specification

2. Essential Tools (choose 6 of 8) 

  • svn
  • git
  • mastery of a professional text editor, NOT Visual Studio, NOT Eclipse-based (i.e. SlickEdit, Vim, Ultraedit, Notepad++, etc.) 
  • mastery of regular expressions—the underpinning of everything in Computer Science
  • mastery of data structures in C
  • be comfortable using a static source code analyzer (e.g. Fortify, Coverity, Klocwork)
  • be able to use a disassembler/debugger (e.g. IDA, SourcePoint)
  • working knowledge of security technologies (cryptographic hashes, public key encryption)

3. Hardware (pick 2—be able to use a bus analyzer to debug issues) 

  • USB · PCI · SATA · PECI · I2C · LPC · SAS

4. Core Logic

  • Intel or ARM architecture (MSRs, MTRRs, chipset configuration, p-states, c-states, xAPIC)

5. UEFI/EDK building blocks (master 4 of 6)

  • .dec, .dsc, .fdf, .inf, .uni, .vfr

6. UEFI architecture

  • UEFI shell development
  • SMM driver development
  • DXE driver development
  • PEI module development

7. Required Languages

  • Python (used in EDKII)
  • makefiles
  • C
  • assembly, either x86 or ARM (optional)

8. Legacy Bonus (for extra credit!) 

  • BIOS Boot Specification
  • PnP BIOS Specification
  • Interrupt Vector Table
  • Software INT Mechanism
  • Legacy OROM implementation
  • A20 Gate
  • E820 Table
  • PS/2
  • RS-232
  • IEEE 1284 (LPT port)
  • 16-bit Intel segmented programming model



That’s my list, and, speaking for me, I still have lots of work to do to be considered a Full Stack BIOS Developer!  Is there anything you would add, remove, or change that would better define a full stack BIOS developer?  Leave a comment and let me know!

Post a Comment

  1. Thank you Nikolaj for this great comment! I appreciate your readership. I especially like your list of debugging technologies. BIOS developers need to know many more complicated debug methodologies than other (managed code) developers, who typically rely simply on the debugger built into their IDE. (Eclipse or VisualStudio)

  2. "2. Essential Tools: "
    Let's not forget about VeB!

    I am glad that I have found this site.
    Greetings from a fellow BIOS developer.

  3. I am doing my final project degree in EDKII, this post is an abstract of my life in a year XD, I dont master any of this subject but only trying to understand all the system is very dificult, I was trying to do a boot loader, finally i do a very nice notebook with data estructures and pointers, it is crazy but very pretty development.

    thanks for this site! and sorry for my english

    1. hi lau1871, thanks for reading my site! I'm glad you find the content worthwhile!


Be sure to select an account profile (e.g. Google, OpenID, etc.) before typing your comment!