---
title: "Case Uber — Como a Uber Usa Zig para Compilação Cruzada em Escala"
url: "https://ziglang.com.br/cases/case-uber-como-a-uber-usa-zig-para-compila%C3%A7%C3%A3o-cruzada-em-escala/"
markdown_url: "https://ziglang.com.br/cases/case-uber-como-a-uber-usa-zig-para-compila%C3%A7%C3%A3o-cruzada-em-escala.MD"
description: "Análise detalhada de como a Uber adotou o Zig como toolchain de compilação cruzada para centenas de serviços C/C++ em produção."
date: "2026-02-21"
author: "Zig Brasil"
---

# Case Uber — Como a Uber Usa Zig para Compilação Cruzada em Escala

Análise detalhada de como a Uber adotou o Zig como toolchain de compilação cruzada para centenas de serviços C/C++ em produção.


# Case Uber — Como a Uber Usa Zig para Compilação Cruzada em Escala

A Uber, uma das maiores empresas de tecnologia do mundo com operações em mais de 70 países, adotou o Zig como parte fundamental de sua infraestrutura de build. Esta decisão, que pode parecer surpreendente à primeira vista, demonstra como o Zig resolve problemas reais de engenharia que vão além de simplesmente escrever código na linguagem.

## O Problema

A Uber opera centenas de microsserviços, muitos deles escritos em C e C++, que precisam ser compilados para múltiplas plataformas e arquiteturas. A infraestrutura da empresa inclui:

- Servidores x86_64 em data centers
- Dispositivos ARM para IoT e edge computing
- Diferentes distribuições Linux com versões variadas de glibc
- Necessidade de builds reproduzíveis e determinísticos

### O Desafio da Compilação Cruzada em C/C++

Antes do Zig, a compilação cruzada de projetos C/C++ na Uber envolvia:

1. **Múltiplas toolchains**: Cada combinação de target/host exigia uma toolchain específica (gcc-aarch64-linux-gnu, clang com sysroot customizado, etc.)
2. **Sysroots complexos**: Manter sysroots com as bibliotecas corretas para cada distribuição Linux alvo
3. **Reprodutibilidade**: Garantir que o mesmo código fonte produzisse o mesmo binário em diferentes máquinas de build
4. **Manutenção**: Atualizar toolchains, resolver conflitos de versão de bibliotecas e manter compatibilidade ABI

O time de infraestrutura de build da Uber estimou que gastava milhares de horas por ano lidando com problemas de toolchain.

## A Solução: Zig como Compilador C/C++

O compilador Zig inclui um driver de compilação C/C++ integrado que pode substituir gcc e clang para compilação de código C e C++. Esse recurso, frequentemente descrito como "zig cc", oferece compilação cruzada nativa sem necessidade de toolchains externas.

### Como Funciona

```bash
# Compilar código C para Linux x86_64
zig cc -target x86_64-linux-gnu main.c -o app

# Compilar para Linux ARM64
zig cc -target aarch64-linux-gnu main.c -o app-arm

# Compilar código C++ para qualquer target
zig c++ -target x86_64-linux-gnu.2.17 app.cpp -o app

# Especificar versão de glibc
zig cc -target x86_64-linux-gnu.2.28 main.c -o app
```

O `zig cc` é um drop-in replacement para gcc/clang que:

- Inclui sysroots para todas as versões de glibc suportadas
- Suporta compilação cruzada para ~40 targets sem configuração
- Produz binários determinísticos
- Integra-se com sistemas de build existentes (CMake, Make, Bazel)

### Integração com CMake na Uber

```cmake
# CMakeLists.txt
set(CMAKE_C_COMPILER "zig cc")
set(CMAKE_CXX_COMPILER "zig c++")
set(CMAKE_C_COMPILER_TARGET "aarch64-linux-gnu.2.28")
set(CMAKE_CXX_COMPILER_TARGET "aarch64-linux-gnu.2.28")
```

```bash
# Build de linha de comando
cmake -DCMAKE_TOOLCHAIN_FILE=zig-toolchain.cmake ..
make -j$(nproc)
```

### Integração com Bazel

A Uber usa extensivamente o Bazel como sistema de build. A integração com Zig foi implementada como uma toolchain customizada:

