Embrace & Extend

To Walled Gardens

It is hard to imagine now, given the walled gardens we spend so much of our time in, but way back at the beginning of the web, people really cared about open standards. You could almost implement a new browser that would work on current and future websites, as long as you and the site both supported the HTTP and HTML standards of the day. [8][9] However, any self-respecting commercial software company treated open standards cynically. Microsoft and Apple paid lip service to standards, but would actually go to great efforts to embrace and extend. Implement the standard, yes, but then encourage developers to use proprietary extensions, libraries, and functionality to force lock-in and increase switching costs. Netscape extended HTML. [12] Microsoft shipped a Windows-only Java runtime [10] and a Kerberos with proprietary fields. [13] Sun kept control of Java while calling it open. [14] AOL and CompuServe ran closed networks. Microsoft’s Halloween documents stated the goal directly: turn open protocols back into proprietary ones. [4]

It’s just good business. Today’s walled gardens epitomize this approach: no one even pretends to have a standard API, data exchange, or RPC format between, say, Instagram and Snapchat. Add app stores on mobile and the lock-in is all the more extreme. TCP/IP, HTTP, HTML, SMTP, and TLS stayed open, but when vendors could no longer extend the higher-level protocols, they built closed systems on top: app stores, messaging networks, social feeds, ad platforms. A walled garden is the fallback for a company that failed to capture the standard underneath. Lock-in became entrenched, and nothing was going to change it. Until it did.

STDOUT and STDIN

The most important technology of the last ten years is stunningly, shockingly, anti-marketingly open. I’m not sure there’s an ANSI committee sitting anywhere deliberating, but de facto standards have always been as important. The closest thing we have ever had to AGI is most useful via a well-known, pseudo-standardized interface: Chat, duh. [11] To get the most work done with ChatGPT, Claude, or Gemini, you fire up a REPL that accepts text and attachments. The server side does its computation and tool calls, and responds similarly with text and attachments. It’s like System V, baby.

Coding agents are the most important new developer interface in years, built by companies worth hundreds of billions of dollars. A coding agent is a language model in a loop with tools: it reads files, runs shell commands, edits code, reads the output, and repeats. Claude Code, Codex CLI, Gemini CLI, and independent agents like Goose all work the same way. Switching between them means changing a command name and possibly renaming an instruction file. [1][2][5] The models behind them differ in accuracy, speed, and price. The interface, the de facto standard, does not. By the measure of the 1990s, coding agents should already be fragmented into proprietary, mutually incompatible walled gardens. But they’re not.

  • The loop and tool set are the same across vendors: read, search, edit, write, run a shell command, fetch a URL, and ask permission.
  • OpenAI and Google release their CLIs under Apache 2.0. [1][2]
  • Repository instructions converged on AGENTS.md. Tool integration converged on MCP. OpenAI and Anthropic donated both to the Linux Foundation’s Agentic AI Foundation in December 2025. [3][6][7]
  • Third-party agents call the same model APIs as the first-party ones.

No vendor has shipped an incompatible tool schema, an instruction format only its own agent reads, or a plugin system that only works in its own CLI.

I cannot give frontier AI lab leadership much credit here. There has never been any earnest hacker or interoperability ethos demonstrated in the upper echelons of VC-backed Shiny Ball LLCs. Maybe it was a happy accident? And if so, how have the sorta-geniuses let this go on so long?

Next

We are supposed to believe the vendors sell tokens, not interfaces, not harnesses. They subsidize our Max subscriptions, nudge the API plans upward in price, and eventually expect to own the whole space. (Insert here the obviously-bullshit, talking-your-book marketing argument about the forthcoming singularity, 2026 style.)

Soon the walls are going up around the interface, the chat, as the 90s pattern predicts: OpenAI or Anthropic release a higher-level tool like a coworker that — importantly — is the only way to get at the AGI-grasping model du jour. Like if Fable were only usable via Anthropic’s heavy iOS client, and only via Dots or something. We will move toward closed services around one lab’s server side as soon as someone wises up. Or as soon as we get a little blip in the AI stock bubble.

