News · A OWL da OpenAI coloca o Chromium em um processo separado para que o Atlas seja um app SwiftUI nativo

Dec, 11Leitura de 4 min
Frontend

A OWL da OpenAI coloca o Chromium em um processo separado para que o Atlas seja um app SwiftUI nativo

Uma leitura detalhada da arquitetura por trás do ChatGPT Atlas, em que o motor da web roda como um serviço isolado e a interface do navegador é reconstruída nos frameworks nativos da Apple.

A inversão: Chromium como serviço, não como casca

A maioria dos navegadores derivados do Chromium entrega o motor e sua interface juntos, depois faz apenas uma repintura das partes visíveis ao usuário. A OpenAI seguiu outro caminho com o Atlas. Sua camada de arquitetura, a OWL (OpenAI's Web Layer), roda o processo do navegador Chromium totalmente fora do processo principal do app Atlas, no que os autores chamam de camada de serviço isolada.

Eles descrevem isso como uma extensão de um movimento que o próprio Chromium já fez: o Chromium colocou as abas em processos separados, e a OWL coloca o próprio Chromium em um processo separado. O app Atlas se torna o OWL Client; o processo do navegador Chromium se torna o OWL Host. Os dois se comunicam via Mojo, o sistema de troca de mensagens do próprio Chromium, com bindings customizados em Swift e TypeScript para que o app em Swift possa chamar interfaces do lado do host diretamente.

Essa biblioteca cliente expõe uma pequena API em Swift em torno de conceitos concretos — Session, Profile, WebView, WebContentRenderer e LayerHost/Client — além de endpoints para favoritos, downloads, extensões e preenchimento automático. Na prática, o motor da web é tratado como um backend, não herdado como framework.

O que isso traz para o time de frontend

O ganho que a OpenAI destaca é a liberdade de interface nativa. Como eles não estão construindo sobre a interface open-source do Chromium, o Atlas é escrito quase inteiramente em SwiftUI e AppKit, com Metal para as animações elaboradas que o time de design queria em recursos como o modo Agent. Uma linguagem, uma stack, um único codebase.

A separação de processos também desacopla falhas e inicialização. O Chromium inicia de forma assíncrona em segundo plano enquanto os pixels chegam na tela quase instantaneamente; se a thread principal do Chromium travar ou falhar, o Atlas continua funcionando. E como o diff deles em relação ao Chromium upstream é menor, integrar novas versões do Chromium dá muito menos trabalho.

Também existe um motivo ligado à experiência do desenvolvedor, atrelado explicitamente à cultura da OpenAI. A OWL é distribuída internamente como um binário pré-compilado, então a maioria dos engenheiros nunca precisa compilar o Chromium a partir do código-fonte — builds do Atlas levam minutos, não horas.

Todo novo engenheiro faz e faz merge de uma pequena mudança na tarde do primeiro dia. Precisávamos garantir que isso fosse possível mesmo que o Chromium possa levar horas para ser baixado e compilado.Montana Labs

Atravessando a fronteira entre processos: pixels e input

A engenharia interessante está em como uma interface nativa incorpora conteúdo renderizado em outro processo. As WebViews são trocadas dentro e fora de um container de composição compartilhado. Do lado do Chromium, esse container é um gfx::AcceleratedWidget apoiado por uma CALayer; a OWL expõe o context ID dessa camada para o cliente, onde uma NSView a incorpora usando a API privada CALayerHost. Casos especiais, como menus dropdown e seletores de cor, renderizados pelo Chromium em widgets popup separados, usam o mesmo caminho de renderização delegada.

O input faz o caminho inverso. Normalmente, o Chromium mesmo traduz os NSEvents do macOS para o modelo WebInputEvent do Blink; como o Chromium está escondido em outro processo, a OWL faz essa tradução no cliente Swift e envia os eventos já traduzidos para baixo. Eventos não tratados voltam, são re-sintetizados como NSEvents, e o resto do app tem a chance de tratá-los.

A OWL também reaproveita a técnica de projeção para trazer partes selecionadas da própria interface nativa Views do Chromium para dentro do Atlas — uma forma pragmática de exibir prompts de permissão sem precisar reconstruí-los em SwiftUI. Os autores observam que isso se apoia na infraestrutura já existente do Chromium para apps web instaláveis no macOS.

O modo Agent é onde a arquitetura mostra o valor do isolamento

A separação não é só sobre polimento de interface; ela também define como o recurso de navegação agêntica se comporta. O modelo de uso de computador da OpenAI espera uma única imagem de tela, mas popups como menus dropdown são renderizados em janelas separadas, fora dos limites da aba. No modo agent, o Atlas recompõe esses popups de volta na imagem principal da página, nas coordenadas corretas, para que o modelo veja um único frame coerente.

A segurança segue a mesma fronteira. Eventos gerados pelo agente são direcionados diretamente ao renderer, nunca passando pela camada privilegiada do navegador, de forma que o input automatizado não consiga sintetizar atalhos de teclado capazes de controlar o navegador fora do conteúdo web. E as sessões do agente podem rodar em um contexto efêmero e deslogado, usando o StoragePartition do Chromium para criar armazenamentos isolados em memória — cada sessão começa do zero, descarta cookies e dados do site ao terminar, e várias sessões permanecem isoladas entre si.

A implicação: a segurança do agente foi pensada dentro do modelo de processos, não encaixada depois

A lição que vale tirar da OWL é que as garantias do agente no Atlas — o modelo vê a página completa, o input automatizado fica dentro da sandbox, sessões deslogadas não vazam estado — são consequência de uma arquitetura de renderização e processos definida desde o início, e não de filtros adicionados depois.

Para times que constroem produtos agênticos em cima de runtimes complexos de terceiros, essa ordem importa. A OpenAI desacoplou o motor do app primeiro, e só depois usou essa fronteira para controlar para onde os eventos automatizados podem ir e onde os dados de sessão ficam armazenados. A composição, os bindings do Mojo e o isolamento do StoragePartition são a mesma decisão expressa em camadas diferentes: tratar o componente poderoso e opaco como um serviço que você controla, para dominar os pontos de contato onde um agente pode interagir com ele.

Find this story relevant to you?

Contact us to find a unique solution

Contact us

Precisa de um parceiro de engenharia de IA que consiga construir de verdade?

Ajudamos empresas no Brasil a integrar IA, acelerar produtos com IA, automatizar operações e modernizar os sistemas de software por trás do negócio.

Get in touch

Leituras relacionadas

Mais análises sobre entrega de produto, IA operacional e o trabalho de sistemas que faz a implantação se sustentar na prática.

Jul, 134 min de leitura
Frontend

A DNP colocou o ChatGPT Enterprise à disposição de dez departamentos e tratou a janela de chat como a interface

Jul, 134 min de leitura
Frontend

AdventHealth implementa o ChatGPT em nove estados tratando a adoção como o produto

Jul, 134 min de leitura
Frontend

A AP+ usa o Codex para criar protótipos de pagamento que realmente funcionam, não só telas clicáveis