```python
# BUILD.bazel
zig_cc_toolchain(
    name = "zig_cc_linux_aarch64",
    target = "aarch64-linux-gnu.2.28",
    zig_path = "/usr/local/bin/zig",
)

cc_binary(
    name = "meu_servico",
    srcs = ["main.cc", "server.cc"],
    toolchains = ["//toolchains:zig_cc_linux_aarch64"],
)
```

## Resultados Obtidos

### Redução de Complexidade

- **Eliminação de toolchains externas**: Substituição de dezenas de toolchains por um único binário Zig
- **Configuração simplificada**: Novos engenheiros configuram o ambiente de build em minutos, não horas
- **Manutenção reduzida**: Uma ferramenta para atualizar em vez de dezenas

### Performance de Build

- **Builds 15-20% mais rápidos**: O driver de compilação do Zig é otimizado para speed
- **Cache eficiente**: Builds determinísticos melhoram hit rate de cache distribuído
- **Paralelismo**: O sistema de build do Zig gerencia paralelismo automaticamente

### Reprodutibilidade

- **Builds determinísticos**: O mesmo código fonte sempre produz o mesmo binário
- **Independência de host**: Builds idênticos em Ubuntu, CentOS, macOS ou CI
- **Auditabilidade**: Facilita compliance e auditoria de segurança

### Economia de Infraestrutura

- **Redução de máquinas de build**: Menos configurações de build necessárias
- **Menor tempo de CI**: Builds mais rápidos significam pipelines mais curtos
- **Menos incidents de build**: Eliminação de problemas de toolchain incompatível

## Detalhes Técnicos

### Compatibilidade de glibc

Um dos maiores problemas em compilação cruzada Linux é a compatibilidade de glibc. O Zig resolve isso incluindo suporte a múltiplas versões de glibc (de 2.17 a 2.38):

```bash
# Compilar para servidor com glibc antiga
zig cc -target x86_64-linux-gnu.2.17 server.c

# Compilar para sistema com glibc recente
zig cc -target x86_64-linux-gnu.2.38 server.c
```

### Suporte a Link-Time Optimization (LTO)

```bash
zig cc -flto -O2 -target x86_64-linux-gnu file1.c file2.c -o app
```

### Static Linking Confiável

```bash
# Linkage estático com musl libc
zig cc -target x86_64-linux-musl main.c -o app-static
```

## Impacto no Ecossistema Zig

A adoção pela Uber teve impactos significativos:

1. **Visibilidade**: Uma das primeiras validações empresariais em larga escala do Zig
2. **Contribuições upstream**: A Uber contribuiu com fixes e melhorias para o compilador
3. **Case study**: Inspirou outras empresas a avaliarem o Zig como toolchain
4. **Financiamento indireto**: O sucesso contribuiu para a sustentabilidade do projeto Zig

## Lições Aprendidas

### Para Empresas

- **Adoção incremental funciona**: A Uber começou usando apenas o `zig cc`, sem reescrever código
- **ROI claro**: Redução mensurável em tempo de build e incidents
- **Low risk**: Usar Zig como compilador C/C++ não requer migração de linguagem

### Para Desenvolvedores

- **Zig resolve problemas reais**: Compilação cruzada é um problema concreto de engenharia
- **A toolchain é tão importante quanto a linguagem**: Muitas adoções começam pela toolchain
- **Contribua upstream**: Bugs encontrados em produção beneficiam toda a comunidade

## Como Começar

Se sua empresa enfrenta desafios semelhantes de compilação cruzada:

1. Instale o Zig com [zigup](/ecossistema/zigup-version-manager/)
2. Substitua `gcc` ou `clang` por `zig cc` em um projeto piloto
3. Teste compilação cruzada para seus targets de produção
4. Integre com seu sistema de build existente ([CMake, Make, Bazel](/ecossistema/zig-build-system-overview/))
5. Escale gradualmente para mais projetos

## Próximos Passos

Conheça outros cases de sucesso como [Cloudflare](/cases/case-cloudflare-zig/) e [Bun](/cases/case-bun-zig/). Explore o [sistema de build do Zig](/ecossistema/zig-build-system-overview/) e consulte nossos [tutoriais](/tutoriais/) para começar a experimentar com compilação cruzada.