References

  1. OpenAI, Codex CLI source and license: github.com/openai/codex
  2. Google, Gemini CLI source and license: github.com/google-gemini/gemini-cli
  3. Linux Foundation, Formation of the Agentic AI Foundation, December 9, 2025
  4. Eric S. Raymond, The Halloween Documents
  5. Block, Goose source: github.com/block/goose
  6. OpenAI, OpenAI co-founds Agentic AI Foundation, donates AGENTS.md, December 9, 2025
  7. Anthropic, Donating MCP to the Agentic AI Foundation, December 9, 2025
  8. T. Berners-Lee and D. Connolly, RFC 1866: Hypertext Markup Language 2.0, November 1995
  9. T. Berners-Lee, R. Fielding, and H. Frystyk, RFC 1945: Hypertext Transfer Protocol, HTTP/1.0, May 1996
  10. U.S. District Court for D.C., U.S. v. Microsoft: Court’s Findings of Fact, November 1999, Section VI (Java)
  11. Google, Gemini API: OpenAI compatibility
  12. Dave Raggett, My involvement with the early days of the Web, W3C, December 2004
  13. Network World via Computerworld, Interoperability issues bite Win 2000 Kerberos scheme
  14. InfoWorld, Sun to retain grip on Java, December 8, 1999

I Program in Whatever

A friend just asked me how to get better at JavaScript, the programming language du jour for Silicon Valley gigs. Or more generally, whether “practice” is the way to overcome learning barriers in programming.

The short answer is, indeed, you just need to practice. The great Peter Norvig says becoming a good coder takes ten years. Bright people heeding good advice can slash these ten thousand required hours quite a bit.

Types of Language
Though if I were you, I would start with separating the learning of a particular programming language from becoming a good programmer. This is one of the trickiest concepts for people coming into programming from another field. The doing of computer science and software engineering has very little in common with the syntax or standard library of a particular programming language, JavaScript or otherwise. Sapir-Whorf be damned, but a programming language is just a tool while a (real) language is a way to communicate. Would you say becoming a radiologist is the same thing as learning to use an x-ray machine? Are statistics and Excel the same thing?

The infamous ThoughtWorks interview process for software engineers that I went through ages ago had almost no questions about standard libraries or syntax. (“How do you close a socket in C?”) No one cares, because you can always look that up in a book. Instead most of the questions were about abstraction, with a few here & there about algorithms. (“How would you cleanup the coupling between this infovis module and the database?”)

Good programmers learn new languages trivially, because they all have the same underpinnings. I find it helpful to think of three schools of programming language now-a-days. The first are the aspiring or popular languages like JavaScript, Go, Ruby, Python, Java, C#, C++ and C. These languages all have their imperative syntactic roots in ALGOL from the 1950’s. The languages are heavy on the syntax, and try to stop programmers from shooting themselves in the foot.

The next school of programming languages are the lower-case-el lisps like Scheme and Clojure. The most important distinction of a lisp is its homoiconicity, a cumbersome term that means you write code in a data structure the programming language is good at manipulating. Paul Graham of Y Combinator is a famous proponent of coding in lisps. They are more powerful and expressive than the popular languages, so it is easier for a good Scheme programmer to pick up Python than the opposite. Even Go’s statically-linked by default killer feature was common in the Lisp and Smalltalk communities thirty years ago.

My third class of programming languages are the functional languages providing different degrees of type safety, like Haskell, OCaml and Erlang. These languages discourage state and side-effects, and by doing so help code run across many CPUs or machines. Functional languages are also about code that is provably correct. This school of programming language is (arguably) more expressive and powerful than even the lisps, so a Haskell hacker should be able to pick up Clojure more easily than the Clojure programmer could learn OCaml.

I intentionally avoid classifying programming languages according to their object oriented-ness, since OOP is just another way to generalize and abstract the coupling between different parts of a software system. You can do object-oriented programming in any language, but languages like Java and Ruby force the issue. (Yes, you can write object-oriented systems in old school C.) Don’t bother with domain-specific languages like SQL, Matlab or R, since they encourage bad habits and are easy to learn later. Nothing is scarier than a R or Python programmer who has never written any lisp.

If you are trying to become a better programmer, the best thing you can do is learn the underlying history and structure of all three schools of programming language. “All of this has happened before, and all of this will happen again.” However the closer your learning language is to the third school, the quicker you will start to understand the core of the matter.

A Little More Advice
What side projects are you helping code? If the answer is “I just program at work” or “I just read a lot of code on Github,” then you will never be a great coder. The advice Hilary Mason got on Twitter a while back was iffy in this regard.

Have you worked through the amazing SICP book yet? There is a reason it was MIT’s main textbook for a zillion years. The book seems to be a cultural signal or marker of good coders. Others think the Van Roy & Haridi book is better than SICP, but the writing style is really dry.