Cara kami membangun OWL, arsitektur baru di balik browser berbasis ChatGPT kami, Atlas
Di dalam arsitektur proses baru kami, yang memberikan cara lebih cepat dan lebih pintar kepada Anda untuk menggunakan web.
Oleh Ken Rockot, Anggota Staf Teknis dan Ben Goodger, Kepala Teknik Rekayasa, ChatGPT Atlas
Minggu yang lalu, kami meluncurkan ChatGPT Atlas, cara baru untuk menjelajahi web dengan ChatGPT di sisi Anda. Selain menjadi browser web berfitur lengkap, Atlas menawarkan gambaran sekilas tentang masa depan: dunia tempat Anda dapat membawa ChatGPT ke seluruh internet untuk mengajukan pertanyaan, memberikan saran, dan menyelesaikan tugas untuk Anda. Dalam postingan ini, kami mengupas salah satu aspek teknik produk yang paling rumit: cara kami mengubah ChatGPT menjadi browser yang makin bermanfaat seiring penggunaan Anda.
Menjadikan ChatGPT sebagai kopilot sejati untuk web berarti menata ulang seluruh arsitektur browser: memisahkan Atlas dari runtime Chromium. Ini memerlukan pengembangan cara baru untuk mengintegrasikan Chromium yang memungkinkan kami mencapai sasaran produk kami: startup secara instan, responsif bahkan saat Anda membuka lebih banyak tab, dan membuat fondasi yang kuat untuk contoh penggunaan agentik.

