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.
- Distribution matters. There’s a vast difference between open (Minix) and open and free (Linux).
- 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.”
- Individuals can have an enormous impact. Tanenbaum and Torvalds went out and built something they believed the world needed.
- Observable maintainability and simplicity always beat theoretical elegance.
- Performance matters.
- Open debates last for a long time.
- Don’t prematurely split a mono{-repo,-kernel,-lith}.
- Systems evolve over time. Paradigms shift.
- Working code is better than no code.
- The best product doesn’t always win. Technical superiority ≠ market dominance.
- There is a balance between vision and pragmatism.
- 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.
- Clean abstractions don’t always run faster.
- Outdated architectures with modern features can sometimes compete with modern alternatives.
- 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.
- It’s hard to make precise definitions about the future.
When predicting the future, favor entropy and luck over innovation and ideals