- Proyek browser Ladybird mengadopsi Rust sebagai bahasa aman memori untuk menggantikan C++, dan memanfaatkan alat AI dalam proses transisinya
- Sebelumnya mereka meninjau Swift, tetapi kemudian beralih ke Rust karena keterbatasan interoperabilitas dengan C++ dan kendala platform
- Target porting pertama adalah mesin JavaScript LibJS, dengan Claude Code dan Codex digunakan untuk melakukan terjemahan yang dipandu secara manual melalui ratusan prompt
- Dalam sekitar 2 minggu, 25.000 baris kode Rust berhasil diselesaikan, dan diverifikasi bahwa output maupun performanya sepenuhnya identik dengan versi C++
- Untuk sementara proyek akan mempertahankan sistem pengembangan paralel C++ dan Rust, dengan rencana jangka panjang memperkuat keamanan dan kemudahan pemeliharaan
Latar belakang adopsi Rust
- Ladybird meninjau beberapa bahasa untuk mencari bahasa aman memori yang dapat menggantikan C++
- Swift dikesampingkan karena kurangnya interoperabilitas dengan C++ dan keterbatasan dukungan platform di luar ekosistem Apple
- Rust dinilai memiliki ekosistem pemrograman sistem yang matang, dan banyak kontributor sudah familier dengan bahasa tersebut
- Pada 2024, adopsi Rust sempat ditunda karena kurang cocok dengan OOP bergaya C++, tetapi kemudian diputuskan untuk diadopsi kembali karena keamanan dan kematangan ekosistemnya
- Dengan merujuk pada kasus Firefox dan Chromium yang sudah lebih dulu mengadopsi Rust, mereka menilai Rust juga cocok untuk Ladybird
Proses porting LibJS
- Target transisi pertama adalah LibJS, mesin JavaScript milik Ladybird
- Komponen independen seperti lexer, parser, AST, bytecode generator serta cakupan pengujian berbasis test262 membuatnya cocok sebagai titik awal
- Porting dilakukan dengan menggunakan Claude Code dan OpenAI Codex
- Bukan generasi otomatis, melainkan terjemahan yang dipandu manusia, dengan urutan porting dan struktur kode ditentukan langsung
- Instruksi rinci diberikan lewat ratusan prompt, lalu verifikasi kode dan deteksi error dilakukan menggunakan berbagai model
Hasil dan verifikasi
- Tujuannya adalah agar output pipeline C++ dan Rust identik hingga tingkat byte
- Sekitar 25.000 baris kode Rust diselesaikan dalam 2 minggu, mempercepat pekerjaan yang seharusnya memakan waktu berbulan-bulan
- AST dan bytecode sepenuhnya identik, dan tidak ada penurunan performa dalam pengujian maupun benchmark JS
- Kesesuaian hasil saat menjelajah web diverifikasi melalui pengujian lockstep yang menjalankan pipeline C++ dan Rust secara bersamaan
- Kode saat ini masih mempertahankan bentuk hasil terjemahan dari C++, bahkan meniru pola alokasi register yang sama
- Ini karena prioritas utamanya adalah memastikan kompatibilitas dengan pipeline C++
- Setelah pipeline C++ nantinya dihentikan, kode Rust akan disederhanakan dan dirapikan
Rencana ke depan
- Transisi ke Rust akan berjalan sebagai pekerjaan paralel, bukan arah pengembangan utama proyek
- Kode C++ dan Rust akan hidup berdampingan, dengan batas interoperabilitas yang tetap jelas
- Urutan dan cakupan porting akan dikelola oleh tim inti, dan kontributor eksternal perlu berkoordinasi terlebih dahulu
- Dalam jangka panjang, proyek akan mendorong transisi bertahap dengan tujuan meningkatkan keamanan dan kemudahan pemeliharaan
- Mereka mengakui keputusan ini bisa memicu kontroversi, tetapi tetap menilainya sebagai pilihan yang tepat untuk masa depan Ladybird
1 komentar
Pendapat Hacker News
Bagian paling cerdas dari proyek ini adalah mereka menuntut output yang identik hingga tingkat byte
Berkat itu, pipeline lama dan pipeline baru bisa dijalankan berdampingan lalu diff-nya dibandingkan, sehingga bug yang muncul saat penerjemahan bisa langsung ditemukan
Banyak rewrite gagal karena orang mencoba “memperbaiki” sambil melakukan porting, lalu akhirnya mengejar bug hantu yang berasal dari versi lama, versi baru, atau sekadar perbedaan perilaku
Tidak masalah jika hasil terjemahan C++ ke Rust awalnya terlihat canggung. Nanti setelah sisi C++ benar-benar dipensiunkan, barulah bisa dibuat lebih idiomatic secara bertahap
Selama output tetap identik, kita bisa melakukan refactoring, efisiensi, dan dokumentasi
Menurut saya, waktu terbaik untuk mendokumentasikan adalah saat sedang membaca kodenya. Untuk proyek populer seperti Ladybird, dokumentasi sendiri adalah cara mempercepat pengembangan
Dulu biaya migrasi terlalu besar sehingga sering dibenarkan dengan pola pikir “sekalian saja kita perbaiki”, tapi akhirnya justru lebih banyak mengejar bug hantu
Mereka menerjemahkan kode C++ ke Rust dengan Claude Code dan Codex
Bukan sepenuhnya otomatis; manusia tetap menentukan arah dan menyesuaikannya lewat ratusan prompt kecil
Sejak awal mereka menetapkan syarat bahwa output kedua pipeline harus identik hingga tingkat byte, dan hasilnya 25.000 baris kode Rust selesai hanya dalam 2 minggu
AST dan bytecode sama persis, serta berhasil mencapai 0 regresi
Menurut saya, inilah cara yang benar menggunakan AI untuk porting lintas bahasa
Dalam 80 menit, ia menganalisis struktur Drupal, memulihkan desain asli dan struktur modul apa adanya, bahkan sampai mengimplementasikan plugin kustom
Sekarang kabarnya situs itu sudah dipindahkan lagi ke WordPress, ProcessWire, Node.js, dan sekarang bahkan ke Next.js
Yang saya inginkan bukan “kode jadi dari satu prompt”, melainkan alat untuk bolak-balik sesi panjang bersama AI guna memperkuat kecerdasan manusia (IA)
Tapi alat seperti ini mungkin hanya bisa dipakai orang yang punya pengetahuan pengembangan, jadi pasarnya mungkin kecil
Claude tidak menulis kode langsung, hanya memberi petunjuk dan melakukan review
Karena sifat bahasanya, Rust sulit ditulis secara spontan, jadi pendekatan ini terasa sangat memuaskan
Sekarang bahkan sudah ada versi wasm yang bisa jalan di browser
Bagian terkait kripto tidak saya implementasikan sendiri, jadi tidak perlu khawatir
Kabar perpindahan ke Rust ini menarik, tapi tetap mengejutkan karena tim Ladybird dulu cukup kuat dengan kecenderungan “anti-Rust hype”
Meski begitu, kalau pindah ke Rust, saya akan jauh lebih mudah berkontribusi
Bahasa hanyalah alat, dan menurut saya tidak perlu menggantungkan identitas pada bahasa tertentu
Andreas adalah engineer hebat sekaligus orang yang punya naluri kewirausahaan
Mengesankan melihat proyek hobi berkembang menjadi proyek industrial
Meski begitu, pergantian bahasa yang cepat seperti ini terasa agak mengkhawatirkan
Saya melihat ini sebagai hasil pertumbuhan proyek yang alami
Kalimat “kode Rust yang tidak normal, tapi nanti akan dirapikan” terdengar seperti mengisyaratkan rewrite lain dan itu membuat saya khawatir
Saat startup mengganti bahasa, itu sering terlihat sebagai sinyal bahaya
Jika pengembangan versi baru dan fitur lama berjalan bersamaan, akan muncul perlombaan kecepatan, dan versi baru bisa gagal mengejar
Linux, PHP, dan musl libc juga pernah mengalami rewrite total beberapa kali
Sekarang setelah AI menjadi umum, hitung-hitungan untuk “rewrite total ke bahasa baru” benar-benar berubah
Terutama kalau ada test suite, risikonya jauh lebih kecil
Kita hidup di era ketika pentingnya testing terasa 10 kali lebih besar
Karena bisa cepat mencoba berbagai UI seperti Streamlit, Shiny, dan Dash, prototyping jadi menyenangkan
Di beberapa proyek, kombinasi low-code + agent saja sudah cukup berjalan
Bagian “menyerahkan code review ke AI” terdengar mengkhawatirkan
Model masih punya keterbatasan dalam menangkap kesalahan logika
Namun kuncinya tetap apakah “cleanup” nanti benar-benar dilakukan
Jika terus bergantung pada kode AI, bisa timbul lingkaran setan berupa ketergantungan pada AI yang makin besar
Fakta bahwa proyek ini mengembangkan C++ dan Rust secara paralel terlihat tidak efisien
Saya jadi berpikir, bukankah lebih baik disatukan saja ke satu bahasa yang memory-safe
Selama tiap komponen hanya ditulis dalam satu bahasa, tidak ada masalah
Saat Swift diadopsi pada 2024, Andreas pernah menulis tweet tentang Rust
Katanya Rust sangat bagus untuk program yang berjalan singkat, tapi kurang nyaman untuk program jangka panjang yang mempertahankan object graph kompleks
Ia juga menambahkan penilaian bahwa komunitasnya beracun
Tautan tweet terkait
Saya penasaran apakah kode Rust yang tak lazim ini nantinya akan menjadi utang teknis
Proyek Servo juga pernah mengalami masalah seperti ini, tapi dalam prosesnya mereka justru bisa menemukan bug laten
Perpindahan ke Rust tampak seperti pilihan yang matang dan sesuai dengan filosofi itu