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:

image

image

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”:

image

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)

  • SMBIOS
  • 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

 

Conclusion

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. Nice list, I also have many things to master from it.
    Would also add:
    - Firmware debugging (port 80h, trace-based, emulators, JTAG, Intel XDP, AMD HDT, 3rd-party tools)
    - Companion HW: DIMM and soldered-down RAM, IPMI, LAN Phy, EC, SuperIO, TPM, SMBus/I2C voltage and fan control devices), CPU IO port decoding and IO traps (LPC, PCI, SMM drivers for IO trapping).
    - Deeper security: attacker PoV, understanding the real power of SMM code, TOCTOU, race conditions, R/W-what-where, ROP.
    - Boot process: transition from PEI to DXE, start of SMRAM filling and locking of it, end of DXE and what happens there, OptionROMs and DriverOrder entries, BIOS Setup and other UEFI apps, BootOrder entries, ReadyToBoot and ExitBS events.
    - Problem solving: FPGA connected to PEG x16 Gen3 suddenly downgrades to Gen1, WTF? Cheap 800x480 LVDS panel can't show BIOS setup? ACPI backlight control stops working after installing GPU drivers? Wake-on-LAN doesn't work after upgrading to Windows 10? Constant stream of such questions and ability to deal with it gracefully.

    ReplyDelete
  2. 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)

    ReplyDelete

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