5 poin oleh GN⁺ 2026-02-24 | 1 komentar | Bagikan ke WhatsApp
  • 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

 
GN⁺ 2026-02-24
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

    • Porting memang saat yang bagus untuk memperbaiki banyak hal, tapi bukan saat yang tepat untuk menambahkan fitur baru
      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
    • Saya berharap ada lebih banyak pure porting seperti ini
      Dulu biaya migrasi terlalu besar sehingga sering dibenarkan dengan pola pikir “sekalian saja kita perbaiki”, tapi akhirnya justru lebih banyak mengejar bug hantu
    • Saya sangat suka pendekatan ini. Beberapa hari lalu saya membaca tulisan dari sudut pandang testing dan verifikasi, dan menarik melihatnya diterapkan pada proyek sekompleks ini
    • Saya juga pernah mengonversi web framework beberapa kali dengan cara seperti ini. Setelah string output HTTP di kode baru dibuat benar-benar sama, versi lama saya hapus total
    • Kalau punya test suite yang bagus, pendekatan seperti ini akan bekerja jauh lebih baik. Saya rasa Ladybird juga punya itu
  • 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

    • Saya dulu juga pernah memindahkan skrip Perl yang rusak ke Rust dengan Claude
      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
    • Sayang sekali perusahaan AI tidak fokus pada cara penggunaan kolaboratif seperti ini
      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
    • Saya juga sedang belajar Rust sambil membuat skill “teach” untuk Claude
      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
    • Saya juga memakai Claude seperti ini. Bukan “AI yang mengerjakan semuanya”, melainkan partner untuk desain, review, dan testing
    • Saya pernah memindahkan skrip bash kompleks yang saya buat dulu ke golang dengan Claude, dan kecepatan serta stabilitasnya meningkat drastis
      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

    • Saya juga suka Rust, tapi antusiasme berlebihan terhadap suatu bahasa kadang terasa melelahkan
      Bahasa hanyalah alat, dan menurut saya tidak perlu menggantungkan identitas pada bahasa tertentu
    • Saya tidak suka Rust, tapi kadang secara praktis itu pilihan terbaik
    • Ada tautan yang menunjukkan bahwa Ladybird sekarang tidak lagi berfokus pada C++/Swift
    • Arah bahasanya yang sering berubah agak membuat khawatir. Kontinuitas proyek bisa terganggu
  • 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

    • Andreas bukan sekadar pebisnis, melainkan engineer yang membangun Serenity OS sendirian selama bertahun-tahun
      Saya melihat ini sebagai hasil pertumbuhan proyek yang alami
    • Katanya keputusan memilih Swift juga merupakan penilaian rasional setelah mencoba langsung beberapa bahasa
    • Sebagai catatan, dia dulu pernah bekerja di tim Apple Safari engine
    • Meski begitu, apakah ini benar-benar akan berujung pada browser baru masih belum jelas
    • Anda bilang “mengkhawatirkan”, saya penasaran bagian mana tepatnya yang membuat Anda khawatir
  • 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

    • Tapi C++ dan Rust sama-sama bahasa multi-paradigma, jadi strukturnya bisa dipindahkan dengan cukup mirip
    • Ini mengingatkan saya pada “jebakan rewrite” yang pernah dibahas Joel on Software
      Jika pengembangan versi baru dan fitur lama berjalan bersamaan, akan muncul perlombaan kecepatan, dan versi baru bisa gagal mengejar
    • Tapi Ladybird bukan startup melainkan proyek terbuka, jadi perbandingannya berbeda
      Linux, PHP, dan musl libc juga pernah mengalami rewrite total beberapa kali
    • Kalau saya ada di situasi seperti ini, saya mungkin akan tetap memakai Firefox
    • Melakukan porting selama beberapa minggu dengan LLM terasa seperti pilihan yang agak aneh
  • 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

    • Saya juga membuat library Python CLI untuk proyek pribadi dengan AI
      Karena bisa cepat mencoba berbagai UI seperti Streamlit, Shiny, dan Dash, prototyping jadi menyenangkan
    • Dalam jangka panjang, seiring AI berkembang, makna bahasa pemrograman itu sendiri tampaknya akan berkurang
      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

    • Tapi kalau hasil akhirnya benar-benar mencapai 0 regresi + output identik pada 65 ribu test, itu juga tidak bisa sepenuhnya diabaikan
      Namun kuncinya tetap apakah “cleanup” nanti benar-benar dilakukan
    • Reviewer manusia juga tidak sempurna. Jika review dilakukan dari berbagai sudut, baik AI maupun manusia bisa menemukan jenis kesalahan yang berbeda
    • Bagian seperti ini memang seharusnya divalidasi oleh test suite
    • Tapi ada juga yang tidak ingin berurusan dengan kode Rust tak lazim hasil AI
      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

    • Tapi seperti Firefox, codebase campuran juga sangat mungkin
      Selama tiap komponen hanya ditulis dalam satu bahasa, tidak ada masalah
    • Jika memaksakan transisi total, kehilangan momentum bisa sangat besar dan proyek bisa berhenti
    • Menggunakan subset ketat dari C++ juga bisa menjadi cara untuk mendapatkan memory safety
  • 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

    • Apakah dia berubah pikiran? Bahkan saya tidak yakin sejak awal memang perlu mengganti C++
    • Saya juga bisa memahami suasana eksklusif di komunitas Rust
    • Mungkin saja dorongan migrasi Rust berbasis AI ini datang dari permintaan sponsor
  • Saya penasaran apakah kode Rust yang tak lazim ini nantinya akan menjadi utang teknis

    • Risikonya terutama ada di tahap cleanup. Pola pointer ala C++ bisa berbenturan dengan aturan ownership Rust
      Proyek Servo juga pernah mengalami masalah seperti ini, tapi dalam prosesnya mereka justru bisa menemukan bug laten
    • Bukan berarti C++ itu sendiri yang bermasalah; alasan pindah ke Rust adalah memory safety
    • Andreas sejak dulu sudah menyinggung masalah keamanan GC pada runtime JS dan menginginkan bahasa yang lebih aman
      Perpindahan ke Rust tampak seperti pilihan yang matang dan sesuai dengan filosofi itu