An extraordinary talk on developing systems software in the large
Overview
This article explores the unique challenges of developing systems software at large scale, using Oxide Computer's software update system as a case study. It discusses how systems software—the foundational layer that abstracts hardware complexity—becomes exponentially harder when combined with 'programming in the large,' involving many components built by multiple people over extended periods. The piece introduces Dave Pacheco's OxCon talk on leading Oxide's multi-year software update project, which must handle distributed system updates across air-gapped environments.
What You'll Learn
Why systems software in the large represents the most challenging category of software development
How software update for distributed rack-scale systems constitutes a 'wicked problem'
Why air-gapped update delivery creates unique constraints compared to public cloud environments
How organizational procrastination and scope creep threaten large systems software projects
Prerequisites & Requirements
- Understanding of systems software concepts and the distinction between application and infrastructure software
- Familiarity with distributed systems and the challenges of updating software across multiple nodes
- Experience working on large-scale software projects with multiple contributors(optional)
Key Questions Answered
What is systems software in the large and why is it so difficult?
Why is software update for the Oxide rack considered a wicked problem?
What does air-gapped software update mean for rack-scale infrastructure?
What is organizational procrastination in systems software projects?
What is the difference between functional and robust systems software?
How did Oxide approach shipping their first software update mechanism?
Key Statistics & Figures
Technologies & Tools
Key Actionable Insights
1Prioritize robustness over user experience in the first version of critical infrastructure software. Oxide deliberately shipped a minimal but robust update mechanism rather than a polished but fragile one, accepting that the user experience would need improvement later.This applies when building foundational systems where failure is catastrophic. Getting correctness right first and improving ergonomics later is a proven strategy for infrastructure software.
2Guard against organizational procrastination by maintaining focus on the hardest problems. Teams naturally gravitate toward tractable work and away from wicked problems, which can delay the most critical deliverables without anyone consciously deciding to deprioritize them.This is especially relevant for multi-year projects with many contributors where it's easy for the team's attention to drift toward more comfortable tasks.
3Actively fight scope creep in systems software projects. Large systems software has a natural tendency to expand in scope because the problems are interconnected and not fully understood at the outset, making it tempting to solve adjacent problems simultaneously.Dave Pacheco specifically called out scope creep as a key challenge in leading the software update project at Oxide, suggesting that discipline around scope is critical for delivering on ambitious timelines.
4Design update systems to operate in the liminal state between old and new software versions. The hardest part of distributed software update is not deploying new code but maintaining operability while the system is partially updated.This applies to any distributed system that cannot tolerate downtime during updates. The transitional state between versions is where most update failures occur.
5Eliminate dependencies on human operators and runbooks for critical infrastructure operations. Oxide's air-gap constraint forced them to build a fully autonomous update system, which ultimately produces a more reliable system than one that relies on operator intervention.Even if your system isn't air-gapped, designing as if it were forces you to automate recovery paths and error handling that would otherwise be left to manual procedures.