1 comment

[ 1.8 ms ] story [ 15.9 ms ] thread
Claude Code running natively on Mac OS X Leopard (2007) – no proxy

  I built a custom JavaScript runtime (QuickJS + mbedTLS) that lets Anthropic's Claude Code CLI run natively on a 2003 Power Mac G5 Dual running Mac OS X  
  Leopard 10.5.                                                                                                                                            
                                                                                                                                                           
  The hard part: Leopard ships with OpenSSL 0.9.7, which tops out at TLS 1.0. The Anthropic API requires TLS 1.2. For 18 years the answer has been         
  "upgrade" or "use a proxy." Instead I compiled mbedTLS directly into the JS runtime, bypassing the OS crypto stack entirely. The G5 negotiates TLS 1.2   
  handshakes itself — no relay, no intermediary machine.                                                                                                   
                                                                                                                                                           
  It's not just a chat client. The full tool execution loop works: Claude reads files, writes code, runs shell commands, greps through source trees — all  
  executing on big-endian PowerPC hardware. The agentic coding workflow runs on a machine from 2003 talking to a frontier AI model in 2026.                
                                                                                                                                                           
  The runtime (node_ppc) is QuickJS for ES2020 JavaScript + mbedTLS 2.28 for TLS 1.2, compiled with GCC 10 on the G5 itself. Total binary is about 1MB. The
   CLI is a single 972-line JS file.                                                                                                                       
                                                                                                                                                           
  Key technical details:                                                                                                                                   
  - mbedTLS is portable C with no architecture assumptions — handles big-endian correctly                                                                  
  - Must compile with -O1 not -O2 (GCC alignment optimizations cause bus errors on PPC)                                                                    
  - fetch() is synchronous — blocks until full response, no streaming needed for a CLI                                                                     
  - Connection pooling keeps TLS sessions alive across API calls                                                                                           
  - Uses bash read builtin for REPL input since QuickJS lacks a prompt() function                                                                          
                                                                                                                                                           Code: https://github.com/Scottcjn/node-ppc                                                                                                               
  Architecture doc: https://github.com/Scottcjn/node-ppc/blob/main/CLAUDE_G5_ARCHITECTURE.md