Chromium merupakan bahan pembangun yang alami. Chromium menyediakan mesin web canggih dengan model keamanan yang tangguh, kredensial kinerja yang mapan, dan kompatibilitas web yang tidak tertandingi. Selain itu, Chromium dikembangkan oleh komunitas global yang terus-menerus memperbaikinya. Chromium adalah pilihan yang umum digunakan pada browser web desktop modern.
Tim desain kami yang bertalenta memiliki sasaran ambisius untuk pengalaman pengguna kami, termasuk animasi yang berlimpah dan efek visual untuk fitur seperti mode Agen. Ini mewajibkan tim teknik rekayasa kami untuk memanfaatkan kerangka kerja asli yang paling modern untuk UI kami (SwiftUI, AppKit, dan Metal), alih-alih hanya mengubah tampilan UX Chromium sumber terbuka. Akibatnya, UI Atlas merupakan pembangunan kembali secara menyeluruh dari keseluruhan UX aplikasi.
Kami juga memiliki sasaran produk lain seperti waktu startup yang cepat dan mendukung ratusan tab tanpa mengurangi kinerja. Sasaran ini sulit dicapai dengan Chromium siap pakai, yang kaku tentang banyak detail mulai dari urutan boot, model utas, dan model tab. Kami mempertimbangkan untuk melakukan perubahan substansial di sini, tetapi kami ingin agar rangkaian patch kami terhadap Chromium tetap tertarget sehingga kami dapat mengintegrasikan versi baru secara cepat. Untuk memastikan laju pengembangan kami dipercepat secara maksimal, kami perlu menemukan cara berbeda untuk mengintegrasikan dan menjalankan runtime Chromium.
Uji lakmus untuk investasi teknis kami tidak hanya akan memungkinkan eksperimen, iterasi, dan pengiriman fitur baru yang lebih cepat – tetapi juga akan memungkinkan kami untuk mempertahankan bagian inti dari budaya teknik rekayasa OpenAI: pengiriman di hari pertama. Setiap teknisi baru melakukan dan menggabungkan perubahan kecil di sore hari pertama mereka. Kami perlu memastikan bahwa ini memungkinkan meskipun Chromium dapat perlu waktu beberapa jam untuk diperiksa dan dibangun.
Jawaban kami terhadap tantangan ini adalah membangun lapisan arsitektur baru yang kami sebut sebagai OWL: OpenAI’s Web Layer (Lapisan Web dari OpenAI). OWL adalah integrasi Chromium kami, yang berarti menjalankan proses browser Chromium di luar proses aplikasi Atlas utama.
Bayangkanlah seperti ini: Chromium merevolusi browser dengan memindahkan tab ke proses terpisah. Kami membawa ide tersebut lebih jauh lagi dengan memindahkan Chromium ke luar dari proses aplikasi utama ke lapisan layanan yang terisolasi. Pergeseran ini membuka serangkaian manfaat:
- Aplikasi yang lebih sederhana dan modern: Atlas hampir seluruhnya dibangun di SwiftUI dan AppKit. Satu bahasa, satu tumpukan teknologi, satu basis kode yang bersih.
- Startup yang lebih cepat: Chromium melakukan boot secara asinkron di latar belakang. Atlas tidak menunggu — piksel muncul di layar hampir secara instan.
- Isolasi dari “jank” dan “crash”: Chromium adalah mesin web yang kuat dan rumit. Jika utas utama Chromium tersendat, Atlas tidak. Jika Chromium crash, Atlas tetap bertahan.
- Lebih sedikit sakit kepala saat menggabungkan: Karena kami tidak banyak membangun pada UI sumber terbuka Chromium, perbedaan kami terhadap Chromium hulu jauh lebih kecil dan lebih mudah untuk dirawat.
- Iterasi yang lebih cepat: Sebagian besar teknisi tidak perlu membangun Chromium secara lokal. OWL dikirimkan secara internal sebagai biner yang telah dibangun sebelumnya, sehingga pembangunan Atlas berlangsung dalam waktu beberapa menit bukan jam.
Karena sebagian besar teknisi di tim kami tidak secara rutin membangun Chromium dari sumber, pengembangan dapat berjalan jauh lebih cepat—anggota tim baru bahkan dapat menggabungkan perubahan sederhana di sore pertama mereka.
Pada tingkat tinggi, browser Atlas adalah Klien OWL, dan proses browser Chromium adalah Host OWL. Mereka berkomunikasi melalui IPC, khususnya Mojo(terbuka di jendela baru), sistem penyampaian pesan milik Chromium. Kami menulis pengikatan Swift (dan bahkan TypeScript) kustom untuk Mojo, sehingga aplikasi Swift kami dapat memanggil antarmuka sisi host secara langsung.
Perpustakaan klien OWL mengekspos API Swift publik sederhana, yang mengabstraksi beberapa konsep utama yang diekspos oleh lapisan layanan host:
- Session: Mengonfigurasi dan mengendalikan host secara global
- Profile: Mengelola status browser untuk profil pengguna tertentu
- WebView: Mengendalikan dan menyematkan konten web individu (misalnya render, input, navigasi, zoom, dll.)
- WebContentRenderer: Meneruskan kejadian masukan ke saluran perenderan Chromium dan menerima umpan balik dari perender
- LayerHost/Klien: Menukar informasi penggabungan antara UI dan Chromium
Ada juga berbagai endpoint layanan untuk mengelola fitur tingkat tinggi seperti bookmark, unduhan, ekstensi, dan isi otomatis.
WebView, yang berbagi ruang presentasi saling eksklusif di aplikasi klien, ditukar masuk dan keluar dari kontainer penggabungan bersama. Misalnya, jendela browser sering kali memiliki satu kontainer bersama yang terlihat dan memilih tab di bilah tab akan menukar WebView tab tersebut ke dalam kontainer. Di sisi Chromium, kontainer ini sesuai dengan gfx::AcceleratedWidget yang pada akhirnya didukung oleh CALayer. Kami memaparkan ID konteks lapisan tersebut kepada klien, tempat NSView menyematkannya menggunakan API CALayerHost pribadi.
Kasus khusus seperti menu tarik-turun atau pemilih warna, yang dirender Chromium dalam widget popup terpisah, menggunakan pendekatan yang sama. Kasus tersebut tidak memiliki content::WebContents, tetapi kasus tersebut memiliki content::RenderWidgetHostView dengan gfx::AcceleratedWidget mereka sendiri, sehingga model perenderan delegasi yang sama berlaku.OWL secara internal menjaga geometri tampilan tetap disinkronkan dengan sisi Chromium, sehingga konpositor GPU dapat diperbarui sebagaimana mestinya dan selalu dapat menghasilkan konten lapisan dengan ukuran dan skala perangkat yang benar.Kami juga menggunakan kembali teknik ini untuk memproyeksikan elemen UI Tampilan asli Chromium secara selektif ke Atlas (ini juga bermanfaat untuk melakukan bootstrap fitur seperti prompt izin secara cepat tanpa membangun pengganti sejak awal di SwiftUI). Teknik ini banyak memanfaatkan infrastruktur Chromium yang sudah ada untuk aplikasi web yang dapat diinstal di macOS.Kejadian masukan: Membongkar dan meneruskanChromium UI menerjemahkan kejadian platform (seperti macOS NSEvents) ke model WebInputEvent Blink sebelum meneruskan ke perender. Namun, karena OWL menjalankan Chromium dalam proses tersembunyi, kami melakukan penerjemahan itu sendiri di dalam perpustakaan klien Swift dan meneruskan kejadian yang telah diterjemahkan ke Chromium.Dari sana, mereka mengikuti siklus hidup yang sama dengan yang biasanya akan diikuti oleh kejadian masukan nyata untuk konten web. Ini termasuk mengembalikan kejadian ke klien kapan pun halaman menunjukkan bahwa tidak menangani kejadian tersebut. Ketika ini terjadi, kami mempersatukan ulang NSEvent dan memberikan kesempatan kepada aplikasi lain untuk menangani masukan.Mode agen: Kasus khususFitur penjelajahan agentik Atlas menimbulkan beberapa tantangan unik bagi pendekatan kami terhadap perenderan, penerusan kejadian masukan, dan penyimpanan data.Model penggunaan komputer kami mengharapkan satu gambar layar sebagai masukan. Namun beberapa elemen UI, seperti menu tarik-turun , dirender di luar batas tab dalam jendela terpisah. Dalam mode agen, kami menggabungkan kembali popup itu ke gambar halaman utama pada koordinat yang tepat sehingga model dapat melihat konteks lengkap dalam satu bingkai.
Untuk masukan, kami menerapkan prinsip yang sama: kejadian yang dibuat agen dirutekan secara langsung ke perender, tidak pernah melalui lapisan browser dengan hak istimewa. Ini mempertahankan batasan kotak pasir bahkan di bawah kontrol otomatis. Misalnya, kami tidak ingin kelas kejadian ini melakukan sintesis pintasan keyboard yang membuat browser melakukan hal tidak terkait konten web yang sedang ditampilkan.
Penjelajahan agen juga dapat berjalan dalam konteks "log out" sementara. Alih-alih membagikan profil Incognito pengguna yang sudah ada, yang dapat membocorkan status, kami menggunakan infrastruktur StoragePartition Chromium untuk menjalankan penyimpanan terisolasi di dalam memori. Setiap sesi agen dimulai dalam keadaan bersih dan, ketika berakhir, semua cookie dan data situs akan dibuang. Anda dapat menjalankan beberapa sesi agen "log out", masing-masing di tab browser sendiri, dan masing-masing sepenuhnya terisolasi dari sesi lain.
Semua ini tidak akan mungkin terjadi tanpa komunitas Chromium global dan kerja mereka yang luar biasa dalam membangun fondasi untuk web modern. OWL membangun fondasi tersebut dengan cara baru: memisahkan mesin dari aplikasi, memadukan platform web kelas dunia dengan kerangka kerja asli modern, serta membuka arsitektur yang lebih cepat dan lebih fleksibel.
Dengan memikirkan ulang cara browser menampung Chromium, kami membuat ruang untuk pengalaman baru: startup yang lebih lancar, UI yang lebih kaya, integrasi yang lebih erat dengan bagian OS lainnya, dan lingkaran pengembangan yang bergerak secepat pikiran mencipta ide. Jika itu terdengar seperti tantangan yang Anda sukai, lihat lowongan kerja kami untuk bekerja di Atlas sebagai Teknisi Perangkat Lunak, Atlas, Teknisi Perangkat Lunak, iOS, dan lainnya.
Coba Atlas di chatgpt.com/atlas(terbuka di jendela baru).
Ucapan terima kasih
Terima kasih khusus kepada Darin Fisher dan Marie Shin, yang berkontribusi terhadap postingan ini serta kepada seluruh tim OpenAI yang membangun Atlas.


