Embrace. Extend. Extinguish.

Mar 20, 2022

A timeless strategy for technical products. One of the most effective forms of API warfare which Microsoft was (is) most notorious for. From a 1994 internal memo at Microsoft on a strategy for building the "killer app" for the budding internet.

In order to build the necessary respect and win the mindshare of the Internet community, I recommend a recipe not unlike the one we've used with our TCP/IP efforts: embrace, extend, then innovate.

Phase 1 (Embrace): all participants need to establish a solid understanding of the infrastructure and the community—determine the needs and the trends of the user base. Only then can we effectively enable Microsoft system products to be great Internet systems.

Phase 2 (Extend): establish relationships with the appropriate organizations and corporations with goals similar to ours. Offer well-integrated tools and services compatible with established and popular standards that have been developed in the Internet community.

Phase 3 (Innovate): move into a leadership role with new Internet standards as appropriate, enable standard off-the-shelf titles with Internet awareness. Change the rules: Windows become the next-generation Internet tool of the future.
  • Kubernetes embraced the Docker API and community. It then extended the API with an orchestration layer. Finally, it extinguished Docker by (1) becoming the standard for enterprises (over Docker Swarm) and (2) fully removing Docker (now containerd) from the guts of the system.
  • Microsoft finally is fulfilling its dream of EEE to Linux. Windows Subsystem for Linux (WSL) embraced the API – letting you run Linux binaries (and GUIs!) on Windows natively. Next, WSL extended the kernel with GPU driver support.
  • There are many potential examples in the JavaScript ecosystem. Some are coming after Node (Deno, StackBlitz): Embrace the API, Extend (faster, more secure, easier to use), and Extinguish (no trace of Node or other JavaScript-written-in-JavaScript tools). Others are coming after lower level targets – languages that compile to JavaScript or WebAssembly.
  • Chrome originally used WebKit (from Safari) but eventually forked the library to Blink. Chrome has embraced web standards (e.g., in CSS and HTML) but has also become so ubiquitous that it has become the standard itself – sometimes Chrome is the ground truth for behavior (rather than the agreed upon spec).
  • Apple's new Game Porting Toolkit uses WINE under the hood. However, there's a proprietary layer D3DMetal, where most of the improvements accrue.
  • GitHub embraced git, extended it via workflow improvements (pull requests, issues, comments, wikis, and more). More and more GitHub tooling aims to completely abstract git away from users – from cloud IDEs that automatically sync your code to CLI tools that interact directly with GitHub APIs rather than git.
  • Ethereum embraced the Bitcoin community and architecture – Blockchains, proof-of-work, signed transactions. Then, it extended the API with transaction data and smart contracts. Finally, Ethereum transitioned to a proof-of-stake.
  • Meta's new Threads application is supposedly embracing a federated architecture. We don't know if this means something like ActivityPub, but Threads can already extend functionality by tapping into adjacent social graphs (i.e., Instagram and Facebook).