16 Lessons from the Tanenbaum–Torvalds Debates

Apr 25, 2023

Part 2 of The Tanenbaum–Torvalds Debates. 16 generalized software development lessons from the debate of microkernels vs. monolithic kernels, and two computer science visionaries — Andrew Tanenbaum and Linus Torvalds.

  1. Distribution matters. There’s a vast difference between open (Minix) and open and free (Linux).
  2. Optimizing for specific hardware can sometimes be a feature, not a bug. Linux was originally developed for the 386. MS-DOS was only written for the 8088. Design with constraints. “CPU scale beats CPU diversity.”
  3. Individuals can have an enormous impact. Tanenbaum and Torvalds went out and built something they believed the world needed.
  4. Observable maintainability and simplicity always beat theoretical elegance.
  5. Performance matters.
  6. Open debates last for a long time.
  7. Don’t prematurely split a mono{-repo,-kernel,-lith}.
  8. Systems evolve over time. Paradigms shift.
  9. Working code is better than no code.
  10. The best product doesn’t always win. Technical superiority ≠ market dominance.
  11. There is a balance between vision and pragmatism.
  12. Linus fostered a community of open-source developers. Recruiting, managing, and delegating to a community of software developers takes skill but can make all the difference.
  13. Clean abstractions don’t always run faster.
  14. Outdated architectures with modern features can sometimes compete with modern alternatives.
  15. Know the difference between fixed, linear, and exponential performance improvements. Sometimes making trade-offs that result in small or fixed improvements aren’t worth it when the underlying hardware is exponentially improving.
  16. It’s hard to make precise definitions about the future.

When predicting the future, favor entropy and luck over innovation and ideals